From 6c5319f355078c26569ac92dd351f26eb29a9458 Mon Sep 17 00:00:00 2001 From: Matthew Miller Date: Fri, 20 Jul 2018 00:06:02 +1000 Subject: [PATCH] Major work towards 1.13 compat --- build.gradle | 13 +- config/checkstyle/checkstyle.xml | 1 - config/checkstyle/import-control.xml | 2 + gradle/wrapper/gradle-wrapper.jar | Bin 51017 -> 54413 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 110 ++++--- gradlew.bat | 14 +- worldguard-core/build.gradle | 5 +- .../config/checkstyle/checkstyle.xml | 63 ++++ .../config/checkstyle/import-control.xml | 40 +++ .../com/sk89q/worldguard/LocalPlayer.java | 163 ++++++++++ .../java/com/sk89q/worldguard/WorldGuard.java | 69 ++++ .../sk89q/worldguard/blacklist/Blacklist.java | 44 ++- .../worldguard/blacklist/BlacklistEntry.java | 9 +- .../blacklist/BlacklistLoggerHandler.java | 2 +- .../worldguard/blacklist/MatcherIndex.java | 10 +- .../worldguard/blacklist/TrackedEvent.java | 0 .../worldguard/blacklist/action/Action.java | 0 .../blacklist/action/ActionResult.java | 0 .../blacklist/action/ActionType.java | 0 .../blacklist/action/AllowAction.java | 0 .../blacklist/action/BanAction.java | 0 .../blacklist/action/DenyAction.java | 0 .../blacklist/action/KickAction.java | 0 .../blacklist/action/LogAction.java | 0 .../blacklist/action/NotifyAction.java | 0 .../blacklist/action/RepeatGuardedAction.java | 0 .../blacklist/action/TellAction.java | 6 +- .../event/AbstractBlacklistEvent.java | 0 .../blacklist/event/BlacklistEvent.java | 0 .../blacklist/event/BlockBlacklistEvent.java | 0 .../event/BlockBreakBlacklistEvent.java | 0 .../event/BlockDispenseBlacklistEvent.java | 0 .../event/BlockInteractBlacklistEvent.java | 0 .../event/BlockPlaceBlacklistEvent.java | 0 .../worldguard/blacklist/event/EventType.java | 0 .../event/ItemAcquireBlacklistEvent.java | 0 .../blacklist/event/ItemBlacklistEvent.java | 2 +- .../event/ItemDestroyWithBlacklistEvent.java | 0 .../event/ItemDropBlacklistEvent.java | 0 .../event/ItemUseBlacklistEvent.java | 0 .../blacklist/logger/ConsoleHandler.java | 16 - .../blacklist/logger/DatabaseHandler.java | 4 +- .../blacklist/logger/FileHandler.java | 16 - .../blacklist/logger/LogFileWriter.java | 0 .../blacklist/logger/LoggerHandler.java | 0 .../worldguard/blacklist/target/DataMask.java | 0 .../blacklist/target/ItemMatcher.java | 27 +- .../blacklist/target/ItemTarget.java | 18 +- .../blacklist/target/RangeMask.java | 0 .../worldguard/blacklist/target/Target.java | 9 +- .../blacklist/target/TargetMatcher.java | 2 +- .../target/TargetMatcherParseException.java | 0 .../blacklist/target/TargetMatcherParser.java | 36 +-- .../config/ConfigurationManager.java | 171 ++++++++++ .../worldguard/config/WorldConfiguration.java | 69 ++++ .../config/YamlConfigurationManager.java | 120 +++++++ .../config/YamlWorldConfiguration.java | 125 ++++++++ .../sk89q/worldguard/domains/Association.java | 0 .../worldguard/domains/DefaultDomain.java | 0 .../com/sk89q/worldguard/domains/Domain.java | 0 .../sk89q/worldguard/domains/GroupDomain.java | 2 +- .../worldguard/domains/PlayerDomain.java | 4 +- .../worldguard/internal/PermissionModel.java | 0 .../permission/AbstractPermissionModel.java | 21 +- .../permission/RegionPermissionModel.java | 20 +- .../internal/platform/WorldGuardPlatform.java | 117 +++++++ .../internal/util/sql/StatementUtils.java | 0 .../protection/AbstractRegionSet.java | 8 +- .../protection/ApplicableRegionSet.java | 23 +- .../protection/FailedLoadRegionSet.java | 13 +- .../protection/FlagValueCalculator.java | 14 +- .../protection/PermissiveRegionSet.java | 6 +- .../protection/RegionResultSet.java | 0 .../protection/association/Associables.java | 0 .../association/ConstantAssociation.java | 0 .../association/RegionAssociable.java | 0 .../association/RegionOverlapAssociation.java | 0 .../protection/flags/BooleanFlag.java | 4 - .../protection/flags/BuildFlag.java | 2 +- .../protection/flags/CommandStringFlag.java | 4 - .../protection/flags/DoubleFlag.java | 0 .../protection/flags/EntityTypeFlag.java | 63 ++++ .../worldguard/protection/flags/EnumFlag.java | 0 .../worldguard/protection/flags/Flag.java | 13 +- .../protection/flags/FlagContext.java | 35 +- .../worldguard/protection/flags/FlagUtil.java | 6 +- .../worldguard/protection/flags/Flags.java | 81 ++--- .../protection/flags/GameModeTypeFlag.java | 60 ++++ .../protection/flags/IntegerFlag.java | 0 .../protection/flags/InvalidFlagFormat.java | 0 .../protection/flags/LazyLocation.java | 17 +- .../protection/flags/LocationFlag.java | 36 +-- .../protection/flags/RegionGroup.java | 0 .../protection/flags/RegionGroupFlag.java | 0 .../worldguard/protection/flags/SetFlag.java | 0 .../protection/flags/StateFlag.java | 5 +- .../protection/flags/StringFlag.java | 4 - .../protection/flags/VectorFlag.java | 5 +- .../protection/flags/WeatherTypeFlag.java | 60 ++++ .../flags/registry/FlagConflictException.java | 0 .../flags/registry/FlagRegistry.java | 0 .../flags/registry/SimpleFlagRegistry.java | 3 +- .../flags/registry/UnknownFlag.java | 0 .../managers/RegionContainerImpl.java | 12 +- .../protection/managers/RegionDifference.java | 0 .../protection/managers/RegionManager.java | 64 ++-- .../protection/managers/RemovalStrategy.java | 0 .../managers/index/AbstractRegionIndex.java | 0 .../managers/index/ChunkHashTable.java | 0 .../managers/index/ConcurrentRegionIndex.java | 0 .../managers/index/HashMapIndex.java | 0 .../managers/index/PriorityRTreeIndex.java | 0 .../managers/index/RegionIndex.java | 0 .../managers/migration/AbstractMigration.java | 0 .../managers/migration/DriverMigration.java | 0 .../managers/migration/Migration.java | 0 .../migration/MigrationException.java | 0 .../managers/migration/UUIDMigration.java | 0 .../storage/DifferenceSaveException.java | 0 .../managers/storage/DriverType.java | 0 .../storage/MemoryRegionDatabase.java | 0 .../managers/storage/RegionDatabase.java | 0 .../managers/storage/RegionDatabaseUtils.java | 0 .../managers/storage/RegionDriver.java | 0 .../managers/storage/StorageException.java | 0 .../storage/file/DirectoryYamlDriver.java | 0 .../managers/storage/file/YamlRegionFile.java | 4 +- .../managers/storage/sql/DataLoader.java | 0 .../managers/storage/sql/DataUpdater.java | 0 .../storage/sql/DomainTableCache.java | 0 .../managers/storage/sql/RegionInserter.java | 0 .../managers/storage/sql/RegionRemover.java | 0 .../managers/storage/sql/RegionUpdater.java | 0 .../managers/storage/sql/SQLDriver.java | 0 .../storage/sql/SQLRegionDatabase.java | 0 .../managers/storage/sql/StatementBatch.java | 0 .../managers/storage/sql/TableCache.java | 0 .../regions/GlobalProtectedRegion.java | 0 .../regions/ProtectedCuboidRegion.java | 0 .../regions/ProtectedPolygonalRegion.java | 0 .../protection/regions/ProtectedRegion.java | 5 +- .../regions/ProtectedRegionMBRConverter.java | 0 .../protection/regions}/QueryCache.java | 14 +- .../protection/regions/RegionContainer.java | 119 +++++++ .../protection/regions}/RegionQuery.java | 92 +++--- .../protection/regions/RegionType.java | 0 .../protection/util/DomainInputResolver.java | 0 .../protection/util/NormativeOrders.java | 0 .../util/RegionCollectionConsumer.java | 0 .../util/UnresolvedNamesException.java | 0 .../sk89q/worldguard/session/MoveType.java | 4 +- .../com/sk89q/worldguard/session/Session.java | 39 +-- .../worldguard/session/SessionManager.java | 116 +++++++ .../worldguard/session/WorldPlayerTuple.java | 8 +- .../worldguard/session/handler/EntryFlag.java | 19 +- .../worldguard/session/handler/ExitFlag.java | 38 ++- .../session/handler/FarewellFlag.java | 26 +- .../worldguard/session/handler/FeedFlag.java | 18 +- .../handler/FlagValueChangeHandler.java | 18 +- .../session/handler/GameModeFlag.java | 27 +- .../worldguard/session/handler/GodMode.java | 37 ++- .../session/handler/GreetingFlag.java | 22 +- .../worldguard/session/handler/Handler.java | 28 +- .../worldguard/session/handler/HealFlag.java | 19 +- .../session/handler/InvincibilityFlag.java | 18 +- .../session/handler/NotifyEntryFlag.java | 29 +- .../session/handler/NotifyExitFlag.java | 27 +- .../session/handler/TimeLockFlag.java | 23 +- .../session/handler/WaterBreathing.java | 4 +- .../session/handler/WeatherLockFlag.java | 18 +- .../sk89q/worldguard/util/ChangeTracked.java | 0 .../java/com/sk89q/worldguard/util/Enums.java | 0 .../com/sk89q/worldguard}/util/Locations.java | 4 +- .../com/sk89q/worldguard/util/MathUtils.java | 0 .../com/sk89q/worldguard/util/Normal.java | 0 .../worldguard/util/collect/EntryBase.java | 0 .../util/collect/LongBaseHashTable.java | 0 .../worldguard/util/collect/LongHash.java | 0 .../worldguard/util/collect/LongHashSet.java | 0 .../util/collect/LongHashTable.java | 0 .../util/command/CommandFilter.java | 0 .../util/concurrent/EvenMoreExecutors.java | 0 .../com/sk89q/worldguard/util/io/Closer.java | 0 .../util/logging/RecordMessagePrefixer.java | 0 .../worldguard/util/net/HttpRequest.java | 44 ++- .../worldguard/util/paste/EngineHubPaste.java | 0 .../sk89q/worldguard/util/paste/Pastebin.java | 0 .../sk89q/worldguard/util/paste/Paster.java | 0 .../sk89q/worldguard/util/paste/Pasters.java | 0 .../util/profiler/SamplerBuilder.java | 0 .../worldguard/util/profiler/StackNode.java | 0 .../util/profiler/StackTraceNode.java | 2 - .../util/profiler/ThreadIdFilter.java | 0 .../util/profiler/ThreadNameFilter.java | 0 .../worldguard/util/report/DataReport.java | 0 .../worldguard/util/report/RegionReport.java | 2 +- .../sk89q/worldguard/util/report/Report.java | 0 .../worldguard/util/report/ReportList.java | 0 .../util/report/ShallowObjectReport.java | 0 .../util/report/StackTraceReport.java | 0 .../util/report/SystemInfoReport.java | 0 .../worldguard/util/report/Unreported.java | 0 .../worldguard/util/sql/DataSourceConfig.java | 0 .../worldguard/util/task/AbstractTask.java | 0 .../util/task/FutureForwardingTask.java | 0 .../util/task/SimpleSupervisor.java | 4 +- .../worldguard/util/task/Supervisor.java | 0 .../com/sk89q/worldguard/util/task/Task.java | 0 .../util/task/TaskStateComparator.java | 0 .../util/task/progress/Progress.java | 0 .../util/task/progress/ProgressIterator.java | 0 .../task/progress/ProgressObservable.java | 0 worldguard-legacy/build.gradle | 19 +- .../config/checkstyle/checkstyle.xml | 1 - .../bukkit/BukkitConfigurationManager.class | Bin 0 -> 4162 bytes .../worldguard/bukkit/BukkitPlayer.class | Bin 0 -> 7448 bytes .../bukkit/BukkitRegionContainer$1.class | Bin 0 -> 2773 bytes .../bukkit/BukkitRegionContainer.class | Bin 0 -> 8566 bytes .../bukkit/BukkitWorldConfiguration.class | Bin 0 -> 22744 bytes .../bukkit/BukkitWorldGuardPlatform.class | Bin 0 -> 6013 bytes .../worldguard/bukkit/ProtectionQuery.class | Bin 0 -> 3265 bytes .../bukkit/WorldGuardPlugin$1.class | Bin 0 -> 1205 bytes .../bukkit/WorldGuardPlugin$2.class | Bin 0 -> 1375 bytes .../worldguard/bukkit/WorldGuardPlugin.class | Bin 0 -> 27775 bytes .../worldguard/bukkit/cause/Cause$1.class | Bin 0 -> 231 bytes .../bukkit/cause/Cause$Builder.class | Bin 0 -> 3069 bytes .../sk89q/worldguard/bukkit/cause/Cause.class | Bin 0 -> 4932 bytes .../bukkit/chest/ChestProtection.class | Bin 0 -> 375 bytes .../bukkit/commands/DebuggingCommands.class | Bin 0 -> 10180 bytes .../commands/FutureProgressListener.class | Bin 0 -> 2286 bytes .../bukkit/commands/MessageTimerTask.class | Bin 0 -> 855 bytes .../commands/region/RegionCommandsBase.class | Bin 0 -> 16902 bytes .../bukkit/commands/task/RegionRemover.class | Bin 0 -> 3197 bytes .../worldguard/bukkit/event/BulkEvent.class | Bin 0 -> 300 bytes .../bukkit/event/DelegateEvent.class | Bin 0 -> 2638 bytes .../bukkit/event/DelegateEvents.class | Bin 0 -> 1756 bytes .../worldguard/bukkit/event/Handleable.class | Bin 0 -> 351 bytes .../event/block/AbstractBlockEvent.class | Bin 0 -> 4407 bytes .../bukkit/event/block/BreakBlockEvent.class | Bin 0 -> 2866 bytes .../bukkit/event/debug/CancelAttempt.class | Bin 0 -> 967 bytes .../bukkit/event/debug/CancelLogging.class | Bin 0 -> 323 bytes .../event/entity/AbstractEntityEvent.class | Bin 0 -> 2300 bytes .../event/entity/DamageEntityEvent.class | Bin 0 -> 1751 bytes .../event/entity/SpawnEntityEvent.class | Bin 0 -> 2348 bytes .../bukkit/event/inventory/UseItemEvent.class | Bin 0 -> 1599 bytes .../bukkit/internal/TargetMatcherSet.class | Bin 0 -> 3106 bytes .../bukkit/listener/AbstractListener.class | Bin 0 -> 2568 bytes .../listener/BlockedPotionsListener.class | Bin 0 -> 6735 bytes .../listener/InvincibilityListener.class | Bin 0 -> 4103 bytes .../bukkit/listener/PlayerMoveListener.class | Bin 0 -> 6199 bytes .../bukkit/listener/WorldRulesListener.class | Bin 0 -> 1767 bytes .../legacy/AbstractEventDebounce$1.class | Bin 0 -> 1602 bytes .../legacy/AbstractEventDebounce$Entry.class | Bin 0 -> 1151 bytes .../legacy/AbstractEventDebounce.class | Bin 0 -> 3715 bytes .../legacy/BlockEntityEventDebounce$1.class | Bin 0 -> 326 bytes .../legacy/BlockEntityEventDebounce$Key.class | Bin 0 -> 1828 bytes .../legacy/BlockEntityEventDebounce.class | Bin 0 -> 1738 bytes .../EntityEntityEventDebounce$Key.class | Bin 0 -> 1165 bytes .../legacy/EntityEntityEventDebounce.class | Bin 0 -> 1548 bytes .../worldguard/bukkit/util/Entities.class | Bin 0 -> 4164 bytes .../sk89q/worldguard/bukkit/util/Events.class | Bin 0 -> 3815 bytes .../bukkit/util/HandlerTracer$1.class | Bin 0 -> 253 bytes .../bukkit/util/HandlerTracer$Handler.class | Bin 0 -> 1285 bytes .../bukkit/util/HandlerTracer.class | Bin 0 -> 2943 bytes .../bukkit/util/report/PluginReport.class | Bin 0 -> 2678 bytes .../util/report/SchedulerReport$1.class | Bin 0 -> 1845 bytes .../bukkit/util/report/SchedulerReport.class | Bin 0 -> 4344 bytes .../bukkit/util/report/ServerReport.class | Bin 0 -> 3175 bytes .../protection/GlobalRegionManager.class | Bin 0 -> 2107 bytes .../worldguard/util/report/CancelReport.class | Bin 0 -> 4196 bytes .../resources/defaults/blacklist.txt | 65 ++++ .../production/resources/defaults/config.yml | 22 ++ .../resources/defaults/config_world.yml | 21 ++ .../migrations/region/mysql/V1__Initial.sql | 212 +++++++++++++ .../region/mysql/V2__Bug_fix_and_UUID.sql | 27 ++ .../migrations/region/sqlite/V1__Initial.sql | 160 ++++++++++ .../out/production/resources/plugin.yml | 5 + .../com/sk89q/worldguard/LocalPlayer.java | 122 ------- .../target/DataValueRangeMatcher.java | 51 --- .../blacklist/target/TargetMatcherParser.java | 123 -------- .../bukkit/BukkitConfigurationManager.java | 90 ++++++ .../bukkit/BukkitOfflinePlayer.java | 147 ++++++++- .../sk89q/worldguard/bukkit/BukkitPlayer.java | 152 ++++++++- ...tainer.java => BukkitRegionContainer.java} | 110 ++----- .../sk89q/worldguard/bukkit/BukkitUtil.java | 247 ++------------- ...ion.java => BukkitWorldConfiguration.java} | 174 +++------- .../bukkit/BukkitWorldGuardPlatform.java | 107 +++++++ .../bukkit/ConfigurationManager.java | 298 ------------------ .../com/sk89q/worldguard/bukkit/WGBukkit.java | 71 ----- .../worldguard/bukkit/WorldGuardPlugin.java | 257 ++++----------- .../{ => bukkit}/chest/ChestProtection.java | 32 +- .../chest/SignChestProtection.java | 67 ++-- .../bukkit/commands/CommandUtils.java | 14 +- .../bukkit/commands/GeneralCommands.java | 19 +- .../bukkit/commands/ToggleCommands.java | 8 +- .../bukkit/commands/WorldGuardCommands.java | 2 +- .../commands/region/MemberCommands.java | 4 +- .../commands/region/RegionCommands.java | 34 +- .../commands/region/RegionCommandsBase.java | 16 +- .../region/RegionPrintoutBuilder.java | 6 +- .../bukkit/internal/TargetMatcherSet.java | 12 +- .../bukkit/listener/AbstractListener.java | 27 +- .../bukkit/listener/BlacklistListener.java | 113 ++++--- .../listener/BlockedPotionsListener.java | 14 +- .../listener/BuildPermissionListener.java | 19 +- .../listener/ChestProtectionListener.java | 10 +- .../listener/EventAbstractionListener.java | 8 +- .../listener/InvincibilityListener.java | 4 +- .../bukkit/listener/PlayerModesListener.java | 2 +- .../bukkit/listener/PlayerMoveListener.java | 14 +- .../bukkit/listener/RegionFlagsListener.java | 24 +- .../listener/RegionProtectionListener.java | 60 ++-- .../bukkit/listener/SpongeUtil.java | 8 +- .../listener/WorldGuardBlockListener.java | 71 +++-- .../listener/WorldGuardEntityListener.java | 74 +++-- .../listener/WorldGuardHangingListener.java | 14 +- .../listener/WorldGuardPlayerListener.java | 48 +-- .../listener/WorldGuardVehicleListener.java | 8 +- .../listener/WorldGuardWeatherListener.java | 14 +- .../listener/WorldGuardWorldListener.java | 14 +- .../bukkit/listener/WorldRulesListener.java | 4 +- .../DelayedRegionOverlapAssociation.java | 2 +- .../protection/events/DisallowedPVPEvent.java | 2 +- .../worldguard/bukkit/util/Materials.java | 4 +- .../bukkit/util/report/ConfigReport.java | 4 +- .../worldguard/domains/DomainCollection.java | 91 ------ .../protection/GlobalRegionManager.java | 96 ++---- .../UnsupportedIntersectionException.java | 30 -- .../protection/flags/EntityTypeFlag.java | 53 ---- ...Manager.java => BukkitSessionManager.java} | 53 ++-- .../protection/ApplicableRegionSetTest.java | 114 +++---- .../protection/FlagValueCalculatorTest.java | 168 +++++----- .../protection/RegionEntryExitTest.java | 27 +- .../protection/RegionOverlapTest.java | 16 +- .../protection/RegionPriorityTest.java | 26 +- 336 files changed, 3694 insertions(+), 2936 deletions(-) create mode 100644 worldguard-core/config/checkstyle/checkstyle.xml create mode 100644 worldguard-core/config/checkstyle/import-control.xml create mode 100644 worldguard-core/src/main/java/com/sk89q/worldguard/LocalPlayer.java create mode 100644 worldguard-core/src/main/java/com/sk89q/worldguard/WorldGuard.java rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/Blacklist.java (87%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/BlacklistEntry.java (95%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/BlacklistLoggerHandler.java (97%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/MatcherIndex.java (85%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/TrackedEvent.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/action/Action.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/action/ActionResult.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/action/ActionType.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/action/AllowAction.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/action/BanAction.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/action/DenyAction.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/action/KickAction.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/action/LogAction.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/action/NotifyAction.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/action/RepeatGuardedAction.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/action/TellAction.java (82%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/AbstractBlacklistEvent.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/BlacklistEvent.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/BlockBlacklistEvent.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/BlockBreakBlacklistEvent.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/BlockDispenseBlacklistEvent.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/BlockInteractBlacklistEvent.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/BlockPlaceBlacklistEvent.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/EventType.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/ItemAcquireBlacklistEvent.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/ItemBlacklistEvent.java (94%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/ItemDestroyWithBlacklistEvent.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/ItemDropBlacklistEvent.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/event/ItemUseBlacklistEvent.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/logger/ConsoleHandler.java (77%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/logger/DatabaseHandler.java (97%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/logger/FileHandler.java (95%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/logger/LogFileWriter.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/logger/LoggerHandler.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/target/DataMask.java (100%) rename worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/internal/BukkitBlacklist.java => worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/ItemMatcher.java (64%) rename worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/WildcardDataMatcher.java => worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/ItemTarget.java (74%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/target/RangeMask.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/target/Target.java (90%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcher.java (97%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParseException.java (100%) rename worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/MaterialTarget.java => worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParser.java (58%) create mode 100644 worldguard-core/src/main/java/com/sk89q/worldguard/config/ConfigurationManager.java create mode 100644 worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java create mode 100644 worldguard-core/src/main/java/com/sk89q/worldguard/config/YamlConfigurationManager.java create mode 100644 worldguard-core/src/main/java/com/sk89q/worldguard/config/YamlWorldConfiguration.java rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/domains/Association.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/domains/DefaultDomain.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/domains/Domain.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/domains/GroupDomain.java (98%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/domains/PlayerDomain.java (98%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/internal/PermissionModel.java (100%) rename {worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit => worldguard-core/src/main/java/com/sk89q/worldguard/internal}/permission/AbstractPermissionModel.java (62%) rename {worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit => worldguard-core/src/main/java/com/sk89q/worldguard/internal}/permission/RegionPermissionModel.java (91%) create mode 100644 worldguard-core/src/main/java/com/sk89q/worldguard/internal/platform/WorldGuardPlatform.java rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/internal/util/sql/StatementUtils.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/AbstractRegionSet.java (93%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/ApplicableRegionSet.java (91%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/FailedLoadRegionSet.java (88%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/FlagValueCalculator.java (97%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/PermissiveRegionSet.java (95%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/RegionResultSet.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/association/Associables.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/association/ConstantAssociation.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/association/RegionAssociable.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/association/RegionOverlapAssociation.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/BooleanFlag.java (95%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/BuildFlag.java (97%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/CommandStringFlag.java (94%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/DoubleFlag.java (100%) create mode 100644 worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/EntityTypeFlag.java rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/EnumFlag.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/Flag.java (97%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/FlagContext.java (82%) rename worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java => worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/FlagUtil.java (93%) rename worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/DefaultFlag.java => worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java (75%) create mode 100644 worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/GameModeTypeFlag.java rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/IntegerFlag.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/InvalidFlagFormat.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/LazyLocation.java (79%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/LocationFlag.java (79%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/RegionGroup.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/RegionGroupFlag.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/SetFlag.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/StateFlag.java (97%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/StringFlag.java (95%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/VectorFlag.java (93%) create mode 100644 worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/WeatherTypeFlag.java rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/registry/FlagConflictException.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/registry/FlagRegistry.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/registry/SimpleFlagRegistry.java (97%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/flags/registry/UnknownFlag.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/RegionContainerImpl.java (96%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/RegionDifference.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/RegionManager.java (88%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/RemovalStrategy.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/index/AbstractRegionIndex.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/index/ChunkHashTable.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/index/ConcurrentRegionIndex.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/index/HashMapIndex.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/index/PriorityRTreeIndex.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/index/RegionIndex.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/migration/AbstractMigration.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/migration/DriverMigration.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/migration/Migration.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/migration/MigrationException.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/migration/UUIDMigration.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/DifferenceSaveException.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/DriverType.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/MemoryRegionDatabase.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabase.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabaseUtils.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDriver.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/StorageException.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/file/DirectoryYamlDriver.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/file/YamlRegionFile.java (99%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DataLoader.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DataUpdater.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DomainTableCache.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionInserter.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionRemover.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionUpdater.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/SQLDriver.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/SQLRegionDatabase.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/StatementBatch.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/TableCache.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/regions/GlobalProtectedRegion.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedCuboidRegion.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedPolygonalRegion.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegion.java (99%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegionMBRConverter.java (100%) rename {worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit => worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions}/QueryCache.java (91%) create mode 100644 worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/RegionContainer.java rename {worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit => worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions}/RegionQuery.java (82%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/regions/RegionType.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/util/DomainInputResolver.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/util/NormativeOrders.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/util/RegionCollectionConsumer.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/protection/util/UnresolvedNamesException.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/MoveType.java (93%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/Session.java (85%) create mode 100644 worldguard-core/src/main/java/com/sk89q/worldguard/session/SessionManager.java rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/WorldPlayerTuple.java (89%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/EntryFlag.java (70%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/ExitFlag.java (66%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/FarewellFlag.java (68%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/FeedFlag.java (79%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/FlagValueChangeHandler.java (68%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/GameModeFlag.java (69%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/GodMode.java (66%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/GreetingFlag.java (71%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/Handler.java (82%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/HealFlag.java (79%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/InvincibilityFlag.java (71%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/NotifyEntryFlag.java (60%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/NotifyExitFlag.java (56%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/TimeLockFlag.java (75%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/WaterBreathing.java (93%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/session/handler/WeatherLockFlag.java (73%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/ChangeTracked.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/Enums.java (100%) rename {worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit => worldguard-core/src/main/java/com/sk89q/worldguard}/util/Locations.java (94%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/MathUtils.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/Normal.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/collect/EntryBase.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/collect/LongBaseHashTable.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/collect/LongHash.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/collect/LongHashSet.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/collect/LongHashTable.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/command/CommandFilter.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/concurrent/EvenMoreExecutors.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/io/Closer.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/logging/RecordMessagePrefixer.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/net/HttpRequest.java (93%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/paste/EngineHubPaste.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/paste/Pastebin.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/paste/Paster.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/paste/Pasters.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/profiler/SamplerBuilder.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/profiler/StackNode.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/profiler/StackTraceNode.java (98%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/profiler/ThreadIdFilter.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/profiler/ThreadNameFilter.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/report/DataReport.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/report/RegionReport.java (96%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/report/Report.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/report/ReportList.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/report/ShallowObjectReport.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/report/StackTraceReport.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/report/SystemInfoReport.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/report/Unreported.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/sql/DataSourceConfig.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/task/AbstractTask.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/task/FutureForwardingTask.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/task/SimpleSupervisor.java (93%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/task/Supervisor.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/task/Task.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/task/TaskStateComparator.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/task/progress/Progress.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/task/progress/ProgressIterator.java (100%) rename {worldguard-legacy => worldguard-core}/src/main/java/com/sk89q/worldguard/util/task/progress/ProgressObservable.java (100%) create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/BukkitConfigurationManager.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/BukkitPlayer.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/BukkitRegionContainer$1.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/BukkitRegionContainer.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/BukkitWorldGuardPlatform.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/ProtectionQuery.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/WorldGuardPlugin$1.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/WorldGuardPlugin$2.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/WorldGuardPlugin.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/cause/Cause$1.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/cause/Cause$Builder.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/cause/Cause.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/chest/ChestProtection.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/commands/DebuggingCommands.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/commands/FutureProgressListener.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/commands/MessageTimerTask.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/commands/region/RegionCommandsBase.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/commands/task/RegionRemover.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/BulkEvent.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/DelegateEvent.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/DelegateEvents.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/Handleable.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/block/AbstractBlockEvent.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/block/BreakBlockEvent.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/debug/CancelAttempt.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/debug/CancelLogging.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/entity/AbstractEntityEvent.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/entity/DamageEntityEvent.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/entity/SpawnEntityEvent.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/inventory/UseItemEvent.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/internal/TargetMatcherSet.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/AbstractListener.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/BlockedPotionsListener.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/InvincibilityListener.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/WorldRulesListener.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/AbstractEventDebounce$1.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/AbstractEventDebounce$Entry.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/AbstractEventDebounce.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/BlockEntityEventDebounce$1.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/BlockEntityEventDebounce$Key.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/BlockEntityEventDebounce.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/EntityEntityEventDebounce$Key.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/EntityEntityEventDebounce.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/Entities.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/Events.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/HandlerTracer$1.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/HandlerTracer$Handler.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/HandlerTracer.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/report/PluginReport.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/report/SchedulerReport$1.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/report/SchedulerReport.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/report/ServerReport.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/protection/GlobalRegionManager.class create mode 100644 worldguard-legacy/out/production/classes/com/sk89q/worldguard/util/report/CancelReport.class create mode 100644 worldguard-legacy/out/production/resources/defaults/blacklist.txt create mode 100644 worldguard-legacy/out/production/resources/defaults/config.yml create mode 100644 worldguard-legacy/out/production/resources/defaults/config_world.yml create mode 100644 worldguard-legacy/out/production/resources/migrations/region/mysql/V1__Initial.sql create mode 100644 worldguard-legacy/out/production/resources/migrations/region/mysql/V2__Bug_fix_and_UUID.sql create mode 100644 worldguard-legacy/out/production/resources/migrations/region/sqlite/V1__Initial.sql create mode 100644 worldguard-legacy/out/production/resources/plugin.yml delete mode 100644 worldguard-legacy/src/main/java/com/sk89q/worldguard/LocalPlayer.java delete mode 100644 worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/DataValueRangeMatcher.java delete mode 100644 worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParser.java create mode 100644 worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitConfigurationManager.java rename worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/{RegionContainer.java => BukkitRegionContainer.java} (68%) rename worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/{WorldConfiguration.java => BukkitWorldConfiguration.java} (81%) create mode 100644 worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldGuardPlatform.java delete mode 100644 worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/ConfigurationManager.java delete mode 100644 worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/WGBukkit.java rename worldguard-legacy/src/main/java/com/sk89q/worldguard/{ => bukkit}/chest/ChestProtection.java (67%) rename worldguard-legacy/src/main/java/com/sk89q/worldguard/{ => bukkit}/chest/SignChestProtection.java (65%) rename worldguard-legacy/src/main/java/com/sk89q/worldguard/{ => bukkit}/protection/events/DisallowedPVPEvent.java (97%) delete mode 100644 worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/DomainCollection.java delete mode 100644 worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/UnsupportedIntersectionException.java delete mode 100644 worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/EntityTypeFlag.java rename worldguard-legacy/src/main/java/com/sk89q/worldguard/session/{SessionManager.java => BukkitSessionManager.java} (86%) diff --git a/build.gradle b/build.gradle index 9c053260..e81e15a2 100644 --- a/build.gradle +++ b/build.gradle @@ -26,9 +26,9 @@ } dependencies { - classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.1' - classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:3.0.1' - classpath 'org.ajoberstar:gradle-git:0.12.0' + classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3' + classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.7.5' + classpath 'org.ajoberstar:gradle-git:1.7.2' } } @@ -50,7 +50,7 @@ apply plugin: 'maven' apply plugin: 'checkstyle' apply plugin: 'com.github.johnrengelman.shadow' - apply plugin: 'com.jfrog.artifactory-upload' + apply plugin: 'com.jfrog.artifactory' group = 'com.sk89q.worldguard' version = '7.0.0-SNAPSHOT' @@ -62,6 +62,7 @@ checkstyle.configFile = new File(rootProject.projectDir, "config/checkstyle/checkstyle.xml") repositories { + mavenLocal() mavenCentral() maven { url "http://repo.spongepowered.org/maven/" } maven { url "https://hub.spigotmc.org/nexus/content/groups/public" } @@ -101,6 +102,10 @@ task javadocJar(type: Jar, dependsOn: javadoc) { classifier 'dist' dependencies { include(dependency('org.khelekore:prtree:1.5.0')) + include(dependency('com.sk89q:squirrelid:0.1.0')) + include(dependency('org.flywaydb:flyway-core:3.0')) + include(dependency('com.googlecode.json-simple:json-simple:1.1.1')) + include(dependency('net.sf.opencsv:opencsv:2.0')) } exclude 'GradleStart**' exclude '.cache' diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index 1f45fb65..2b4bac35 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -27,7 +27,6 @@ - diff --git a/config/checkstyle/import-control.xml b/config/checkstyle/import-control.xml index 636bbc0f..fbba4f1f 100644 --- a/config/checkstyle/import-control.xml +++ b/config/checkstyle/import-control.xml @@ -14,6 +14,8 @@ + + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index b7612167031001b7b84baf2a959e8ea8ad03c011..1948b9074f1016d15d505d185bc3f73deb82d8c8 100644 GIT binary patch delta 45350 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 F`X6l5li&aV delta 42141 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a64bece0..d2c45a4b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Nov 13 12:12:21 EST 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip diff --git a/gradlew b/gradlew index 91a7e269..cccdd3d5 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,47 +6,6 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" @@ -61,9 +20,49 @@ while [ -h "$PRG" ] ; do fi done SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- +cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" -cd "$SAVED" >&- +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -90,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -114,6 +113,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` @@ -154,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 8a0b282a..f9553162 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/worldguard-core/build.gradle b/worldguard-core/build.gradle index 0a0e9f6d..a4da0a37 100644 --- a/worldguard-core/build.gradle +++ b/worldguard-core/build.gradle @@ -2,11 +2,14 @@ apply plugin: 'idea' dependencies { - compile 'com.sk89q.worldedit:worldedit-core:6.1.1-SNAPSHOT' + compile 'com.sk89q.worldedit:worldedit-core:7.0.0-SNAPSHOT' compile 'com.sk89q.intake:intake:4.2-SNAPSHOT' compile 'com.sk89q:squirrelid:0.1.0' compile 'org.flywaydb:flyway-core:3.0' compile 'org.khelekore:prtree:1.5.0' + compile 'net.sf.opencsv:opencsv:2.0' + compile 'com.googlecode.json-simple:json-simple:1.1.1' + compile 'com.google.code.findbugs:jsr305:1.3.9' } sourceSets { diff --git a/worldguard-core/config/checkstyle/checkstyle.xml b/worldguard-core/config/checkstyle/checkstyle.xml new file mode 100644 index 00000000..a79be7ef --- /dev/null +++ b/worldguard-core/config/checkstyle/checkstyle.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/worldguard-core/config/checkstyle/import-control.xml b/worldguard-core/config/checkstyle/import-control.xml new file mode 100644 index 00000000..0fdb4ff3 --- /dev/null +++ b/worldguard-core/config/checkstyle/import-control.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/LocalPlayer.java b/worldguard-core/src/main/java/com/sk89q/worldguard/LocalPlayer.java new file mode 100644 index 00000000..7c518932 --- /dev/null +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/LocalPlayer.java @@ -0,0 +1,163 @@ +/* + * WorldGuard, a suite of tools for Minecraft + * Copyright (C) sk89q + * Copyright (C) WorldGuard team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldguard; + +import com.sk89q.worldedit.extension.platform.AbstractPlayerActor; +import com.sk89q.worldedit.world.weather.WeatherType; +import com.sk89q.worldguard.domains.Association; +import com.sk89q.worldguard.protection.association.RegionAssociable; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; + +import java.util.List; + +public abstract class LocalPlayer extends AbstractPlayerActor implements RegionAssociable { + + /** + * Returns true if this player is inside a group. + * + * @param group The group to check + * @return Whether this player is in {@code group} + */ + public abstract boolean hasGroup(String group); + + /** + * Kick this player. + * + * @param msg The message to kick the player with + */ + public abstract void kick(String msg); + + /** + * Ban this player. + * + * @param msg The message to ban the player with + */ + public abstract void ban(String msg); + + @Override + public Association getAssociation(List regions) { + boolean member = false; + + for (ProtectedRegion region : regions) { + if (region.isOwner(this)) { + return Association.OWNER; + } else if (!member && region.isMember(this)) { + member = true; + } + } + + return member ? Association.MEMBER : Association.NON_MEMBER; + } + + /** + * Gets the health of this player. + * + * @return The health + */ + public abstract double getHealth(); + + /** + * Sets the health of this player. + * + * @param health The health + */ + public abstract void setHealth(double health); + + /** + * Gets the max health of this player. + * + * @return The max health + */ + public abstract double getMaxHealth(); + + /** + * Gets the food level of this player. + * + * @return The food level + */ + public abstract double getFoodLevel(); + + /** + * Sets the food level of this player. + * + * @param foodLevel The food level + */ + public abstract void setFoodLevel(double foodLevel); + + /** + * Gets the saturation of this player. + * + * @return The saturation + */ + public abstract double getSaturation(); + + /** + * Sets the saturation of this player. + * + * @param saturation The saturation + */ + public abstract void setSaturation(double saturation); + + /** + * Gets the players weather + * + * @return The players weather + */ + public abstract WeatherType getPlayerWeather(); + + /** + * Sets the players WeatherType + * + * @param weather The weather type + */ + public abstract void setPlayerWeather(WeatherType weather); + + /** + * Resets the players weather to normal. + */ + public abstract void resetPlayerWeather(); + + /** + * Gets if the players time is relative. + * + * @return If the time is relative + */ + public abstract boolean isPlayerTimeRelative(); + + /** + * Gets the time offset of the player. + * + * @return The players time offset + */ + public abstract long getPlayerTimeOffset(); + + /** + * Sets the players time. + * + * @param time The players time + * @param relative If it's relative + */ + public abstract void setPlayerTime(long time, boolean relative); + + /** + * Resets the players time to normal. + */ + public abstract void resetPlayerTime(); +} diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/WorldGuard.java b/worldguard-core/src/main/java/com/sk89q/worldguard/WorldGuard.java new file mode 100644 index 00000000..9b3f83de --- /dev/null +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/WorldGuard.java @@ -0,0 +1,69 @@ +/* + * WorldGuard, a suite of tools for Minecraft + * Copyright (C) sk89q + * Copyright (C) WorldGuard team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldguard; + +import static com.google.common.base.Preconditions.checkNotNull; + +import com.sk89q.worldguard.internal.platform.WorldGuardPlatform; +import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; +import com.sk89q.worldguard.protection.flags.registry.SimpleFlagRegistry; + +import java.util.logging.Logger; + +public class WorldGuard { + + public static final Logger logger = Logger.getLogger(WorldGuard.class.getCanonicalName()); + + private static final WorldGuard instance = new WorldGuard(); + private WorldGuardPlatform platform; + private final SimpleFlagRegistry flagRegistry = new SimpleFlagRegistry(); + + public static WorldGuard getInstance() { + return instance; + } + + public WorldGuard() { + flagRegistry.setInitialized(true); + } + + /** + * The WorldGuard Platform. + * + * @return The platform + */ + public WorldGuardPlatform getPlatform() { + checkNotNull(platform); + return platform; + } + + public void setPlatform(WorldGuardPlatform platform) { + checkNotNull(platform); + this.platform = platform; + } + + /** + * Get the flag registry. + * + * @return the flag registry + */ + public FlagRegistry getFlagRegistry() { + return this.flagRegistry; + } +} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/Blacklist.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/Blacklist.java similarity index 87% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/Blacklist.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/Blacklist.java index 9ccc19ae..53296f09 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/Blacklist.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/Blacklist.java @@ -19,6 +19,10 @@ package com.sk89q.worldguard.blacklist; +import com.sk89q.worldedit.util.formatting.ColorCodeBuilder; +import com.sk89q.worldedit.util.formatting.Style; +import com.sk89q.worldedit.util.formatting.StyledFragment; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.blacklist.action.Action; import com.sk89q.worldguard.blacklist.action.ActionType; import com.sk89q.worldguard.blacklist.event.BlacklistEvent; @@ -29,8 +33,6 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import com.sk89q.worldguard.bukkit.commands.CommandUtils; -import org.bukkit.ChatColor; import java.io.BufferedReader; import java.io.File; @@ -42,7 +44,7 @@ import java.util.logging.Level; import java.util.logging.Logger; -public abstract class Blacklist { +public class Blacklist { private static final Logger log = Logger.getLogger(Blacklist.class.getCanonicalName()); @@ -133,12 +135,10 @@ public boolean check(BlacklistEvent event, boolean forceRepeat, boolean silent) * @throws IOException if an error occurred reading from the file */ public void load(File file) throws IOException { - FileReader input = null; + MatcherIndex.Builder builder = new MatcherIndex.Builder(); TargetMatcherParser targetMatcherParser = new TargetMatcherParser(); - - try { - input = new FileReader(file); + try (FileReader input = new FileReader(file)) { BufferedReader buff = new BufferedReader(input); String line; @@ -155,7 +155,7 @@ public void load(File file) throws IOException { if (line.matches("^\\[.*\\]$")) { String[] items = line.substring(1, line.length() - 1).split(","); - currentEntries = new ArrayList(); + currentEntries = new ArrayList<>(); for (String item : items) { try { @@ -185,10 +185,10 @@ public void load(File file) throws IOException { entry.setIgnorePermissions(parts[1].split(",")); } else if (parts[0].equalsIgnoreCase("message")) { - entry.setMessage(CommandUtils.replaceColorMacros(parts[1].trim())); + entry.setMessage(WorldGuard.getInstance().getPlatform().replaceColorMacros(parts[1].trim())); } else if (parts[0].equalsIgnoreCase("comment")) { - entry.setComment(CommandUtils.replaceColorMacros(parts[1].trim())); + entry.setComment(WorldGuard.getInstance().getPlatform().replaceColorMacros(parts[1].trim())); } else { boolean found = false; @@ -217,19 +217,12 @@ public void load(File file) throws IOException { } this.index = builder.build(); - } finally { - try { - if (input != null) { - input.close(); - } - } catch (IOException ignore) { - } } } private List parseActions(BlacklistEntry entry, String raw) { String[] split = raw.split(","); - List actions = new ArrayList(); + List actions = new ArrayList<>(); for (String name : split) { name = name.trim(); @@ -270,12 +263,11 @@ public BlacklistEvent getLastEvent() { public void notify(BlacklistEvent event, String comment) { lastEvent = event; - broadcastNotification(ChatColor.GRAY + "WG: " - + ChatColor.LIGHT_PURPLE + event.getCauseName() - + ChatColor.GOLD + " (" + event.getDescription() + ") " - + ChatColor.WHITE - + event.getTarget().getFriendlyName() - + (comment != null ? " (" + comment + ")" : "") + "."); + StyledFragment fragment = new StyledFragment().append(new StyledFragment(Style.GRAY).append("WG: ")) + .append(new StyledFragment(Style.PURPLE).append(event.getCauseName())) + .append(new StyledFragment(Style.YELLOW_DARK).append(" (" + event.getDescription() + ") ")) + .append(new StyledFragment(Style.WHITE).append(event.getTarget().getFriendlyName() + (comment != null ? " (" + comment + ")" : "") + ".")); + broadcastNotification(ColorCodeBuilder.asColorCodes(fragment)); } /** @@ -283,7 +275,9 @@ public void notify(BlacklistEvent event, String comment) { * * @param msg The message to broadcast */ - public abstract void broadcastNotification(String msg); + public void broadcastNotification(String msg) { + WorldGuard.getInstance().getPlatform().broadcastNotification(msg); + } public LoadingCache getRepeatingEventCache() { return repeatingEventCache; diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/BlacklistEntry.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/BlacklistEntry.java similarity index 95% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/BlacklistEntry.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/BlacklistEntry.java index cd747d8e..a817c522 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/BlacklistEntry.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/BlacklistEntry.java @@ -33,7 +33,7 @@ public class BlacklistEntry { private Blacklist blacklist; private Set ignoreGroups; private Set ignorePermissions; - private Map, List> actions = new HashMap, List>(); + private Map, List> actions = new HashMap<>(); private String message; private String comment; @@ -146,12 +146,7 @@ public boolean shouldIgnore(@Nullable LocalPlayer player) { * @return The actions for the given event */ public List getActions(Class eventCls) { - List ret = actions.get(eventCls); - if (ret == null) { - ret = new ArrayList(); - actions.put(eventCls, ret); - } - return ret; + return actions.computeIfAbsent(eventCls, k -> new ArrayList<>()); } /** diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/BlacklistLoggerHandler.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/BlacklistLoggerHandler.java similarity index 97% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/BlacklistLoggerHandler.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/BlacklistLoggerHandler.java index 196676da..9cd3e929 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/BlacklistLoggerHandler.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/BlacklistLoggerHandler.java @@ -31,7 +31,7 @@ public class BlacklistLoggerHandler implements LoggerHandler { * List of logger handlers. */ private Set handlers - = new HashSet(); + = new HashSet<>(); /** * Add a handler. diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/MatcherIndex.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/MatcherIndex.java similarity index 85% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/MatcherIndex.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/MatcherIndex.java index a68d314e..76bcb915 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/MatcherIndex.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/MatcherIndex.java @@ -32,16 +32,16 @@ class MatcherIndex { - private static final MatcherIndex EMPTY_INSTANCE = new MatcherIndex(HashBasedTable.create()); - private final Table entries; + private static final MatcherIndex EMPTY_INSTANCE = new MatcherIndex(HashBasedTable.create()); + private final Table entries; - private MatcherIndex(Table entries) { + private MatcherIndex(Table entries) { checkNotNull(entries); this.entries = entries; } public List getEntries(Target target) { - List found = new ArrayList(); + List found = new ArrayList<>(); for (Entry entry : entries.row(target.getTypeId()).entrySet()) { if (entry.getKey().test(target)) { found.add(entry.getValue()); @@ -63,7 +63,7 @@ public static MatcherIndex getEmptyInstance() { } public static class Builder { - private final Table entries = HashBasedTable.create(); + private final Table entries = HashBasedTable.create(); public Builder add(TargetMatcher matcher, BlacklistEntry entry) { checkNotNull(matcher); diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/TrackedEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/TrackedEvent.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/TrackedEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/TrackedEvent.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/Action.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/Action.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/Action.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/Action.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/ActionResult.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/ActionResult.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/ActionResult.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/ActionResult.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/ActionType.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/ActionType.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/ActionType.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/ActionType.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/AllowAction.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/AllowAction.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/AllowAction.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/AllowAction.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/BanAction.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/BanAction.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/BanAction.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/BanAction.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/DenyAction.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/DenyAction.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/DenyAction.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/DenyAction.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/KickAction.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/KickAction.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/KickAction.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/KickAction.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/LogAction.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/LogAction.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/LogAction.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/LogAction.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/NotifyAction.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/NotifyAction.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/NotifyAction.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/NotifyAction.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/RepeatGuardedAction.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/RepeatGuardedAction.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/RepeatGuardedAction.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/RepeatGuardedAction.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/TellAction.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/TellAction.java similarity index 82% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/TellAction.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/TellAction.java index ec0934e5..f3886a47 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/action/TellAction.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/action/TellAction.java @@ -21,7 +21,6 @@ import com.sk89q.worldguard.blacklist.BlacklistEntry; import com.sk89q.worldguard.blacklist.event.BlacklistEvent; -import org.bukkit.ChatColor; import static com.google.common.base.Preconditions.checkNotNull; @@ -44,10 +43,9 @@ protected ActionResult applyNonRepeated(BlacklistEvent event, boolean silent) { if (event.getPlayer() != null) { if (message != null) { - event.getPlayer().printRaw(ChatColor.YELLOW + String.format(message, event.getTarget().getFriendlyName())); + event.getPlayer().print(String.format(message, event.getTarget().getFriendlyName())); } else { - event.getPlayer().printRaw(ChatColor.YELLOW + "You're not allowed to " + event.getDescription() + " " + - event.getTarget().getFriendlyName() + "."); + event.getPlayer().printError("You're not allowed to " + event.getDescription() + " " + event.getTarget().getFriendlyName() + "."); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/AbstractBlacklistEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/AbstractBlacklistEvent.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/AbstractBlacklistEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/AbstractBlacklistEvent.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/BlacklistEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/BlacklistEvent.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/BlacklistEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/BlacklistEvent.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/BlockBlacklistEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/BlockBlacklistEvent.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/BlockBlacklistEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/BlockBlacklistEvent.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/BlockBreakBlacklistEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/BlockBreakBlacklistEvent.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/BlockBreakBlacklistEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/BlockBreakBlacklistEvent.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/BlockDispenseBlacklistEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/BlockDispenseBlacklistEvent.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/BlockDispenseBlacklistEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/BlockDispenseBlacklistEvent.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/BlockInteractBlacklistEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/BlockInteractBlacklistEvent.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/BlockInteractBlacklistEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/BlockInteractBlacklistEvent.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/BlockPlaceBlacklistEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/BlockPlaceBlacklistEvent.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/BlockPlaceBlacklistEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/BlockPlaceBlacklistEvent.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/EventType.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/EventType.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/EventType.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/EventType.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/ItemAcquireBlacklistEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/ItemAcquireBlacklistEvent.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/ItemAcquireBlacklistEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/ItemAcquireBlacklistEvent.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/ItemBlacklistEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/ItemBlacklistEvent.java similarity index 94% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/ItemBlacklistEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/ItemBlacklistEvent.java index fa0a8565..36b30416 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/ItemBlacklistEvent.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/ItemBlacklistEvent.java @@ -45,7 +45,7 @@ public String getLoggerMessage() { @Override public Vector getLoggedPosition() { - return getPlayer() != null ? getPlayer().getPosition() : getPosition(); + return getPlayer() != null ? getPlayer().getLocation().toVector() : getPosition(); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/ItemDestroyWithBlacklistEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/ItemDestroyWithBlacklistEvent.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/ItemDestroyWithBlacklistEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/ItemDestroyWithBlacklistEvent.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/ItemDropBlacklistEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/ItemDropBlacklistEvent.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/ItemDropBlacklistEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/ItemDropBlacklistEvent.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/ItemUseBlacklistEvent.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/ItemUseBlacklistEvent.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/event/ItemUseBlacklistEvent.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/event/ItemUseBlacklistEvent.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/ConsoleHandler.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/ConsoleHandler.java similarity index 77% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/ConsoleHandler.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/ConsoleHandler.java index 2430b338..8925a3ec 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/ConsoleHandler.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/ConsoleHandler.java @@ -19,7 +19,6 @@ package com.sk89q.worldguard.blacklist.logger; -import com.sk89q.worldedit.blocks.ItemType; import com.sk89q.worldguard.blacklist.event.BlacklistEvent; import java.util.logging.Level; @@ -41,21 +40,6 @@ public void logEvent(BlacklistEvent event, String comment) { (comment != null ? " (" + comment + ")" : "")); } - /** - * Get an item's friendly name with its ID. - * - * @param id The item id - * @return The friendly name of the item - */ - private static String getFriendlyItemName(int id) { - ItemType type = ItemType.fromID(id); - if (type != null) { - return type.getName() + " (#" + id + ")"; - } else { - return "#" + id; - } - } - @Override public void close() { } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/DatabaseHandler.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/DatabaseHandler.java similarity index 97% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/DatabaseHandler.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/DatabaseHandler.java index b958f1f7..b446405c 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/DatabaseHandler.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/DatabaseHandler.java @@ -84,7 +84,7 @@ private Connection getConnection() throws SQLException { * @param item The item used * @param comment The comment associated with the event */ - private void logEvent(EventType eventType, @Nullable LocalPlayer player, Vector pos, int item, String comment) { + private void logEvent(EventType eventType, @Nullable LocalPlayer player, Vector pos, String item, String comment) { try { Connection conn = getConnection(); PreparedStatement stmt = conn.prepareStatement( @@ -97,7 +97,7 @@ private void logEvent(EventType eventType, @Nullable LocalPlayer player, Vector stmt.setInt(4, pos.getBlockX()); stmt.setInt(5, pos.getBlockY()); stmt.setInt(6, pos.getBlockZ()); - stmt.setInt(7, item); + stmt.setString(7, item); stmt.setInt(8, (int)(System.currentTimeMillis() / 1000)); stmt.setString(9, comment); stmt.executeUpdate(); diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/FileHandler.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/FileHandler.java similarity index 95% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/FileHandler.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/FileHandler.java index b52286a6..62d6129c 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/FileHandler.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/FileHandler.java @@ -20,7 +20,6 @@ package com.sk89q.worldguard.blacklist.logger; import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.blocks.ItemType; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.blacklist.event.BlacklistEvent; import com.sk89q.worldguard.blacklist.target.Target; @@ -231,21 +230,6 @@ public void logEvent(BlacklistEvent event, String comment) { logEvent(event, event.getDescription(), event.getTarget(), event.getPosition(), comment); } - /** - * Get an item's friendly name with its ID. - * - * @param id The id to get a friendly name for - * @return The friendly name - */ - private static String getFriendlyItemName(int id) { - ItemType type = ItemType.fromID(id); - if (type != null) { - return type.getName() + " (#" + id + ")"; - } else { - return "#" + id + ""; - } - } - @Override public void close() { for (Map.Entry entry : writers.entrySet()) { diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/LogFileWriter.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/LogFileWriter.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/LogFileWriter.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/LogFileWriter.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/LoggerHandler.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/LoggerHandler.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/logger/LoggerHandler.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/logger/LoggerHandler.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/DataMask.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/DataMask.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/DataMask.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/DataMask.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/internal/BukkitBlacklist.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/ItemMatcher.java similarity index 64% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/internal/BukkitBlacklist.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/ItemMatcher.java index 0b94bf0f..6a782008 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/internal/BukkitBlacklist.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/ItemMatcher.java @@ -17,23 +17,26 @@ * along with this program. If not, see . */ -package com.sk89q.worldguard.bukkit.internal; +package com.sk89q.worldguard.blacklist.target; -import com.sk89q.worldguard.blacklist.Blacklist; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldedit.world.item.ItemType; -public class BukkitBlacklist extends Blacklist { +public class ItemMatcher implements TargetMatcher { - private WorldGuardPlugin plugin; - - public BukkitBlacklist(Boolean useAsWhitelist, WorldGuardPlugin plugin) { - super(useAsWhitelist); - this.plugin = plugin; + private final ItemType type; + + public ItemMatcher(ItemType type) { + this.type = type; } - + @Override - public void broadcastNotification(String msg) { - plugin.broadcastNotification(msg); + public String getMatchedTypeId() { + return this.type.getId(); + } + + @Override + public boolean test(Target target) { + return target.getTypeId().equals(getMatchedTypeId()); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/WildcardDataMatcher.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/ItemTarget.java similarity index 74% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/WildcardDataMatcher.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/ItemTarget.java index 21a4a140..e04dbb88 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/WildcardDataMatcher.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/ItemTarget.java @@ -19,22 +19,24 @@ package com.sk89q.worldguard.blacklist.target; -public class WildcardDataMatcher implements TargetMatcher { +import com.sk89q.worldedit.world.item.ItemType; - private final int typeId; +public class ItemTarget implements Target { - public WildcardDataMatcher(int typeId) { - this.typeId = typeId; + private ItemType type; + + public ItemTarget(ItemType type) { + this.type = type; } @Override - public int getMatchedTypeId() { - return typeId; + public String getTypeId() { + return type.getId(); } @Override - public boolean test(Target target) { - return target.getTypeId() == typeId; + public String getFriendlyName() { + return type.getName(); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/RangeMask.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/RangeMask.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/RangeMask.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/RangeMask.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/Target.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/Target.java similarity index 90% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/Target.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/Target.java index dd6438fa..f26a8cc5 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/Target.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/Target.java @@ -29,14 +29,7 @@ public interface Target { * * @return the type ID */ - int getTypeId(); - - /** - * Get the data value. - * - * @return the data value - */ - short getData(); + String getTypeId(); /** * Get a friendly name to be printed. diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcher.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcher.java similarity index 97% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcher.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcher.java index 08ef4772..9694e086 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcher.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcher.java @@ -29,7 +29,7 @@ public interface TargetMatcher { * * @return the type ID */ - int getMatchedTypeId(); + String getMatchedTypeId(); /** * Return whether the given target is matched by this matcher. diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParseException.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParseException.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParseException.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParseException.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/MaterialTarget.java b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParser.java similarity index 58% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/MaterialTarget.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParser.java index 8797aaa2..b568a475 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/MaterialTarget.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParser.java @@ -19,36 +19,22 @@ package com.sk89q.worldguard.blacklist.target; -import com.sk89q.worldedit.blocks.ItemType; +import com.sk89q.worldedit.world.item.ItemType; +import com.sk89q.worldedit.world.item.ItemTypes; -public class MaterialTarget implements Target { +public class TargetMatcherParser { - private int id; - private short data; - - public MaterialTarget(int id, short data) { - this.id = id; - this.data = data; + public TargetMatcher fromInput(String input) throws TargetMatcherParseException { + return new ItemMatcher(parseType(input)); } - @Override - public int getTypeId() { - return id; - } + private ItemType parseType(String input) throws TargetMatcherParseException { + input = input.trim(); - @Override - public short getData() { - return data; - } - - @Override - public String getFriendlyName() { - ItemType type = ItemType.fromID(id); - if (type != null) { - return type.getName() + " (#" + id + ":" + data + ")"; - } else { - return "#" + id + ":" + data; + ItemType itemType = ItemTypes.get(input); + if (itemType == null) { + throw new TargetMatcherParseException("Unknown block or item name: " + input); } + return itemType; } - } diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/config/ConfigurationManager.java b/worldguard-core/src/main/java/com/sk89q/worldguard/config/ConfigurationManager.java new file mode 100644 index 00000000..d2c1159b --- /dev/null +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/config/ConfigurationManager.java @@ -0,0 +1,171 @@ +/* + * WorldGuard, a suite of tools for Minecraft + * Copyright (C) sk89q + * Copyright (C) WorldGuard team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldguard.config; + +import com.sk89q.worldedit.world.World; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.protection.managers.storage.DriverType; +import com.sk89q.worldguard.protection.managers.storage.RegionDriver; +import com.sk89q.worldguard.session.handler.WaterBreathing; +import com.sk89q.worldguard.util.report.Unreported; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Logger; + +/** + * Represents the global configuration and also delegates configuration + * for individual worlds. + * + * @author sk89q + * @author Michael + */ +public abstract class ConfigurationManager { + + protected static final Logger log = Logger.getLogger(ConfigurationManager.class.getCanonicalName()); + + static final String CONFIG_HEADER = "#\r\n" + + "# WorldGuard's main configuration file\r\n" + + "#\r\n" + + "# This is the global configuration file. Anything placed into here will\r\n" + + "# be applied to all worlds. However, each world has its own configuration\r\n" + + "# file to allow you to replace most settings in here for that world only.\r\n" + + "#\r\n" + + "# About editing this file:\r\n" + + "# - DO NOT USE TABS. You MUST use spaces or Bukkit will complain. If\r\n" + + "# you use an editor like Notepad++ (recommended for Windows users), you\r\n" + + "# must configure it to \"replace tabs with spaces.\" In Notepad++, this can\r\n" + + "# be changed in Settings > Preferences > Language Menu.\r\n" + + "# - Don't get rid of the indents. They are indented so some entries are\r\n" + + "# in categories (like \"enforce-single-session\" is in the \"protection\"\r\n" + + "# category.\r\n" + + "# - If you want to check the format of this file before putting it\r\n" + + "# into WorldGuard, paste it into http://yaml-online-parser.appspot.com/\r\n" + + "# and see if it gives \"ERROR:\".\r\n" + + "# - Lines starting with # are comments and so they are ignored.\r\n" + + "#\r\n"; + + private boolean hasCommandBookGodMode = false; + + public boolean useRegionsCreatureSpawnEvent; + public boolean activityHaltToggle = false; + public boolean useGodPermission; + public boolean useGodGroup; + public boolean useAmphibiousGroup; + public boolean usePlayerMove; + public boolean usePlayerTeleports; + public boolean deopOnJoin; + public boolean blockInGameOp; + public boolean migrateRegionsToUuid; + public boolean keepUnresolvedNames; + + @Unreported public Map hostKeys = new HashMap<>(); + public boolean hostKeysAllowFMLClients; + + /** + * Region Storage Configuration method, and config values + */ + @Unreported public RegionDriver selectedRegionStoreDriver; + @Unreported public Map regionStoreDriverMap; + + /** + * Get the folder for storing data files and configuration. + * + * @return the data folder + */ + public abstract File getDataFolder(); + + /** + * Get the folder for storing data files and configuration for each + * world. + * + * @return the data folder + */ + public File getWorldsDataFolder() { + return new File(getDataFolder(), "worlds"); + } + + /** + * Load the configuration. + */ + public abstract void load(); + + /** + * Unload the configuration. + */ + public abstract void unload(); + + /** + * Get the configuration for a world. + * + * @param world The world to get the configuration for + * @return {@code world}'s configuration + */ + public abstract WorldConfiguration get(World world); + + public abstract void disableUuidMigration(); + + /** + * Check to see if god mode is enabled for a player. + * + * @param player The player to check + * @return Whether the player has godmode through WorldGuard or CommandBook + */ + public boolean hasGodMode(LocalPlayer player) { + return WorldGuard.getInstance().getPlatform().getSessionManager().get(player).isInvincible(player); + } + + /** + * Enable amphibious mode for a player. + * + * @param player The player to enable amphibious mode for + */ + public void enableAmphibiousMode(LocalPlayer player) { + WaterBreathing handler = WorldGuard.getInstance().getPlatform().getSessionManager().get(player).getHandler(WaterBreathing.class); + if (handler != null) { + handler.setWaterBreathing(true); + } + } + + /** + * Disable amphibious mode for a player. + * + * @param player The player to disable amphibious mode for + */ + public void disableAmphibiousMode(LocalPlayer player) { + WaterBreathing handler = WorldGuard.getInstance().getPlatform().getSessionManager().get(player).getHandler(WaterBreathing.class); + if (handler != null) { + handler.setWaterBreathing(false); + } + } + + /** + * Check to see if amphibious mode is enabled for a player. + * + * @param player The player to check + * @return Whether {@code player} has amphibious mode + */ + public boolean hasAmphibiousMode(LocalPlayer player) { + WaterBreathing handler = WorldGuard.getInstance().getPlatform().getSessionManager().get(player).getHandler(WaterBreathing.class); + return handler != null && handler.hasWaterBreathing(); + } +} diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java b/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java new file mode 100644 index 00000000..1873f0a3 --- /dev/null +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java @@ -0,0 +1,69 @@ +/* + * WorldGuard, a suite of tools for Minecraft + * Copyright (C) sk89q + * Copyright (C) WorldGuard team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldguard.config; + +import com.sk89q.worldguard.blacklist.Blacklist; +import com.sk89q.worldguard.util.report.Unreported; + +import java.io.File; +import java.util.logging.Logger; + +/** + * Holds the configuration for individual worlds. + * + * @author sk89q + * @author Michael + */ +public abstract class WorldConfiguration { + + public static final Logger log = Logger.getLogger(WorldConfiguration.class.getCanonicalName()); + + public static final String CONFIG_HEADER = "#\r\n" + + "# WorldGuard's world configuration file\r\n" + + "#\r\n" + + "# This is a world configuration file. Anything placed into here will only\r\n" + + "# affect this world. If you don't put anything in this file, then the\r\n" + + "# settings will be inherited from the main configuration file.\r\n" + + "#\r\n" + + "# If you see {} below, that means that there are NO entries in this file.\r\n" + + "# Remove the {} and add your own entries.\r\n" + + "#\r\n"; + + @Unreported private String worldName; + protected File blacklistFile; + + @Unreported protected Blacklist blacklist; + + public boolean boundedLocationFlags; + public boolean useRegions; + + /** + * Load the configuration. + */ + public abstract void loadConfiguration(); + + public Blacklist getBlacklist() { + return this.blacklist; + } + + public String getWorldName() { + return this.worldName; + } +} diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/config/YamlConfigurationManager.java b/worldguard-core/src/main/java/com/sk89q/worldguard/config/YamlConfigurationManager.java new file mode 100644 index 00000000..8588fef4 --- /dev/null +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/config/YamlConfigurationManager.java @@ -0,0 +1,120 @@ +/* + * WorldGuard, a suite of tools for Minecraft + * Copyright (C) sk89q + * Copyright (C) WorldGuard team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldguard.config; + +import com.google.common.collect.ImmutableMap; +import com.sk89q.util.yaml.YAMLFormat; +import com.sk89q.util.yaml.YAMLProcessor; +import com.sk89q.worldguard.protection.managers.storage.DriverType; +import com.sk89q.worldguard.protection.managers.storage.RegionDriver; +import com.sk89q.worldguard.protection.managers.storage.file.DirectoryYamlDriver; +import com.sk89q.worldguard.protection.managers.storage.sql.SQLDriver; +import com.sk89q.worldguard.util.report.Unreported; +import com.sk89q.worldguard.util.sql.DataSourceConfig; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public abstract class YamlConfigurationManager extends ConfigurationManager { + + @Unreported private YAMLProcessor config; + + public abstract void copyDefaults(); + + @Override + public void load() { + copyDefaults(); + + config = new YAMLProcessor(new File(getDataFolder(), "config.yml"), true, YAMLFormat.EXTENDED); + try { + config.load(); + } catch (IOException e) { + log.severe("Error reading configuration for global config: "); + e.printStackTrace(); + } + + config.removeProperty("suppress-tick-sync-warnings"); + migrateRegionsToUuid = config.getBoolean("regions.uuid-migration.perform-on-next-start", true); + keepUnresolvedNames = config.getBoolean("regions.uuid-migration.keep-names-that-lack-uuids", true); + useRegionsCreatureSpawnEvent = config.getBoolean("regions.use-creature-spawn-event", true); + useGodPermission = config.getBoolean("auto-invincible", config.getBoolean("auto-invincible-permission", false)); + useGodGroup = config.getBoolean("auto-invincible-group", false); + useAmphibiousGroup = config.getBoolean("auto-no-drowning-group", false); + config.removeProperty("auto-invincible-permission"); + usePlayerMove = config.getBoolean("use-player-move-event", true); + usePlayerTeleports = config.getBoolean("use-player-teleports", true); + + deopOnJoin = config.getBoolean("security.deop-everyone-on-join", false); + blockInGameOp = config.getBoolean("security.block-in-game-op-command", false); + + hostKeys = new HashMap<>(); + Object hostKeysRaw = config.getProperty("host-keys"); + if (!(hostKeysRaw instanceof Map)) { + config.setProperty("host-keys", new HashMap()); + } else { + for (Map.Entry entry : ((Map) hostKeysRaw).entrySet()) { + String key = String.valueOf(entry.getKey()); + String value = String.valueOf(entry.getValue()); + hostKeys.put(key.toLowerCase(), value); + } + } + hostKeysAllowFMLClients = config.getBoolean("security.host-keys-allow-forge-clients", false); + + // ==================================================================== + // Region store drivers + // ==================================================================== + + boolean useSqlDatabase = config.getBoolean("regions.sql.use", false); + String sqlDsn = config.getString("regions.sql.dsn", "jdbc:mysql://localhost/worldguard"); + String sqlUsername = config.getString("regions.sql.username", "worldguard"); + String sqlPassword = config.getString("regions.sql.password", "worldguard"); + String sqlTablePrefix = config.getString("regions.sql.table-prefix", ""); + + DataSourceConfig dataSourceConfig = new DataSourceConfig(sqlDsn, sqlUsername, sqlPassword, sqlTablePrefix); + SQLDriver sqlDriver = new SQLDriver(dataSourceConfig); + DirectoryYamlDriver yamlDriver = new DirectoryYamlDriver(getWorldsDataFolder(), "regions.yml"); + + this.regionStoreDriverMap = ImmutableMap.builder() + .put(DriverType.MYSQL, sqlDriver) + .put(DriverType.YAML, yamlDriver) + .build(); + this.selectedRegionStoreDriver = useSqlDatabase ? sqlDriver : yamlDriver; + + postLoad(); + + config.setHeader(CONFIG_HEADER); + } + + public void postLoad() {} + + public YAMLProcessor getConfig() { + return config; + } + + @Override + public void disableUuidMigration() { + config.setProperty("regions.uuid-migration.perform-on-next-start", false); + if (!config.save()) { + log.severe("Error saving configuration!"); + } + } +} diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/config/YamlWorldConfiguration.java b/worldguard-core/src/main/java/com/sk89q/worldguard/config/YamlWorldConfiguration.java new file mode 100644 index 00000000..7fde19f4 --- /dev/null +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/config/YamlWorldConfiguration.java @@ -0,0 +1,125 @@ +/* + * WorldGuard, a suite of tools for Minecraft + * Copyright (C) sk89q + * Copyright (C) WorldGuard team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldguard.config; + +import com.sk89q.util.yaml.YAMLProcessor; +import com.sk89q.worldguard.util.report.Unreported; + +import java.util.ArrayList; +import java.util.List; + +public abstract class YamlWorldConfiguration extends WorldConfiguration { + + @Unreported private YAMLProcessor parentConfig; + @Unreported private YAMLProcessor config; + + public boolean getBoolean(String node, boolean def) { + boolean val = parentConfig.getBoolean(node, def); + + if (config.getProperty(node) != null) { + return config.getBoolean(node, def); + } else { + return val; + } + } + + public String getString(String node, String def) { + String val = parentConfig.getString(node, def); + + if (config.getProperty(node) != null) { + return config.getString(node, def); + } else { + return val; + } + } + + public int getInt(String node, int def) { + int val = parentConfig.getInt(node, def); + + if (config.getProperty(node) != null) { + return config.getInt(node, def); + } else { + return val; + } + } + + @SuppressWarnings("unused") + private double getDouble(String node, double def) { + double val = parentConfig.getDouble(node, def); + + if (config.getProperty(node) != null) { + return config.getDouble(node, def); + } else { + return val; + } + } + + public List getIntList(String node, List def) { + List res = parentConfig.getIntList(node, def); + + if (res == null || res.size() == 0) { + parentConfig.setProperty(node, new ArrayList()); + } + + if (config.getProperty(node) != null) { + res = config.getIntList(node, def); + } + + return res; + } + + public List getStringList(String node, List def) { + List res = parentConfig.getStringList(node, def); + + if (res == null || res.size() == 0) { + parentConfig.setProperty(node, new ArrayList()); + } + + if (config.getProperty(node) != null) { + res = config.getStringList(node, def); + } + + return res; + } + + public List getKeys(String node) { + List res = parentConfig.getKeys(node); + + if (res == null || res.size() == 0) { + res = config.getKeys(node); + } + if (res == null) { + res = new ArrayList(); + } + + return res; + } + + public Object getProperty(String node) { + Object res = parentConfig.getProperty(node); + + if (config.getProperty(node) != null) { + res = config.getProperty(node); + } + + return res; + } + +} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/Association.java b/worldguard-core/src/main/java/com/sk89q/worldguard/domains/Association.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/Association.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/domains/Association.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/DefaultDomain.java b/worldguard-core/src/main/java/com/sk89q/worldguard/domains/DefaultDomain.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/DefaultDomain.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/domains/DefaultDomain.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/Domain.java b/worldguard-core/src/main/java/com/sk89q/worldguard/domains/Domain.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/Domain.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/domains/Domain.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/GroupDomain.java b/worldguard-core/src/main/java/com/sk89q/worldguard/domains/GroupDomain.java similarity index 98% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/GroupDomain.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/domains/GroupDomain.java index d9a0386b..83d6d9c3 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/GroupDomain.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/domains/GroupDomain.java @@ -34,7 +34,7 @@ */ public class GroupDomain implements Domain, ChangeTracked { - private final Set groups = new CopyOnWriteArraySet(); + private final Set groups = new CopyOnWriteArraySet<>(); private boolean dirty = true; /** diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/PlayerDomain.java b/worldguard-core/src/main/java/com/sk89q/worldguard/domains/PlayerDomain.java similarity index 98% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/PlayerDomain.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/domains/PlayerDomain.java index 58e589ea..3d82a66d 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/PlayerDomain.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/domains/PlayerDomain.java @@ -34,8 +34,8 @@ */ public class PlayerDomain implements Domain, ChangeTracked { - private final Set uniqueIds = new CopyOnWriteArraySet(); - private final Set names = new CopyOnWriteArraySet(); + private final Set uniqueIds = new CopyOnWriteArraySet<>(); + private final Set names = new CopyOnWriteArraySet<>(); private boolean dirty = true; /** diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/internal/PermissionModel.java b/worldguard-core/src/main/java/com/sk89q/worldguard/internal/PermissionModel.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/internal/PermissionModel.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/internal/PermissionModel.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/permission/AbstractPermissionModel.java b/worldguard-core/src/main/java/com/sk89q/worldguard/internal/permission/AbstractPermissionModel.java similarity index 62% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/permission/AbstractPermissionModel.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/internal/permission/AbstractPermissionModel.java index ff7538f3..65619470 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/permission/AbstractPermissionModel.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/internal/permission/AbstractPermissionModel.java @@ -17,32 +17,25 @@ * along with this program. If not, see . */ -package com.sk89q.worldguard.bukkit.permission; +package com.sk89q.worldguard.internal.permission; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import org.bukkit.command.CommandSender; +import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldguard.internal.PermissionModel; -abstract class AbstractPermissionModel implements PermissionModel { +public abstract class AbstractPermissionModel implements PermissionModel { - private final WorldGuardPlugin plugin; - private final CommandSender sender; + private final Actor sender; - public AbstractPermissionModel(WorldGuardPlugin plugin, CommandSender sender) { - this.plugin = plugin; + public AbstractPermissionModel(Actor sender) { this.sender = sender; } - - protected WorldGuardPlugin getPlugin() { - return plugin; - } - public CommandSender getSender() { + public Actor getSender() { return sender; } protected boolean hasPluginPermission(String permission) { - return plugin.hasPermission(getSender(), "worldguard." + permission); + return getSender().hasPermission("worldguard." + permission); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/permission/RegionPermissionModel.java b/worldguard-core/src/main/java/com/sk89q/worldguard/internal/permission/RegionPermissionModel.java similarity index 91% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/permission/RegionPermissionModel.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/internal/permission/RegionPermissionModel.java index da017a04..6dfee460 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/permission/RegionPermissionModel.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/internal/permission/RegionPermissionModel.java @@ -17,15 +17,14 @@ * along with this program. If not, see . */ -package com.sk89q.worldguard.bukkit.permission; +package com.sk89q.worldguard.internal.permission; +import com.sk89q.worldedit.extension.platform.Actor; +import com.sk89q.worldedit.world.World; import com.sk89q.worldguard.LocalPlayer; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.internal.permission.AbstractPermissionModel; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import org.bukkit.World; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import javax.annotation.Nullable; @@ -34,8 +33,8 @@ */ public class RegionPermissionModel extends AbstractPermissionModel { - public RegionPermissionModel(WorldGuardPlugin plugin, CommandSender sender) { - super(plugin, sender); + public RegionPermissionModel(Actor sender) { + super(sender); } public boolean mayIgnoreRegionProtection(World world) { @@ -171,18 +170,17 @@ public boolean mayRemoveOwners(ProtectedRegion region) { * @param region the region */ private boolean hasPatternPermission(String perm, ProtectedRegion region) { - if (!(getSender() instanceof Player)) { + if (!(getSender() instanceof LocalPlayer)) { return true; // Non-players (i.e. console, command blocks, etc.) have full power } - LocalPlayer localPlayer = getPlugin().wrapPlayer((Player) getSender()); String idLower = region.getId().toLowerCase(); String effectivePerm; - if (region.isOwner(localPlayer)) { + if (region.isOwner((LocalPlayer) getSender())) { return hasPluginPermission("region." + perm + ".own." + idLower) || hasPluginPermission("region." + perm + ".member." + idLower); - } else if (region.isMember(localPlayer)) { + } else if (region.isMember((LocalPlayer) getSender())) { return hasPluginPermission("region." + perm + ".member." + idLower); } else { effectivePerm = "region." + perm + "." + idLower; diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/internal/platform/WorldGuardPlatform.java b/worldguard-core/src/main/java/com/sk89q/worldguard/internal/platform/WorldGuardPlatform.java new file mode 100644 index 00000000..30dfbf37 --- /dev/null +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/internal/platform/WorldGuardPlatform.java @@ -0,0 +1,117 @@ +/* + * WorldGuard, a suite of tools for Minecraft + * Copyright (C) sk89q + * Copyright (C) WorldGuard team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldguard.internal.platform; + +import com.sk89q.worldedit.extension.platform.Actor; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldedit.world.gamemode.GameMode; +import com.sk89q.worldguard.config.ConfigurationManager; +import com.sk89q.worldguard.protection.flags.FlagContext; +import com.sk89q.worldguard.protection.regions.RegionContainer; +import com.sk89q.worldguard.session.SessionManager; + +/** + * A platform for implementing. + */ +public interface WorldGuardPlatform { + + /** + * Notifies the platform when a flag context is created. + * + * @param flagContextBuilder The flag context + */ + void notifyFlagContextCreate(FlagContext.FlagContextBuilder flagContextBuilder); + + /** + * Get the global ConfigurationManager. + * Use this to access global configuration values and per-world configuration values. + * + * @return The global ConfigurationManager + */ + ConfigurationManager getGlobalStateManager(); + + /** + * Gets a world by name, if possible. + * + * @param worldName The name + * @return The world + */ + World getWorldByName(String worldName); + + /** + * Replaces colour macros. + * + * @param string The string + * @return The replaced string + */ + String replaceColorMacros(String string); + + /** + * Replace macros in the text. + * + * The macros replaced are as follows: + * %name%: The name of {@code sender}. + * %id%: The unique name of the sender. + * %online%: The number of players currently online on the server + * If {@code sender} is a Player: + * %world%: The name of the world {@code sender} is located in + * %health%: The health of {@code sender}. + * + * @param sender The sender to check + * @param message The message to replace macros in + * @return The message with macros replaced + */ + String replaceMacros(Actor sender, String message); + + /** + * Gets the session manager. + * + * @return The session manager + */ + SessionManager getSessionManager(); + + /** + * Notifies all with the worldguard.notify permission. + * This will check both superperms and WEPIF, + * but makes sure WEPIF checks don't result in duplicate notifications + * + * @param message The notification to broadcast + */ + void broadcastNotification(String message); + + /** + * Unload the platform + */ + void unload(); + + /** + * Gets a RegionContainer. + * + * @return The region container + */ + RegionContainer getRegionContainer(); + + /** + * Gets the servers default game mode. + * + * @return The default game mode + */ + GameMode getDefaultGameMode(); +} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/internal/util/sql/StatementUtils.java b/worldguard-core/src/main/java/com/sk89q/worldguard/internal/util/sql/StatementUtils.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/internal/util/sql/StatementUtils.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/internal/util/sql/StatementUtils.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/AbstractRegionSet.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/AbstractRegionSet.java similarity index 93% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/AbstractRegionSet.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/AbstractRegionSet.java index 848c90c3..af347032 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/AbstractRegionSet.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/AbstractRegionSet.java @@ -21,7 +21,7 @@ import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.association.RegionAssociable; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.StateFlag.State; @@ -37,7 +37,7 @@ public abstract class AbstractRegionSet implements ApplicableRegionSet { @Deprecated public boolean canBuild(LocalPlayer player) { checkNotNull(player); - return test(queryState(player, DefaultFlag.BUILD)); + return test(queryState(player, Flags.BUILD)); } @Override @@ -65,7 +65,7 @@ public State queryState(@Nullable RegionAssociable subject, StateFlag... flags) public boolean allows(StateFlag flag) { checkNotNull(flag); - if (flag == DefaultFlag.BUILD) { + if (flag == Flags.BUILD) { throw new IllegalArgumentException("Can't use build flag with allows()"); } @@ -77,7 +77,7 @@ public boolean allows(StateFlag flag) { public boolean allows(StateFlag flag, @Nullable LocalPlayer player) { checkNotNull(flag); - if (flag == DefaultFlag.BUILD) { + if (flag == Flags.BUILD) { throw new IllegalArgumentException("Can't use build flag with allows()"); } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/ApplicableRegionSet.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/ApplicableRegionSet.java similarity index 91% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/ApplicableRegionSet.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/ApplicableRegionSet.java index eed54aef..ab7c7b01 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/ApplicableRegionSet.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/ApplicableRegionSet.java @@ -20,9 +20,8 @@ package com.sk89q.worldguard.protection; import com.sk89q.worldguard.LocalPlayer; -import com.sk89q.worldguard.bukkit.RegionQuery; import com.sk89q.worldguard.protection.association.RegionAssociable; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.RegionGroup; import com.sk89q.worldguard.protection.flags.StateFlag; @@ -52,7 +51,7 @@ public interface ApplicableRegionSet extends Iterable { *

* *

Be sure to check the value of this flag if an instance of this - * interface is being retrieved from {@link RegionQuery} as it may + * interface is being retrieved from RegionQuery as it may * return an instance of {@link PermissiveRegionSet} or * {@link FailedLoadRegionSet}, among other possibilities.

* @@ -62,7 +61,7 @@ public interface ApplicableRegionSet extends Iterable { boolean isVirtual(); /** - * Tests whether the {@link DefaultFlag#BUILD} flag or membership + * Tests whether the {@link Flags#BUILD} flag or membership * requirements permit the given player. * * @param player the player to check @@ -78,9 +77,9 @@ public interface ApplicableRegionSet extends Iterable { * *

{@code subject} can be non-null to satisfy region group requirements, * otherwise it will be assumed that the caller that is not a member of any - * regions. (Flags on a region can be changed so that they only apply + * regions. (FlagUtil on a region can be changed so that they only apply * to certain users.) The subject argument is required if the - * {@link DefaultFlag#BUILD} flag is in the list of flags.

+ * {@link Flags#BUILD} flag is in the list of flags.

* * @param subject an optional subject, which would be used to determine the region groups that apply * @param flags a list of flags to check @@ -96,9 +95,9 @@ public interface ApplicableRegionSet extends Iterable { * *

{@code subject} can be non-null to satisfy region group requirements, * otherwise it will be assumed that the caller that is not a member of any - * regions. (Flags on a region can be changed so that they only apply + * regions. (FlagUtil on a region can be changed so that they only apply * to certain users.) The subject argument is required if the - * {@link DefaultFlag#BUILD} flag is in the list of flags.

+ * {@link Flags#BUILD} flag is in the list of flags.

* * @param subject an optional subject, which would be used to determine the region groups that apply * @param flags a list of flags to check @@ -121,9 +120,9 @@ public interface ApplicableRegionSet extends Iterable { * *

{@code subject} can be non-null to satisfy region group requirements, * otherwise it will be assumed that the caller that is not a member of any - * regions. (Flags on a region can be changed so that they only apply + * regions. (FlagUtil on a region can be changed so that they only apply * to certain users.) The subject argument is required if the - * {@link DefaultFlag#BUILD} flag is the flag being queried.

+ * {@link Flags#BUILD} flag is the flag being queried.

* * @param subject an optional subject, which would be used to determine the region group to apply * @param flag the flag @@ -139,9 +138,9 @@ public interface ApplicableRegionSet extends Iterable { * *

{@code subject} can be non-null to satisfy region group requirements, * otherwise it will be assumed that the caller that is not a member of any - * regions. (Flags on a region can be changed so that they only apply + * regions. (FlagUtil on a region can be changed so that they only apply * to certain users.) The subject argument is required if the - * {@link DefaultFlag#BUILD} flag is the flag being queried.

+ * {@link Flags#BUILD} flag is the flag being queried.

* * @param subject an optional subject, which would be used to determine the region group to apply * @param flag the flag diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/FailedLoadRegionSet.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/FailedLoadRegionSet.java similarity index 88% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/FailedLoadRegionSet.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/FailedLoadRegionSet.java index f0f5b307..452c516a 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/FailedLoadRegionSet.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/FailedLoadRegionSet.java @@ -22,11 +22,10 @@ import com.google.common.collect.ImmutableList; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.association.RegionAssociable; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.StateFlag.State; import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import org.bukkit.ChatColor; import javax.annotation.Nullable; import java.util.Collection; @@ -42,7 +41,7 @@ public class FailedLoadRegionSet extends AbstractRegionSet { private static final FailedLoadRegionSet INSTANCE = new FailedLoadRegionSet(); - private final String denyMessage = ChatColor.RED + "Region data for WorldGuard failed to load for this world, so " + + private final String denyMessage = "Region data for WorldGuard failed to load for this world, so " + "everything has been protected as a precaution. Please inform a server administrator."; private final Collection denyMessageCollection = ImmutableList.of(denyMessage); @@ -58,9 +57,9 @@ public boolean isVirtual() { @Nullable @Override public V queryValue(@Nullable RegionAssociable subject, Flag flag) { - if (flag == DefaultFlag.BUILD) { + if (flag == Flags.BUILD) { return (V) State.DENY; - } else if (flag == DefaultFlag.DENY_MESSAGE) { + } else if (flag == Flags.DENY_MESSAGE) { return (V) denyMessage; } return flag.getDefault(); @@ -69,9 +68,9 @@ public V queryValue(@Nullable RegionAssociable subject, Flag flag) { @SuppressWarnings("unchecked") @Override public Collection queryAllValues(@Nullable RegionAssociable subject, Flag flag) { - if (flag == DefaultFlag.BUILD) { + if (flag == Flags.BUILD) { return (Collection) ImmutableList.of(State.DENY); - } else if (flag == DefaultFlag.DENY_MESSAGE) { + } else if (flag == Flags.DENY_MESSAGE) { return (Collection) denyMessageCollection; } V fallback = flag.getDefault(); diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/FlagValueCalculator.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/FlagValueCalculator.java similarity index 97% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/FlagValueCalculator.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/FlagValueCalculator.java index a3eca128..39b3cad4 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/FlagValueCalculator.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/FlagValueCalculator.java @@ -24,7 +24,7 @@ import com.google.common.collect.Sets; import com.sk89q.worldguard.domains.Association; import com.sk89q.worldguard.protection.association.RegionAssociable; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.RegionGroup; import com.sk89q.worldguard.protection.flags.StateFlag; @@ -90,7 +90,7 @@ private Iterable getApplicable() { * the region is not a member of all regions. * *

A region is "counted" if it doesn't have the - * {@link DefaultFlag#PASSTHROUGH} flag set to {@code ALLOW}. (The + * {@link Flags#PASSTHROUGH} flag set to {@code ALLOW}. (The * explicit purpose of the PASSTHROUGH flag is to have the region * be skipped over in this check.)

* @@ -118,7 +118,7 @@ public Result getMembership(RegionAssociable subject) { } // If PASSTHROUGH is set, ignore this region - if (getEffectiveFlag(region, DefaultFlag.PASSTHROUGH, subject) == State.ALLOW) { + if (getEffectiveFlag(region, Flags.PASSTHROUGH, subject) == State.ALLOW) { continue; } @@ -306,7 +306,7 @@ private Collection queryAllValues(@Nullable RegionAssociable subject, Fla // The BUILD flag is implicitly set on every region where // PASSTHROUGH is not set to ALLOW if (priority != minimumPriority && flag.implicitlySetWithMembership() - && getEffectiveFlag(region, DefaultFlag.PASSTHROUGH, subject) != State.ALLOW) { + && getEffectiveFlag(region, Flags.PASSTHROUGH, subject) != State.ALLOW) { minimumPriority = getPriority(region); } } @@ -355,10 +355,10 @@ public int getPriority(final ProtectedRegion region) { @SuppressWarnings("unchecked") public V getEffectiveFlag(final ProtectedRegion region, Flag flag, @Nullable RegionAssociable subject) { if (region == globalRegion) { - if (flag == DefaultFlag.PASSTHROUGH) { + if (flag == Flags.PASSTHROUGH) { // Has members/owners -> the global region acts like // a regular region without PASSTHROUGH - if (region.hasMembersOrOwners() || region.getFlag(DefaultFlag.PASSTHROUGH) == State.DENY) { + if (region.hasMembersOrOwners() || region.getFlag(Flags.PASSTHROUGH) == State.DENY) { return null; } else { return (V) State.ALLOW; @@ -432,7 +432,7 @@ private void addParents(Set ignored, ProtectedRegion region) { public static enum Result { /** * Indicates that there are no regions or the only regions are - * ones with {@link DefaultFlag#PASSTHROUGH} enabled. + * ones with {@link Flags#PASSTHROUGH} enabled. */ NO_REGIONS, diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/PermissiveRegionSet.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/PermissiveRegionSet.java similarity index 95% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/PermissiveRegionSet.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/PermissiveRegionSet.java index 320a9499..91dccc05 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/PermissiveRegionSet.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/PermissiveRegionSet.java @@ -22,7 +22,7 @@ import com.google.common.collect.ImmutableList; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.association.RegionAssociable; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.StateFlag.State; import com.sk89q.worldguard.protection.regions.ProtectedRegion; @@ -53,7 +53,7 @@ public boolean isVirtual() { @Nullable @Override public V queryValue(@Nullable RegionAssociable subject, Flag flag) { - if (flag == DefaultFlag.BUILD) { + if (flag == Flags.BUILD) { return (V) State.DENY; } return flag.getDefault(); @@ -62,7 +62,7 @@ public V queryValue(@Nullable RegionAssociable subject, Flag flag) { @SuppressWarnings("unchecked") @Override public Collection queryAllValues(@Nullable RegionAssociable subject, Flag flag) { - if (flag == DefaultFlag.BUILD) { + if (flag == Flags.BUILD) { return (Collection) ImmutableList.of(State.DENY); } V fallback = flag.getDefault(); diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/RegionResultSet.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/RegionResultSet.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/RegionResultSet.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/RegionResultSet.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/association/Associables.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/association/Associables.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/association/Associables.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/association/Associables.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/association/ConstantAssociation.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/association/ConstantAssociation.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/association/ConstantAssociation.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/association/ConstantAssociation.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/association/RegionAssociable.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/association/RegionAssociable.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/association/RegionAssociable.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/association/RegionAssociable.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/association/RegionOverlapAssociation.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/association/RegionOverlapAssociation.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/association/RegionOverlapAssociation.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/association/RegionOverlapAssociation.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/BooleanFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/BooleanFlag.java similarity index 95% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/BooleanFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/BooleanFlag.java index d9ec0174..3d5145c9 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/BooleanFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/BooleanFlag.java @@ -19,10 +19,6 @@ package com.sk89q.worldguard.protection.flags; -import org.bukkit.command.CommandSender; - -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; - /** * A boolean flag. */ diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/BuildFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/BuildFlag.java similarity index 97% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/BuildFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/BuildFlag.java index 9f67825e..17398363 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/BuildFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/BuildFlag.java @@ -21,7 +21,7 @@ /** * A special implementation of the {@link StateFlag} for - * {@link DefaultFlag#BUILD}. + * {@link Flags#BUILD}. */ class BuildFlag extends StateFlag { diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/CommandStringFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/CommandStringFlag.java similarity index 94% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/CommandStringFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/CommandStringFlag.java index b945dfa5..dd3afc60 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/CommandStringFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/CommandStringFlag.java @@ -19,10 +19,6 @@ package com.sk89q.worldguard.protection.flags; -import org.bukkit.command.CommandSender; - -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; - /** * Stores a command/ */ diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/DoubleFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/DoubleFlag.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/DoubleFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/DoubleFlag.java diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/EntityTypeFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/EntityTypeFlag.java new file mode 100644 index 00000000..5e4c0e07 --- /dev/null +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/EntityTypeFlag.java @@ -0,0 +1,63 @@ +/* + * WorldGuard, a suite of tools for Minecraft + * Copyright (C) sk89q + * Copyright (C) WorldGuard team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldguard.protection.flags; + +import com.sk89q.worldedit.world.entity.EntityType; +import com.sk89q.worldedit.world.entity.EntityTypes; + +import javax.annotation.Nullable; + +/** + * Stores an entity type. + */ +public class EntityTypeFlag extends Flag { + + protected EntityTypeFlag(String name, @Nullable RegionGroup defaultGroup) { + super(name, defaultGroup); + } + + protected EntityTypeFlag(String name) { + super(name); + } + + @Override + public EntityType parseInput(FlagContext context) throws InvalidFlagFormat { + String input = context.getUserInput(); + input = input.trim(); + if (!input.startsWith("/")) { + input = "/" + input; + } + EntityType entityType = unmarshal(input); + if (entityType == null) { + throw new InvalidFlagFormat("Unknown entity type: " + input); + } + return entityType; + } + + @Override + public EntityType unmarshal(@Nullable Object o) { + return EntityTypes.get(String.valueOf(o)); + } + + @Override + public Object marshal(EntityType o) { + return o.getId(); + } +} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/EnumFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/EnumFlag.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/EnumFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/EnumFlag.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/Flag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flag.java similarity index 97% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/Flag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flag.java index 60801620..1cd145b9 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/Flag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flag.java @@ -19,15 +19,16 @@ package com.sk89q.worldguard.protection.flags; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.collect.Iterators; import com.sk89q.worldguard.protection.FlagValueCalculator; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; -import javax.annotation.Nullable; import java.util.Collection; import java.util.regex.Pattern; -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.Nullable; /** * A flag carries extra data on a region. @@ -126,10 +127,10 @@ public boolean hasConflictStrategy() { /** * Whether the flag implicitly has a value set as long as - * {@link DefaultFlag#PASSTHROUGH} is not set. + * {@link Flags#PASSTHROUGH} is not set. * *

This value is only changed, at least in WorldGuard, for the - * {@link DefaultFlag#BUILD} flag.

+ * {@link Flags#BUILD} flag.

* * @return Whether the flag is ignored */ @@ -142,7 +143,7 @@ public boolean implicitlySetWithMembership() { * from membership. * *

This value is only changed, at least in WorldGuard, for the - * {@link DefaultFlag#BUILD} flag.

+ * {@link Flags#BUILD} flag.

* * @return Whether membership is used */ @@ -155,7 +156,7 @@ public boolean usesMembershipAsDefault() { * {@link FlagValueCalculator}. * *

This value is only changed, at least in WorldGuard, for the - * {@link DefaultFlag#BUILD} flag.

+ * {@link Flags#BUILD} flag.

* * @return Whether a subject is required */ diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/FlagContext.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/FlagContext.java similarity index 82% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/FlagContext.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/FlagContext.java index 57dc1530..ba1becb2 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/FlagContext.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/FlagContext.java @@ -20,23 +20,22 @@ package com.sk89q.worldguard.protection.flags; import com.google.common.collect.Maps; -import com.sk89q.minecraft.util.commands.CommandException; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; +import com.sk89q.worldedit.extension.platform.Actor; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; + +import java.util.Map; import javax.annotation.Nullable; -import java.util.Map; public final class FlagContext { - private final CommandSender sender; + private final Actor sender; private final String input; private Map context; - private FlagContext(CommandSender sender, String input, Map values) { + private FlagContext(Actor sender, String input, Map values) { this.sender = sender; this.input = input; this.context = values; @@ -50,7 +49,7 @@ public void put(String name, Object value) { context.put(name, value); } - public CommandSender getSender() { + public Actor getSender() { return sender; } @@ -64,11 +63,11 @@ public String getUserInput() { * @return Player * @throws InvalidFlagFormat if the sender is not a player */ - public Player getPlayerSender() throws InvalidFlagFormat { - try { - return WorldGuardPlugin.inst().checkPlayer(sender); - } catch (CommandException e) { - throw new InvalidFlagFormat(e.getMessage()); + public LocalPlayer getPlayerSender() throws InvalidFlagFormat { + if (sender.isPlayer() && sender instanceof LocalPlayer) { + return (LocalPlayer) sender; + } else { + throw new InvalidFlagFormat("Not a player"); } } @@ -128,7 +127,7 @@ public Object get(String name, Object defaultValue) { * @param values map of values to override from the current FlagContext * @return a copy of this FlagContext */ - public FlagContext copyWith(@Nullable CommandSender commandSender, @Nullable String s, @Nullable Map values) { + public FlagContext copyWith(@Nullable Actor commandSender, @Nullable String s, @Nullable Map values) { Map map = Maps.newHashMap(); map.putAll(context); if (values != null) { @@ -138,11 +137,11 @@ public FlagContext copyWith(@Nullable CommandSender commandSender, @Nullable Str } public static class FlagContextBuilder { - private CommandSender sender; + private Actor sender; private String input; private Map map = Maps.newHashMap(); - public FlagContextBuilder setSender(CommandSender sender) { + public FlagContextBuilder setSender(Actor sender) { this.sender = sender; return this; } @@ -164,7 +163,7 @@ protected boolean tryAddToMap(String key, Object value) { } public FlagContext build() { - Bukkit.getServer().getPluginManager().callEvent(new FlagContextCreateEvent(this)); + WorldGuard.getInstance().getPlatform().notifyFlagContextCreate(this); return new FlagContext(sender, input, map); } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/FlagUtil.java similarity index 93% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/FlagUtil.java index 2ac64989..972a6ae0 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/FlagUtil.java @@ -28,11 +28,11 @@ import static com.google.common.base.Preconditions.checkNotNull; -public final class Flags { +public final class FlagUtil { - private static final Logger log = Logger.getLogger(Flags.class.getCanonicalName()); + private static final Logger log = Logger.getLogger(FlagUtil.class.getCanonicalName()); - private Flags() { + private FlagUtil() { } /** diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/DefaultFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java similarity index 75% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/DefaultFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java index fcb7a189..7490420f 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/DefaultFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java @@ -19,22 +19,25 @@ package com.sk89q.worldguard.protection.flags; +import com.sk89q.worldedit.util.formatting.ColorCodeBuilder; +import com.sk89q.worldedit.util.formatting.Style; +import com.sk89q.worldedit.util.formatting.StyledFragment; +import com.sk89q.worldedit.world.entity.EntityType; +import com.sk89q.worldedit.world.gamemode.GameMode; +import com.sk89q.worldedit.world.weather.WeatherType; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.protection.flags.registry.FlagConflictException; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.WeatherType; -import org.bukkit.entity.EntityType; -import java.util.Arrays; -import java.util.List; +import javax.annotation.Nullable; /** * The flags that are used in WorldGuard. */ -public final class DefaultFlag { +public final class Flags { // Overrides membership check - public static final StateFlag PASSTHROUGH = new StateFlag("passthrough", false); + public static final StateFlag PASSTHROUGH = register(new StateFlag("passthrough", false)); // This flag is unlike the others. It forces the checking of region membership public static final StateFlag BUILD = new BuildFlag("build", true); @@ -104,23 +107,26 @@ public final class DefaultFlag { public static final StateFlag ENTITY_ITEM_FRAME_DESTROY = new StateFlag("entity-item-frame-destroy", true); public static final StateFlag FALL_DAMAGE = new StateFlag("fall-damage", true); - // Flags that adjust behaviors that aren't state flags + // FlagUtil that adjust behaviors that aren't state flags public static final StringFlag DENY_MESSAGE = new StringFlag("deny-message", - "" + ChatColor.RED + ChatColor.BOLD + "Hey!" + ChatColor.GRAY + " Sorry, but you can't %what% here."); + ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.RED, Style.BOLD).append("Hey!")) + .append(new StyledFragment(Style.GRAY).append(" Sorry, but you can't %what% here.")))); public static final StringFlag ENTRY_DENY_MESSAGE = new StringFlag("entry-deny-message", - "" + ChatColor.RED + ChatColor.BOLD + "Hey!" + ChatColor.GRAY + " You are not permitted to enter this area."); + ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.RED, Style.BOLD).append("Hey!")) + .append(new StyledFragment(Style.GRAY).append(" You are not permitted to enter this area.")))); public static final StringFlag EXIT_DENY_MESSAGE = new StringFlag("exit-deny-message", - "" + ChatColor.RED + ChatColor.BOLD + "Hey!" + ChatColor.GRAY + " You are not permitted to leave this area."); + ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.RED, Style.BOLD).append("Hey!")) + .append(new StyledFragment(Style.GRAY).append(" You are not permitted to leave this area.")))); public static final BooleanFlag EXIT_OVERRIDE = new BooleanFlag("exit-override"); public static final StateFlag EXIT_VIA_TELEPORT = new StateFlag("exit-via-teleport", true); public static final StringFlag GREET_MESSAGE = new StringFlag("greeting"); public static final StringFlag FAREWELL_MESSAGE = new StringFlag("farewell"); public static final BooleanFlag NOTIFY_ENTER = new BooleanFlag("notify-enter"); public static final BooleanFlag NOTIFY_LEAVE = new BooleanFlag("notify-leave"); - public static final SetFlag DENY_SPAWN = new SetFlag("deny-spawn", new EntityTypeFlag(null)); - public static final EnumFlag GAME_MODE = new EnumFlag("game-mode", GameMode.class); + public static final SetFlag DENY_SPAWN = new SetFlag<>("deny-spawn", new EntityTypeFlag(null)); + public static final Flag GAME_MODE = new GameModeTypeFlag("game-mode"); public static final StringFlag TIME_LOCK = new StringFlag("time-lock"); - public static final EnumFlag WEATHER_LOCK = new EnumFlag("weather-lock", WeatherType.class); + public static final Flag WEATHER_LOCK = new WeatherTypeFlag("weather-lock"); public static final IntegerFlag HEAL_DELAY = new IntegerFlag("heal-delay"); public static final IntegerFlag HEAL_AMOUNT = new IntegerFlag("heal-amount"); public static final DoubleFlag MIN_HEAL = new DoubleFlag("heal-min-health"); @@ -133,8 +139,8 @@ public final class DefaultFlag { // public static final StringFlag MAX_PLAYERS_MESSAGE = new StringFlag("max-players-reject-message"); public static final LocationFlag TELE_LOC = new LocationFlag("teleport", RegionGroup.MEMBERS); public static final LocationFlag SPAWN_LOC = new LocationFlag("spawn", RegionGroup.MEMBERS); - public static final SetFlag BLOCKED_CMDS = new SetFlag("blocked-cmds", new CommandStringFlag(null)); - public static final SetFlag ALLOWED_CMDS = new SetFlag("allowed-cmds", new CommandStringFlag(null)); + public static final SetFlag BLOCKED_CMDS = register(new SetFlag<>("blocked-cmds", new CommandStringFlag(null))); + public static final SetFlag ALLOWED_CMDS = register(new SetFlag<>("allowed-cmds", new CommandStringFlag(null))); // these 3 are not used by worldguard and should be re-implemented in plugins that may use them using custom flag api @Deprecated @@ -144,45 +150,16 @@ public final class DefaultFlag { @Deprecated public static final DoubleFlag PRICE = new DoubleFlag("price"); - public static final Flag[] flagsList = new Flag[] { - PASSTHROUGH, BUILD, BLOCK_BREAK, BLOCK_PLACE, PVP, CHEST_ACCESS, PISTONS, - TNT, LIGHTER, RIDE, USE, INTERACT, PLACE_VEHICLE, DESTROY_VEHICLE, DAMAGE_ANIMALS, SLEEP, - MOB_DAMAGE, MOB_SPAWNING, DENY_SPAWN, INVINCIBILITY, EXP_DROPS, FIREWORK_DAMAGE, WITHER_DAMAGE, - CREEPER_EXPLOSION, OTHER_EXPLOSION, ENDERDRAGON_BLOCK_DAMAGE, GHAST_FIREBALL, ENDER_BUILD, - DENY_MESSAGE, ENTRY_DENY_MESSAGE, EXIT_DENY_MESSAGE, EXIT_OVERRIDE, EXIT_VIA_TELEPORT, - GREET_MESSAGE, FAREWELL_MESSAGE, NOTIFY_ENTER, NOTIFY_LEAVE, - EXIT, ENTRY, LIGHTNING, ENTITY_PAINTING_DESTROY, ENDERPEARL, CHORUS_TELEPORT, - ENTITY_ITEM_FRAME_DESTROY, FALL_DAMAGE, ITEM_PICKUP, ITEM_DROP, /*MAX_PLAYERS, MAX_PLAYERS_MESSAGE,*/ - HEAL_AMOUNT, HEAL_DELAY, MIN_HEAL, MAX_HEAL, - FEED_DELAY, FEED_AMOUNT, MIN_FOOD, MAX_FOOD, - SNOW_FALL, SNOW_MELT, ICE_FORM, ICE_MELT, SOIL_DRY, GAME_MODE, - MUSHROOMS, LEAF_DECAY, GRASS_SPREAD, MYCELIUM_SPREAD, VINE_GROWTH, - SEND_CHAT, RECEIVE_CHAT, FIRE_SPREAD, LAVA_FIRE, LAVA_FLOW, WATER_FLOW, - TELE_LOC, SPAWN_LOC, POTION_SPLASH, TIME_LOCK, WEATHER_LOCK, - BLOCKED_CMDS, ALLOWED_CMDS, PRICE, BUYABLE, ENABLE_SHOP - }; - - private DefaultFlag() { + private Flags() { } - /** - * Get a list of default flags. - * - * @deprecated Use {@link FlagRegistry} - * @return An array of flags - */ - @Deprecated - public static Flag[] getFlags() { - return flagsList; + public static T register(final T flag) throws FlagConflictException { + WorldGuard.getInstance().getFlagRegistry().register(flag); + return flag; } - /** - * Get a list of default flags. - * - * @return An array of flags - */ - public static List> getDefaultFlags() { - return Arrays.asList(flagsList); + public static @Nullable Flag get(final String id) { + return WorldGuard.getInstance().getFlagRegistry().get(id); } /** diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/GameModeTypeFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/GameModeTypeFlag.java new file mode 100644 index 00000000..67122de5 --- /dev/null +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/GameModeTypeFlag.java @@ -0,0 +1,60 @@ +/* + * WorldGuard, a suite of tools for Minecraft + * Copyright (C) sk89q + * Copyright (C) WorldGuard team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldguard.protection.flags; + +import com.sk89q.worldedit.world.gamemode.GameMode; +import com.sk89q.worldedit.world.gamemode.GameModes; + +import javax.annotation.Nullable; + +public class GameModeTypeFlag extends Flag { + + protected GameModeTypeFlag(String name, @Nullable RegionGroup defaultGroup) { + super(name, defaultGroup); + } + + protected GameModeTypeFlag(String name) { + super(name); + } + + @Override + public GameMode parseInput(FlagContext context) throws InvalidFlagFormat { + String input = context.getUserInput(); + input = input.trim(); + if (!input.startsWith("/")) { + input = "/" + input; + } + GameMode gamemode = unmarshal(input); + if (gamemode == null) { + throw new InvalidFlagFormat("Unknown game mode: " + input); + } + return gamemode; + } + + @Override + public GameMode unmarshal(@Nullable Object o) { + return GameModes.get(String.valueOf(o)); + } + + @Override + public Object marshal(GameMode o) { + return o.getId(); + } +} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/IntegerFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/IntegerFlag.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/IntegerFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/IntegerFlag.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/InvalidFlagFormat.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/InvalidFlagFormat.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/InvalidFlagFormat.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/InvalidFlagFormat.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/LazyLocation.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/LazyLocation.java similarity index 79% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/LazyLocation.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/LazyLocation.java index fc363f23..6f904d92 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/LazyLocation.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/LazyLocation.java @@ -19,11 +19,10 @@ package com.sk89q.worldguard.protection.flags; -import com.sk89q.worldedit.LocalWorld; -import com.sk89q.worldedit.Location; import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.bukkit.BukkitUtil; -import org.bukkit.Bukkit; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldguard.WorldGuard; import javax.annotation.Nullable; @@ -35,8 +34,8 @@ class LazyLocation extends Location { private final String worldName; @Nullable - private static LocalWorld findWorld(String worldName) { - return BukkitUtil.getLocalWorld(Bukkit.getServer().getWorld(worldName)); + private static World findWorld(String worldName) { + return WorldGuard.getInstance().getPlatform().getWorldByName(worldName); } public LazyLocation(String worldName, Vector position, float yaw, float pitch) { @@ -54,7 +53,7 @@ public String getWorldName() { } public LazyLocation setAngles(float yaw, float pitch) { - return new LazyLocation(worldName, getPosition(), yaw, pitch); + return new LazyLocation(worldName, toVector(), yaw, pitch); } public LazyLocation setPosition(Vector position) { @@ -62,11 +61,11 @@ public LazyLocation setPosition(Vector position) { } public LazyLocation add(Vector other) { - return this.setPosition(getPosition().add(other)); + return this.setPosition(toVector().add(other)); } public LazyLocation add(double x, double y, double z) { - return this.setPosition(getPosition().add(x, y, z)); + return this.setPosition(toVector().add(x, y, z)); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/LocationFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/LocationFlag.java similarity index 79% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/LocationFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/LocationFlag.java index b8782bf7..86fb2b01 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/LocationFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/LocationFlag.java @@ -19,15 +19,13 @@ package com.sk89q.worldguard.protection.flags; -import com.sk89q.worldedit.Location; import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.bukkit.BukkitUtil; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import com.sk89q.worldguard.bukkit.permission.RegionPermissionModel; +import com.sk89q.worldedit.entity.Player; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.internal.permission.RegionPermissionModel; import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import org.bukkit.ChatColor; -import org.bukkit.World; -import org.bukkit.entity.Player; import java.util.HashMap; import java.util.Map; @@ -49,7 +47,7 @@ public Location parseInput(FlagContext context) throws InvalidFlagFormat { Location loc = null; if ("here".equalsIgnoreCase(input)) { - loc = toLazyLocation(player.getLocation()); + loc = player.getLocation(); } else if ("none".equalsIgnoreCase(input)) { return null; } else { @@ -72,17 +70,17 @@ public Location parseInput(FlagContext context) throws InvalidFlagFormat { Object obj = context.get("region"); if (obj instanceof ProtectedRegion) { ProtectedRegion rg = (ProtectedRegion) obj; - if (WorldGuardPlugin.inst().getGlobalStateManager().get(player.getWorld()).boundedLocationFlags) { - if (!rg.contains(loc.getPosition())) { - if (new RegionPermissionModel(WorldGuardPlugin.inst(), player).mayOverrideLocationFlagBounds(rg)) { - player.sendMessage(ChatColor.GRAY + "WARNING: Flag location is outside of region."); + if (WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(player.getWorld()).boundedLocationFlags) { + if (!rg.contains(loc.toVector())) { + if (new RegionPermissionModel(player).mayOverrideLocationFlagBounds(rg)) { + player.printDebug("WARNING: Flag location is outside of region."); } else { // no permission throw new InvalidFlagFormat("You can't set that flag outside of the region boundaries."); } } // clamp height to world limits - loc.setPosition(loc.getPosition().clampY(0, player.getWorld().getMaxHeight())); + loc.setPosition(loc.toVector().clampY(0, player.getWorld().getMaxY())); return loc; } } @@ -91,10 +89,6 @@ public Location parseInput(FlagContext context) throws InvalidFlagFormat { throw new InvalidFlagFormat("Expected 'here' or x,y,z."); } - private Location toLazyLocation(org.bukkit.Location location) { - return new LazyLocation(location.getWorld().getName(), BukkitUtil.toVector(location), location.getYaw(), location.getPitch()); - } - @Override public Location unmarshal(Object o) { if (o instanceof Map) { @@ -130,13 +124,15 @@ public Location unmarshal(Object o) { @Override public Object marshal(Location o) { - Vector position = o.getPosition(); - Map vec = new HashMap(); + Vector position = o.toVector(); + Map vec = new HashMap<>(); if (o instanceof LazyLocation) { vec.put("world", ((LazyLocation) o).getWorldName()); } else { try { - vec.put("world", o.getWorld().getName()); + if (o.getExtent() instanceof World) { + vec.put("world", ((World) o.getExtent()).getName()); + } } catch (NullPointerException e) { return null; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/RegionGroup.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/RegionGroup.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/RegionGroup.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/RegionGroup.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/RegionGroupFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/RegionGroupFlag.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/RegionGroupFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/RegionGroupFlag.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/SetFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/SetFlag.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/SetFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/SetFlag.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/StateFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/StateFlag.java similarity index 97% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/StateFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/StateFlag.java index ca2dac5a..8e21589d 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/StateFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/StateFlag.java @@ -19,9 +19,6 @@ package com.sk89q.worldguard.protection.flags; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import org.bukkit.command.CommandSender; - import javax.annotation.Nullable; import java.util.Collection; @@ -72,7 +69,7 @@ public State chooseValue(Collection values) { * the global region. * *

This value is only changed, at least in WorldGuard, for the - * {@link DefaultFlag#BUILD} flag.

+ * {@link Flags#BUILD} flag.

* * @return Whether {@code ALLOW} is prevented */ diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/StringFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/StringFlag.java similarity index 95% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/StringFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/StringFlag.java index 0ce76918..5e0e7fe4 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/StringFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/StringFlag.java @@ -19,10 +19,6 @@ package com.sk89q.worldguard.protection.flags; -import org.bukkit.command.CommandSender; - -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; - import javax.annotation.Nullable; /** diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/VectorFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/VectorFlag.java similarity index 93% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/VectorFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/VectorFlag.java index 134ff23f..300eca56 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/VectorFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/VectorFlag.java @@ -20,7 +20,6 @@ package com.sk89q.worldguard.protection.flags; import com.sk89q.worldedit.Vector; -import com.sk89q.worldguard.bukkit.BukkitUtil; import java.util.HashMap; import java.util.Map; @@ -43,7 +42,7 @@ public Vector parseInput(FlagContext context) throws InvalidFlagFormat { String input = context.getUserInput(); if ("here".equalsIgnoreCase(input)) { - return BukkitUtil.toVector(context.getPlayerSender().getLocation()); + return context.getPlayerSender().getLocation().toVector(); } else { String[] split = input.split(","); if (split.length == 3) { @@ -82,7 +81,7 @@ public Vector unmarshal(Object o) { @Override public Object marshal(Vector o) { - Map vec = new HashMap(); + Map vec = new HashMap<>(); vec.put("x", o.getX()); vec.put("y", o.getY()); vec.put("z", o.getZ()); diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/WeatherTypeFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/WeatherTypeFlag.java new file mode 100644 index 00000000..44e0173f --- /dev/null +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/WeatherTypeFlag.java @@ -0,0 +1,60 @@ +/* + * WorldGuard, a suite of tools for Minecraft + * Copyright (C) sk89q + * Copyright (C) WorldGuard team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldguard.protection.flags; + +import com.sk89q.worldedit.world.weather.WeatherType; +import com.sk89q.worldedit.world.weather.WeatherTypes; + +import javax.annotation.Nullable; + +public class WeatherTypeFlag extends Flag { + + protected WeatherTypeFlag(String name, @Nullable RegionGroup defaultGroup) { + super(name, defaultGroup); + } + + protected WeatherTypeFlag(String name) { + super(name); + } + + @Override + public WeatherType parseInput(FlagContext context) throws InvalidFlagFormat { + String input = context.getUserInput(); + input = input.trim(); + if (!input.startsWith("/")) { + input = "/" + input; + } + WeatherType weatherType = unmarshal(input); + if (weatherType == null) { + throw new InvalidFlagFormat("Unknown game mode: " + input); + } + return weatherType; + } + + @Override + public WeatherType unmarshal(@Nullable Object o) { + return WeatherTypes.get(String.valueOf(o)); + } + + @Override + public Object marshal(WeatherType o) { + return o.getId(); + } +} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/FlagConflictException.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/registry/FlagConflictException.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/FlagConflictException.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/registry/FlagConflictException.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/FlagRegistry.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/registry/FlagRegistry.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/FlagRegistry.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/registry/FlagRegistry.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/SimpleFlagRegistry.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/registry/SimpleFlagRegistry.java similarity index 97% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/SimpleFlagRegistry.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/registry/SimpleFlagRegistry.java index 015ba2e9..46a317df 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/SimpleFlagRegistry.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/registry/SimpleFlagRegistry.java @@ -19,6 +19,7 @@ package com.sk89q.worldguard.protection.flags.registry; +import com.google.common.base.Preconditions; import com.google.common.collect.Iterators; import com.google.common.collect.Maps; import com.sk89q.worldguard.protection.flags.Flag; @@ -76,7 +77,7 @@ public void registerAll(Collection> flags) { private Flag forceRegister(Flag flag) throws FlagConflictException { checkNotNull(flag, "flag"); - checkNotNull(flag.getName(), "flag.getName()"); + Preconditions.checkNotNull(flag.getName(), "flag.getName()"); synchronized (lock) { String name = flag.getName().toLowerCase(); diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/UnknownFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/registry/UnknownFlag.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/registry/UnknownFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/registry/UnknownFlag.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/RegionContainerImpl.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/RegionContainerImpl.java similarity index 96% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/RegionContainerImpl.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/RegionContainerImpl.java index ace80f3b..bf4cd158 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/RegionContainerImpl.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/RegionContainerImpl.java @@ -19,7 +19,6 @@ package com.sk89q.worldguard.protection.managers; -import com.google.common.base.Supplier; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; import com.sk89q.worldguard.protection.managers.index.ChunkHashTable; import com.sk89q.worldguard.protection.managers.index.ConcurrentRegionIndex; @@ -33,6 +32,7 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.function.Supplier; import java.util.logging.Level; import java.util.logging.Logger; @@ -49,16 +49,16 @@ public class RegionContainerImpl { private static final int LOAD_ATTEMPT_INTERVAL = 1000 * 30; private static final int SAVE_INTERVAL = 1000 * 30; - private final ConcurrentMap mapping = new ConcurrentHashMap(); + private final ConcurrentMap mapping = new ConcurrentHashMap<>(); private final Object lock = new Object(); private final RegionDriver driver; private final Supplier indexFactory = new ChunkHashTable.Factory(new PriorityRTreeIndex.Factory()); private final Timer timer = new Timer(); private final FlagRegistry flagRegistry; - private final Set failingLoads = new HashSet(); + private final Set failingLoads = new HashSet<>(); private final Set failingSaves = Collections.synchronizedSet( - Collections.newSetFromMap(new WeakHashMap())); + Collections.newSetFromMap(new WeakHashMap<>())); /** * Create a new instance. @@ -200,7 +200,7 @@ public RegionManager get(String name) { * @return an immutable list */ public List getLoaded() { - return Collections.unmodifiableList(new ArrayList(mapping.values())); + return Collections.unmodifiableList(new ArrayList<>(mapping.values())); } /** @@ -209,7 +209,7 @@ public List getLoaded() { * @return a set of region managers */ public Set getSaveFailures() { - return new HashSet(failingSaves); + return new HashSet<>(failingSaves); } /** diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/RegionDifference.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/RegionDifference.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/RegionDifference.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/RegionDifference.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/RegionManager.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/RegionManager.java similarity index 88% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/RegionManager.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/RegionManager.java index 5a671a2b..b1ceab85 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/RegionManager.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/RegionManager.java @@ -19,8 +19,8 @@ package com.sk89q.worldguard.protection.managers; -import com.google.common.base.Predicate; -import com.google.common.base.Supplier; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.collect.Sets; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.Vector2D; @@ -37,7 +37,6 @@ import com.sk89q.worldguard.protection.util.RegionCollectionConsumer; import com.sk89q.worldguard.util.Normal; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -48,8 +47,9 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Supplier; -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.Nullable; /** * A region manager holds the regions for a world. @@ -74,7 +74,7 @@ public RegionManager(RegionDatabase store, Supplier(getFilteredValuesCopy())); + store.saveAll(new HashSet<>(getFilteredValuesCopy())); } /** @@ -186,7 +186,7 @@ public void unloadChunk(Vector2D position) { * @return a map of regions */ public Map getRegions() { - Map map = new HashMap(); + Map map = new HashMap<>(); for (ProtectedRegion region : index.values()) { map.put(Normal.normalize(region.getId()), region); } @@ -352,14 +352,9 @@ public ApplicableRegionSet getApplicableRegions(ProtectedRegion region) { public List getApplicableRegionsIDs(Vector position) { checkNotNull(position); - final List names = new ArrayList(); + final List names = new ArrayList<>(); - index.applyContaining(position, new Predicate() { - @Override - public boolean apply(ProtectedRegion region) { - return names.add(region.getId()); - } - }); + index.applyContaining(position, region -> names.add(region.getId())); return names; } @@ -380,15 +375,12 @@ public boolean overlapsUnownedRegion(ProtectedRegion region, final LocalPlayer p final AtomicBoolean overlapsUnowned = new AtomicBoolean(); - index.applyIntersecting(region, new Predicate() { - @Override - public boolean apply(ProtectedRegion test) { - if (!test.getOwners().contains(player)) { - overlapsUnowned.set(true); - return false; - } else { - return true; - } + index.applyIntersecting(region, test -> { + if (!test.getOwners().contains(player)) { + overlapsUnowned.set(true); + return false; + } else { + return true; } }); @@ -415,14 +407,11 @@ public int getRegionCountOfPlayer(final LocalPlayer player) { final AtomicInteger count = new AtomicInteger(); - index.apply(new Predicate() { - @Override - public boolean apply(ProtectedRegion test) { - if (test.getOwners().contains(player)) { - count.incrementAndGet(); - } - return true; + index.apply(test -> { + if (test.getOwners().contains(player)) { + count.incrementAndGet(); } + return true; }); return count.get(); @@ -434,7 +423,7 @@ public boolean apply(ProtectedRegion test) { * @return a list */ private List getFilteredValuesCopy() { - List filteredValues = new ArrayList(); + List filteredValues = new ArrayList<>(); for (ProtectedRegion region : index.values()) { if (!region.isTransient()) { filteredValues.add(region); @@ -443,17 +432,4 @@ private List getFilteredValuesCopy() { return filteredValues; } - // =============== HELPER METHODS =============== - - /** - * Helper method for {@link #getApplicableRegions(Vector)} using Bukkit - * locations. - * - * @param loc the location - * @return an {@code ApplicableRegionSet} - */ - public ApplicableRegionSet getApplicableRegions(org.bukkit.Location loc) { - return getApplicableRegions(com.sk89q.worldedit.bukkit.BukkitUtil.toVector(loc).floor()); - } - } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/RemovalStrategy.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/RemovalStrategy.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/RemovalStrategy.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/RemovalStrategy.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/index/AbstractRegionIndex.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/index/AbstractRegionIndex.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/index/AbstractRegionIndex.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/index/AbstractRegionIndex.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/index/ChunkHashTable.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/index/ChunkHashTable.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/index/ChunkHashTable.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/index/ChunkHashTable.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/index/ConcurrentRegionIndex.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/index/ConcurrentRegionIndex.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/index/ConcurrentRegionIndex.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/index/ConcurrentRegionIndex.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/index/HashMapIndex.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/index/HashMapIndex.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/index/HashMapIndex.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/index/HashMapIndex.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/index/PriorityRTreeIndex.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/index/PriorityRTreeIndex.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/index/PriorityRTreeIndex.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/index/PriorityRTreeIndex.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/index/RegionIndex.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/index/RegionIndex.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/index/RegionIndex.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/index/RegionIndex.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/migration/AbstractMigration.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/migration/AbstractMigration.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/migration/AbstractMigration.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/migration/AbstractMigration.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/migration/DriverMigration.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/migration/DriverMigration.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/migration/DriverMigration.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/migration/DriverMigration.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/migration/Migration.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/migration/Migration.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/migration/Migration.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/migration/Migration.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/migration/MigrationException.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/migration/MigrationException.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/migration/MigrationException.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/migration/MigrationException.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/migration/UUIDMigration.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/migration/UUIDMigration.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/migration/UUIDMigration.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/migration/UUIDMigration.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/DifferenceSaveException.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/DifferenceSaveException.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/DifferenceSaveException.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/DifferenceSaveException.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/DriverType.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/DriverType.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/DriverType.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/DriverType.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/MemoryRegionDatabase.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/MemoryRegionDatabase.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/MemoryRegionDatabase.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/MemoryRegionDatabase.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabase.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabase.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabase.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabase.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabaseUtils.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabaseUtils.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabaseUtils.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDatabaseUtils.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDriver.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDriver.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDriver.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/RegionDriver.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/StorageException.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/StorageException.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/StorageException.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/StorageException.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/file/DirectoryYamlDriver.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/file/DirectoryYamlDriver.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/file/DirectoryYamlDriver.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/file/DirectoryYamlDriver.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/file/YamlRegionFile.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/file/YamlRegionFile.java similarity index 99% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/file/YamlRegionFile.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/file/YamlRegionFile.java index 01106ca6..e00a85af 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/file/YamlRegionFile.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/file/YamlRegionFile.java @@ -26,7 +26,7 @@ import com.sk89q.worldedit.BlockVector2D; import com.sk89q.worldedit.Vector; import com.sk89q.worldguard.domains.DefaultDomain; -import com.sk89q.worldguard.protection.flags.Flags; +import com.sk89q.worldguard.protection.flags.FlagUtil; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; import com.sk89q.worldguard.protection.managers.RegionDifference; import com.sk89q.worldguard.protection.managers.storage.DifferenceSaveException; @@ -280,7 +280,7 @@ private DefaultDomain parseDomain(YAMLNode node) { } private Map getFlagData(ProtectedRegion region) { - return Flags.marshal(region.getFlags()); + return FlagUtil.marshal(region.getFlags()); } private void setFlags(FlagRegistry flagRegistry, ProtectedRegion region, YAMLNode flagsData) { diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DataLoader.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DataLoader.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DataLoader.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DataLoader.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DataUpdater.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DataUpdater.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DataUpdater.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DataUpdater.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DomainTableCache.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DomainTableCache.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DomainTableCache.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/DomainTableCache.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionInserter.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionInserter.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionInserter.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionInserter.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionRemover.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionRemover.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionRemover.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionRemover.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionUpdater.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionUpdater.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionUpdater.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/RegionUpdater.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/SQLDriver.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/SQLDriver.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/SQLDriver.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/SQLDriver.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/SQLRegionDatabase.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/SQLRegionDatabase.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/SQLRegionDatabase.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/SQLRegionDatabase.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/StatementBatch.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/StatementBatch.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/StatementBatch.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/StatementBatch.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/TableCache.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/TableCache.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/TableCache.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/managers/storage/sql/TableCache.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/GlobalProtectedRegion.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/GlobalProtectedRegion.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/GlobalProtectedRegion.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/GlobalProtectedRegion.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedCuboidRegion.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedCuboidRegion.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedCuboidRegion.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedCuboidRegion.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedPolygonalRegion.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedPolygonalRegion.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedPolygonalRegion.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedPolygonalRegion.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegion.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegion.java similarity index 99% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegion.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegion.java index 9c58fb8a..1f07f89b 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegion.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegion.java @@ -19,6 +19,8 @@ package com.sk89q.worldguard.protection.regions; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.collect.Lists; import com.sk89q.worldedit.BlockVector; import com.sk89q.worldedit.BlockVector2D; @@ -29,7 +31,6 @@ import com.sk89q.worldguard.util.ChangeTracked; import com.sk89q.worldguard.util.Normal; -import javax.annotation.Nullable; import java.awt.geom.Area; import java.awt.geom.Line2D; import java.util.Collection; @@ -39,7 +40,7 @@ import java.util.concurrent.ConcurrentMap; import java.util.regex.Pattern; -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.Nullable; /** * Represents a region that can be indexed and have spatial queries performed diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegionMBRConverter.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegionMBRConverter.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegionMBRConverter.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/ProtectedRegionMBRConverter.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/QueryCache.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/QueryCache.java similarity index 91% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/QueryCache.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/QueryCache.java index cd32b97d..620c0a13 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/QueryCache.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/QueryCache.java @@ -17,13 +17,13 @@ * along with this program. If not, see . */ -package com.sk89q.worldguard.bukkit; +package com.sk89q.worldguard.protection.regions; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.world.World; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.RegionResultSet; import com.sk89q.worldguard.protection.managers.RegionManager; -import org.bukkit.Location; -import org.bukkit.World; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -36,9 +36,9 @@ * *

This class is fully concurrent.

*/ -class QueryCache { +public class QueryCache { - private final ConcurrentMap cache = new ConcurrentHashMap(16, 0.75f, 2); + private final ConcurrentMap cache = new ConcurrentHashMap<>(16, 0.75f, 2); /** * Get from the cache a {@code ApplicableRegionSet} if an entry exists; @@ -55,7 +55,7 @@ public ApplicableRegionSet queryContains(RegionManager manager, Location locatio CacheKey key = new CacheKey(location); ApplicableRegionSet result = cache.get(key); if (result == null) { - result = manager.getApplicableRegions(location); + result = manager.getApplicableRegions(location.toVector()); cache.put(key, result); } @@ -80,7 +80,7 @@ private static class CacheKey { private final int hashCode; private CacheKey(Location location) { - this.world = location.getWorld(); + this.world = (World) location.getExtent(); this.x = location.getBlockX(); this.y = location.getBlockY(); this.z = location.getBlockZ(); diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/RegionContainer.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/RegionContainer.java new file mode 100644 index 00000000..07e33fdd --- /dev/null +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/RegionContainer.java @@ -0,0 +1,119 @@ +/* + * WorldGuard, a suite of tools for Minecraft + * Copyright (C) sk89q + * Copyright (C) WorldGuard team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldguard.protection.regions; + +import com.sk89q.worldedit.world.World; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.config.ConfigurationManager; +import com.sk89q.worldguard.protection.managers.RegionContainerImpl; +import com.sk89q.worldguard.protection.managers.RegionManager; +import com.sk89q.worldguard.protection.managers.storage.RegionDriver; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import javax.annotation.Nullable; + +/** + * A region container creates {@link RegionManager}s for loaded worlds, which + * allows access to the region data of a world. Generally, only data is + * loaded for worlds that are loaded in the server. + * + *

This class is thread safe and its contents can be accessed from + * multiple concurrent threads.

+ */ +public abstract class RegionContainer { + + protected final Object lock = new Object(); + protected final QueryCache cache = new QueryCache(); + protected RegionContainerImpl container; + + /** + * Initialize the region container. + */ + public void initialize() { + ConfigurationManager config = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); + container = new RegionContainerImpl(config.selectedRegionStoreDriver, WorldGuard.getInstance().getFlagRegistry()); + } + + /** + * Get the region store driver. + * + * @return the driver + */ + public RegionDriver getDriver() { + return container.getDriver(); + } + + /** + * Reload the region container. + * + *

This method may block until the data for all loaded worlds has been + * unloaded and new data has been loaded.

+ */ + public abstract void reload(); + + /** + * Get the region manager for a world if one exists. + * + *

If you wish to make queries and performance is more important + * than accuracy, use {@link #createQuery()} instead.

+ * + *

This method may return {@code null} if region data for the given + * world has not been loaded, has failed to load, or support for regions + * has been disabled.

+ * + * @param world the world + * @return a region manager, or {@code null} if one is not available + */ + @Nullable + public RegionManager get(World world) { + return container.get(world.getName()); + } + + /** + * Get an immutable list of loaded {@link RegionManager}s. + * + * @return a list of managers + */ + public List getLoaded() { + return Collections.unmodifiableList(container.getLoaded()); + } + + /** + * Get the a set of region managers that are failing to save. + * + * @return a set of region managers + */ + public Set getSaveFailures() { + return container.getSaveFailures(); + } + + /** + * Create a new region query. + * + * @return a new query + */ + public RegionQuery createQuery() { + return new RegionQuery(cache); + } + +} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/RegionQuery.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/RegionQuery.java similarity index 82% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/RegionQuery.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/RegionQuery.java index 272bc2c4..01087e57 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/RegionQuery.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/RegionQuery.java @@ -17,28 +17,30 @@ * along with this program. If not, see . */ -package com.sk89q.worldguard.bukkit; +package com.sk89q.worldguard.protection.regions; +import static com.google.common.base.Preconditions.checkNotNull; + +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.world.World; import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.config.ConfigurationManager; +import com.sk89q.worldguard.config.WorldConfiguration; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.FailedLoadRegionSet; -import com.sk89q.worldguard.protection.GlobalRegionManager; import com.sk89q.worldguard.protection.PermissiveRegionSet; import com.sk89q.worldguard.protection.RegionResultSet; import com.sk89q.worldguard.protection.association.RegionAssociable; -import com.sk89q.worldguard.protection.flags.DefaultFlag; import com.sk89q.worldguard.protection.flags.Flag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.StateFlag.State; import com.sk89q.worldguard.protection.managers.RegionManager; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; -import javax.annotation.Nullable; import java.util.Collection; -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.Nullable; /** * This object allows easy spatial queries involving region data for the @@ -52,27 +54,20 @@ */ public class RegionQuery { - private final WorldGuardPlugin plugin; private final ConfigurationManager config; - @SuppressWarnings("deprecation") - private final GlobalRegionManager globalManager; private final QueryCache cache; /** * Create a new instance. * - * @param plugin the plugin * @param cache the query cache */ - RegionQuery(WorldGuardPlugin plugin, QueryCache cache) { - checkNotNull(plugin); + public RegionQuery(QueryCache cache) { checkNotNull(cache); - this.plugin = plugin; - this.config = plugin.getGlobalStateManager(); + this.config = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); this.cache = cache; //noinspection deprecation - this.globalManager = plugin.getGlobalRegionManager(); } /** @@ -90,14 +85,14 @@ public class RegionQuery { public ApplicableRegionSet getApplicableRegions(Location location) { checkNotNull(location); - World world = location.getWorld(); + World world = (World) location.getExtent(); WorldConfiguration worldConfig = config.get(world); if (!worldConfig.useRegions) { return PermissiveRegionSet.getInstance(); } - RegionManager manager = globalManager.get(location.getWorld()); + RegionManager manager = WorldGuard.getInstance().getPlatform().getRegionContainer().get((World) location.getExtent()); if (manager != null) { return cache.queryContains(manager, location); } else { @@ -131,13 +126,13 @@ public ApplicableRegionSet getApplicableRegions(Location location) { * @return true if the result was {@code ALLOW} * @see RegionResultSet#queryValue(RegionAssociable, Flag) */ - public boolean testBuild(Location location, Player player, StateFlag... flag) { + public boolean testBuild(Location location, LocalPlayer player, StateFlag... flag) { if (flag.length == 0) { - return testState(location, player, DefaultFlag.BUILD); + return testState(location, player, Flags.BUILD); } return StateFlag.test(StateFlag.combine( - StateFlag.denyToNone(queryState(location, player, DefaultFlag.BUILD)), + StateFlag.denyToNone(queryState(location, player, Flags.BUILD)), queryState(location, player, flag))); } @@ -169,11 +164,11 @@ public boolean testBuild(Location location, Player player, StateFlag... flag) { */ public boolean testBuild(Location location, RegionAssociable associable, StateFlag... flag) { if (flag.length == 0) { - return testState(location, associable, DefaultFlag.BUILD); + return testState(location, associable, Flags.BUILD); } return StateFlag.test(StateFlag.combine( - StateFlag.denyToNone(queryState(location, associable, DefaultFlag.BUILD)), + StateFlag.denyToNone(queryState(location, associable, Flags.BUILD)), queryState(location, associable, flag))); } @@ -183,9 +178,9 @@ public boolean testBuild(Location location, RegionAssociable associable, StateFl * *

{@code player} can be non-null to satisfy region group requirements, * otherwise it will be assumed that the caller that is not a member of any - * regions. (Flags on a region can be changed so that they only apply + * regions. (FlagUtil on a region can be changed so that they only apply * to certain users.) The player argument is required if the - * {@link DefaultFlag#BUILD} flag is in the list of flags.

+ * {@link Flags#BUILD} flag is in the list of flags.

* *

This method does not check the region bypass permission. That must * be done by the calling code.

@@ -196,7 +191,7 @@ public boolean testBuild(Location location, RegionAssociable associable, StateFl * @return true if the result was {@code ALLOW} * @see RegionResultSet#queryValue(RegionAssociable, Flag) */ - public boolean testState(Location location, @Nullable Player player, StateFlag... flag) { + public boolean testState(Location location, @Nullable LocalPlayer player, StateFlag... flag) { return StateFlag.test(queryState(location, player, flag)); } @@ -206,9 +201,9 @@ public boolean testState(Location location, @Nullable Player player, StateFlag.. * *

{@code player} can be non-null to satisfy region group requirements, * otherwise it will be assumed that the caller that is not a member of any - * regions. (Flags on a region can be changed so that they only apply + * regions. (FlagUtil on a region can be changed so that they only apply * to certain users.) The player argument is required if the - * {@link DefaultFlag#BUILD} flag is in the list of flags.

+ * {@link Flags#BUILD} flag is in the list of flags.

* *

This method does not check the region bypass permission. That must * be done by the calling code.

@@ -230,9 +225,9 @@ public boolean testState(Location location, @Nullable RegionAssociable associabl * *

{@code player} can be non-null to satisfy region group requirements, * otherwise it will be assumed that the caller that is not a member of any - * regions. (Flags on a region can be changed so that they only apply + * regions. (FlagUtil on a region can be changed so that they only apply * to certain users.) The player argument is required if the - * {@link DefaultFlag#BUILD} flag is in the list of flags.

+ * {@link Flags#BUILD} flag is in the list of flags.

* * @param location the location * @param player an optional player, which would be used to determine the region groups that apply @@ -241,9 +236,8 @@ public boolean testState(Location location, @Nullable RegionAssociable associabl * @see RegionResultSet#queryState(RegionAssociable, StateFlag...) */ @Nullable - public State queryState(Location location, @Nullable Player player, StateFlag... flags) { - LocalPlayer localPlayer = player != null ? plugin.wrapPlayer(player) : null; - return getApplicableRegions(location).queryState(localPlayer, flags); + public State queryState(Location location, @Nullable LocalPlayer player, StateFlag... flags) { + return getApplicableRegions(location).queryState(player, flags); } /** @@ -253,9 +247,9 @@ public State queryState(Location location, @Nullable Player player, StateFlag... * *

{@code player} can be non-null to satisfy region group requirements, * otherwise it will be assumed that the caller that is not a member of any - * regions. (Flags on a region can be changed so that they only apply + * regions. (FlagUtil on a region can be changed so that they only apply * to certain users.) The player argument is required if the - * {@link DefaultFlag#BUILD} flag is in the list of flags.

+ * {@link Flags#BUILD} flag is in the list of flags.

* * @param location the location * @param associable an optional associable @@ -282,9 +276,9 @@ public State queryState(Location location, @Nullable RegionAssociable associable * *

{@code player} can be non-null to satisfy region group requirements, * otherwise it will be assumed that the caller that is not a member of any - * regions. (Flags on a region can be changed so that they only apply + * regions. (FlagUtil on a region can be changed so that they only apply * to certain users.) The player argument is required if the - * {@link DefaultFlag#BUILD} flag is the flag being queried.

+ * {@link Flags#BUILD} flag is the flag being queried.

* * @param location the location * @param player an optional player, which would be used to determine the region group to apply @@ -293,9 +287,8 @@ public State queryState(Location location, @Nullable RegionAssociable associable * @see RegionResultSet#queryValue(RegionAssociable, Flag) */ @Nullable - public V queryValue(Location location, @Nullable Player player, Flag flag) { - LocalPlayer localPlayer = player != null ? plugin.wrapPlayer(player) : null; - return getApplicableRegions(location).queryValue(localPlayer, flag); + public V queryValue(Location location, @Nullable LocalPlayer player, Flag flag) { + return getApplicableRegions(location).queryValue(player, flag); } /** @@ -312,9 +305,9 @@ public V queryValue(Location location, @Nullable Player player, Flag flag * *

{@code player} can be non-null to satisfy region group requirements, * otherwise it will be assumed that the caller that is not a member of any - * regions. (Flags on a region can be changed so that they only apply + * regions. (FlagUtil on a region can be changed so that they only apply * to certain users.) The player argument is required if the - * {@link DefaultFlag#BUILD} flag is the flag being queried.

+ * {@link Flags#BUILD} flag is the flag being queried.

* * @param location the location * @param associable an optional associable @@ -334,9 +327,9 @@ public V queryValue(Location location, @Nullable RegionAssociable associable * *

{@code player} can be non-null to satisfy region group requirements, * otherwise it will be assumed that the caller that is not a member of any - * regions. (Flags on a region can be changed so that they only apply + * regions. (FlagUtil on a region can be changed so that they only apply * to certain users.) The player argument is required if the - * {@link DefaultFlag#BUILD} flag is the flag being queried.

+ * {@link Flags#BUILD} flag is the flag being queried.

* * @param location the location * @param player an optional player, which would be used to determine the region group to apply @@ -344,9 +337,8 @@ public V queryValue(Location location, @Nullable RegionAssociable associable * @return a collection of values * @see RegionResultSet#queryAllValues(RegionAssociable, Flag) */ - public Collection queryAllValues(Location location, @Nullable Player player, Flag flag) { - LocalPlayer localPlayer = player != null ? plugin.wrapPlayer(player) : null; - return getApplicableRegions(location).queryAllValues(localPlayer, flag); + public Collection queryAllValues(Location location, @Nullable LocalPlayer player, Flag flag) { + return getApplicableRegions(location).queryAllValues(player, flag); } /** @@ -356,9 +348,9 @@ public Collection queryAllValues(Location location, @Nullable Player play * *

{@code player} can be non-null to satisfy region group requirements, * otherwise it will be assumed that the caller that is not a member of any - * regions. (Flags on a region can be changed so that they only apply + * regions. (FlagUtil on a region can be changed so that they only apply * to certain users.) The player argument is required if the - * {@link DefaultFlag#BUILD} flag is the flag being queried.

+ * {@link Flags#BUILD} flag is the flag being queried.

* * @param location the location * @param associable an optional associable diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/RegionType.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/RegionType.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/regions/RegionType.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/regions/RegionType.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/util/DomainInputResolver.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/util/DomainInputResolver.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/util/DomainInputResolver.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/util/DomainInputResolver.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/util/NormativeOrders.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/util/NormativeOrders.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/util/NormativeOrders.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/util/NormativeOrders.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/util/RegionCollectionConsumer.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/util/RegionCollectionConsumer.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/util/RegionCollectionConsumer.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/util/RegionCollectionConsumer.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/util/UnresolvedNamesException.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/util/UnresolvedNamesException.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/util/UnresolvedNamesException.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/protection/util/UnresolvedNamesException.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/MoveType.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/MoveType.java similarity index 93% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/MoveType.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/MoveType.java index 7079ebcf..0cb50757 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/MoveType.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/MoveType.java @@ -19,12 +19,10 @@ package com.sk89q.worldguard.session; -import org.bukkit.Location; - /** * Types of movements. * - *

Used with {@link Session#testMoveTo(Location, MoveType)}.

+ *

Used with Session#testMoveTo(Location, MoveType).

*/ public enum MoveType { diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/Session.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/Session.java similarity index 85% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/Session.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/Session.java index fb05e96c..e31bf7d3 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/Session.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/Session.java @@ -21,15 +21,15 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import com.sk89q.worldguard.bukkit.RegionQuery; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import com.sk89q.worldguard.bukkit.util.Locations; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.flags.StateFlag.State; import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import com.sk89q.worldguard.protection.regions.RegionQuery; import com.sk89q.worldguard.session.handler.Handler; -import org.bukkit.Location; -import org.bukkit.entity.Player; +import com.sk89q.worldguard.util.Locations; import javax.annotation.Nullable; import java.util.HashMap; @@ -68,15 +68,6 @@ void register(Handler handler) { handlers.put(handler.getClass(), handler); } - /** - * Get the plugin. - * - * @return The plugin - */ - public WorldGuardPlugin getPlugin() { - return getManager().getPlugin(); - } - /** * Get the session manager. * @@ -104,8 +95,8 @@ public T getHandler(Class type) { * * @param player The player */ - void initialize(Player player) { - RegionQuery query = getManager().getPlugin().getRegionContainer().createQuery(); + void initialize(LocalPlayer player) { + RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); Location location = player.getLocation(); ApplicableRegionSet set = query.getApplicableRegions(location); @@ -122,8 +113,8 @@ void initialize(Player player) { * * @param player The player */ - void tick(Player player) { - RegionQuery query = getManager().getPlugin().getRegionContainer().createQuery(); + void tick(LocalPlayer player) { + RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); Location location = player.getLocation(); ApplicableRegionSet set = query.getApplicableRegions(location); @@ -137,7 +128,7 @@ void tick(Player player) { * * @param player The player */ - void resetState(Player player) { + void resetState(LocalPlayer player) { initialize(player); needRefresh.set(true); } @@ -147,7 +138,7 @@ void resetState(Player player) { * * @return Whether invincibility is enabled */ - public boolean isInvincible(Player player) { + public boolean isInvincible(LocalPlayer player) { boolean invincible = false; for (Handler handler : handlers.values()) { @@ -170,10 +161,10 @@ public boolean isInvincible(Player player) { * @param to The new location * @param moveType The type of move * @return The overridden location, if the location is being overridden - * @see #testMoveTo(Player, Location, MoveType, boolean) For an explanation + * @see #testMoveTo(LocalPlayer, Location, MoveType, boolean) For an explanation */ @Nullable - public Location testMoveTo(Player player, Location to, MoveType moveType) { + public Location testMoveTo(LocalPlayer player, Location to, MoveType moveType) { return testMoveTo(player, to, moveType, false); } @@ -194,8 +185,8 @@ public Location testMoveTo(Player player, Location to, MoveType moveType) { * @return The overridden location, if the location is being overridden */ @Nullable - public Location testMoveTo(Player player, Location to, MoveType moveType, boolean forced) { - RegionQuery query = getManager().getPlugin().getRegionContainer().createQuery(); + public Location testMoveTo(LocalPlayer player, Location to, MoveType moveType, boolean forced) { + RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); if (!forced && needRefresh.getAndSet(false)) { forced = true; diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/session/SessionManager.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/SessionManager.java new file mode 100644 index 00000000..99e2e2ab --- /dev/null +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/SessionManager.java @@ -0,0 +1,116 @@ +/* + * WorldGuard, a suite of tools for Minecraft + * Copyright (C) sk89q + * Copyright (C) WorldGuard team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldguard.session; + +import com.sk89q.worldedit.world.World; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.session.handler.Handler; + +import java.util.Collection; + +import javax.annotation.Nullable; + +public interface SessionManager { + + /** + * Check whether a player has the region bypass permission. + * + *

The return value may be cached for a few seconds.

+ * + * @param player The player + * @param world The world + * @return A value + */ + boolean hasBypass(LocalPlayer player, World world); + + /** + * Re-initialize handlers and clear "last position," "last state," etc. + * information for all players. + */ + void resetAllStates(); + + /** + * Re-initialize handlers and clear "last position," "last state," etc. + * information. + * + * @param player The player + */ + void resetState(LocalPlayer player); + + /** + * Register a handler with the BukkitSessionManager. + * + * You may specify another handler class to ensure your handler is always registered after that class. + * If that class is not already registered, this method will return false. + * + * For example, flags that always act on a player in a region (like HealFlag and FeedFlag) + * should be registered earlier, whereas flags that only take effect when a player leaves the region (like + * FarewellFlag and GreetingFlag) should be registered after the ExitFlag.Factory.class handler factory. + * + * @param factory a factory which takes a session and returns an instance of your handler + * @param after the handler factory to insert the first handler after, to ensure a specific order when creating new sessions + * + * @return {@code true} (as specified by {@link Collection#add}) + * {@code false} if {@param after} is not registered, or {@param factory} is null + */ + boolean registerHandler(Handler.Factory factory, @Nullable Handler.Factory after); + + /** + * Unregister a handler. + * + * This will prevent it from being added to newly created sessions only. Existing + * sessions with the handler will continue to use it. + * + * Will return false if the handler was not registered to begin with. + * + * @param factory the handler factory to unregister + * @return true if the handler was registered and is now unregistered, false otherwise + */ + boolean unregisterHandler(Handler.Factory factory); + + /** + * Create a session for a player. + * + * @param player The player + * @return The new session + */ + Session createSession(LocalPlayer player); + + /** + * Get a player's session, if one exists. + * + * @param player The player + * @return The session + */ + @Nullable Session getIfPresent(LocalPlayer player); + + /** + * Get a player's session. A session will be created if there is no + * existing session for the player. + * + *

This method can only be called from the main thread. While the + * session manager itself is thread-safe, some of the handlers may + * require initialization that requires the server main thread.

+ * + * @param player The player to get a session for + * @return The {@code player}'s session + */ + Session get(LocalPlayer player); +} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/WorldPlayerTuple.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/WorldPlayerTuple.java similarity index 89% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/WorldPlayerTuple.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/WorldPlayerTuple.java index 02d4d115..cd79ea83 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/WorldPlayerTuple.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/WorldPlayerTuple.java @@ -19,15 +19,15 @@ package com.sk89q.worldguard.session; -import org.bukkit.World; -import org.bukkit.entity.Player; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldguard.LocalPlayer; class WorldPlayerTuple { final World world; - final Player player; + final LocalPlayer player; - WorldPlayerTuple(World world, Player player) { + WorldPlayerTuple(World world, LocalPlayer player) { this.world = world; this.player = player; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/EntryFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/EntryFlag.java similarity index 70% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/EntryFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/EntryFlag.java index a01a0cc1..c6660201 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/EntryFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/EntryFlag.java @@ -19,15 +19,15 @@ package com.sk89q.worldguard.session.handler; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.world.World; import com.sk89q.worldguard.LocalPlayer; -import com.sk89q.worldguard.bukkit.commands.CommandUtils; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; -import org.bukkit.Location; -import org.bukkit.entity.Player; import java.util.Set; @@ -49,16 +49,15 @@ public EntryFlag(Session session) { } @Override - public boolean onCrossBoundary(Player player, Location from, Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) { - LocalPlayer localPlayer = getPlugin().wrapPlayer(player); - boolean allowed = toSet.testState(localPlayer, DefaultFlag.ENTRY); + public boolean onCrossBoundary(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) { + boolean allowed = toSet.testState(player, Flags.ENTRY); - if (!getSession().getManager().hasBypass(player, to.getWorld()) && !allowed && moveType.isCancellable()) { - String message = toSet.queryValue(localPlayer, DefaultFlag.ENTRY_DENY_MESSAGE); + if (!getSession().getManager().hasBypass(player, (World) to.getExtent()) && !allowed && moveType.isCancellable()) { + String message = toSet.queryValue(player, Flags.ENTRY_DENY_MESSAGE); long now = System.currentTimeMillis(); if ((now - lastMessage) > MESSAGE_THRESHOLD && message != null && !message.isEmpty()) { - player.sendMessage(CommandUtils.replaceColorMacros(message)); + player.printRaw(WorldGuard.getInstance().getPlatform().replaceColorMacros(message)); lastMessage = now; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/ExitFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/ExitFlag.java similarity index 66% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/ExitFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/ExitFlag.java index 2ef727d6..ba39f493 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/ExitFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/ExitFlag.java @@ -19,16 +19,16 @@ package com.sk89q.worldguard.session.handler; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.world.World; import com.sk89q.worldguard.LocalPlayer; -import com.sk89q.worldguard.bukkit.commands.CommandUtils; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.StateFlag.State; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; -import org.bukkit.Location; -import org.bukkit.entity.Player; public class ExitFlag extends FlagValueChangeHandler { @@ -46,63 +46,61 @@ public ExitFlag create(Session session) { private long lastMessage; public ExitFlag(Session session) { - super(session, DefaultFlag.EXIT); + super(session, Flags.EXIT); } private void update(LocalPlayer localPlayer, ApplicableRegionSet set, boolean allowed) { if (!allowed) { - storedMessage = set.queryValue(localPlayer, DefaultFlag.EXIT_DENY_MESSAGE); - exitViaTeleport = set.testState(localPlayer, DefaultFlag.EXIT_VIA_TELEPORT); + storedMessage = set.queryValue(localPlayer, Flags.EXIT_DENY_MESSAGE); + exitViaTeleport = set.testState(localPlayer, Flags.EXIT_VIA_TELEPORT); } } - private void sendMessage(Player player) { + private void sendMessage(LocalPlayer player) { long now = System.currentTimeMillis(); if ((now - lastMessage) > MESSAGE_THRESHOLD && storedMessage != null && !storedMessage.isEmpty()) { - player.sendMessage(CommandUtils.replaceColorMacros(storedMessage)); + player.printRaw(WorldGuard.getInstance().getPlatform().replaceColorMacros(storedMessage)); lastMessage = now; } } @Override - protected void onInitialValue(Player player, ApplicableRegionSet set, State value) { - update(getPlugin().wrapPlayer(player), set, StateFlag.test(value)); + protected void onInitialValue(LocalPlayer player, ApplicableRegionSet set, State value) { + update(player, set, StateFlag.test(value)); } @Override - protected boolean onSetValue(Player player, Location from, Location to, ApplicableRegionSet toSet, State currentValue, State lastValue, MoveType moveType) { - if (getSession().getManager().hasBypass(player, from.getWorld())) { + protected boolean onSetValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, State currentValue, State lastValue, MoveType moveType) { + if (getSession().getManager().hasBypass(player, (World) from.getExtent())) { return true; } boolean lastAllowed = StateFlag.test(lastValue); boolean allowed = StateFlag.test(currentValue); - LocalPlayer localPlayer = getPlugin().wrapPlayer(player); - if (allowed && !lastAllowed && !(moveType.isTeleport() && exitViaTeleport) && moveType.isCancellable()) { - Boolean override = toSet.queryValue(localPlayer, DefaultFlag.EXIT_OVERRIDE); + Boolean override = toSet.queryValue(player, Flags.EXIT_OVERRIDE); if (override == null || !override) { sendMessage(player); return false; } } - update(localPlayer, toSet, allowed); + update(player, toSet, allowed); return true; } @Override - protected boolean onAbsentValue(Player player, Location from, Location to, ApplicableRegionSet toSet, State lastValue, MoveType moveType) { - if (getSession().getManager().hasBypass(player, from.getWorld())) { + protected boolean onAbsentValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, State lastValue, MoveType moveType) { + if (getSession().getManager().hasBypass(player, (World) from.getExtent())) { return true; } boolean lastAllowed = StateFlag.test(lastValue); if (!lastAllowed && moveType.isCancellable()) { - Boolean override = toSet.queryValue(getPlugin().wrapPlayer(player), DefaultFlag.EXIT_OVERRIDE); + Boolean override = toSet.queryValue(player, Flags.EXIT_OVERRIDE); if (override == null || !override) { sendMessage(player); return false; diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/FarewellFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/FarewellFlag.java similarity index 68% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/FarewellFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/FarewellFlag.java index 1037b0e6..93d519eb 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/FarewellFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/FarewellFlag.java @@ -20,14 +20,14 @@ package com.sk89q.worldguard.session.handler; import com.google.common.collect.Sets; -import com.sk89q.worldguard.bukkit.commands.CommandUtils; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; -import org.bukkit.Location; -import org.bukkit.entity.Player; import java.util.Collections; import java.util.Set; @@ -48,24 +48,24 @@ public FarewellFlag(Session session) { super(session); } - private Set getMessages(Player player, ApplicableRegionSet set) { - return Sets.newLinkedHashSet(set.queryAllValues(getPlugin().wrapPlayer(player), DefaultFlag.FAREWELL_MESSAGE)); + private Set getMessages(LocalPlayer player, ApplicableRegionSet set) { + return Sets.newLinkedHashSet(set.queryAllValues(player, Flags.FAREWELL_MESSAGE)); } @Override - public void initialize(Player player, Location current, ApplicableRegionSet set) { + public void initialize(LocalPlayer player, Location current, ApplicableRegionSet set) { lastMessageStack = getMessages(player, set); } @Override - public boolean onCrossBoundary(Player player, Location from, Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) { + public boolean onCrossBoundary(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) { Set messages = getMessages(player, toSet); if (!messages.isEmpty()) { // Due to flag priorities, we have to collect the lower // priority flag values separately for (ProtectedRegion region : toSet) { - String message = region.getFlag(DefaultFlag.FAREWELL_MESSAGE); + String message = region.getFlag(Flags.FAREWELL_MESSAGE); if (message != null) { messages.add(message); } @@ -74,9 +74,11 @@ public boolean onCrossBoundary(Player player, Location from, Location to, Applic for (String message : lastMessageStack) { if (!messages.contains(message)) { - String effective = CommandUtils.replaceColorMacros(message); - effective = getPlugin().replaceMacros(player, effective); - player.sendMessage(effective.replaceAll("\\\\n", "\n").split("\\n")); + String effective = WorldGuard.getInstance().getPlatform().replaceColorMacros(message); + effective = WorldGuard.getInstance().getPlatform().replaceMacros(player, effective); + for (String mess : effective.replaceAll("\\\\n", "\n").split("\\n")) { + player.printRaw(mess); + } break; } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/FeedFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/FeedFlag.java similarity index 79% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/FeedFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/FeedFlag.java index da0bc602..e3420122 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/FeedFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/FeedFlag.java @@ -19,12 +19,11 @@ package com.sk89q.worldguard.session.handler; +import com.sk89q.worldedit.world.gamemode.GameModes; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.session.Session; -import org.bukkit.GameMode; -import org.bukkit.entity.Player; public class FeedFlag extends Handler { @@ -43,21 +42,20 @@ public FeedFlag(Session session) { } @Override - public void tick(Player player, ApplicableRegionSet set) { + public void tick(LocalPlayer player, ApplicableRegionSet set) { long now = System.currentTimeMillis(); - LocalPlayer localPlayer = getSession().getPlugin().wrapPlayer(player); - Integer feedAmount = set.queryValue(localPlayer, DefaultFlag.FEED_AMOUNT); - Integer feedDelay = set.queryValue(localPlayer, DefaultFlag.FEED_DELAY); - Integer minHunger = set.queryValue(localPlayer, DefaultFlag.MIN_FOOD); - Integer maxHunger = set.queryValue(localPlayer, DefaultFlag.MAX_FOOD); + Integer feedAmount = set.queryValue(player, Flags.FEED_AMOUNT); + Integer feedDelay = set.queryValue(player, Flags.FEED_DELAY); + Integer minHunger = set.queryValue(player, Flags.MIN_FOOD); + Integer maxHunger = set.queryValue(player, Flags.MAX_FOOD); if (feedAmount == null || feedDelay == null || feedAmount == 0 || feedDelay < 0) { return; } if (feedAmount < 0 && (getSession().isInvincible(player) - || (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE))) { + || (player.getGameMode() != GameModes.SURVIVAL && player.getGameMode() != GameModes.ADVENTURE))) { // don't starve invincible players return; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/FlagValueChangeHandler.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/FlagValueChangeHandler.java similarity index 68% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/FlagValueChangeHandler.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/FlagValueChangeHandler.java index 19fa8215..a2d74b41 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/FlagValueChangeHandler.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/FlagValueChangeHandler.java @@ -19,13 +19,13 @@ package com.sk89q.worldguard.session.handler; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; -import org.bukkit.Location; -import org.bukkit.entity.Player; import java.util.Set; @@ -40,14 +40,14 @@ protected FlagValueChangeHandler(Session session, Flag flag) { } @Override - public final void initialize(Player player, Location current, ApplicableRegionSet set) { - lastValue = set.queryValue(getPlugin().wrapPlayer(player), flag); + public final void initialize(LocalPlayer player, Location current, ApplicableRegionSet set) { + lastValue = set.queryValue(player, flag); onInitialValue(player, set, lastValue); } @Override - public boolean onCrossBoundary(Player player, Location from, Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) { - T currentValue = toSet.queryValue(getPlugin().wrapPlayer(player), flag); + public boolean onCrossBoundary(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) { + T currentValue = toSet.queryValue(player, flag); boolean allowed = true; if (currentValue == null && lastValue != null) { @@ -63,10 +63,10 @@ public boolean onCrossBoundary(Player player, Location from, Location to, Applic return allowed; } - protected abstract void onInitialValue(Player player, ApplicableRegionSet set, T value); + protected abstract void onInitialValue(LocalPlayer player, ApplicableRegionSet set, T value); - protected abstract boolean onSetValue(Player player, Location from, Location to, ApplicableRegionSet toSet, T currentValue, T lastValue, MoveType moveType); + protected abstract boolean onSetValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, T currentValue, T lastValue, MoveType moveType); - protected abstract boolean onAbsentValue(Player player, Location from, Location to, ApplicableRegionSet toSet, T lastValue, MoveType moveType); + protected abstract boolean onAbsentValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, T lastValue, MoveType moveType); } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/GameModeFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/GameModeFlag.java similarity index 69% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/GameModeFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/GameModeFlag.java index 4ade87c6..4dbf0ab4 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/GameModeFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/GameModeFlag.java @@ -19,14 +19,15 @@ package com.sk89q.worldguard.session.handler; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldedit.world.gamemode.GameMode; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; import javax.annotation.Nullable; @@ -44,7 +45,7 @@ public GameModeFlag create(Session session) { private GameMode setGameMode; public GameModeFlag(Session session) { - super(session, DefaultFlag.GAME_MODE); + super(session, Flags.GAME_MODE); } public GameMode getOriginalGameMode() { @@ -55,13 +56,13 @@ public GameMode getSetGameMode() { return setGameMode; } - private void updateGameMode(Player player, @Nullable GameMode newValue, World world) { + private void updateGameMode(LocalPlayer player, @Nullable GameMode newValue, World world) { if (!getSession().getManager().hasBypass(player, world) && newValue != null) { if (player.getGameMode() != newValue) { originalGameMode = player.getGameMode(); player.setGameMode(newValue); } else if (originalGameMode == null) { - originalGameMode = player.getServer().getDefaultGameMode(); + originalGameMode = WorldGuard.getInstance().getPlatform().getDefaultGameMode(); } } else { if (originalGameMode != null) { @@ -73,19 +74,19 @@ private void updateGameMode(Player player, @Nullable GameMode newValue, World wo } @Override - protected void onInitialValue(Player player, ApplicableRegionSet set, GameMode value) { + protected void onInitialValue(LocalPlayer player, ApplicableRegionSet set, GameMode value) { updateGameMode(player, value, player.getWorld()); } @Override - protected boolean onSetValue(Player player, Location from, Location to, ApplicableRegionSet toSet, GameMode currentValue, GameMode lastValue, MoveType moveType) { - updateGameMode(player, currentValue, to.getWorld()); + protected boolean onSetValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, GameMode currentValue, GameMode lastValue, MoveType moveType) { + updateGameMode(player, currentValue, (World) to.getExtent()); return true; } @Override - protected boolean onAbsentValue(Player player, Location from, Location to, ApplicableRegionSet toSet, GameMode lastValue, MoveType moveType) { - updateGameMode(player, null, player.getWorld()); + protected boolean onAbsentValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, GameMode lastValue, MoveType moveType) { + updateGameMode(player, null, (World) player.getExtent()); return true; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/GodMode.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/GodMode.java similarity index 66% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/GodMode.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/GodMode.java index 388f094c..04dc796f 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/GodMode.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/GodMode.java @@ -19,11 +19,9 @@ package com.sk89q.worldguard.session.handler; -import com.sk89q.commandbook.CommandBook; -import com.sk89q.commandbook.GodComponent; +import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.flags.StateFlag.State; import com.sk89q.worldguard.session.Session; -import org.bukkit.entity.Player; import javax.annotation.Nullable; @@ -43,35 +41,36 @@ public GodMode(Session session) { super(session); } - public boolean hasGodMode(Player player) { - if (getPlugin().getGlobalStateManager().hasCommandBookGodMode()) { - GodComponent god = CommandBook.inst().getComponentManager().getComponent(GodComponent.class); - if (god != null) { - return god.hasGodMode(player); - } - } + public boolean hasGodMode(LocalPlayer player) { + // TODO +// if (getPlugin().getGlobalStateManager().hasCommandBookGodMode()) { +// GodComponent god = CommandBook.inst().getComponentManager().getComponent(GodComponent.class); +// if (god != null) { +// return god.hasGodMode(player); +// } +// } return godMode; } - public void setGodMode(Player player, boolean godMode) { - if (getPlugin().getGlobalStateManager().hasCommandBookGodMode()) { - GodComponent god = CommandBook.inst().getComponentManager().getComponent(GodComponent.class); - if (god != null) { - god.enableGodMode(player); - } - } + public void setGodMode(LocalPlayer player, boolean godMode) { +// if (getPlugin().getGlobalStateManager().hasCommandBookGodMode()) { +// GodComponent god = CommandBook.inst().getComponentManager().getComponent(GodComponent.class); +// if (god != null) { +// god.enableGodMode(player); +// } +// } this.godMode = godMode; } @Nullable @Override - public State getInvincibility(Player player) { + public State getInvincibility(LocalPlayer player) { return hasGodMode(player) ? State.ALLOW : null; } - public static boolean set(Player player, Session session, boolean value) { + public static boolean set(LocalPlayer player, Session session, boolean value) { GodMode godMode = session.getHandler(GodMode.class); if (godMode != null) { godMode.setGodMode(player, value); diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/GreetingFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/GreetingFlag.java similarity index 71% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/GreetingFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/GreetingFlag.java index 167a9b29..895a8170 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/GreetingFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/GreetingFlag.java @@ -20,14 +20,14 @@ package com.sk89q.worldguard.session.handler; import com.google.common.collect.Sets; -import com.sk89q.worldguard.bukkit.commands.CommandUtils; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; -import org.bukkit.Location; -import org.bukkit.entity.Player; import java.util.Collection; import java.util.Collections; @@ -50,14 +50,16 @@ public GreetingFlag(Session session) { } @Override - public boolean onCrossBoundary(Player player, Location from, Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) { - Collection messages = toSet.queryAllValues(getPlugin().wrapPlayer(player), DefaultFlag.GREET_MESSAGE); + public boolean onCrossBoundary(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) { + Collection messages = toSet.queryAllValues(player, Flags.GREET_MESSAGE); for (String message : messages) { if (!lastMessageStack.contains(message)) { - String effective = CommandUtils.replaceColorMacros(message); - effective = getPlugin().replaceMacros(player, effective); - player.sendMessage(effective.replaceAll("\\\\n", "\n").split("\\n")); + String effective = WorldGuard.getInstance().getPlatform().replaceColorMacros(message); + effective = WorldGuard.getInstance().getPlatform().replaceMacros(player, effective); + for (String mess : effective.replaceAll("\\\\n", "\n").split("\\n")) { + player.printRaw(mess); + } break; } } @@ -68,7 +70,7 @@ public boolean onCrossBoundary(Player player, Location from, Location to, Applic // Due to flag priorities, we have to collect the lower // priority flag values separately for (ProtectedRegion region : toSet) { - String message = region.getFlag(DefaultFlag.GREET_MESSAGE); + String message = region.getFlag(Flags.GREET_MESSAGE); if (message != null) { lastMessageStack.add(message); } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/Handler.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/Handler.java similarity index 82% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/Handler.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/Handler.java index e0e12267..4227b589 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/Handler.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/Handler.java @@ -19,15 +19,14 @@ package com.sk89q.worldguard.session.handler; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.flags.StateFlag.State; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; import com.sk89q.worldguard.session.SessionManager; -import org.bukkit.Location; -import org.bukkit.entity.Player; import javax.annotation.Nullable; import java.util.Set; @@ -55,15 +54,6 @@ protected Handler(Session session) { this.session = session; } - /** - * Get the plugin. - * - * @return The plugin - */ - public WorldGuardPlugin getPlugin() { - return getSession().getManager().getPlugin(); - } - /** * Get the session. * @@ -81,11 +71,11 @@ public Session getSession() { * @param current The player's current location * @param set The regions for the current location */ - public void initialize(Player player, Location current, ApplicableRegionSet set) { + public void initialize(LocalPlayer player, Location current, ApplicableRegionSet set) { } /** - * Called when {@link Session#testMoveTo(Player, Location, MoveType)} is called. + * Called when {@link Session#testMoveTo(LocalPlayer, Location, MoveType)} is called. * *

If this method returns {@code false}, then no other handlers * will be run (for this move attempt).

@@ -97,7 +87,7 @@ public void initialize(Player player, Location current, ApplicableRegionSet set) * @param moveType The type of movement * @return Whether the movement should be allowed */ - public boolean testMoveTo(Player player, Location from, Location to, ApplicableRegionSet toSet, MoveType moveType) { + public boolean testMoveTo(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, MoveType moveType) { return true; } @@ -106,7 +96,7 @@ public boolean testMoveTo(Player player, Location from, Location to, ApplicableR * there are fewer regions or more regions. * *

This is called only if the move test - * ({@link Session#testMoveTo(Player, Location, MoveType)}) was successful.

+ * ({@link Session#testMoveTo(LocalPlayer, Location, MoveType)}) was successful.

* *

If this method returns {@code false}, then no other handlers * will be run (for this move attempt).

@@ -120,7 +110,7 @@ public boolean testMoveTo(Player player, Location from, Location to, ApplicableR * @param moveType The type of move * @return Whether the movement should be allowed */ - public boolean onCrossBoundary(Player player, Location from, Location to, ApplicableRegionSet toSet, + public boolean onCrossBoundary(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) { return true; } @@ -132,7 +122,7 @@ public boolean onCrossBoundary(Player player, Location from, Location to, Applic * @param player The player * @param set The regions for the player's current location */ - public void tick(Player player, ApplicableRegionSet set) { + public void tick(LocalPlayer player, ApplicableRegionSet set) { } /** @@ -145,7 +135,7 @@ public void tick(Player player, ApplicableRegionSet set) { * @return Invincibility state */ @Nullable - public State getInvincibility(Player player) { + public State getInvincibility(LocalPlayer player) { return null; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/HealFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/HealFlag.java similarity index 79% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/HealFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/HealFlag.java index 78eefd9c..8590c45a 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/HealFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/HealFlag.java @@ -19,12 +19,11 @@ package com.sk89q.worldguard.session.handler; +import com.sk89q.worldedit.world.gamemode.GameModes; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.session.Session; -import org.bukkit.GameMode; -import org.bukkit.entity.Player; public class HealFlag extends Handler { @@ -43,26 +42,24 @@ public HealFlag(Session session) { } @Override - public void tick(Player player, ApplicableRegionSet set) { - LocalPlayer localPlayer = getPlugin().wrapPlayer(player); - + public void tick(LocalPlayer player, ApplicableRegionSet set) { if (player.getHealth() <= 0) { return; } long now = System.currentTimeMillis(); - Integer healAmount = set.queryValue(localPlayer, DefaultFlag.HEAL_AMOUNT); - Integer healDelay = set.queryValue(localPlayer, DefaultFlag.HEAL_DELAY); - Double minHealth = set.queryValue(localPlayer, DefaultFlag.MIN_HEAL); - Double maxHealth = set.queryValue(localPlayer, DefaultFlag.MAX_HEAL); + Integer healAmount = set.queryValue(player, Flags.HEAL_AMOUNT); + Integer healDelay = set.queryValue(player, Flags.HEAL_DELAY); + Double minHealth = set.queryValue(player, Flags.MIN_HEAL); + Double maxHealth = set.queryValue(player, Flags.MAX_HEAL); if (healAmount == null || healDelay == null || healAmount == 0 || healDelay < 0) { return; } if (healAmount < 0 && (getSession().isInvincible(player) - || (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE))) { + || (player.getGameMode() != GameModes.SURVIVAL && player.getGameMode() != GameModes.ADVENTURE))) { // don't damage invincible players return; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/InvincibilityFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/InvincibilityFlag.java similarity index 71% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/InvincibilityFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/InvincibilityFlag.java index 13f6bfe2..79cc2efb 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/InvincibilityFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/InvincibilityFlag.java @@ -19,13 +19,13 @@ package com.sk89q.worldguard.session.handler; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.StateFlag.State; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; -import org.bukkit.Location; -import org.bukkit.entity.Player; import javax.annotation.Nullable; @@ -43,30 +43,30 @@ public InvincibilityFlag create(Session session) { private State invincibility; public InvincibilityFlag(Session session) { - super(session, DefaultFlag.INVINCIBILITY); + super(session, Flags.INVINCIBILITY); } @Override - protected void onInitialValue(Player player, ApplicableRegionSet set, State value) { + protected void onInitialValue(LocalPlayer player, ApplicableRegionSet set, State value) { invincibility = value; } @Override - protected boolean onSetValue(Player player, Location from, Location to, ApplicableRegionSet toSet, State currentValue, State lastValue, MoveType moveType) { + protected boolean onSetValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, State currentValue, State lastValue, MoveType moveType) { invincibility = currentValue; return true; } @Override - protected boolean onAbsentValue(Player player, Location from, Location to, ApplicableRegionSet toSet, State lastValue, MoveType moveType) { + protected boolean onAbsentValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, State lastValue, MoveType moveType) { invincibility = null; return true; } @Override @Nullable - public State getInvincibility(Player player) { - if (invincibility == State.DENY && getPlugin().hasPermission(player, "worldguard.god.override-regions")) { + public State getInvincibility(LocalPlayer player) { + if (invincibility == State.DENY && player.hasPermission("worldguard.god.override-regions")) { return null; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/NotifyEntryFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/NotifyEntryFlag.java similarity index 60% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/NotifyEntryFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/NotifyEntryFlag.java index 575b7812..4e65cb38 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/NotifyEntryFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/NotifyEntryFlag.java @@ -19,14 +19,17 @@ package com.sk89q.worldguard.session.handler; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.util.formatting.ColorCodeBuilder; +import com.sk89q.worldedit.util.formatting.Style; +import com.sk89q.worldedit.util.formatting.StyledFragment; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.entity.Player; public class NotifyEntryFlag extends FlagValueChangeHandler { @@ -39,16 +42,16 @@ public NotifyEntryFlag create(Session session) { } public NotifyEntryFlag(Session session) { - super(session, DefaultFlag.NOTIFY_ENTER); + super(session, Flags.NOTIFY_ENTER); } @Override - protected void onInitialValue(Player player, ApplicableRegionSet set, Boolean value) { + protected void onInitialValue(LocalPlayer player, ApplicableRegionSet set, Boolean value) { } @Override - protected boolean onSetValue(Player player, Location from, Location to, ApplicableRegionSet toSet, Boolean currentValue, Boolean lastValue, MoveType moveType) { + protected boolean onSetValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, Boolean currentValue, Boolean lastValue, MoveType moveType) { StringBuilder regionList = new StringBuilder(); for (ProtectedRegion region : toSet) { @@ -59,17 +62,17 @@ protected boolean onSetValue(Player player, Location from, Location to, Applicab regionList.append(region.getId()); } - getPlugin().broadcastNotification(ChatColor.GRAY + "WG: " - + ChatColor.LIGHT_PURPLE + player.getName() - + ChatColor.GOLD + " entered NOTIFY region: " - + ChatColor.WHITE - + regionList); + WorldGuard.getInstance().getPlatform().broadcastNotification( + ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.GRAY).append("WG: ")) + .append(new StyledFragment(Style.PURPLE).append(player.getName())) + .append(new StyledFragment(Style.YELLOW_DARK).append(" entered NOTIFY region: " + regionList))) + ); return true; } @Override - protected boolean onAbsentValue(Player player, Location from, Location to, ApplicableRegionSet toSet, Boolean lastValue, MoveType moveType) { + protected boolean onAbsentValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, Boolean lastValue, MoveType moveType) { return true; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/NotifyExitFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/NotifyExitFlag.java similarity index 56% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/NotifyExitFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/NotifyExitFlag.java index b243e372..cbdad837 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/NotifyExitFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/NotifyExitFlag.java @@ -19,13 +19,16 @@ package com.sk89q.worldguard.session.handler; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.util.formatting.ColorCodeBuilder; +import com.sk89q.worldedit.util.formatting.Style; +import com.sk89q.worldedit.util.formatting.StyledFragment; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.entity.Player; public class NotifyExitFlag extends FlagValueChangeHandler { @@ -40,24 +43,26 @@ public NotifyExitFlag create(Session session) { private Boolean notifiedForLeave = false; public NotifyExitFlag(Session session) { - super(session, DefaultFlag.NOTIFY_LEAVE); + super(session, Flags.NOTIFY_LEAVE); } @Override - protected void onInitialValue(Player player, ApplicableRegionSet set, Boolean value) { + protected void onInitialValue(LocalPlayer player, ApplicableRegionSet set, Boolean value) { } @Override - protected boolean onSetValue(Player player, Location from, Location to, ApplicableRegionSet toSet, Boolean currentValue, Boolean lastValue, MoveType moveType) { + protected boolean onSetValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, Boolean currentValue, Boolean lastValue, MoveType moveType) { return true; } @Override - protected boolean onAbsentValue(Player player, Location from, Location to, ApplicableRegionSet toSet, Boolean lastValue, MoveType moveType) { - getPlugin().broadcastNotification(ChatColor.GRAY + "WG: " - + ChatColor.LIGHT_PURPLE + player.getName() - + ChatColor.GOLD + " left NOTIFY region"); + protected boolean onAbsentValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, Boolean lastValue, MoveType moveType) { + WorldGuard.getInstance().getPlatform().broadcastNotification( + ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.GRAY).append("WG: ")) + .append(new StyledFragment(Style.PURPLE).append(player.getName())) + .append(new StyledFragment(Style.YELLOW_DARK).append(" left NOTIFY region"))) + ); return true; } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/TimeLockFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/TimeLockFlag.java similarity index 75% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/TimeLockFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/TimeLockFlag.java index 9a61a060..660f5be8 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/TimeLockFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/TimeLockFlag.java @@ -19,12 +19,12 @@ package com.sk89q.worldguard.session.handler; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; -import org.bukkit.Location; -import org.bukkit.entity.Player; import javax.annotation.Nullable; import java.util.regex.Pattern; @@ -45,10 +45,10 @@ public TimeLockFlag create(Session session) { private static Pattern timePattern = Pattern.compile("(\\+|-)?\\d+"); public TimeLockFlag(Session session) { - super(session, DefaultFlag.TIME_LOCK); + super(session, Flags.TIME_LOCK); } - private void updatePlayerTime(Player player, @Nullable String value) { + private void updatePlayerTime(LocalPlayer player, @Nullable String value) { // store settings, regardless of if we change anything initialRelative = player.isPlayerTimeRelative(); initialTime = player.getPlayerTimeOffset(); @@ -56,12 +56,7 @@ private void updatePlayerTime(Player player, @Nullable String value) { // invalid input return; } - boolean relative; - if (value.startsWith("+") || value.startsWith("-")) { - relative = true; - } else { - relative = false; - } + boolean relative = value.startsWith("+") || value.startsWith("-"); Long time = Long.valueOf(value); // if (!relative && (time < 0L || time > 24000L)) { // invalid time, reset to 0 // time = 0L; @@ -70,18 +65,18 @@ private void updatePlayerTime(Player player, @Nullable String value) { } @Override - protected void onInitialValue(Player player, ApplicableRegionSet set, String value) { + protected void onInitialValue(LocalPlayer player, ApplicableRegionSet set, String value) { updatePlayerTime(player, value); } @Override - protected boolean onSetValue(Player player, Location from, Location to, ApplicableRegionSet toSet, String currentValue, String lastValue, MoveType moveType) { + protected boolean onSetValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, String currentValue, String lastValue, MoveType moveType) { updatePlayerTime(player, currentValue); return true; } @Override - protected boolean onAbsentValue(Player player, Location from, Location to, ApplicableRegionSet toSet, String lastValue, MoveType moveType) { + protected boolean onAbsentValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, String lastValue, MoveType moveType) { player.setPlayerTime(initialTime, initialRelative); initialRelative = true; initialTime = 0L; diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/WaterBreathing.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/WaterBreathing.java similarity index 93% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/WaterBreathing.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/WaterBreathing.java index ac1d24af..adbfd7be 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/WaterBreathing.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/WaterBreathing.java @@ -19,8 +19,8 @@ package com.sk89q.worldguard.session.handler; +import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.session.Session; -import org.bukkit.entity.Player; public class WaterBreathing extends Handler { @@ -46,7 +46,7 @@ public void setWaterBreathing(boolean waterBreathing) { this.waterBreathing = waterBreathing; } - public static boolean set(Player player, Session session, boolean value) { + public static boolean set(LocalPlayer player, Session session, boolean value) { WaterBreathing waterBreathing = session.getHandler(WaterBreathing.class); if (waterBreathing != null) { waterBreathing.setWaterBreathing(value); diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/WeatherLockFlag.java b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/WeatherLockFlag.java similarity index 73% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/WeatherLockFlag.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/WeatherLockFlag.java index e11a2802..38998277 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/handler/WeatherLockFlag.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/session/handler/WeatherLockFlag.java @@ -19,13 +19,13 @@ package com.sk89q.worldguard.session.handler; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.world.weather.WeatherType; +import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; -import org.bukkit.Location; -import org.bukkit.WeatherType; -import org.bukkit.entity.Player; import javax.annotation.Nullable; @@ -42,16 +42,16 @@ public WeatherLockFlag create(Session session) { private WeatherType initialWeather; public WeatherLockFlag(Session session) { - super(session, DefaultFlag.WEATHER_LOCK); + super(session, Flags.WEATHER_LOCK); } - private void updatePlayerWeather(Player player, @Nullable WeatherType value) { + private void updatePlayerWeather(LocalPlayer player, @Nullable WeatherType value) { initialWeather = player.getPlayerWeather(); player.setPlayerWeather(value); } @Override - protected void onInitialValue(Player player, ApplicableRegionSet set, WeatherType value) { + protected void onInitialValue(LocalPlayer player, ApplicableRegionSet set, WeatherType value) { if (value == null) { initialWeather = null; return; @@ -60,13 +60,13 @@ protected void onInitialValue(Player player, ApplicableRegionSet set, WeatherTyp } @Override - protected boolean onSetValue(Player player, Location from, Location to, ApplicableRegionSet toSet, WeatherType currentValue, WeatherType lastValue, MoveType moveType) { + protected boolean onSetValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, WeatherType currentValue, WeatherType lastValue, MoveType moveType) { updatePlayerWeather(player, currentValue); return true; } @Override - protected boolean onAbsentValue(Player player, Location from, Location to, ApplicableRegionSet toSet, WeatherType lastValue, MoveType moveType) { + protected boolean onAbsentValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, WeatherType lastValue, MoveType moveType) { if (initialWeather != null) { player.setPlayerWeather(initialWeather); } else { diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/ChangeTracked.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/ChangeTracked.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/ChangeTracked.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/ChangeTracked.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/Enums.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/Enums.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/Enums.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/Enums.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/util/Locations.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/Locations.java similarity index 94% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/util/Locations.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/Locations.java index 7e0bc9c1..d0f4733c 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/util/Locations.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/util/Locations.java @@ -17,9 +17,9 @@ * along with this program. If not, see . */ -package com.sk89q.worldguard.bukkit.util; +package com.sk89q.worldguard.util; -import org.bukkit.Location; +import com.sk89q.worldedit.util.Location; public final class Locations { diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/MathUtils.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/MathUtils.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/MathUtils.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/MathUtils.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/Normal.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/Normal.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/Normal.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/Normal.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/collect/EntryBase.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/collect/EntryBase.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/collect/EntryBase.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/collect/EntryBase.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/collect/LongBaseHashTable.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/collect/LongBaseHashTable.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/collect/LongBaseHashTable.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/collect/LongBaseHashTable.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/collect/LongHash.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/collect/LongHash.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/collect/LongHash.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/collect/LongHash.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/collect/LongHashSet.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/collect/LongHashSet.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/collect/LongHashSet.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/collect/LongHashSet.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/collect/LongHashTable.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/collect/LongHashTable.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/collect/LongHashTable.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/collect/LongHashTable.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/command/CommandFilter.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/command/CommandFilter.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/command/CommandFilter.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/command/CommandFilter.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/concurrent/EvenMoreExecutors.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/concurrent/EvenMoreExecutors.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/concurrent/EvenMoreExecutors.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/concurrent/EvenMoreExecutors.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/io/Closer.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/io/Closer.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/io/Closer.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/io/Closer.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/logging/RecordMessagePrefixer.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/logging/RecordMessagePrefixer.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/logging/RecordMessagePrefixer.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/logging/RecordMessagePrefixer.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/net/HttpRequest.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/net/HttpRequest.java similarity index 93% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/net/HttpRequest.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/net/HttpRequest.java index deff723a..3c3dd6ef 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/net/HttpRequest.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/util/net/HttpRequest.java @@ -21,11 +21,23 @@ import com.sk89q.worldguard.util.io.Closer; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import java.io.*; -import java.net.*; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -37,7 +49,7 @@ public class HttpRequest implements Closeable { private static final int READ_TIMEOUT = 1000 * 5; private static final int READ_BUFFER_SIZE = 1024 * 8; - private final Map headers = new HashMap(); + private final Map headers = new HashMap<>(); private final String method; private final URL url; private String contentType; @@ -359,7 +371,7 @@ private static URL reformat(URL existing) { * Used with {@link #bodyForm(Form)}. */ public final static class Form { - public final List elements = new ArrayList(); + public final List elements = new ArrayList<>(); private Form() { } @@ -436,24 +448,6 @@ public String asString(String encoding) throws IOException { return new String(data, encoding); } - /** - * Return the result as an instance of the given class that has been - * deserialized from a XML payload. - * - * @return the object - * @throws java.io.IOException on I/O error - */ - @SuppressWarnings("unchecked") - public T asXml(Class cls) throws IOException { - try { - JAXBContext context = JAXBContext.newInstance(cls); - Unmarshaller um = context.createUnmarshaller(); - return (T) um.unmarshal(new ByteArrayInputStream(data)); - } catch (JAXBException e) { - throw new IOException(e); - } - } - /** * Save the result to a file. * diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/paste/EngineHubPaste.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/paste/EngineHubPaste.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/paste/EngineHubPaste.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/paste/EngineHubPaste.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/paste/Pastebin.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/paste/Pastebin.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/paste/Pastebin.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/paste/Pastebin.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/paste/Paster.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/paste/Paster.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/paste/Paster.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/paste/Paster.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/paste/Pasters.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/paste/Pasters.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/paste/Pasters.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/paste/Pasters.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/profiler/SamplerBuilder.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/profiler/SamplerBuilder.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/profiler/SamplerBuilder.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/profiler/SamplerBuilder.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/profiler/StackNode.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/profiler/StackNode.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/profiler/StackNode.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/profiler/StackNode.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/profiler/StackTraceNode.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/profiler/StackTraceNode.java similarity index 98% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/profiler/StackTraceNode.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/profiler/StackTraceNode.java index 18c5f13a..ef0c4867 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/profiler/StackTraceNode.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/util/profiler/StackTraceNode.java @@ -19,8 +19,6 @@ package com.sk89q.worldguard.util.profiler; -import java.util.List; - public class StackTraceNode extends StackNode { private final String className; diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/profiler/ThreadIdFilter.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/profiler/ThreadIdFilter.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/profiler/ThreadIdFilter.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/profiler/ThreadIdFilter.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/profiler/ThreadNameFilter.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/profiler/ThreadNameFilter.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/profiler/ThreadNameFilter.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/profiler/ThreadNameFilter.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/DataReport.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/report/DataReport.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/DataReport.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/report/DataReport.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/RegionReport.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/report/RegionReport.java similarity index 96% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/RegionReport.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/report/RegionReport.java index e61e9d0e..8d264752 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/RegionReport.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/util/report/RegionReport.java @@ -33,7 +33,7 @@ public RegionReport(ProtectedRegion region) { append("Priority", region.getPriority()); append("Owners", region.getOwners()); append("Members", region.getMembers()); - append("Flags", region.getFlags()); + append("FlagUtil", region.getFlags()); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/Report.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/report/Report.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/Report.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/report/Report.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/ReportList.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/report/ReportList.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/ReportList.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/report/ReportList.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/ShallowObjectReport.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/report/ShallowObjectReport.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/ShallowObjectReport.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/report/ShallowObjectReport.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/StackTraceReport.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/report/StackTraceReport.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/StackTraceReport.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/report/StackTraceReport.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/SystemInfoReport.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/report/SystemInfoReport.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/SystemInfoReport.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/report/SystemInfoReport.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/Unreported.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/report/Unreported.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/report/Unreported.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/report/Unreported.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/sql/DataSourceConfig.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/sql/DataSourceConfig.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/sql/DataSourceConfig.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/sql/DataSourceConfig.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/AbstractTask.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/task/AbstractTask.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/AbstractTask.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/task/AbstractTask.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/FutureForwardingTask.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/task/FutureForwardingTask.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/FutureForwardingTask.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/task/FutureForwardingTask.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/SimpleSupervisor.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/task/SimpleSupervisor.java similarity index 93% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/SimpleSupervisor.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/task/SimpleSupervisor.java index edad15b2..df014d4c 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/SimpleSupervisor.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/util/task/SimpleSupervisor.java @@ -31,13 +31,13 @@ */ public class SimpleSupervisor implements Supervisor { - private final List> monitored = new ArrayList>(); + private final List> monitored = new ArrayList<>(); private final Object lock = new Object(); @Override public List> getTasks() { synchronized (lock) { - return new ArrayList>(monitored); + return new ArrayList<>(monitored); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/Supervisor.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/task/Supervisor.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/Supervisor.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/task/Supervisor.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/Task.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/task/Task.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/Task.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/task/Task.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/TaskStateComparator.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/task/TaskStateComparator.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/TaskStateComparator.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/task/TaskStateComparator.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/progress/Progress.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/task/progress/Progress.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/progress/Progress.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/task/progress/Progress.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/progress/ProgressIterator.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/task/progress/ProgressIterator.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/progress/ProgressIterator.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/task/progress/ProgressIterator.java diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/progress/ProgressObservable.java b/worldguard-core/src/main/java/com/sk89q/worldguard/util/task/progress/ProgressObservable.java similarity index 100% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/util/task/progress/ProgressObservable.java rename to worldguard-core/src/main/java/com/sk89q/worldguard/util/task/progress/ProgressObservable.java diff --git a/worldguard-legacy/build.gradle b/worldguard-legacy/build.gradle index be24e0c0..d0b26ad8 100644 --- a/worldguard-legacy/build.gradle +++ b/worldguard-legacy/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'eclipse' apply plugin: 'idea' -project.version = '6.2.2-SNAPSHOT' +project.version = '7.0.0-SNAPSHOT' ext.internalVersion = project.version + ";" + gitCommitHash sourceCompatibility = 1.8 @@ -10,18 +10,13 @@ checkstyle.configFile = new File(projectDir, "config/checkstyle/checkstyle.xml") dependencies { - compile 'org.khelekore:prtree:1.5.0' - compile 'org.bukkit:bukkit:1.12-R0.1-SNAPSHOT' - compile 'com.sk89q.worldedit:worldedit-bukkit:6.1.3-SNAPSHOT' - compile 'com.sk89q:squirrelid:0.1.0' - compile 'org.flywaydb:flyway-core:3.0' + compile project(':worldguard-core') + compile 'org.bukkit:bukkit:1.13-pre7-R0.1-SNAPSHOT' + compile 'com.sk89q.worldedit:worldedit-bukkit:7.0.0-SNAPSHOT' compile ('com.sk89q:commandbook:2.3') { exclude group: 'com.sk89q', module: 'worldedit' exclude group: 'com.zachsthings.libcomponents' } - compile 'net.sf.opencsv:opencsv:2.0' - compile 'com.googlecode.json-simple:json-simple:1.1.1' - compile 'com.google.code.findbugs:jsr305:1.3.9' testCompile 'junit:junit:4.11' testCompile 'org.hamcrest:hamcrest-library:1.2.1' } @@ -39,11 +34,7 @@ shadowJar { dependencies { - include(dependency('org.khelekore:prtree:1.5.0')) - include(dependency('com.sk89q:squirrelid:0.1.0')) - include(dependency('org.flywaydb:flyway-core:3.0')) - include(dependency('com.googlecode.json-simple:json-simple:1.1.1')) - include(dependency('net.sf.opencsv:opencsv:2.0')) + include(dependency(':worldguard-core')) } relocate('org.flywaydb', 'com.sk89q.worldguard.internal.flywaydb') diff --git a/worldguard-legacy/config/checkstyle/checkstyle.xml b/worldguard-legacy/config/checkstyle/checkstyle.xml index e09c319e..cfa8f826 100644 --- a/worldguard-legacy/config/checkstyle/checkstyle.xml +++ b/worldguard-legacy/config/checkstyle/checkstyle.xml @@ -27,7 +27,6 @@
- diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/BukkitConfigurationManager.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/BukkitConfigurationManager.class new file mode 100644 index 0000000000000000000000000000000000000000..ecf2aebb23023b4f59dc602484e99bd4d3133e0b GIT binary patch literal 4162 zcmbVP`%@d&75**=7NoTy#5h164mftPjFBDF)B)ECU~H3!Mx~dqv3oTF2tc>L4IFM;3+J{@id;1 zk1w?2S$r{$=kTQj3@j&*MJ|CyVamsfhJ2hz7Zcb6OIlviuqtQlIC@Z!Gmb=c6DZ1TCmz0>y6Sp%E*}_PF0~x2 zu3CO-QO=x|GxKWwm_YB7f#X{RbHOTE%eFc0IIeH_mg|%Rjx+`fe9KOGX3_Qh)CDIT zm^os#DvvaLAbrWWVx-i&d5h)pV-j7O=yjbNe?1*DNBO89LlH^88Q;jRvXUwi4PPZNsR%4>N!k|cL-qJI zGTpXrl#JpqYZO#ImCCB+z^JG2cudF7@N

43Bzm(TwZh?b}tRrb-af^ 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 Df?kBv literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/BukkitRegionContainer$1.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/BukkitRegionContainer$1.class new file mode 100644 index 0000000000000000000000000000000000000000..83bfdd6056b60549ba74cbc3838f457699e1a0a4 GIT binary patch literal 2773 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 LkerJ$DG&WWh@jT} literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/BukkitWorldGuardPlatform.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/BukkitWorldGuardPlatform.class new file mode 100644 index 0000000000000000000000000000000000000000..60db7b3a1b68fb7b870c5a87f48591f30610ea5e GIT binary patch literal 6013 zcmb_gXLuCX6+LfRF{|B?1ZzZdY?=i^lC==P1|+bBC{`>1u_y+ojaH*&&}c^9odx3* zr#Gip9@KQPRvLs%PS0wRDyh;vVoxp2Scr9*8;v{ZO;B|8F`Xt_fHzx3=6prG} z^2u8?yfuj>c$+%2I$oWw_PPm)%DRKr;f_iFf< zKx4ry6fD;nFdQRi<^?Y8&$?ro!sy0L*JqBqd3!ilH1fllU|D9cVtJQ9L)LXhtXwf~ zc!Uwy7%e|k938d1%rdsrH&_c=7S*ER}tvOr&JwCeG^ z>zP^UHS{skwGebp z-W<1$tl8_@ZhpYX=3RP!Wu&$m0!*@kqQVUjz?2a7)x=McVAq`#qZraKHWZsx}vy}>=}Q`gom4WH8RX?nZp*d)mmrpZ!A=@lAY7!?$&O2jA83JspQ|SjYGA1Ex}o!|1hW_@Ry;;eHK2 z*6|bkl&RZd4Y%m{8Gf$e7dn24`vnp${x;|QukdRfzrk+>mPYanl_MR$!|w%_RILjo zkcu$NNsFplEmF}D)3CiGRP+b@Q7ZZq_qTeg+L2EGkk#>L{6)uK@i!fR$3JxZ6aUij zZ#*EdaHi^^<3D&%$3u8n{ym}#z|n-zMNG`nL|hkjaC8*0Q^yTrwk9-PByhhj>ggPj z)J00@ItHI%#$A0~T-jGs(*gfPO!!92fwQ!nf5ZE3m zey&W3=obX$DPmQXo0Yaa&DzBRQ6Be^pusatpd*q(;EOQrV$Ncd7`L1Pq1Mb)BxVp~ zU0GXmx>mToT9xX8lCmAN4BNVqMP+U%G5jF0RZu5K{+K*oo5?A(WYCn;R2-J`CmBl0 z?X{&z)4k7%O7U^^lm}O65y6&(G(;^SC3dE^+R6eKwuTv*a(`#kBV}EJB$U}RH7_Au zY8~~rR)tIL#lY#lQ+kGtaYmP&gdy)#8&(5!K5f{_DpeKX@^$TJv*0^(kLn`)W1i>c zLOQdYZ58cAb;2nNW@=SfTIeLd6`WVX4EK{2yVCD5DHAky++g9ezxRldA2hEonoiaX zH*Xd5ku6+`B=$QNMf>F0T_U1(-2VN2+ZmX~vbl1GmC$obeBuR_zZQz8s`9FrC+cr*-5!lT-6jdF3cDxh(EYfD zeJoioCVr`DAizHpL4MUxjSSWSQi0+xAKtqUxc>n^X@sr2}m;S96aQP)A$W`|QI zB$<*;_&}+hu0AXMO;avzJhyE(r{32WhjxgZ-XqZByz};v%)P4qYrZ6{#vIhBG3s{L}tWt>ceW?JE z@^~z+A*PTGOn{wHW6+jUNZd|wpX_W-1MMMVb<@Q5<3J$X!_`t{1BtayAsxdcE~o}s z6XMb^&7}bcajnwLW;B4?#H)m>YoEltYM2cnm=YH*#dQJ9Uc|v-Ik?atKkCvcTqMZ-VmWTV7fViJP5W6a*&JUKpTN?yShl&Y zBfWf4-4s@oKrWGwS|+hlVMw-d73MZ1dB2Gt;JWDWZiZtEgL(!3uVlC1g8}|u$22?2 z(8{oHCD&dC>fVG$#=q&3=}UNwocGxesSEwn@a`GqH}Y+V^MqxnHXoA7R9C5niy`yLhd9voWRy>W=P9#$r_QD!|l=uww*>dm_xzbWXQcNQApQ`RYA9&%9z>gl&Id5>0X`J+%^+}Q53e#LO>*Z< zV1vKmFDq}yMmh{+p)stx61GsQ(Qq{2;4hff%U*HCu2!y)>E@>5s z%VmykoWQ0@Y_3MKLP%+!#+)8H^u`(*6X>cIUJw#4(TL&6v@3?EU=OcJ!VKW!ELrvc E1*(OUp#T5? literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/ProtectionQuery.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/ProtectionQuery.class new file mode 100644 index 0000000000000000000000000000000000000000..00308c8d34d1d56dd9f64c06b380eafa10945486 GIT binary patch literal 3265 zcmb`JTXWk)6vzK-J658&O&l611xl}pbE^upw5dzl+e_kV3=9Ui%~60L6)0_ zFTgk8fiJ)dFFZLz2Zm=p6vNq-;(O$D#(vPQj(7j(x96Na_P_uA`8R+Y_)13{w=~?= zu&Cn>vN~e8tK$nS>9~jc8kThoV@1QN4qc9GI#O7dj|Una>KK#bBOPfuK4wVXwH(V| zVu)vEb{GN`YX0;mbYwflK8z$?j?W44Vyb9 z<7wd~Ezjm$uXH3KeM^Bh;|BKy(b(CUuNj6+UaKn1E+K|ta;5e&O!kyz7TItK-Y^=QHQSb9 zY>UN;CwQ5H*(VkS88<^kFF3g}Fq~~YS?eN(bR*u69iro=PZ^fBb)xqV!X!NEXsOV)+EYd2_^LjRVm+bA=qYfDq?3%DeiH@f@sCSK2g`cOJAgi{R ziR9`bkc|#UuN{3-QS&X^ID$)mZ+T+bDQ;8iSmll>Y-+a0237t_e0%J-kw#eR#Rt9)~u<|`K8s3$l)`Nyip1&Kc=QbyFG+e|x^v6SfhCy8slk|L--V7QUjYG3_ zus>)L!+Z2hD&suP(mWL`!238yZjE&Bz~pJC-e9;Ltd0@IH5|e9L~&gR6dGJp4X!CzgnG*Size0anN9 zzFe>S2I&)g+9zS3^au+a^w9*+d=%19wb9 zDBm@(%3$tuw=i-eM|uov&8|PRgTeg=Z|!%!a(hn1RnP83gMkd~U5z}^$WFYz&X5lK zGAOLmU{iWB++uiLoR4F^)ulE=s^RwpL$)bB@jM!KgnG$4E+LCezsub=S5nU>U`lt$ zU_J9Zp&Bj^0zuRDxylx5Bz2+BgB_uUG6f4thLzb2BzHtbwYa~y7*>l@=!?#t=!XBOnQ2MK<6)%8 zr`;*>Lo%_e_?yshGenS zrkiHal>-vFoK^%-CV7M;>9eo^hO;zkAQ2k( zgn`g=I8RxRG$o^#{F)FxB|2TgEPp|wQvHh5Cz?%jeT=#C<5fpoCb3_NYnix=E7bTy yV!b+H-8f>c{KP3@O`l{PcW6x*#vP_`Ev|hXH{yH~w`Z5?^s(Qy~| zG!%3cQPMD_VOqm|25q0ac~963^EFGgO~19Y{KjmAt(Fs*Vc@uCMYY>pHvKx6+!o%t zupK|}c;G0x%Fq|=I)1*)Fw+Hpt30=9humu(d)kUL)kyQw4Q(ezK60cJJZ5MX&IawW zJ}uAUCPSv8nt~x)bEJ44wj08G#TzbZhHJ{=?k4w~NKTZQ=v)lOGbx2vak=jc63bn& z|9{B*93?32g_71nL}73v;8v^7UnfEI4HbHpcZ4BD^LoSNV>#>mt}y zO${>!OiUOULe_wRK?Au+EMr!~oPl{PXn0^?5f2#_Iz|1HF#U^5YgPrFlDo&H*05w? z87oxPUhtEI^K%Tjh_vZ)X`3$^d%_ARza7=?G!eWMOypF5crG{ zTE}8=7NZy^i9oSSMi!SakvLo@n+P%f37JEjJ4D|*43<71HLM+?e=BmFM&x)Xj{B9^ oeIv&|;sC}GGzoAywq;{vc!fSwxQc7EXXwJbK@h}89H5<^-~On2x&QzG literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/WorldGuardPlugin.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/WorldGuardPlugin.class new file mode 100644 index 0000000000000000000000000000000000000000..93c7baa75a00c2a314f0da59b8a55463d490f53e GIT binary patch literal 27775 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 X!S@&ttp?xx&tUVV%4wHR&9C?$bw>4o literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/cause/Cause$1.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/cause/Cause$1.class new file mode 100644 index 0000000000000000000000000000000000000000..6fc2ff5d4164fee171567f62682ecf3739e4290b GIT binary patch literal 231 zcma)$K?=e!5Ji8q+FAvB1Q&w1F$gYnEebBgg(pbUP}{}?n?~>E!UK3Haq0=2VdnE; z{$t*s=L^6J!w_MJ0YiMYzLsiVXhmi#yif>jnOi@&dDh71s`c$lyIeQ$ri_g>G}_rACa zU^6~a&>KS|`sC3cLnQ`c7{m(|B=;*Aia|lYB!=U75hL4;6$P)xu@J9G4PC)#9Q8=Yk%6J$sDf-1V=|Ra%A|)3 zX>0YvH~*p@HSLV)(wKla%-}jq+w?kVHrcaogpY0~!&s_%P21?tPmCJwus&+>rnc8f z>(+?wnvyPFhP*M8i77ksrj;>V0ky}r4Y%9UbAHCHy=iAc%Z+c{c0!wUTq~2!>uyFH z&5w_pp61s@>z37NDq3I~s&VQ#!!t5N<{A1GJq%LMWV$R%pgwuz@uJAEBRMDUru{Je z8kZMMAk3VNQ?%tUR>LwT44dgMoWqtt<&dYR$NTi-eu@e@1Xk_O+nzaLjF>r-xew~D zK4Ex<+hyC1r+cPjvjz=*V5cGWFc+e%T#HIStu2C@wcFeNJwFX^B&LZoE2D6W{{nzXLL{3`id_U=b)5Hj9N~5T-zZ} zCOSKY8~yoH@Sciucwd(316kk?*>v+nrZlwz>*lM$whSg^Upyf-vW}Cr4C!vdvH7qp zR#xLW<3Po1V{)&a8zUu9$GMpWx_HgGs+_&_<)UfF_H}8WP*$8<^gmHGZKh}I zmUduIsgVld_Z%H`4JJTq2b1Mxnyc~J%St}vxlE<}#{Vp|7lC|uL)UZ7JvxH^HrrlA zarUEmc;1^y?nAWji(SdT1VPlwt-!DHYEl6-k>&z+3?B+QNzO4Y4tG0g*&_2C)F9 z5SbRsOBe9~4kW_Yp-!P875WmDhk}XlHK;RKATV?ZfoXg!`Be||t7cGL;!jF`&BOef z8Pt~ezWs$$*dPrroWUZ28)!_0E~2i?V}VidxJFv6pThD-h3aRpxL`IBZi_I7iWw{s z*rFsN*O8b)n|v-kk4=flH6&^qYAY{eSz9C#xpDt{DP2dw87vRNPoJ+c{ptH(NuDgv z6C}@t#Pq%E5}Y6;I5rx1{zh>6`E6lZpez%fKz)Nkxw{~=}EuLkZs}a8kRY9i^cd$}HW%G&^tt;Fa{;9!pd=cnk9)*@|CzD~L<_g3iSrq>2#3iiwjF$nw91$rX7W-kU1>r&< z)nM=MEE?KL=^%9?DK>j>w$puW{NQUh79>h(FwtFpcT)?yu?K!1I3m`_Rf~E$K$ywqPl`NuxUY51RA~3jhEB literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/cause/Cause.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/cause/Cause.class new file mode 100644 index 0000000000000000000000000000000000000000..247933d15a6fb92f501a51145577f38b21ff9fb3 GIT binary patch literal 4932 zcmbtYYj;#v8Gd%=a*|+d}(5E(eBpVpIE-O40~ zot$Z9x&-QbY%A~RmNTkn3kHuKPW7h_9!Uvo7)aYw$^7Kb`%fj$*tzU@rl9A>lVgR+ zNz+ND^+MiA_Q;k}f@(<3O|FiDV`h^BX5Qgi-LRRlbf=J`^!B@!yDLmOICj!VJ6*eZ zq}H^?%^XJp;uxiOo0jS97FgbK*ZHnv8%72EJ@z<-Hx8JVkt$4$8MzUCEX$e5fSuN} zqk7JiV{g*$OqjH^W$xO!>Ee3F-Abw&sT7CId|$~@U&jX8s+swI%RXb#YFjxp7kAG| zfxrp7V2u<1VMk9-4(ij&It}09Wo8WLkZn5(T+2;Sfvh}P3on|WU7$ON)U){1Lf~Cb9rYdtDloW(nbw-E>pZ(gL0j7Nq4n!f3I5j zxc%-b_pd0*PuZ3$qX~+ zie(CNxJ_WqCyU{g$bCfbo=;Jz;UGiQvE3ZH`+`cD6-?(0-J#;$^q`!1UIZ*AyR@-l zI(IHKC)+&+AdUf*n*z(KSRt@(ZWs;eIep4-jNF`f(hAn38`KHj*urU{$;mOeDbuiu z(Y(E*@*1d0AJ-i{Ip}p{gjNBINgj0c9K%Oo?WYRh=4qu7jkK1pDF1nq%wT7jEyjo*dm*ZhL^&48Lxz~ z0r4<4VY7zshVd$PhVebT7RL8w?{z%LG@qZeBdL+099e;h6P>?0YD}2vtP#c~{6L^} z{)QqWR9PzKa7)Fhii8d0hxn0zFLpkr;m2Y81V0VqXSghoTwuHuLsp{jMi_76tuWrk z@i5k-gK=8UpuTL@$mrQUxlCb-fz^99ZA?qz6WHIQTkD;ein^Fvl47QB1zOIsS1yp7l@bj<591ejN5e0}xPo7COW6UJ z0$5=eD8HS-7g5Jm822$fb;l-gw@U#T+sS(9>xnpKtHnLUP&PvEb81R6j@h;5vWx##&CKx(BVPp|Ar zjWzfjXT!9_UE5f)X*+v6u#>H{B+0Mb6NtZuz!i3Cl{qH>ApuX7!2PAe?{Sx( zXZG^2{|17B6(Qie;_G(Dn!w=38>p4jF?Q+%Qk!lgbP0|8EV+bQfAii;h;Y)<#aY8Uw0wGRFcA-nbvDdS)i9U1_1i{^)6o12i zutaFsz3yN1kM)=m+>01dV<1}c;1U{S-**Gy8eA1uONKQl6&V^fffbmnfF|mxmCAe& zE3k(hiQry-1$yw1r|kkq^4b$6da9O<&2YbLB`4I_#e@F6U&drZ;5MY9!SKm zqb2bHR$ToJTFboQ=I!r!=oYKMhvesv_$SIAO847{5DwF4Y1e9!-WT}wm?Vm$9FRs` zDybtK9``(HQ~OzoJYAxKw*O2DeUx*C@x4{sszlrG4$jWP2^568ux-ocuSjP9nn2~2dPgM1udRvy9Obp zSE9SQ6b9TyF;t=wOl-L%D!EH9kmNvpH3lAlheG&{ z4yO}~9Xq!F&;I`T`~q-+!yMBb2ZX7O%ixny$!Nm;=|cInh}GrQoA~g-X`^itO|nib zypqZKdOj>!H8SY#+bx~km@q$kCLH$$b6T0TsT1ME#%o=2Sf|?;6H`w-x3NnRX8&V! zK%#J7RpO?#Pn%cMiA^4T6O_5L&aiTSFays@`7R0PgU$Z1i>9i0L)Ef~K_lU)Z52+| lEAdd2e55gfFya#eSw`4F#t*{o){nP7#~xP@_Sudw`2~d2ZSnvB literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/commands/DebuggingCommands.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/commands/DebuggingCommands.class new file mode 100644 index 0000000000000000000000000000000000000000..26963e4444f564ba26dc56548cbab45ed8c224f4 GIT binary patch literal 10180 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 literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/commands/FutureProgressListener.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/commands/FutureProgressListener.class new file mode 100644 index 0000000000000000000000000000000000000000..94509e27e36768a22de153dc33b0e9702559d253 GIT binary patch literal 2286 zcmbVNi&hg?6x}xonLGxn1hrxxqEbWxs3DGVrti{cpbI&<@pEKv~`RkuQ{sgc9p20aRW$->q63P

^>CBidgPt5Jx4AaoiV6Rl@2RWuU+K-x-|2nmGR`Lr0Yi9^hdXAEPE= zU7RgR*pTpuVazu>++{djd#Zk?DuHiW%C<0-7{=GD_4>+M^~wEeZKcV;9+0i#*q*Q2 zenYha9v4^)319Wv42w0*=_p?N&eFHa_l|4nMxeU7(hAyb(^u%MquRQstaHy(4IZLw zQy?KF%cgDm%akHtb6jI2M5#ofb#CiKEMjV@wxQI0*R+k&Y=byd9Gx?~Rx@qB5p-JI z-Bw!`Ste_ardkcvHN|t!nDBQ^kKyjCFGkN+~~O63rvgdf`qz^ZG0-D zfgQ1YCZmbR0`-!Nw{cO%c}z2uUJ3W*b;$S}U�pUrBf(<7=oAS~4`~blXNmgW=SG z>7&+DuK6_V1JhPu+tIDOA{ZSVftKoVWz*#}%ev{Cq%#b%w#&8lhU0Gpmc?*2KQyXQ z{?hD=CWfgY6{+m1e#NmIQn|$1mJl+U%z?-p9t#~(_x9*UGt3_Y6bVo7El}VQ|Gp{> z5gYYS`A%das`=pxda(>Ck4o1AF<|F=WCr3K%I3rHl4`20acT|e#$yH{3L|X|qlWZh z-En#K2d)La<5Gtwbdy@{_bm)FeLkaseHSYC=J7D2GQ^N2P3vnX!|mY?_vfOg?f;29 z+n~uFr|%=f>-2G(7Sm1NyJ=j&8)SQv_A$JLNiq7gPmqmn0K;Q;aG+yN5JeT+RrvJ0u$MXHPRJ~F={`wVj7S7fI!(Z#8sDL#fPv`$kt;3{EU zLmGKZpn&U`LkUH^Lnjv_Eb_QUPlQT7v&2N~3gj1~eG&6LZj1CQ&e8&^i_<#;pbWVJ z?;?d8VPZLQ>?KYUs6rm1Km%hTXpTx6Z_X9>G5H+1-!T=3NEZ)zN9h)*N4JJ}<_O>h z`2e{?p1B^+n`DhZh1YxZv_StcicjJ8VFi~%nn3mdXQ-2Be}ODOSqPd8InU6#7>3^Y E7grZC=r)PoQy$oWX`j+CY@PY%mUwql!)cP z2k=pd>hTDo5qa*0f}uS-aX+~{cGHkAicF>HU)I6e!8(Eo>9cpTOp~}n`Z=|NXeKGl|?$?2XO$$8- zkI{E<9cvD3v@Gm6*u@^h^ZzP@p;M_@7Bc34%VXHpXrWSJEUJ;HlzVP2`1?%wDh*^I zRZ8tU{;}|*xhm#m95W1t=cIk-oe00!A6*VH^sbsXLrZ^;S_%^7JaRqt(UP=i(l-MP zw6!F3YHL-h2uQITU|1(FqKpRZ-SJnj$u}4urrL}rXK0M4XE481Pd3PI5hMuMM4te6 z==mNx7|=(4f}3>HTLIw~QR&sKh*@>g)CN&@uvrryR6ejiJ|(78nBQ^Dz&|#d?tuvv TI<3$hdPmtcI`vJSfjfTy3xmva literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/commands/region/RegionCommandsBase.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/commands/region/RegionCommandsBase.class new file mode 100644 index 0000000000000000000000000000000000000000..0ba6e981524ce13fff292f7fbd1fb285d4b942d8 GIT binary patch literal 16902 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 a)w{5a?pIxSXcHG!;bIlQQJfEf$Nm93oN@O6 literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/BulkEvent.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/BulkEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..e15e20eef1d1b46a140aee98e8ea055f4d6ee135 GIT binary patch literal 300 zcmaKn&1wQc5QMAM?CM61xdNn_X$ zy7v#`LMLMGvMjZNSDafh+-vVh3<%Mza60Bus+iDxb1FLoo|bYY36F8{DNOd#{}$^) zt3~3ZUi`mzLI|xrB$Uh(F_|wp_U)R4yNeYF?eqJ9Kq&eD0jdzn2)!$zde9mIKO>*0 JppL88&L0_WQtki% literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/DelegateEvent.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/DelegateEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..e0f2a7fcae2bea5c076edf38ef8c852b2cb090c1 GIT binary patch literal 2638 zcmbVN+g2P!6x}tqW`-U>)Z7RO!5Cq{v{9l&kT7yFi4#bGkc%d!=_w}-O?T|>32`lb z*0ubC{D8jrpji^LeDDMOD3`l>nxO{aivv(GuZYX18Bk3Rv7!7QK~GX>0I zE{`tE=h2T(ly#+mtGK4DPt~VV;ODy9T~OAdTDzg9H#ID2Sk|zj;g&$r^X;1Ln$Fx4 z>4pNwDxP06*6JG@c4$boW<)y^0>_u?ZfI}HRXecP99ecBuLh8_qjs zjS+gH2u3}$9iw6gAzkvzcFi@zx=-ktJ=>G*Lp}DrP+E$#@uk8wmYIT7Att7XnDb>& zcR~%Tw3i}VK)>p`(w}k6Adn<-`hW_ZZTKscz;>cyihG<)+O8c=3Cs>1aB!kM)wl=A zstl7>X2z>B-|mX-%7yyon)Fvxl?8e$o@F|#rf;ixyqF0e+2nlT&=8F_&$8Y%7GtN~ zgRSkpVfyB#45i=F_nw*z7h4r{VrclFLb}(bQmUJ9h6-W;avz0}P#oD-TK8}m42P&DSQ)cL%YEaIKmMG7NveJ{lnFEWm zE1Nvwb~HD5kXUxyRiq9(SdNvZ&hFS_+}3bM$6eghaSX?Ge1-uXCo!Pma~=2bKu0fL)o}zzb&TVZjxUtMhnUcD z27@{tVnDz+Obl%(3mj?xR0*8iw-L9gaZ^VBJ<=7^tva&d-oFnmx*~BWB5|-8rxj?; z^JuhsJ{_W&AzRs~%wJ;jlX0Dx}okAafY<6U`og6!np(@UD{Y}oE za!hj^Ed35qdWqCF(xvCfY$H4R61m%@k!@(D(QS168eyE{_Y^dK$B0uR+6W_GWaRf5 z=L1S+9B*-Vpn-}Z40A^On6a`H&lJxB`BY3E97ix3lQK9H+|HJMgZ2xJ6jWT5DNv5^ z^@c-?pR9wx+c?i%m0c33V=vIPHb7K5-f6=kz4!2Po5PKYUtsKa@m|bej$n#)Pw55n z&r$dhTIMHY(m!)8oyh7=0Hijihc8GQ};u?->g0RpA9XRdX6} zT~XohvpEmgoQDzYk%oV>89Ey^NHi574be%HH$R3?)-1a>?P`K%HpUa`v4{^(#oTgA zH`!gu6e0#T(^*e2$~76~B9W>*C!3{9646z?k}B}q68Q*IF_FtL5v|m>4ZXCRM}x^X zWb$o-iPmJIsaKC60+*X$OEFk6u6U6Zk06sJ|Bfa9o+bYw0b6Xs7BSsg@)U)vQu-LD PITjeNpBMbp^znZH)LcB? literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/DelegateEvents.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/DelegateEvents.class new file mode 100644 index 0000000000000000000000000000000000000000..25100508e033c3f40a63f3e4ba84c54c567b0ce2 GIT binary patch literal 1756 zcmbVMZBG+H5Pr6ASIR*V6vYZCf?g|fy!%olV8vikC7}%@{bIK5T8|!gcz1>PQ~Vd| z2aSI42l%6mv)5~E4NBW4+nL#$eP*7So&EXi`wsxCc#uF0GYQ;UF)XApOxDM%~G zFvKu&wwqj&n5?U>bCgF98d+^E+LPZy`c^7LoI6gBRN9cj5)h5=W21;ZqZp{n(YkWKe| zf+6as!m!lG+3`;P?@wAa2p5ZzO~I&H+-o>gswW%8$2~{b)Cec-V~O6YQR=50F*hhb zD=}>Loph<0b%Of2ZJPF(s4~3nhQcnls-}?FDce>4ZT<`kT~xT^fWlkJ4HZ0IslVhW z!7bh(>fJP~4bJaYi+I6qI2G}nipen6dCwP)_$gPRAgHL2IXq@IRX7i^T&9|f#b4I%WT|RT;=O;joiPBpse-VUa z+d$xCt&n6SqnWQ@pGXNILH`Moz$7_OVURSn=|pmftO4qGk~}29E=dUx&qTf;beQ=_ zdbkZkqp;~Vj5tPciF`(BHBsfx7+IHTg>c139}m#?Ny<#(nbf)HYlOb;qstTI7obb+ zDy~sx|B5p~ajqj3#Ca3MNv1wP&3s1q8zLe2WFkJ9VIl=QrGn(B1UqdZlN9m>eFK$b k@~@Eco1`{HD-1RiaGa)SH)$(`TUaESpgiYrANtnBZ(FU&(f|Me literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/Handleable.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/Handleable.class new file mode 100644 index 0000000000000000000000000000000000000000..8f746becb2f4e32ffa757857deae5efe7a06801e GIT binary patch literal 351 zcmah_!AiqG5Pef?Vq$ITMeyK3@z8>FFFmw)5lTft5EQ&`k|DI&Zs=}O|ILFR;75s@ zmQsY$Ugixm?>*kk&+peafC0{Zw0xWqf{e>Iwv{S(eecUE>|MY!o6p!Yrq;d@b;gdeAh3DJ|(sbU!`?$6{>67G^> zE^Iy=EyQPGRGL-Nr2i9aHH1#B5=!b!yv8$5+(8|})!x*Ei`{#VKxnvE0gWc%2tMHO V1VKGPxT>e{9EOhBL>tEsmw(71V7UMQ literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/block/AbstractBlockEvent.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/block/AbstractBlockEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..3057e4f5d983ef2f45c62a4419fba96d8c7e311d GIT binary patch literal 4407 zcmcgvTX!2*75#d$t!(;_Cw88z#PK;yDxFQpjAZ z1>Ukk|7fvyVwX_uQ==0L+H|$`!8A!=))ScqAjN`h2IKU3nZ4xaIql*g0bZwbo?wWOd zXRc9Qa)L|tlE)Qhtz>(PHlyHsvS@^>E^{`~6QT>y!oGIoH`bfzU;RI1x=VfNQMPd~ywLDNx9Tjqb(guG zw*$NCuzsd|zZTk|Tl1Oo`yxuO7wy(!ajxNcLJq6xsgE`^y|AT9GSNZ@Q@W6X|Is24 z4khyUuiT!{4$4m0al%@93fWTN@EFRW<~eSIr$Zm@JSz%kKD2Nbx)pX1UUVE4@*|@< z{mm}aONrB7+=%)qvaJ;z*|yl#W6z4~v2YZIM>Jb24WCV^<`?G!XW3<5o$;%qSJ~&* zo9_w-yUVj5lx)A`#7Fjmf7bTuY!ZrAva5D|!Kv0Zq}!!j<~pz0I!8EmSPNLA4{6KW zA+^QTVo|#4F-@;&u1#8JQxy6xhIXlP-d>NomWk&TPIk{nn>o#Sl%_-7b;l)@C%VhL zpM6oyvj%3i-y8eeE2h;jNE;OvoO;6xO?;adNjz7u&iTF*OnY{{?yzATYB!+u)x)s{ zGqp#2Utjm!lAD+$pBHP5pyZr&zDhTWwa&ATBB@;ik@Du#h!pnHY z!q4z?3%|gt7GA^aCVpw*rtF=@w1qeDl7(O4*A{*wvl*PV@TSQB7QeG_8DCO3)$LM^ zlN6)f9=SsCgO$%Xo>S%#i*7K5u@BZb-S8@jbpKWknw4(i_X7zcSc2N;QAkO|BxVwCa>9bG1+|AcY5$+V^a~T)eQf#xJ1p zq?PGQ3MQ-V60c)&t;N$kZgIbix}n0o?ZvCr534pkB4BrJf(U{*l z1dRLn`Fs$xfHeB$2=hz6UrsUC4s)Ku1AOO!<~#>OPAeq~eESQZJ$#N9#*W;9I{FS$ zmj{h#%*a?cdJE~opm7UEVK8$GnLklDjWLeH*un8LR6kCm4`B};#(q44131CGlXP+l zM<_8FJHSyK;~QO}h))uj%sz!r6P(NhbUK;|Y$KWp;0!$gRw6&lK#U}$kHb2!qC5+)rUIJD?=)c&yWMpKrO( zx7_D3j)^F7`G{X50@7z_K!B_?>IBNud`iaq|Bk*Zcd&DItgwk)DO?_Vo2xOiJ0pWL z-UU`6iULjdk(&CeY8iQIVrU3J}rjfkRB6)%N{#=xn1)Rg@X)8t9FL0Ko%^A$% zJiSTQV@5=Nj`H!|1@6srFNgGh(5Fm1aiTXNWFbn&MVgbGo~Jn}1G6xezKubNA?7}& zqp%lcM1Cf4+Fd{eX1EXNeSOgkxj1y}jZ N(%6%D0aqRy{2y|`J!1d> literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/block/BreakBlockEvent.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/block/BreakBlockEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..05ae1a283eac8b6b6e8eb3b17b6e9c313522b03f GIT binary patch literal 2866 zcmcgtZBrXn6n-vw4@;p)U$FEAS}h5brHZyR6iblWYKjPzjvYU^NiOM?Ww&m2v5qtT z3;%^5eEE(EzH(53z6Z4@X%$&V@_niAY=eg&c{Qb|Le*sv*vpmMJ#pWTK zPjWbeN4$E>=2JGGv8k|m!e*Pz=NateVc?4lb~D%$$iA?gx-Gq?z?F*YHOy*oc&L0+ z9!tkJAB7()s_B;m(re05{<^@A^QT?6IG|LixkqO6@b2n&=J&2=*BgQ5)jMa_te`2) zO}3@@0nga8RQc9Aw#>j+wyE*r9#1S^ddjj(g?)kKrdyW+;}zw|?ck^?y{A^yrk%-( zTeIwai#+MQy_xi1C`xX1AhR&rs_oVe&9W!0!!j?!lmy0HPc@Wd*?L3ZVw_qS+HpLYMg9vsM;ua0F$AAxgmZk=tqyYt=J{P41) zPqF9RwfF&TMOci|I-Qc+Qw_)R1CP}H`F|*a0c7Gdqdd7h=5_mFtk2mvq*zOe@+nw*%Yex}h|`ezU2?Rb+-Kz0p%gaVG)i%`)K2=ghm> zu1mGFZ+Q*r_Y_bRCooE1+v9-ryEb2lUqILd-P7XCNdWgVl`Cy*y?SY@n(}vLGqC*( zzN88d*8;|4$C2KqZ8e*cAZGhP=svpREES$pRsDz0b9Q1nWo{OtKS{Vf6OE=VIq1$7nCj-$>G$kf&2CTG z#5@;Ee$NfOntZ5u!cFxIrzJ)(Fp0O=6xb{pn7~;B@8LrOci7y;s)2hbu~{>4AL|A_ z!UKVsLGzx^Dhu2hG|3dc!R8C)T29)^aQ|#iGPZO>Gcg)f+ z;W+(93cSrq&}xjy z&C{au$3zSCnTb9nXFe*+L|YhPk|Qya%gEriCRq&qB9hsNWELHgSroBABpG%z5rbvO z#Wv(O#5hF``B0k{61|`+$l(JGx)ORup!oezfGj4;$ENw71RDK??8HCN9j%)MGPDEsW%-F zZk|V)=OHZ9=c&;5%A;f*o zi|gYdIGrY|=zK-t6FH-Hr3_rpsI5`Ln400n#Ny)F;^z~KZ{ilw8TqF>mp-5A{CZ;X IT$a`N1KNznN&o-= literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/debug/CancelLogging.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/debug/CancelLogging.class new file mode 100644 index 0000000000000000000000000000000000000000..39ddb9ac54657edbb703d11ac9ecb42f06a45576 GIT binary patch literal 323 zcmb7AK}rKb5Uh?dYgPrxIS+^z=c1rQ1QEPs!9!j!yW0$toy_QLPyCw)AK;_JG3!M< zd1$DjyQ`}Es^vNvHMrc1@b+1jcUieyhZGxrv@T1} zhJF={vEE#K#~@t&PyA<@aJIj~X>Zh1z2Qa(^AOGNSc9R{wc`naFv@k1A4Frq7>Ain MG8>`D=xC3oU+*Pd%>V!Z literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/entity/AbstractEntityEvent.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/entity/AbstractEntityEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..9dd72c75d85e584da32b90f735bc6f3c695fc1df GIT binary patch literal 2300 zcmb_dT~`}b6y2931d_ojloU!uTB;_YFm3Gz7>Y$cw3-46i!OO^t((a;oidrh$)wt6 z|3!a;54x7E)(3xpKg#94GeexI0Uq?_-ZST(kA2SB_s*Yx{r(4lTlk^?10NJ9-7ew| z?hd1fMZGK)@F8jiO3Qk=SHucF($f7rR`d8+U@(w=O9cYsb4u!Cm;7n25&(%cBoXf^p|mttG(+a0^%s8!eXf-piyV5;7cor zni4@581a0&WxLV|6#^3}kclbsiw>~w!;zy-YbWlYI$DE zQ6^c^_FS_e$%h?ZHEnWO)eb5L41RR{&5oVzLrPfEwNx~-ZFf^T9r8plQYp=qXGh0; zSvoW9a$ZjC5!-w)H=HBqG-Ew8n^_leE*)^UNI4r%e>vergZQ7dY6MZ#QphWd2Z9zk04(G!+NZ&!!0k+4_C-L z-89pYZp++mJW*CqtAwvyO2vLB-qaL}1&X{C$0QIKOBnv6E!v&6kcW=q^~#hrm1j;y z95J5nh&(!S_+pQj|BXq9Fghwo#LbouD*M?P{uK=VO$IQk$4+TfPaXnqQ6A(z8tz## zRagN7eaP$OybZwmSa;xu1DFfD+dda$M&bYJsUt2Dpxk zxPc4QR--VOz$CvIkS9}2sijMJn-R36;bbsPxtNLZP^Rk`-iZ;pF``lmkp?6BfVo95 zw+ZGB1K%Z}#RQmA4@{{Crqlyd3VYNC3G(cjmKyDEa@Te_?f<&-gM@Rg=X@3K#+^ty=U#W->*JgpGbxVu<3K-f&k)6Q z^(FGpF+RtA=oN+s@SK&gu7W=Jkrvr-&ZFThCGu#HC>AH$3bV~bQF?8iMj4f`zG=>X ej#;iTM$`>`HqWyKYB=giwnDe=I#oA9>E_=8Lo%TN literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/entity/DamageEntityEvent.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/entity/DamageEntityEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..eb74f055fdd2a0bdc565c049dfcb04a7c74efe7d GIT binary patch literal 1751 zcma)6TTc@~6#kaBl$NC+BG<}A5PJbu6cK3E5XAVxAD(=bQeggeildA`E zSeL`YI5v_M5(UD)$Jziz^tg zY*7^^GhBm$@z53Ba-6xw+)NZ?yD|pTrQ$ivu5w4gWGHSZbp^LxHpx=whoT`U!F^`4 zI(N9eZJL(D9ATN1=v3*1owAP_J2z^3O~a5Cp)Mte#mh`VI+N|jHW6kEkxX_Vu}qVA zh@+o4d~MKuX4_agNGEjxkYb{8yb}iHrC>4R7O`qsRfB6JpSopgWky2Tw|PbA%;ANj z?2(t(fnUS1FryTOtc}z&5xthmQ!o;Ca;?&%s2jeHBN-{S-?FJ0vo*~jTKq! zIEpGBfwVs!{78b`Q!$7k71NkeF@Thc+gMa_2N@Mv5%=Oxy6*KcM_UPYaQ+Wa+^$jY*n;JYkn`omM%| z8zZ4U{QjWUB3nq{EqH^kcGtOw#m{Wu9MoMY22@&Zc_ozDVn4Q)#) z`7EoHPlV3mxqP~X-p{lQUU)G;6!(Y-P9pT-!EEF0w+w<~=U@_V2XNmNz|`VAwaY8d byxS6L#4jY?w2=IcnCxyaQ+df{H=&jPK5v?A literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/entity/SpawnEntityEvent.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/entity/SpawnEntityEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..f1cf53e05a4bf05b0e6d15a3b86c266f079d55a7 GIT binary patch literal 2348 zcmcIlZBrXn6n<{lupw*!X%J|!wzalND6Fkmi=kDDVAY5n%g|{*IJ4PY!j{c$-E6@A zCqMW)@ny#Gvp>r5oV&MSHzLCa-OSv*FZ-PHoadZ#^XFf`{tjRT+eNJ6JrngJCb2e- z9PW-`0{3|NKF>bj**XvRdD!6LLlc`tSlBZ0k%>&A6~lHA*qZtNY(ofpsLFd&G%_=UZxUVKh~(KRpd;(G#LR{m*wlReZM zZrHKA2X|J#vX8>ZZ?$_))Otz6b$VTCZ}3>p7)bl7S9b-Bjj%C-Qi$H;s7TqkvC$o+v;ZIjl#|oueR$E#XaSgpt?w0>@Vy0&^LLO1_t$ z=2aj9)iXy++Qm-Pma)M3jNMG+0$0B1(N0J1dR>p=d+0&Q7T={x zHI31EN>ZfDZ=6uNf=Pv8zzGFDaSY&+rzGroKB*~it)f!b4#T!DZK~N$7}!mRs`Fta zTONfh>rbms1;&`EN|M0BDHKWg`E2eoDPuD`x&UUgW>V@D=&Q%vH3H@AM{1XR6xLi{ z_uxo{H7`C2dyy-*JZ_Ge;j&)lLNW2Ng-`G)m2~<-NLQYPGG;6^P_ZzLbG-b_!W3Sy za05#gmSJ1CiCY%l#tI3Mwll0dgKrD0o^}zO+KU2fXU48KyK&^WIz_s3uQL4P)Vg8N z@^l+n?!I&nw!@g4N0kJtW&2Lhwm)w^qnoi_Rh^dE5->TJs*IofPpwwn#bvtiC+UA7 zhx42VnoVqPXBL6K-5*bF-=3V92N0hFPY; zdCl@Ia=<(&gJg*MS@TF6DxSd*f$1JN0X%*NFbb6Q+ZxRE!_W9{u%7f$`T-_aY+AA^ Lt=^@*9Pa!LH_jy< literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/inventory/UseItemEvent.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/event/inventory/UseItemEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..d163662e7628479a3817a46ce4dcb7a7adafec03 GIT binary patch literal 1599 zcmbtUTTc@~6#k~&wzMoDh{~lPciRG8ZW^@2#DGSUibNFR<8(VIL$|weyG4EW4|yXP zP5c4=DC3#kUKS+v!F`xHd**!eedn_K>-YDc05)(hg(Na5WRXjv2a9T1Qp<7z`4r+X z5?D!Km7(XD+ht3*b%x2J<5rAPqgs`oAx?$u8Bc@5qO5xbhS*!jwaN@b;lLy1qr;^1 zMD4)iW|d(o93X9VmE*oQc3Tk?9^aC-^d2&tX2QV%?PG-~6iugQ)T^8K-xxk|rNP~D zOP|Rbbzy9)wGh4_kQ4S?#h*Q7(6*hjU>GP$TkJJzCE>p0C5t?ip2@94?n?FEbZXwQ zq#8ZwDk@OlA$(OAD(4^_hCauY6=`$JcQA~EWd_(*Xw1)#A={NNTm*)h7Y*B!HE}5G zl7#Pbm)C?R+()+Uc-)hYO$m$_PxvW+XYjVu*lSpp%9Og&QxTqDL5AT>HY~5zW}PD1 zeI(9{QJvJ=F?4G$VVaXf3Z^bXg1j#dT7L(iMvruDnO1XNq8Zh^)Pd7*P4Pskh7E@6 zoLBkjxQ4X^)^++8?&{Fdr=uSOI#TFmNOzla1)XQu>^6LX=1#Idlk3ipKH zZib!z{{~c1<`i+oaVnNj8fuPhlsJ7Q`>rq@yDXa{pqt0StnN9UYCOY2#vcj8;&#P& zUOEw`SIGYD!ZiIplJs|pVoa5htRYocf2Z2g9tWf14I)A(zz2$q(LRw|Tsj9^{)WiW zsHWE3@)@GJQSA)cCklw*I;~>_2lDFQM3=A7HLJLZHKehQVLI6eF2fD-s%HYXFhYdN z8YOhZx0Il$Zz)L{#>wu}C@f7z@Gt^Ql1FJYXjfOna$gbsNJgMVB?1(DUOfnC@-p1U z6nQR#waeh0E5Xy4X@c{#D-!K9VwbVIA*|LUPGYu=P5a0WmiYw?L_ec0&0)UDGV7NG Y=>38C>vJT&Af_rF24v}N!O#58AKKf5`~Uy| literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/internal/TargetMatcherSet.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/internal/TargetMatcherSet.class new file mode 100644 index 0000000000000000000000000000000000000000..63d4162aec029bd803f92e02c7448138624d5ee9 GIT binary patch literal 3106 zcmbVO+ji4N6x|a$QDO^l330d-no=%~6A;%Da3Fo^ztG7 z0$zA%*J^>ZYjyG5pXh&dtzPzw!ybJ6c+Gt3R`h2MTDDa z+{T?W?&3}g_vA2)Pc(e0;WGivas%JC8UhDq%U<26dS2DB3{LBw%ZKAw<-nM0I)Pm` zmkI&{^LEuWgQjl@)HkqXa`wLY&@>#=ts3(T_JQ%p^PNhyY5EnTbdLF#W0(7z^q#X9nd(%P(AD?7m6cwSx-+iQMQdf#kGTA&YIZwrdre^^)Z;m?ejn z?XzClbZ(ixE#D(!GFY^^%`;u1H)}OJFl;xleAjf^gU?$5qbJNtMPMS=1>p7cNAEG$ z^>8l&r~elQcN|!aK;Zc1I22^?zA&o-M>iFl`|giuGkMwYFq?tx7}H^G*q%$DYM&8#u@k#Alyy{K>G%p$8mc-LVQaXrqlPIR4(d8wcsiEwK!*<&&`GH=n{0g@hmjLF zwy~u$Q6YZ~fsQ5~O5%?+Jl639Uu*bA!?!vvV2W+n8S+1*Kp?X!Y1d2lDUi&oGOcM0 zD$%N$#C(%yDR4-J?JTs{%*J9%Y}vDA-%?eR=c#RM5qt5#de4&Cu#6kNRrcJ99k6A2 z6gp+KTq}A(vFSJ@m5bFyxT`|ER3Z~MPi+o6va-NFpP?r1UmtPp%|ZEGYBEoUJA~;F zn1VGfK{r||yq8F;#V5hJK)yq$Xh&<#Ns1ghDmtEQt3{Mo>)7a{Et-v@^_bASf5- zI1u3!kx;(bv6o2R&i{nO*fM$rIQAv*jNUz1Ma-iYV+t`Fu8I&r)(3Hjm@H`IBJ5Z6 z=_SJX2v!qVMt=|H#+NZ5P&~4Xl)(4c$4Oe?74&n-T}ejX(nD)+^4ZgW{zym)Nkw5d z`Zza`;m_R|PT*af!~{;GfHR6xo_=H4qKG7A*cEc;F^W7%WpIQZb$eP}Pb_3^LMDb;%D8Wq-R$(fu%&h`i2NU;}rq>t=2}@J9{ZIR_ zo#U$P!;YW#NA2vnNoYgT_P8Amm)s}M^Lu{JYxw)0KmP)74Tg#WW>sjI%i$!hs`v;W z=jp|K9t*gxVi8O7_#}@qZm6WPtYQV9D!8fQ7H%t8mBP<*;HW6LqhL+J=L{qJcFVLJ zhS{p&?rF{4#ibv$pIpywm@VCFX!X|auH|dnQnDr`n}L3rEN@tj<*zVYE&eyt=`Dur zs@o6@V^zx$>#e=I@E+=QnJ>BrD zk$||4dcu@9uW}$9pP({D$s%V8Ka7WAt~fmqzDEY6`Ks$Yu}p?*{mhL(K@0U-p6*+& zb5D14Q+SdXK?KN0IFC}v6b;IMP?4|-<-t5}2L+2^Mn1{eaDc*aE*WUb1;b8?N7xTR zc{XkR7oz{aiBQu?0EVd~le80t39I>l%I7+@*8aZh`4vaDMuXu(ieoB}=^X~O=C(XT z+_7YTjVHTf_L+X5b4=ijg1a1F;7g9TF|MG>aS!VXHaIqMU%>;84^UI^kmDJ^9?5?~1dds#ME)}auH`FsJ5yRy{Q3S0VTRq{})`WK;J7}EdE=D{QQ?H*)2`T8# zxJLuXaQ?V?xD2&$Cv>NDG6vR5g<-K6XK_4z<@l>(=4H8rlI0Fd*o~SYPrUCsO<#8m z>R?H^XTG{76u-2gG4-Fg-X6npKO4)TrReCkMiUw69^3Sxh|rdLI(!{tst_?*v)#IG z*L>X(O-=W(EhUfyn-BNF-rdwyi1aa&uocJ}7AQ6MgbxN0uh|y{c H^soF2LawlW literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/BlockedPotionsListener.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/BlockedPotionsListener.class new file mode 100644 index 0000000000000000000000000000000000000000..fc3018054f42b496fd49e5ff7b751da62e620ace GIT binary patch literal 6735 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 literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.class new file mode 100644 index 0000000000000000000000000000000000000000..c1878f61521abe0c4dea28803d4323a01e39a2a7 GIT binary patch literal 6199 zcmcgwd3+pI9sj;$cPH7MrfpK%Yzu)xfL!gCQlM?1n5OBKq>V{QXjOEwJ57gdc9z-M z)GCSxiioJ-SyVg_QSky{X+RM~t0EqF;H^dQzVHS`@cU+FcW08_QvAc@vor7bz2EQq zJKuYA|5JC~4PcEpK8kgis>fPnqA-z_k4s{(kgJD{d=%5zAH$1rAcmLVrBPgpm&vi0 zOOnfCcm-Z5$6gi1t8sZfUW3<0k-`;Gybf0?c)fgI6~h~FwVZpS?7k_AamiyGZ@$-HGz6m9CE5oixcoa^&4hsx+mZi=O4+`CaNgef&Vd4^{jKKUVP*{8YiuR2;#>0?oc0cjLuNOBFxIBMKf>@e4ep z;+JyeukdRXzmeVFx{Q7&S^r+eAMi&Nf5Kxb{w!O6k*&YV*5737@A!v`f8uc!PsrB4 zWb5CO%aizz6!Wl(r|`7EVjq^gZKRn7N!zqk0U-ohe6t?X0b|<8Ot_(}iW*U?ijW8^ zBBBaK)CnxuXqtA;wzTY^ZtpWwx%m-MzW{xFMO6_Ksv_p8qCw0TIOk|({wOt+LZlB9 zX)QC6*g1YN5wlYGp*qoDEV&g8?kXT~`kZB1f1xZTjlfA2(fTT!Kx;*kSyfG-$tSZI zx-4fE7ngTCf!Ks@Z_DItEt6zupVHP|xr&yTFvH{;=77D|w79*TS8a_U>tjYs%WcA; z4Q#XS5V@_Zi1An!Gs%f$OWGXQ(%ipn-P_Lu)>OlkG&6gRiA1mS%3DsgDer=-DndER z8g88VoL;U6jPN}yycOA0Icf;hQ;8AXVo9Vz1n%>sJ4_=joHNLPb==_F$6f#VD64Gt zCq4s-z}jGu41|8SA7DU&v+H;Gn7ai!5d8jAf~&e~J%Qtcst1Y~EfC$$^e@tG2;vJA z@hTDQODbtk$L7w-p%gTUYC$tA*~;zr!BnrsQI4_LayYYsw(l~e3XGyv^c#SwZ9hUQ3*g9|nc%tlHB&cs5j zK?}}8JI*P|Z9$B9w@?asdkD5VD@8j8w_!WQN~JDG*kQ9u3g|2#T0m^D2!=PXt{Kd$ z!HyMOoNG9Q`L|+0sDOoIWz}66-H_MW78)x-zEb@Tmv2e^Rp`e6Wvgh#Aa+oG3k|&! zLsaLvq?g7X=38I{yF7IFaWu@aeoAi~?7A0C2hk&ucHM&}BHiIby23%aJ|yCy6(nCY zgX07o#ET{38&TKE_mZ;xTA+}1F9mEOs6I5)Vx6>EAGXpw{f-iAINOZX4&YkOp6CFU zcJD7K*3b3@gdOJkQH&9~v~(TBli05Cn`2P9-Pq$QSF@Njb<{Ubw9SK#R#jATHHtgR zEG=N!AsoLx91kDHkvLxkoN&b=v?L2S$?Yz`qJWd#<|*DxYdlOT@d8dQ;Iv}<^a9#C z<@)vlI_T(5Mt>w8IgBggkr{LejKw4CmAG;kLvaS8J8&0P?7jmlXOO5tJaR8q9Yj++ z;&7S488sNY35&gc!~BK-c^6 zdL(fJDQ@O>;2G@YXO#&&$ol#yCh-_Dq6S&fjGW{0VLIh{e)WDH`6}dc75R-Z4(X_( z%h~G33#7}%B8J9AbZCQ!QQi*5@^U=x118$PO!Q$_5{gfyv!r>VgB~&M7nQ5RPF`rx@D-2@_@z;dbHhdMH$*PPHB+21X`n9 th8i859AwT(Ox!-HyQEKxC45Kut>rio7mI1>kFc+j;-jRw86U&V{{<7(2Gjrm literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/WorldRulesListener.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/WorldRulesListener.class new file mode 100644 index 0000000000000000000000000000000000000000..18ef3f1292d8ba4e72adc0ee57a6c5bc1351f91f GIT binary patch literal 1767 zcma)7*-{fh6g^D{31L`71W`6YAps<^gJ3j-0jvs30R_s7H6%@J8D`>S0`lZ{_yfLc zSz!6#2l!2vXLp=!kO zq#A7)mfI1D8x3JBgmH$dSz!q`!7v<6XY7M`VSj4+ef-FF%xtb`INA7aaerU9@ogzt zl#(^Gm=o4aY>S~XWoJ1Me#?=4aKf^rm}M+?*ng0iK_0*8LvATUYCtmnO2$IEBDP!Nh7ibBGdQwc*Yfn zeDgR@9n^I-1Esmu)%Z#TX|-MMdvC5U&M5-@)tbKkQeR2wZ&ugm7&n6fUe>ing<{Nf}ob3b+k*Mf_^|%|G+8O7g|-I zo}LjU?L`oMXrO(whr%s1(vI-BjV7|ea7UduipVY#6kf%lr5N;F)?ewz>GzjdnPI- zstmcP?S!gJkHqr})M!d4FC*7!2_b^G}Mr5N)cnkqS0R^==pCjULPa-k#q(I z*zHQ6t1A~3u(NoEdT%j literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/AbstractEventDebounce$Entry.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/AbstractEventDebounce$Entry.class new file mode 100644 index 0000000000000000000000000000000000000000..ba7118990596c932a3a79c5371a7b6867db1824a GIT binary patch literal 1151 zcmcIjOK;Oa5dJ1{;@TJ*S_shcDg;P_gahILDncruNT8I`7WI(Z+FpX2tu6crlwSoB z2*iOOz>h+V9ZSBrw{X~<$Ii_6&Ft=v z3UweNKeG#`mb~|4LSrjPqGN*fG6-ZeP$G^cyZ44}cx1Wa3%Hw!sq{hT>*U(o%>8@KTIQ6zVNe~Td5rAz3eeqXhOHJ z07J)33mx3jahvdF-uFgmm2YpyIh1ZfI9s}k=Sa|}LZx!&9ihz^ThTP()%?g|jekvp zKM(v2M)*a2hSPxGOC2o+WQ`bd9Ca zTm6apcTict%nx=MX)iC*o&^>~IE5jWL9GRx!}+3I$>kg93)elFOFQGj$ro_3NZvp_ mhtPX>N6e%;ea1pZp3VR|F7e7{vy#KDVv(iE9u3!V2F5?LzZ*FK literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/AbstractEventDebounce.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/AbstractEventDebounce.class new file mode 100644 index 0000000000000000000000000000000000000000..36de6b1cfbf4f823a5b6fbb3a28ea42f569296c8 GIT binary patch literal 3715 zcmcInTUQfT6#j-JM#9KVMe$yXI7D>tu7uKZQxgKHL9F&VnH=Mo$qY^=2)2D|SAT=Q zps(81Qf$}i>Qf*3OZpqSTwVRnBt(>ebghtwbJ=H~v%meFefFOG_3y901Gs>%W9Y(1 zF^pg|LIHoFzvXPK8RM9cqieFc9>t9qnvs-~R5SKsvIS{OMKK*iD`sN2iCZnWjZ6%) zxFe@?a^Y?iA4hRdL1e=5y(I-|(s6`0W*eoFC{b)0=0l;NH*LB_J@2}CTj(4XT}Ka= z^t5Z_EGIuE^%4r2GgjU){IbVQ-)w2q(ClO)P%IU$Tz#xRaXmYiFB@J?&z1`X%hzqI zBZ*;R*)e1}mOrc@tR?&A*p0b4 z!fH!fj+ibNv%;G-vNk21Y1cIDIm5H$yebU)4=pl~ZXh;dQdgarwTiT?Bo%bMX?98i_e^c6NQZl?VFZ>|56@2@@ zudZ)9D0#lEZf^_Z?%QR@=hK_BN)|(U#Bp5T@GaNjQ$H94>!NPdg!**38u|*fp~=DZ z(LB6f#CXlPWzQ7XESX#m)J;=ornJF8h|v!s?i1&y#6amWMm6UaS~X$#goInHZay9?vK^S_!y~^a-V1 zEY34ujy&*%ch|Fg;<=%v-mz`VaNBDj&84(h5Dc9@me(Lix4_ek*1&KM(qbel?@qx~ z<>U=9$PX3aB{oL-)|bqN0kc+**TbxQ$Kl71S&*f#w@zm6tD7SX(-fsr&%nTdf_x)c zsaCADR!3de7KX#%=y?4;szSPutt`(OcA3G#_rm&pXtR>UJtg5+%b0XKtlgK7?Br%o zISARHR5RCh$dW$dYYz?Kaor~2tJ*VL5HgH-4vC^9#><_X!#lH3o3_jjO`Ib+4dle6KFv%cH<=WLBnzMvDFCygb*A~+54Q) z4E0aYbT7v$dnq~2ec&k?$4wHHqOjjVSt|Y$)Kf39s|kOgbuio=UP0TR*dO%EXn%%y zfA}Rjn(zaTonArbrO4jMGsLRG?(p8o3U;qx&s~W+9H8#ye-z*x+Hjs|FVOl$^y3O8 zS8*AG7{(BiY$f_(qBuvbI8Ko!;;H$O;-1q1{uIv8SLtO612{`=+K}L`^Ry?uJQffx zcSb3O2Cl{{C)XT|*Bp#j9c*RnNVh_P zTa}BA*W8l&(kef|oU!c%~XM^COUey&mlpcJ7+1aq2?l?ntW-EO)4?choC8prj zn+eHJAb&o{*Z0RKfID0iC<>et%GWp!R-T;~!u-KU+t(qxe5m&l@{=@i3|4NoW^V{r zb+A4r7rK??O>7I4gtd)tociVcj^E?p+io;N%gxyLF0*$jOOS!v-%ISJGxorLk*;qE zmoGsrkKUvtiBKKk>`mx+-E75X!s=g{)dGYQ{mU^Xn$T&AQ`ITXw9m9k-62&}vmauz BVF3UD literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/BlockEntityEventDebounce$Key.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/BlockEntityEventDebounce$Key.class new file mode 100644 index 0000000000000000000000000000000000000000..4236c306a48c05a8f14f4abc4484c675652fcb96 GIT binary patch literal 1828 zcmb_cOHk?UW08wpuJ&uI}0NRq0_!ho@!?*DPCx zEzsu=ZJHSuF-xxH9t&Lb2h@%FhUb$}%T~#9?+DB#{9*o*e*5pACwB!xYfj!2=t^59 z^KtbsYnFG6tW8Ti?c@x5*C0yj4P(gNw<-d`M<#)(o28OjUbBr##iVgNopTQLN^xQF zNPpp!?R=qXl=ICY*jB|g8LsEetWz!JOx-pMM((&imwG=N&xvon;U8lSZwyCO!)E%v zMEbyZZs@jAD(G9;12g9?C7%iiM`HcUMUX`avSZsda>b1CtkFSq->B@@dk!X&o19?T ztW<56i8d813%vS|LAJQ_=_Scb;N_GQ(^AX`JZX6mf!MZFE$7S!mLz=0JE8wzVp0xQ zMGtzVSW(e|P6c;V+{HZ=UFcSE4sjLtv8rH=NLzjmR9wQ4iYvIPU|pd5PqqcNT3eGt z=jk8`{r|ql0!qPjcaEQNZs!w8{}uCH;V5Ig>mks?pkJsxBM*0`rKnlOhqj3Wm-*9D z`C|(rE}7#lE=luN^2RlUfMgfEWYh}Of?O|X9}v(|rwD4Pj|d5zBCL&{BJz&T0QxEW z5vCkxf(f)?l1X$7U<&7H9jzy!K1hw}yyC*!$+7{KBdd*~r;Va%E%g@R&`IhmI<*>< z6yG-p2TxL85Y1@s5gg}RL)&XK4-utPd`GW>sM96N%z=?8HW4H!E+In!KQE`jy z$*&bHHU0tO7cUV8fMJpctsZjLmx2Tjf%Gd#dOXOTh7^+p$fX1}fs0%vM^W4&b1JS= HM|bom!U?%O literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/BlockEntityEventDebounce.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/BlockEntityEventDebounce.class new file mode 100644 index 0000000000000000000000000000000000000000..f39cd796b826e0e86f60830f0aac5164e4abc94d GIT binary patch literal 1738 zcmb_c-EI;=6#j<)Qfez|ZHujTF)ZjvWmw+(JK zxg(W5az@o zd?y{z8f8z=3oqN($gnt6fnbd)3$Hq< zQw9DuU;8}Md#=L`*AqYPo$`EGvsy7nLsF_x4U=bf-!a5Xsb*n&R{Fzpe!){nVwvI1 zLT5q=QNVjCT*E%YtA(O79M6R}^$O@cmPfz??pQOq)z(h+ zb78ns9*^MI%$l}B6In#*jaI)9sKu~M-xOIDvO~1SikTtUcQ3v|U-hg5cj#0WS7^8H zXJHj0J-^&_D4H zH;o&_#S{u|V#8xiV-s6+UimV(g$TB3pBiOlutT2PHL8g?w+z3<+4-#zD^_kR5P@)f{6%%_pUbT5*ak>BTVz#e`3*bdX31$g;flb+{Q33g zpA>ck602UFc-e~6wl_O_RomaTsxC9RidVDT9m{uQ948ZD(+LFBr}m+MzTR%z{;F#Q zfz9N0rRMFKL2KdBzWK)U-Fl;A`SsHoTqg)^mYa3E>UG*R+jQ-QRXd%kJKNd;M|~U@ z%o0QnYwvd~m;HzGm0jz=GF_|PFrQU-?OM24cqt$}N%p@ZvTR9~eOsYbYi(Gs;}KF# zD`<9yR`Z2*0{C{&ajB+YkluQV6bXiNQ*V@=72`&Ub2l1NvdOr*my#a`jO16k?=Ss*jT}2 QbZ-g+^l4_2xIu;W-x@guHUIzs literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/EntityEntityEventDebounce.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/listener/debounce/legacy/EntityEntityEventDebounce.class new file mode 100644 index 0000000000000000000000000000000000000000..eeead9464b09614b2d6e3450771b130decb2da24 GIT binary patch literal 1548 zcmcIkZEq4m5PlXYw0N~rZ7r=*`=SEA+?OW4Ku8Q?f+f{hLgL5eSkEoTo!%`q{0{$t z|G-Zqn)n0!QO4Qh(2_!8NWBlcJ2THbGdDZ4KYxAu0pI||G?Lg&VK0ps_O)<3g*z$S zWr!b&0fSL@UEx<99t0v_NS385RfQpuuNPXhRlSa2SZPRC9QAu`;Wv5PArb zYp#-N5Ur=eRnH?piP9W{o3cmIS)E~VtYYZp8=h~E1CS^2M0BNpwCH$dl~X#7qyK2q zFSOS5TGCZX243H{D38tA?1WO>w}oO@_IznempdT?LvF(BTx5pyJL!u~gx)xh9%aI? zK6wd)595o7H=9(nrDJKkT=jj*^mDoSbQaMR!`Vty{zG*sKV8T#^L5IzcA$K2sjv>? zE-BB)Rh!jy`!pY=3Y9T^9NzW|srx=R6aVmppK=3BNHe^-*a6U~Xy&|uRTLPGE|#9* zYZk;V|FOMKm4m+UBeFiLlg^IXv5&vs${)!VVVbxzk?^Gz&=6dWob8 z$uZiK#jPRO*U)azs$WPTM_$`lrqlWeh09nWiSW3B3~|ughpS}MTmwQc(4HxNN9^sr z`$NPZWD`RqG;JJzX?MwaFQh#fIsBo`;2PG5lt?J#S{O8g>)0TFt;=E)32f2Xh)`MF cAk9tE#3Zx-jr3IG5A literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/Entities.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/Entities.class new file mode 100644 index 0000000000000000000000000000000000000000..e0d22ec45f68fa9f56229e67cf8d0b6abbf91580 GIT binary patch literal 4164 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 ShMz|x%`IG}Tem1D<-Y+5Ni$CX literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/HandlerTracer.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/HandlerTracer.class new file mode 100644 index 0000000000000000000000000000000000000000..338cfae3580ddee3d9da7bfab7d2a7de94f100d1 GIT binary patch literal 2943 zcmbtWSyL2O6#nik^w2a)P*5T$CParp8Nek7NJ0o8I*vvNM$OjDbjFsRZtUrC$-ej} zti0vLS5uXYlBBFu9`l&0ROP26sU+mP-90cMTA~l#cRTy}&bjy3|9*G?;4p5fXvLU{ z7Q9x^-*^K?@OlFdVM6{U6-=oZzzG!!rd6E8DLKoiIE}1|VVqHM7H_CHhZ!koR>hl` zlgsmx?ky?pf`W?*E-83hK%2I0!yUKuQpqR@C?|9~ZyByY;&L$KW>e;heoar8J=02O z%#t@OP(Nc9Y~3rnhQP^n$0M1XQ%si@29I4$Uw2$9UnuKtK0RMvSTManN~mSl)pLg1 z6|ROyDY$OLv`ueRU{^BZxP>a0am}#3^o0Bmch3pL#+^J>Z_Svtku4YJ4R=Sx;o>O-JCIL`lww~5WTY8H0;K_hNE~{!}HjsA&0yM10QH8;IhEcrz zC&g1VDce!PTvd|nu0d*5c~IM>tZ{?V$#an{%=Q=CtMoMiA+^S`@VjzWFS4zzrJC_v z(=L!o)pI$cRO;&M>l4T%pSEX&7Ka@xlwFgiKp&g4akZ>lEYp@`O=k&`I4pgt+S4!X znSBO(YBIIHNA8hWDL78SGSZwD9h-w?5l8;zMC&x$xIX5(`pqDjJE{@(FR+yZhOd(+ zHJXA;CM-qCOOp1-ofA?_)5Cp+HgqSupBO`3H9A6XAC?((%4#QLZ{NuF>M;#ZQ~@Ng ztr`G7!9J=;uywV7{4HJ_WC`F_&slIOF#>B9txtzu3xyDvwLx7=zgdL#`?q~m&*!n1 zkD*q+kXYQZA#!ZzDuNC~Ip2*v{C9F^ntKtBjj4MOsh<0Ye2?h2KIvZmw~!oo2{G)0 zhW&VftJZ)4FQSVpvhsW%#jz0}$+J%G{lT%0W47l(EPuTHYfSdE4`fr{A-aSZul-nC zYzc9J+t@E>bpk&_8HyjQAkh}TkNOJK+o+e*hP!u`f4>!3zO($3xJ!vqx(3>j;J+XB zeB3qi8Q6;>IL>Z7jzLUvKf|}3wDmCJJZnKWQk*s77-Yw}2U=nSL-C#;pt$<1KGv6-_S9MP2Eo45sSQ2z(%GAkMY literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/report/PluginReport.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/report/PluginReport.class new file mode 100644 index 0000000000000000000000000000000000000000..75a37d18f4ce23247f95ec669d20072d5fb4563b GIT binary patch literal 2678 zcmb7G>30)V6#qS%WTxo=ZE2we3V{OMJ7p1}AceM6(G+S6MZkqgGK8V&OqfhS+;G7S z7gTV^4Hw)MJqD3;_~-}!0sjQ~2Rui=p!d#8(?CN#p7zY^{k?mC_rANl*Wa%Fas|K| z{HS7U7%B$BxE*&?U>okNz+H%{7z|@Iwkz17U?_}o+^u4m*O3bB#4i48RK;!t3Y+PiFw!`z z!eua{!V4pdBVioHE)@^*dMu2G@NgK9;87-gjKfYUI4%&{XxWyxNuaE`WmF*0=Oj#l z*-^_jw`a#=rn}RKr3k5xI&mX4YPc55c`)RfX~*>hI-+rBT+fWHTYp$T>bR*yGHbXA zJ?mL1UFzulhGz`>>Kn*wI+aaYw!r+T<0kc3c5KY@bP4K1{vK%syn|LoU~Osgyiu_a zX<6{1NJ64mux~m)Ges&8;?9E77CjRlLR;rv=IfvZ+*LyD@HRID^*} zyrJPuHaUs6=v^5T=%OllySghzbGjZ2Sd%ngQUt>$wJLtHSh<9<8 zN!}y1sAD7|z2*VOCCm45mJ-o#rcFCx+HuPy-47V68gUMIk?S`;^#_)GBOzjpJ_Oc&lP+@j(jL0>!;yMe5K%P4d38f1>b4- z9v3wHz_x2jmf=6TN}#qmdSgX4@Z?k#HFB@t&y?z<>5Z7~5z}S6mf{|iFg1Cx-Gpu> z*~z*N8n%&S^TzAV)BcR)MCP`+g;z`C0SNUcVZaaRh|&{?PCn7Y|>mZ&0Q7Bu6}2@(fKS5;OHs93WRDKXg*akDL_p(?u8XL{j_a+@{Z{@>JZr?pX{a@^8Ebn$vZ<};S|=%UE-^|o^Ntb_5eSW9Ai=5Y}34^{9BK)eTL9)spsoPaOJIHhSRjFg1)w2^MZ~eV07N9PqyQ|HKw|+| zCV}M)tl&7BB+y*YXpvr8>w`J8<rEdd5Sd1FV`$9CL3(GK!<=BrEIE*HGyqj?vE%eZ|;wQA>SG41Ibl@sF@i%l4 zMwh6^O3{f`Vm%r~4^?a(v9?mRhVcj1qnr4iz4R*t@RyiR+kLb>1O5L3ro+_M literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/report/SchedulerReport$1.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/report/SchedulerReport$1.class new file mode 100644 index 0000000000000000000000000000000000000000..8f8b7ea9f81c7d509f616f5e812e1c7555b08a8b GIT binary patch literal 1845 zcmbVNTT|Oc7(ELD#fnl~LY=0UgfuiUhM>@p3$;s22y{AQ$TZI6A#ZDWF^Yvmb!poC zj{Fe%5R&Obr_cRSot|A>ECVylAdjTo)!Fl%@7uHMfByaRF91vUv4o45ci`gA1uQry z!Ek>9@$tH7|(Wsbmp$Wa?_7@y|nje`4{hXoP?cjE|ZSe z&U?Ke^YSbRy+rNBN#?cu9o5N0l{_>3I!PKq6l5y`jq15sW?u+cYjH;jOf-W?ZRNXd zl{}a2kRy}L*q7l8nFPAuAGEY|0r#gUQps8<(^RorKd*wBMP_1!vFr#eRhzHmuhI); z)b$K?eb(@HLD zL=iPzKyAgX+}|;n_1}DDC^exU$~SKWJ}y8HGI3~)ij$5D)DoRmoF~582(;;@jv0MHOQk#4BR`DOAnIlA&@dH+EJa(~$Cj!?7$)2|0F4nQZ00Wds%*7Ra z$_;wX{W-HJa8u76_U?&-3S1rpKJtdZ!*j+J7_I6}UGA#viK3BddSh^bJ4Gk7vV^r9 za>DS^2wWKm8~Q|3rz%_ZeU+wxIVh~^OC9t2$$W==z*A#8iFdd1Fg!e9?iUpudGibw z8fIL!Qx#>baP`dHQO7h-UYBRJD3`Tk*c#H}e}Ge)dk0Z_kC8vv8^I)> zB})}f(SZ=oSN$`F`B(HH#vF$YjfT@z}Wl;jPGxLz=eIoRwmMh zW%w%?BYKYgdHoNM&+&!PP&v|2!I!v3*6U<(4Z9whX6pt= zsQzc09AB|*aqK2$*c!pt=mDkGC%uiT VnKz3X-xiYsKH=>!@I}6P{Ra-s<@^8u literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/report/SchedulerReport.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/bukkit/util/report/SchedulerReport.class new file mode 100644 index 0000000000000000000000000000000000000000..d5dc377ab038eb238123665d495a6347e27e62fc GIT binary patch literal 4344 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 literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/classes/com/sk89q/worldguard/protection/GlobalRegionManager.class b/worldguard-legacy/out/production/classes/com/sk89q/worldguard/protection/GlobalRegionManager.class new file mode 100644 index 0000000000000000000000000000000000000000..691b5b284aa7f121a00e5ef70538f12a4411512f GIT binary patch literal 2107 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 literal 0 HcmV?d00001 diff --git a/worldguard-legacy/out/production/resources/defaults/blacklist.txt b/worldguard-legacy/out/production/resources/defaults/blacklist.txt new file mode 100644 index 00000000..8ed6e0de --- /dev/null +++ b/worldguard-legacy/out/production/resources/defaults/blacklist.txt @@ -0,0 +1,65 @@ +# +# WorldGuard blacklist +# +# The blacklist lets you block actions, blocks, and items from being used. +# You choose a set of "items to affect" and a list of "actions to perform." +# +############################################################################### +# +# Example to block some ore mining and placement: +# [coalore,goldore,ironore] +# on-break=deny,log,kick +# on-place=deny,tell +# +# Events that you can detect: +# - on-break (when a block of this type is about to be broken) +# - on-destroy-with (the item/block held by the user while destroying) +# - on-place (a block is being placed) +# - on-use (an item like flint and steel or a bucket is being used) +# - on-interact (when a block in used (doors, chests, etc.)) +# - on-drop (an item is being dropped from the player's inventory) +# - on-acquire (an item enters a player's inventory via some method) +# - on-dispense (a dispenser is about to dispense an item) +# +# Actions (for events): +# - deny (deny completely, used blacklist mode) +# - allow (used in whitelist mode) +# - notify (notify admins with the 'worldguard.notify' permission) +# - log (log to console/file/database) +# - tell (tell a player that that's not allowed) +# - kick (kick player) +# - ban (ban player) +# +# Options: +# - ignore-groups (comma-separated list of groups to not affect) +# - ignore-perms (comma-separated list of permissions to not affect - make up +# your very own permissions!) +# - comment (message for yourself that is printed with 'log' and 'notify') +# - message (optional message to show the user instead; %s is the item name) +# +############################################################################### +# +# For more information, see: +# http://wiki.sk89q.com/wiki/WorldGuard/Blacklist +# +############################################################################### +# +# Some examples follow. +# REMEMBER: If a line has # in front, it will be ignored. +# + +# Deny lava buckets +#[lavabucket] +#ignore-perms=my.own.madeup.permission +#ignore-groups=admins,mods +#on-use=deny,tell + +# Deny some ore +#[coalore,goldore,ironore] +#ignore-groups=admins,mods +#on-break=notify,deny,log + +# Some funky data value tests +#[wood:0;>=2] +#ignore-groups=admins,mods +#on-break=notify,deny,log \ No newline at end of file diff --git a/worldguard-legacy/out/production/resources/defaults/config.yml b/worldguard-legacy/out/production/resources/defaults/config.yml new file mode 100644 index 00000000..4501e6fb --- /dev/null +++ b/worldguard-legacy/out/production/resources/defaults/config.yml @@ -0,0 +1,22 @@ +# +# WorldGuard's configuration file +# +# About editing this file: +# - DO NOT USE TABS. You MUST use spaces or Bukkit will complain. If +# you use an editor like Notepad++ (recommended for Windows users), you +# must configure it to "replace tabs with spaces." In Notepad++, this can +# be changed in Settings > Preferences > Language Menu. +# - Don't get rid of the indents. They are indented so some entries are +# in categories (like "enforce-single-session" is in the "protection" +# category. +# - If you want to check the format of this file before putting it +# into WorldGuard, paste it into http://yaml-online-parser.appspot.com/ +# and see if it gives "ERROR:". +# - Lines starting with # are commentsand so they are ignored. +# +# WARNING: +# Remember to check the compatibility spreadsheet for WorldGuard to see +# if any features are currently broken in your version of Bukkit. +# + +# -- This should be automatically replaced by the plugin in-game -- \ No newline at end of file diff --git a/worldguard-legacy/out/production/resources/defaults/config_world.yml b/worldguard-legacy/out/production/resources/defaults/config_world.yml new file mode 100644 index 00000000..db29fa3a --- /dev/null +++ b/worldguard-legacy/out/production/resources/defaults/config_world.yml @@ -0,0 +1,21 @@ +# +# WorldGuard's configuration file. +# +# This is the a per-world configuration file. It only affects one +# corresponding world. +# +# About editing this file: +# - DO NOT USE TABS. You MUST use spaces or Bukkit will complain. If +# you use an editor like Notepad++ (recommended for Windows users), you +# must configure it to "replace tabs with spaces." In Notepad++, this can +# be changed in Settings > Preferences > Language Menu. +# - Don't get rid of the indents. They are indented so some entries are +# in categories (like "enforce-single-session" is in the "protection" +# category. +# - If you want to check the format of this file before putting it +# into WorldGuard, paste it into http://yaml-online-parser.appspot.com/ +# and see if it gives "ERROR:". +# - Lines starting with # are comments and so they are ignored. +# + +# -- This should be automatically replaced by the plugin in-game -- \ No newline at end of file diff --git a/worldguard-legacy/out/production/resources/migrations/region/mysql/V1__Initial.sql b/worldguard-legacy/out/production/resources/migrations/region/mysql/V1__Initial.sql new file mode 100644 index 00000000..985b173f --- /dev/null +++ b/worldguard-legacy/out/production/resources/migrations/region/mysql/V1__Initial.sql @@ -0,0 +1,212 @@ +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; + +-- ----------------------------------------------------- +-- Table `group` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `${tablePrefix}group` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT , + `name` VARCHAR(64) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + PRIMARY KEY (`id`) , + UNIQUE INDEX `name` (`name` ASC) ) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_bin; + + +-- ----------------------------------------------------- +-- Table `world` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `${tablePrefix}world` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT , + `name` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + PRIMARY KEY (`id`) , + UNIQUE INDEX `name` (`name` ASC) ) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_bin; + + +-- ----------------------------------------------------- +-- Table `region` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `${tablePrefix}region` ( + `id` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + `world_id` INT(10) UNSIGNED NOT NULL , + `type` ENUM('cuboid','poly2d','global') CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + `priority` SMALLINT(6) NOT NULL DEFAULT '0' , + `parent` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL DEFAULT NULL , + PRIMARY KEY (`id`, `world_id`) , + INDEX `fk_region_world` (`world_id` ASC) , + INDEX `parent` (`parent` ASC) , + CONSTRAINT `fk_${tablePrefix}region_world1` + FOREIGN KEY (`world_id` ) + REFERENCES `${tablePrefix}world` (`id` ) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT `${tablePrefix}parent` + FOREIGN KEY (`parent` ) + REFERENCES `${tablePrefix}region` (`id` ) + ON DELETE SET NULL + ON UPDATE CASCADE) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_bin; + + +-- ----------------------------------------------------- +-- Table `region_cuboid` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `${tablePrefix}region_cuboid` ( + `region_id` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + `world_id` INT(10) UNSIGNED NOT NULL , + `min_x` BIGINT(20) NOT NULL , + `min_y` BIGINT(20) NOT NULL , + `min_z` BIGINT(20) NOT NULL , + `max_x` BIGINT(20) NOT NULL , + `max_y` BIGINT(20) NOT NULL , + `max_z` BIGINT(20) NOT NULL , + PRIMARY KEY (`region_id`, `world_id`) , + INDEX `fk_region_cuboid_region` (`region_id` ASC) , + CONSTRAINT `fk_${tablePrefix}region_cuboid_region` + FOREIGN KEY (`region_id` , `world_id` ) + REFERENCES `${tablePrefix}region` (`id` , `world_id` ) + ON DELETE CASCADE + ON UPDATE CASCADE) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_bin; + + +-- ----------------------------------------------------- +-- Table `region_flag` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `${tablePrefix}region_flag` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT , + `region_id` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + `world_id` INT(10) UNSIGNED NOT NULL , + `flag` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + `value` VARCHAR(256) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + PRIMARY KEY (`id`) , + INDEX `fk_flags_region` (`region_id` ASC, `world_id` ASC) , + CONSTRAINT `fk_${tablePrefix}flags_region` + FOREIGN KEY (`region_id` , `world_id` ) + REFERENCES `${tablePrefix}region` (`id` , `world_id` ) + ON DELETE CASCADE + ON UPDATE CASCADE) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_bin; + + +-- ----------------------------------------------------- +-- Table `region_groups` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `${tablePrefix}region_groups` ( + `region_id` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + `world_id` INT(10) UNSIGNED NOT NULL , + `group_id` INT(10) UNSIGNED NOT NULL , + `owner` TINYINT(1) NOT NULL , + PRIMARY KEY (`region_id`, `world_id`, `group_id`) , + INDEX `fk_region_groups_region` (`region_id` ASC) , + INDEX `fk_region_groups_group` (`group_id` ASC) , + CONSTRAINT `fk_${tablePrefix}region_groups_group` + FOREIGN KEY (`group_id` ) + REFERENCES `${tablePrefix}group` (`id` ) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT `fk_${tablePrefix}region_groups_region` + FOREIGN KEY (`region_id` , `world_id` ) + REFERENCES `${tablePrefix}region` (`id` , `world_id` ) + ON DELETE CASCADE + ON UPDATE CASCADE) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_bin; + + +-- ----------------------------------------------------- +-- Table `user` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `${tablePrefix}user` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT , + `name` VARCHAR(64) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + PRIMARY KEY (`id`) , + UNIQUE INDEX `name` (`name` ASC) ) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_bin; + + +-- ----------------------------------------------------- +-- Table `region_players` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `${tablePrefix}region_players` ( + `region_id` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + `world_id` INT(10) UNSIGNED NOT NULL , + `user_id` INT(10) UNSIGNED NOT NULL , + `owner` TINYINT(1) NOT NULL , + PRIMARY KEY (`region_id`, `world_id`, `user_id`) , + INDEX `fk_region_players_region` (`region_id` ASC) , + INDEX `fk_region_users_user` (`user_id` ASC) , + CONSTRAINT `fk_${tablePrefix}region_users_region` + FOREIGN KEY (`region_id` , `world_id` ) + REFERENCES `${tablePrefix}region` (`id` , `world_id` ) + ON DELETE CASCADE + ON UPDATE CASCADE, + CONSTRAINT `fk_${tablePrefix}region_users_user` + FOREIGN KEY (`user_id` ) + REFERENCES `${tablePrefix}user` (`id` ) + ON DELETE CASCADE + ON UPDATE CASCADE) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_bin; + + +-- ----------------------------------------------------- +-- Table `region_poly2d` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `${tablePrefix}region_poly2d` ( + `region_id` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + `world_id` INT(10) UNSIGNED NOT NULL , + `min_y` INT(11) NOT NULL , + `max_y` INT(11) NOT NULL , + PRIMARY KEY (`region_id`, `world_id`) , + INDEX `fk_region_poly2d_region` (`region_id` ASC) , + CONSTRAINT `fk_${tablePrefix}region_poly2d_region` + FOREIGN KEY (`region_id` , `world_id` ) + REFERENCES `${tablePrefix}region` (`id` , `world_id` ) + ON DELETE CASCADE + ON UPDATE CASCADE) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_bin; + + +-- ----------------------------------------------------- +-- Table `region_poly2d_point` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `${tablePrefix}region_poly2d_point` ( + `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT , + `region_id` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , + `world_id` INT(10) UNSIGNED NOT NULL , + `x` BIGINT(20) NOT NULL , + `z` BIGINT(20) NOT NULL , + PRIMARY KEY (`id`) , + INDEX `fk_region_poly2d_point_region_poly2d` (`region_id` ASC, `world_id` ASC) , + CONSTRAINT `fk_${tablePrefix}region_poly2d_point_region_poly2d` + FOREIGN KEY (`region_id` , `world_id` ) + REFERENCES `${tablePrefix}region_poly2d` (`region_id` , `world_id` ) + ON DELETE CASCADE + ON UPDATE CASCADE) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_bin; + + + +SET SQL_MODE=@OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/worldguard-legacy/out/production/resources/migrations/region/mysql/V2__Bug_fix_and_UUID.sql b/worldguard-legacy/out/production/resources/migrations/region/mysql/V2__Bug_fix_and_UUID.sql new file mode 100644 index 00000000..b1df899f --- /dev/null +++ b/worldguard-legacy/out/production/resources/migrations/region/mysql/V2__Bug_fix_and_UUID.sql @@ -0,0 +1,27 @@ +-- Fix WORLDGUARD-3117 +-- Otherwise, you can't be both an owner and a member of a region + +ALTER TABLE `${tablePrefix}region_players` + DROP PRIMARY KEY, + ADD PRIMARY KEY (`region_id`, `world_id`, `user_id`, `owner`); + +ALTER TABLE `${tablePrefix}region_groups` + DROP PRIMARY KEY, + ADD PRIMARY KEY (`region_id`, `world_id`, `group_id`, `owner`); + +-- Fix WORLDGUARD-3030 +-- Adds UUID support + +ALTER TABLE `${tablePrefix}user` + ALTER `name` DROP DEFAULT; + +ALTER TABLE `${tablePrefix}user` + CHANGE COLUMN `name` `name` VARCHAR(64) NULL COLLATE 'utf8_bin' AFTER `id`, + ADD COLUMN `uuid` CHAR(36) NULL AFTER `name`, + ADD UNIQUE INDEX `uuid` (`uuid`); + +-- Strings with differing numbers of trailing spaces are equal in MySQL +-- The domains have been updated to trim strings + +UPDATE `${tablePrefix}user` SET `name` = TRIM(`name`); +UPDATE `${tablePrefix}group` SET `name` = TRIM(`name`); \ No newline at end of file diff --git a/worldguard-legacy/out/production/resources/migrations/region/sqlite/V1__Initial.sql b/worldguard-legacy/out/production/resources/migrations/region/sqlite/V1__Initial.sql new file mode 100644 index 00000000..2b5b99e3 --- /dev/null +++ b/worldguard-legacy/out/production/resources/migrations/region/sqlite/V1__Initial.sql @@ -0,0 +1,160 @@ + +CREATE TABLE "${tablePrefix}world" ( + id INTEGER PRIMARY KEY AUTOINCREMENT + NOT NULL, + name TEXT NOT NULL + UNIQUE +); + + +CREATE TABLE "${tablePrefix}region" ( + id TEXT NOT NULL, + world_id INTEGER NOT NULL + REFERENCES "${tablePrefix}world" ( id ) ON DELETE CASCADE + ON UPDATE CASCADE, + type TEXT NOT NULL, + priority INTEGER NOT NULL, + parent TEXT DEFAULT ( NULL ) + --REFERENCES "${tablePrefix}region" ( id ) ON DELETE SET NULL + -- ON UPDATE CASCADE -- Not supported + , + PRIMARY KEY ( id, world_id ) +); + + +CREATE TABLE "${tablePrefix}user" ( + id INTEGER PRIMARY KEY AUTOINCREMENT + NOT NULL, + name TEXT UNIQUE + DEFAULT ( NULL ), + uuid TEXT UNIQUE + DEFAULT ( NULL ) +); + + +CREATE TABLE "${tablePrefix}group" ( + id INTEGER PRIMARY KEY AUTOINCREMENT + NOT NULL, + name TEXT NOT NULL + UNIQUE +); + + +CREATE TABLE "${tablePrefix}region_cuboid" ( + region_id TEXT NOT NULL, + world_id INTEGER NOT NULL, + min_x INTEGER NOT NULL, + min_y INTEGER NOT NULL, + min_z INTEGER NOT NULL, + max_x INTEGER NOT NULL, + max_y INTEGER NOT NULL, + max_z INTEGER NOT NULL, + PRIMARY KEY ( region_id, world_id ), + FOREIGN KEY ( region_id, world_id ) REFERENCES "${tablePrefix}region" ( id, world_id ) ON DELETE CASCADE + ON UPDATE CASCADE +); + + +CREATE TABLE "${tablePrefix}region_poly2d" ( + region_id TEXT NOT NULL, + world_id INTEGER NOT NULL, + min_y INTEGER NOT NULL, + max_y INTEGER NOT NULL, + PRIMARY KEY ( region_id, world_id ), + FOREIGN KEY ( region_id, world_id ) REFERENCES "${tablePrefix}region" ( id, world_id ) ON DELETE CASCADE + ON UPDATE CASCADE +); + + +CREATE TABLE "${tablePrefix}region_poly2d_point" ( + id INTEGER PRIMARY KEY AUTOINCREMENT + NOT NULL, + region_id TEXT NOT NULL, + world_id INTEGER NOT NULL, + x INTEGER NOT NULL, + z INTEGER NOT NULL, + FOREIGN KEY ( region_id, world_id ) REFERENCES "${tablePrefix}region_poly2d" ( region_id, world_id ) ON DELETE CASCADE + ON UPDATE CASCADE +); + + +CREATE TABLE "${tablePrefix}region_groups" ( + region_id TEXT NOT NULL, + world_id INTEGER NOT NULL, + group_id INTEGER NOT NULL + REFERENCES "${tablePrefix}group" ( id ) ON DELETE CASCADE + ON UPDATE CASCADE, + owner BOOLEAN NOT NULL, + PRIMARY KEY ( region_id, world_id, group_id ), + FOREIGN KEY ( region_id, world_id ) REFERENCES "${tablePrefix}region" ( id, world_id ) ON DELETE CASCADE + ON UPDATE CASCADE +); + + +CREATE TABLE "${tablePrefix}region_flag" ( + id INTEGER PRIMARY KEY AUTOINCREMENT + NOT NULL, + region_id TEXT NOT NULL, + world_id INTEGER NOT NULL, + flag TEXT NOT NULL, + value TEXT NOT NULL, + FOREIGN KEY ( region_id, world_id ) REFERENCES "${tablePrefix}region" ( id, world_id ) ON DELETE CASCADE + ON UPDATE CASCADE +); + + +CREATE TABLE "${tablePrefix}region_players" ( + region_id TEXT NOT NULL, + world_id INTEGER NOT NULL, + user_id INTEGER NOT NULL + REFERENCES "${tablePrefix}user" ( id ) ON DELETE CASCADE + ON UPDATE CASCADE, + owner BOOLEAN NOT NULL, + PRIMARY KEY ( region_id, world_id, user_id, owner ), + FOREIGN KEY ( region_id, world_id ) REFERENCES "${tablePrefix}region" ( id, world_id ) ON DELETE CASCADE + ON UPDATE CASCADE +); + + +CREATE INDEX "idx_${tablePrefix}region_cuboid_region_id" ON "${tablePrefix}region_cuboid" ( + region_id +); + + +CREATE INDEX "idx_${tablePrefix}region_world_id" ON "${tablePrefix}region" ( + world_id +); + + +CREATE INDEX "idx_${tablePrefix}region_parent" ON "${tablePrefix}region" ( + parent +); + + +CREATE INDEX "idx_${tablePrefix}region_poly2d_region_id" ON "${tablePrefix}region_poly2d" ( + region_id +); + + +CREATE INDEX "idx_${tablePrefix}region_poly2d_point_region_world_id" ON "${tablePrefix}region_poly2d_point" ( + region_id, + world_id +); + + +CREATE INDEX "idx_${tablePrefix}region_groups_region_id" ON "${tablePrefix}region_groups" ( + region_id +); + + +CREATE INDEX "idx_${tablePrefix}region_groups_group_id" ON "${tablePrefix}region_groups" ( + group_id +); + + +CREATE INDEX "idx_${tablePrefix}region_flag_region_world_id" ON "${tablePrefix}region_flag" ( + region_id, + world_id, + flag +); + diff --git a/worldguard-legacy/out/production/resources/plugin.yml b/worldguard-legacy/out/production/resources/plugin.yml new file mode 100644 index 00000000..9a8a62c6 --- /dev/null +++ b/worldguard-legacy/out/production/resources/plugin.yml @@ -0,0 +1,5 @@ +name: WorldGuard +main: com.sk89q.worldguard.bukkit.WorldGuardPlugin +version: "${project.internalVersion}" +softdepend: [WorldEdit, CommandBook] +api-version: 1.13 diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/LocalPlayer.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/LocalPlayer.java deleted file mode 100644 index cf64cd17..00000000 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/LocalPlayer.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * WorldGuard, a suite of tools for Minecraft - * Copyright (C) sk89q - * Copyright (C) WorldGuard team and contributors - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.sk89q.worldguard; - -import com.sk89q.worldedit.Vector; -import com.sk89q.worldguard.domains.Association; -import com.sk89q.worldguard.protection.association.RegionAssociable; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; - -import java.util.List; -import java.util.UUID; - -public abstract class LocalPlayer implements RegionAssociable { - - /** - * Get this player's name. - * - * @return The player's name - */ - public abstract String getName(); - - /** - * Get this player's unique ID. - * - * @return a UUID - */ - public abstract UUID getUniqueId(); - - /** - * Returns true if this player is inside a group. - * - * @param group The group to check - * @return Whether this player is in {@code group} - */ - public abstract boolean hasGroup(String group); - - /** - * Get this player's position. - * - * @return The player's position - */ - public abstract Vector getPosition(); - - /** - * Kick this player. - * - * @param msg The message to kick the player with - */ - public abstract void kick(String msg); - - /** - * Ban this player. - * - * @param msg The message to ban the player with - */ - public abstract void ban(String msg); - - /** - * Send this player a message. - * - * @param msg The message to send to the player - */ - public abstract void printRaw(String msg); - - /** - * Get this player's list of groups. - * - * @return The groups this player is in - */ - public abstract String[] getGroups(); - - /** - * Returns whether this player has permission. - * - * @param perm The permission to check - * @return Whether this player has {@code perm} - */ - public abstract boolean hasPermission(String perm); - - @Override - public Association getAssociation(List regions) { - boolean member = false; - - for (ProtectedRegion region : regions) { - if (region.isOwner(this)) { - return Association.OWNER; - } else if (!member && region.isMember(this)) { - member = true; - } - } - - return member ? Association.MEMBER : Association.NON_MEMBER; - } - - @Override - public boolean equals(Object obj) { - return obj instanceof LocalPlayer && ((LocalPlayer) obj).getName().equals(getName()); - } - - @Override - public int hashCode() { - return getName().hashCode(); - } - -} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/DataValueRangeMatcher.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/DataValueRangeMatcher.java deleted file mode 100644 index 97c3eb3f..00000000 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/DataValueRangeMatcher.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * WorldGuard, a suite of tools for Minecraft - * Copyright (C) sk89q - * Copyright (C) WorldGuard team and contributors - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.sk89q.worldguard.blacklist.target; - -import com.google.common.base.Predicate; - -import static com.google.common.base.Preconditions.checkNotNull; - -public class DataValueRangeMatcher implements TargetMatcher { - - private final int typeId; - private final Predicate dataMatcher; - - public DataValueRangeMatcher(int typeId, Predicate dataMatcher) { - checkNotNull(dataMatcher); - this.typeId = typeId; - this.dataMatcher = dataMatcher; - } - - @Override - public int getMatchedTypeId() { - return typeId; - } - - @Override - public boolean test(Target target) { - return typeId == target.getTypeId() && isDataInRange(target.getData()); - } - - private boolean isDataInRange(short data) { - return dataMatcher.apply(data); - } - -} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParser.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParser.java deleted file mode 100644 index 53a1c901..00000000 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/blacklist/target/TargetMatcherParser.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * WorldGuard, a suite of tools for Minecraft - * Copyright (C) sk89q - * Copyright (C) WorldGuard team and contributors - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.sk89q.worldguard.blacklist.target; - -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; -import com.google.common.collect.Range; -import com.sk89q.worldedit.blocks.ItemType; -import com.sk89q.worldguard.util.Enums; -import org.bukkit.Material; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class TargetMatcherParser { - - private static final Pattern DATA_VALUE_PATTERN = Pattern.compile("^([^:]+):([^:]+)$"); - private static final Pattern LESS_THAN_PATTERN = Pattern.compile("^<=\\s*([0-9]+)$"); - private static final Pattern GREATER_THAN_PATTERN = Pattern.compile("^>=\\s*([0-9]+)$"); - private static final Pattern RANGE_PATTERN = Pattern.compile("^([0-9]+)\\s*-\\s*([0-9]+)$"); - - public TargetMatcher fromInput(String input) throws TargetMatcherParseException { - Matcher matcher = DATA_VALUE_PATTERN.matcher(input.trim()); - if (matcher.matches()) { - return new DataValueRangeMatcher(parseType(matcher.group(1)), parseDataValueRanges(matcher.group(2))); - } else { - return new WildcardDataMatcher(parseType(input)); - } - } - - private int parseType(String input) throws TargetMatcherParseException { - input = input.trim(); - - try { - return Integer.parseInt(input); - } catch (NumberFormatException e) { - Material material = Enums.findFuzzyByValue(Material.class, input); - if (material != null) { - return material.getId(); - } - - int id = getItemID(input); - if (id > 0) { - return id; - } - - throw new TargetMatcherParseException("Unknown block or item name: " + input); - } - } - - private Predicate parseDataValueRanges(String input) throws TargetMatcherParseException { - List> predicates = new ArrayList>(); - - for (String part : input.split(";")) { - predicates.add(parseRange(part)); - } - - return Predicates.or(predicates); - } - - private Predicate parseRange(String input) throws TargetMatcherParseException { - input = input.trim(); - - Matcher matcher; - - matcher = LESS_THAN_PATTERN.matcher(input); - if (matcher.matches()) { - return Range.atMost(Short.parseShort(matcher.group(1))); - } - - matcher = GREATER_THAN_PATTERN.matcher(input); - if (matcher.matches()) { - return Range.atLeast(Short.parseShort(matcher.group(1))); - } - - matcher = RANGE_PATTERN.matcher(input); - if (matcher.matches()) { - return Range.closed(Short.parseShort(matcher.group(1)), Short.parseShort(matcher.group(2))); - } - - try { - short s = Short.parseShort(input); - return Range.closed(s, s); - } catch (NumberFormatException e) { - throw new TargetMatcherParseException("Unknown data value range: " + input); - } - } - - /** - * Get an item's ID from its name. - * - * @param name the name of the item to look up - * @return the id for name if contained in ItemId, else -1 - */ - private static int getItemID(String name) { - ItemType type = ItemType.lookup(name); - if (type != null) { - return type.getID(); - } else { - return -1; - } - } - -} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitConfigurationManager.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitConfigurationManager.java new file mode 100644 index 00000000..da4862b3 --- /dev/null +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitConfigurationManager.java @@ -0,0 +1,90 @@ +package com.sk89q.worldguard.bukkit; + +import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.extension.platform.Capability; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldguard.config.YamlConfigurationManager; +import com.sk89q.worldguard.util.report.Unreported; + +import java.io.File; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +public class BukkitConfigurationManager extends YamlConfigurationManager { + + @Unreported private WorldGuardPlugin plugin; + @Unreported private ConcurrentMap worlds = new ConcurrentHashMap<>(); + + private boolean hasCommandBookGodMode; + + /** + * Construct the object. + * + * @param plugin The plugin instance + */ + public BukkitConfigurationManager(WorldGuardPlugin plugin) { + super(); + } + + @Override + public File getDataFolder() { + return plugin.getDataFolder(); + } + + @Override + public void copyDefaults() { + // Create the default configuration file + plugin.createDefaultConfiguration(new File(plugin.getDataFolder(), "config.yml"), "config.yml"); + } + + @Override + public void unload() { + worlds.clear(); + } + + @Override + public void postLoad() { + // Load configurations for each world + for (World world : WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.GAME_HOOKS).getWorlds()) { + get(world); + } + } + + /** + * Get the configuration for a world. + * + * @param world The world to get the configuration for + * @return {@code world}'s configuration + */ + @Override + public BukkitWorldConfiguration get(World world) { + String worldName = world.getName(); + BukkitWorldConfiguration config = worlds.get(worldName); + BukkitWorldConfiguration newConfig = null; + + while (config == null) { + if (newConfig == null) { + newConfig = new BukkitWorldConfiguration(plugin, worldName, this.getConfig()); + } + worlds.putIfAbsent(world.getName(), newConfig); + config = worlds.get(world.getName()); + } + + return config; + } + + public void updateCommandBookGodMode() { + try { + if (plugin.getServer().getPluginManager().isPluginEnabled("CommandBook")) { + Class.forName("com.sk89q.commandbook.GodComponent"); + hasCommandBookGodMode = true; + return; + } + } catch (ClassNotFoundException ignore) {} + hasCommandBookGodMode = false; + } + + public boolean hasCommandBookGodMode() { + return hasCommandBookGodMode; + } +} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitOfflinePlayer.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitOfflinePlayer.java index 8112e2b1..b9dfde02 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitOfflinePlayer.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitOfflinePlayer.java @@ -20,11 +20,22 @@ package com.sk89q.worldguard.bukkit; import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.blocks.BaseItemStack; +import com.sk89q.worldedit.entity.BaseEntity; +import com.sk89q.worldedit.extent.inventory.BlockBag; +import com.sk89q.worldedit.session.SessionKey; +import com.sk89q.worldedit.util.HandSide; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldedit.world.weather.WeatherType; +import com.sk89q.worldedit.world.weather.WeatherTypes; import com.sk89q.worldguard.LocalPlayer; import org.bukkit.OfflinePlayer; import java.util.UUID; +import javax.annotation.Nullable; + class BukkitOfflinePlayer extends LocalPlayer { private final OfflinePlayer player; @@ -48,11 +59,6 @@ public boolean hasGroup(String group) { return false; } - @Override - public Vector getPosition() { - return Vector.ZERO; - } - @Override public void kick(String msg) { } @@ -61,10 +67,95 @@ public void kick(String msg) { public void ban(String msg) { } + @Override + public double getHealth() { + return 0; + } + + @Override + public void setHealth(double health) { + + } + + @Override + public double getMaxHealth() { + return 0; + } + + @Override + public double getFoodLevel() { + return 0; + } + + @Override + public void setFoodLevel(double foodLevel) { + + } + + @Override + public double getSaturation() { + return 0; + } + + @Override + public void setSaturation(double saturation) { + + } + + @Override + public WeatherType getPlayerWeather() { + return WeatherTypes.CLEAR; + } + + @Override + public void setPlayerWeather(WeatherType weather) { + + } + + @Override + public void resetPlayerWeather() { + + } + + @Override + public boolean isPlayerTimeRelative() { + return false; + } + + @Override + public long getPlayerTimeOffset() { + return 0; + } + + @Override + public void setPlayerTime(long time, boolean relative) { + + } + + @Override + public void resetPlayerTime() { + + } + @Override public void printRaw(String msg) { } + @Override + public void printDebug(String msg) { + + } + + @Override + public void print(String msg) { + + } + + @Override + public void printError(String msg) { + + } + @Override public String[] getGroups() { return new String[0]; @@ -75,4 +166,50 @@ public boolean hasPermission(String perm) { return false; } + @Override + public World getWorld() { + return null; + } + + @Override + public BaseItemStack getItemInHand(HandSide handSide) { + return null; + } + + @Override + public void giveItem(BaseItemStack itemStack) { + + } + + @Override + public BlockBag getInventoryBlockBag() { + return null; + } + + @Override + public void setPosition(Vector pos, float pitch, float yaw) { + + } + + @Nullable + @Override + public BaseEntity getState() { + return null; + } + + @Override + public Location getLocation() { + return null; + } + + @Override + public SessionKey getSessionKey() { + return null; + } + + @Nullable + @Override + public T getFacet(Class cls) { + return null; + } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitPlayer.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitPlayer.java index 981f2b6b..43a64383 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitPlayer.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitPlayer.java @@ -20,6 +20,16 @@ package com.sk89q.worldguard.bukkit; import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.blocks.BaseItemStack; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldedit.entity.BaseEntity; +import com.sk89q.worldedit.extent.inventory.BlockBag; +import com.sk89q.worldedit.session.SessionKey; +import com.sk89q.worldedit.util.HandSide; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldedit.world.weather.WeatherType; +import com.sk89q.worldedit.world.weather.WeatherTypes; import com.sk89q.worldguard.LocalPlayer; import org.bukkit.BanList.Type; import org.bukkit.Bukkit; @@ -30,10 +40,13 @@ import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.Nullable; + public class BukkitPlayer extends LocalPlayer { private final WorldGuardPlugin plugin; private final Player player; + private final com.sk89q.worldedit.bukkit.BukkitPlayer worldEditPlayer; private final String name; private final boolean silenced; @@ -50,6 +63,7 @@ public BukkitPlayer(WorldGuardPlugin plugin, Player player) { // getName() takes longer than before in newer versions of Minecraft this.name = player.getName(); this.silenced = silenced; + this.worldEditPlayer = new com.sk89q.worldedit.bukkit.BukkitPlayer((WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit"), player); } @Override @@ -67,12 +81,6 @@ public boolean hasGroup(String group) { return plugin.inGroup(player, group); } - @Override - public Vector getPosition() { - Location loc = player.getLocation(); - return new Vector(loc.getX(), loc.getY(), loc.getZ()); - } - @Override public void kick(String msg) { if (!silenced) { @@ -88,6 +96,76 @@ public void ban(String msg) { } } + @Override + public double getHealth() { + return player.getHealth(); + } + + @Override + public void setHealth(double health) { + player.setHealth(health); + } + + @Override + public double getMaxHealth() { + return player.getMaxHealth(); + } + + @Override + public double getFoodLevel() { + return player.getFoodLevel(); + } + + @Override + public void setFoodLevel(double foodLevel) { + player.setFoodLevel((int) foodLevel); + } + + @Override + public double getSaturation() { + return player.getSaturation(); + } + + @Override + public void setSaturation(double saturation) { + player.setSaturation((float) saturation); + } + + @Override + public WeatherType getPlayerWeather() { + return null; + } + + @Override + public void setPlayerWeather(WeatherType weather) { + player.setPlayerWeather(weather == WeatherTypes.CLEAR ? org.bukkit.WeatherType.CLEAR : org.bukkit.WeatherType.DOWNFALL); + } + + @Override + public void resetPlayerWeather() { + player.resetPlayerWeather(); + } + + @Override + public boolean isPlayerTimeRelative() { + return player.isPlayerTimeRelative(); + } + + @Override + public long getPlayerTimeOffset() { + return player.getPlayerTimeOffset(); + } + + @Override + public void setPlayerTime(long time, boolean relative) { + player.setPlayerTime(time, relative); + } + + @Override + public void resetPlayerTime() { + player.resetPlayerTime(); + } + @Override public String[] getGroups() { return plugin.getGroups(player); @@ -100,6 +178,21 @@ public void printRaw(String msg) { } } + @Override + public void printDebug(String msg) { + worldEditPlayer.printDebug(msg); + } + + @Override + public void print(String msg) { + worldEditPlayer.print(msg); + } + + @Override + public void printError(String msg) { + worldEditPlayer.printError(msg); + } + @Override public boolean hasPermission(String perm) { return plugin.hasPermission(player, perm); @@ -109,4 +202,51 @@ public Player getPlayer() { return player; } + @Override + public World getWorld() { + return BukkitAdapter.adapt(player.getWorld()); + } + + @Override + public BaseItemStack getItemInHand(HandSide handSide) { + return worldEditPlayer.getItemInHand(handSide); + } + + @Override + public void giveItem(BaseItemStack itemStack) { + worldEditPlayer.giveItem(itemStack); + } + + @Override + public BlockBag getInventoryBlockBag() { + return worldEditPlayer.getInventoryBlockBag(); + } + + @Override + public void setPosition(Vector pos, float pitch, float yaw) { + worldEditPlayer.setPosition(pos, pitch, yaw); + } + + @Nullable + @Override + public BaseEntity getState() { + return worldEditPlayer.getState(); + } + + @Override + public com.sk89q.worldedit.util.Location getLocation() { + Location loc = player.getLocation(); + return BukkitAdapter.adapt(loc); + } + + @Override + public SessionKey getSessionKey() { + return worldEditPlayer.getSessionKey(); + } + + @Nullable + @Override + public T getFacet(Class cls) { + return worldEditPlayer.getFacet(cls); + } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/RegionContainer.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitRegionContainer.java similarity index 68% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/RegionContainer.java rename to worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitRegionContainer.java index bc060648..3005e56d 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/RegionContainer.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitRegionContainer.java @@ -19,13 +19,18 @@ package com.sk89q.worldguard.bukkit; +import static com.google.common.base.Preconditions.checkNotNull; + import com.sk89q.worldedit.Vector2D; -import com.sk89q.worldguard.protection.managers.RegionContainerImpl; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.managers.migration.Migration; import com.sk89q.worldguard.protection.managers.migration.MigrationException; import com.sk89q.worldguard.protection.managers.migration.UUIDMigration; import com.sk89q.worldguard.protection.managers.storage.RegionDriver; +import com.sk89q.worldguard.protection.regions.RegionContainer; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; @@ -36,62 +41,42 @@ import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldUnloadEvent; -import javax.annotation.Nullable; import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.Nullable; -/** - * A region container creates {@link RegionManager}s for loaded worlds, which - * allows access to the region data of a world. Generally, only data is - * loaded for worlds that are loaded in the server. - * - *

This class is thread safe and its contents can be accessed from - * multiple concurrent threads.

- * - *

An instance of this class can be retrieved using - * {@link WorldGuardPlugin#getRegionContainer()}.

- */ -public class RegionContainer { +public class BukkitRegionContainer extends RegionContainer { - private static final Logger log = Logger.getLogger(RegionContainer.class.getCanonicalName()); + private static final Logger log = Logger.getLogger(BukkitRegionContainer.class.getCanonicalName()); /** * Invalidation frequency in ticks. */ private static final int CACHE_INVALIDATION_INTERVAL = 2; - private final Object lock = new Object(); private final WorldGuardPlugin plugin; - private final QueryCache cache = new QueryCache(); - private RegionContainerImpl container; /** * Create a new instance. * * @param plugin the plugin */ - RegionContainer(WorldGuardPlugin plugin) { + public BukkitRegionContainer(WorldGuardPlugin plugin) { this.plugin = plugin; } - /** - * Initialize the region container. - */ - void initialize() { - ConfigurationManager config = plugin.getGlobalStateManager(); - container = new RegionContainerImpl(config.selectedRegionStoreDriver, plugin.getFlagRegistry()); + @Override + public void initialize() { + super.initialize(); + + loadWorlds(); // Migrate to UUIDs autoMigrate(); - loadWorlds(); - Bukkit.getPluginManager().registerEvents(new Listener() { @EventHandler public void onWorldLoad(WorldLoadEvent event) { @@ -105,7 +90,7 @@ public void onWorldUnload(WorldUnloadEvent event) { @EventHandler public void onChunkLoad(ChunkLoadEvent event) { - RegionManager manager = get(event.getWorld()); + RegionManager manager = get(BukkitAdapter.adapt(event.getWorld())); if (manager != null) { Chunk chunk = event.getChunk(); manager.loadChunk(new Vector2D(chunk.getX(), chunk.getZ())); @@ -114,7 +99,7 @@ public void onChunkLoad(ChunkLoadEvent event) { @EventHandler public void onChunkUnload(ChunkUnloadEvent event) { - RegionManager manager = get(event.getWorld()); + RegionManager manager = get(BukkitAdapter.adapt(event.getWorld())); if (manager != null) { Chunk chunk = event.getChunk(); manager.unloadChunk(new Vector2D(chunk.getX(), chunk.getZ())); @@ -122,12 +107,7 @@ public void onChunkUnload(ChunkUnloadEvent event) { } }, plugin); - Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { - @Override - public void run() { - cache.invalidateAll(); - } - }, CACHE_INVALIDATION_INTERVAL, CACHE_INVALIDATION_INTERVAL); + Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, cache::invalidateAll, CACHE_INVALIDATION_INTERVAL, CACHE_INVALIDATION_INTERVAL); } /** @@ -182,7 +162,8 @@ public void reload() { private RegionManager load(World world) { checkNotNull(world); - WorldConfiguration config = plugin.getGlobalStateManager().get(world); + BukkitWorldConfiguration config = + (BukkitWorldConfiguration) WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(BukkitAdapter.adapt(world)); if (!config.useRegions) { return null; } @@ -194,7 +175,7 @@ private RegionManager load(World world) { if (manager != null) { // Bias the region data for loaded chunks - List positions = new ArrayList(); + List positions = new ArrayList<>(); for (Chunk chunk : world.getLoadedChunks()) { positions.add(new Vector2D(chunk.getX(), chunk.getZ())); } @@ -218,51 +199,6 @@ void unload(World world) { } } - /** - * Get the region manager for a world if one exists. - * - *

If you wish to make queries and performance is more important - * than accuracy, use {@link #createQuery()} instead.

- * - *

This method may return {@code null} if region data for the given - * world has not been loaded, has failed to load, or support for regions - * has been disabled.

- * - * @param world the world - * @return a region manager, or {@code null} if one is not available - */ - @Nullable - public RegionManager get(World world) { - return container.get(world.getName()); - } - - /** - * Get an immutable list of loaded {@link RegionManager}s. - * - * @return a list of managers - */ - public List getLoaded() { - return Collections.unmodifiableList(container.getLoaded()); - } - - /** - * Get the a set of region managers that are failing to save. - * - * @return a set of region managers - */ - public Set getSaveFailures() { - return container.getSaveFailures(); - } - - /** - * Create a new region query. - * - * @return a new query - */ - public RegionQuery createQuery() { - return new RegionQuery(plugin, cache); - } - /** * Execute a migration and block any loading of region data during * the migration. @@ -289,11 +225,11 @@ public void migrate(Migration migration) throws MigrationException { * Execute auto-migration. */ private void autoMigrate() { - ConfigurationManager config = plugin.getGlobalStateManager(); + ConfigurationManager config = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); if (config.migrateRegionsToUuid) { RegionDriver driver = getDriver(); - UUIDMigration migrator = new UUIDMigration(driver, plugin.getProfileService(), plugin.getFlagRegistry()); + UUIDMigration migrator = new UUIDMigration(driver, plugin.getProfileService(), WorldGuard.getInstance().getFlagRegistry()); migrator.setKeepUnresolvedNames(config.keepUnresolvedNames); try { migrate(migrator); diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitUtil.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitUtil.java index 8f50a1f1..82e10c00 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitUtil.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitUtil.java @@ -19,89 +19,32 @@ package com.sk89q.worldguard.bukkit; -import com.google.common.collect.ImmutableList; -import com.sk89q.worldedit.BlockVector; -import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.blocks.BlockID; -import com.sk89q.worldedit.blocks.BlockType; -import com.sk89q.worldedit.blocks.ItemID; -import com.sk89q.worldguard.blacklist.target.MaterialTarget; +import static com.google.common.base.Preconditions.checkNotNull; + +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldguard.blacklist.target.ItemTarget; import com.sk89q.worldguard.blacklist.target.Target; -import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import com.sk89q.worldguard.util.Enums; -import org.bukkit.*; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Server; +import org.bukkit.World; import org.bukkit.block.Block; -import org.bukkit.entity.*; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.ExperienceOrb; +import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.Item; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.entity.Tameable; import org.bukkit.inventory.ItemStack; -import java.lang.reflect.Method; -import java.util.Collection; import java.util.List; -import static com.google.common.base.Preconditions.checkNotNull; - public class BukkitUtil { - private static Method ONLINE_PLAYERS_METHOD; - - private BukkitUtil() { - - } - - /** - * Converts the location of a Bukkit block to a WorldEdit vector. - * - * @param block The block to convert - * @return The block's location as a BlockVector - */ - public static BlockVector toVector(Block block) { - return new BlockVector(block.getX(), block.getY(), block.getZ()); - } - - /** - * Converts a Bukkit location to a WorldEdit vector. - * - * @param loc A Bukkit Location - * @return A Vector with the location's x, y, and z values - */ - public static Vector toVector(Location loc) { - return new Vector(loc.getX(), loc.getY(), loc.getZ()); - } - - /** - * Converts a Bukkit vector to a WorldEdit vector. - * - * @param vector The Bukkit vector - * @return A WorldEdit vector with the same values as the Bukkit vector. - */ - public static Vector toVector(org.bukkit.util.Vector vector) { - return new Vector(vector.getX(), vector.getY(), vector.getZ()); - } - - /** - * Converts a WorldEdit vector to a Bukkit location. - * - * @param world The World to create the new Location with - * @param vec The vector to use for coordinates - * @return The Vector as a location with a World of world - */ - public static Location toLocation(World world, Vector vec) { - return new Location(world, vec.getX(), vec.getY(), vec.getZ()); - } - - /** - * Create a dummy region that encompasses the size of a chunk. - * - * @param chunk The chunk - * @return The dummy region - */ - public static ProtectedRegion toRegion(Chunk chunk) { - World world = chunk.getWorld(); - - int minX = chunk.getX() << 4; - int minZ = chunk.getZ() << 4; - return new ProtectedCuboidRegion("_", new BlockVector(minX, 0, minZ), new BlockVector(minX + 15, world.getMaxHeight(), minZ + 15)); + private BukkitUtil() { } /** @@ -121,19 +64,6 @@ public static Player matchSinglePlayer(Server server, String name) { return players.get(0); } - /** - * Drops a sign item and removes a sign. - * - * @param block The block - * @deprecated see {@link org.bukkit.block.Block#breakNaturally()} - */ - @Deprecated - public static void dropSign(Block block) { - block.setTypeId(0); - block.getWorld().dropItemNaturally(block.getLocation(), - new ItemStack(ItemID.SIGN, 1)); - } - /** * Sets the given block to fluid water. * Used by addSpongeWater() @@ -145,9 +75,8 @@ public static void dropSign(Block block) { */ public static void setBlockToWater(World world, int ox, int oy, int oz) { Block block = world.getBlockAt(ox, oy, oz); - int id = block.getTypeId(); - if (id == 0) { - block.setTypeId(8); + if (block.getType() == Material.AIR) { + block.setType(Material.WATER); } } @@ -162,8 +91,7 @@ public static void setBlockToWater(World world, int ox, int oy, int oz) { */ public static boolean isBlockWater(World world, int ox, int oy, int oz) { Block block = world.getBlockAt(ox, oy, oz); - int id = block.getTypeId(); - return id == 8 || id == 9; + return block.getType() == Material.WATER; } /** @@ -187,50 +115,6 @@ public static int getPotionEffectBits(ItemStack item) { return item.getDurability() & 0x3F; } - /** - * Find a position for the player to stand that is not inside a block. - * Blocks above the player will be iteratively tested until there is - * a series of two free blocks. The player will be teleported to - * that free position. - * - * @param player - */ - public static void findFreePosition(Player player) { - Location loc = player.getLocation(); - int x = loc.getBlockX(); - int y = Math.max(0, loc.getBlockY()); - int origY = y; - int z = loc.getBlockZ(); - World world = player.getWorld(); - - byte free = 0; - - while (y <= world.getMaxHeight() + 1) { - if (BlockType.canPassThrough(world.getBlockTypeIdAt(x, y, z))) { - free++; - } else { - free = 0; - } - - if (free == 2) { - if (y - 1 != origY || y == 1) { - loc.setX(x + 0.5); - loc.setY(y); - loc.setZ(z + 0.5); - if (y <= 2 && world.getBlockAt(x,0,z).getTypeId() == BlockID.AIR) { - world.getBlockAt(x,0,z).setTypeId(20); - loc.setY(2); - } - player.setFallDistance(0F); - player.teleport(loc); - } - return; - } - - y++; - } - } - /** * Replace color macros in a string. The macros are in the form of `[char] * where char represents the color. R is for red, Y is for yellow, @@ -277,13 +161,10 @@ public static String replaceColorMacros(String str) { return str; } - private static final org.bukkit.entity.EntityType armorStandType = - Enums.findByValue(org.bukkit.entity.EntityType.class, "ARMOR_STAND"); - /** * Returns whether an entity should be removed for the halt activity mode. * - * @param entity + * @param entity The entity * @return true if it's to be removed */ public static boolean isIntensiveEntity(Entity entity) { @@ -294,28 +175,7 @@ public static boolean isIntensiveEntity(Entity entity) { || (entity instanceof LivingEntity && !(entity instanceof Tameable) && !(entity instanceof Player) - && !(entity.getType() == armorStandType)); - } - - /** - * Search an enum for a value, and return the first one found. Return null if the - * enum entry is not found. - * - * @param enumType enum class - * @param values values to test - * @return a value in the enum or null - * @deprecated use {@link Enums#findByValue(Class, String...)} - */ - @Deprecated - public static > T tryEnum(Class enumType, String ... values) { - for (String val : values) { - try { - return Enum.valueOf(enumType, val); - } catch (IllegalArgumentException e) { - } - } - - return null; + && !(entity instanceof ArmorStand)); } /** @@ -326,23 +186,7 @@ public static > T tryEnum(Class enumType, String ... values */ public static Target createTarget(Block block) { checkNotNull(block); - return new MaterialTarget(block.getTypeId(), block.getData()); - } - - /** - * Get a blacklist target for the given block. - * - * @param block the block - * @param material a fallback material - * @return a target - */ - public static Target createTarget(Block block, Material material) { - checkNotNull(material); - if (block.getType() == material) { - return new MaterialTarget(block.getTypeId(), block.getData()); - } else { - return new MaterialTarget(material.getId(), (short) 0); - } + return new ItemTarget(BukkitAdapter.adapt(block.getBlockData()).getBlockType().getItemType()); } /** @@ -353,7 +197,7 @@ public static Target createTarget(Block block, Material material) { */ public static Target createTarget(ItemStack item) { checkNotNull(item); - return new MaterialTarget(item.getTypeId(), item.getDurability()); + return new ItemTarget(BukkitAdapter.adapt(item).getType()); } /** @@ -364,45 +208,6 @@ public static Target createTarget(ItemStack item) { */ public static Target createTarget(Material material) { checkNotNull(material); - return new MaterialTarget(material.getId(), (short) 0); + return new ItemTarget(BukkitAdapter.adapt(material)); } - - /** - * Get a collection of the currently online players. - * - * @return The online players - */ - @SuppressWarnings("unchecked") - public static Collection getOnlinePlayers() { - try { - return Bukkit.getServer().getOnlinePlayers(); - } catch (NoSuchMethodError ignored) { - } - - try { - if (ONLINE_PLAYERS_METHOD == null) { - ONLINE_PLAYERS_METHOD = getOnlinePlayersMethod(); - } - - Object result = ONLINE_PLAYERS_METHOD.invoke(Bukkit.getServer()); - if (result instanceof Player[]) { - return ImmutableList.copyOf((Player[]) result); - } else if (result instanceof Collection) { - return (Collection) result; - } else { - throw new RuntimeException("Result of getOnlinePlayers() call was not a known data type"); - } - } catch (Exception e) { - throw new RuntimeException("WorldGuard is not compatible with this version of Bukkit", e); - } - } - - private static Method getOnlinePlayersMethod() throws NoSuchMethodException { - try { - return Server.class.getMethod("getOnlinePlayers"); - } catch (NoSuchMethodException e1) { - return Server.class.getMethod("_INVALID_getOnlinePlayers"); - } - } - } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/WorldConfiguration.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java similarity index 81% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/WorldConfiguration.java rename to worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java index 8367f06e..f19ee108 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/WorldConfiguration.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java @@ -21,6 +21,8 @@ import com.sk89q.util.yaml.YAMLFormat; import com.sk89q.util.yaml.YAMLProcessor; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.blacklist.Blacklist; import com.sk89q.worldguard.blacklist.BlacklistLoggerHandler; import com.sk89q.worldguard.blacklist.logger.ConsoleHandler; @@ -28,13 +30,12 @@ import com.sk89q.worldguard.blacklist.logger.FileHandler; import com.sk89q.worldguard.blacklist.target.TargetMatcherParseException; import com.sk89q.worldguard.blacklist.target.TargetMatcherParser; +import com.sk89q.worldguard.bukkit.chest.ChestProtection; +import com.sk89q.worldguard.bukkit.chest.SignChestProtection; import com.sk89q.worldguard.bukkit.commands.CommandUtils; -import com.sk89q.worldguard.bukkit.internal.BukkitBlacklist; import com.sk89q.worldguard.bukkit.internal.TargetMatcherSet; -import com.sk89q.worldguard.chest.ChestProtection; -import com.sk89q.worldguard.chest.SignChestProtection; +import com.sk89q.worldguard.config.YamlWorldConfiguration; import com.sk89q.worldguard.util.report.Unreported; -import org.bukkit.block.Block; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffectType; @@ -43,9 +44,13 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.logging.Level; -import java.util.logging.Logger; /** * Holds the configuration for individual worlds. @@ -53,30 +58,16 @@ * @author sk89q * @author Michael */ -public class WorldConfiguration { +public class BukkitWorldConfiguration extends YamlWorldConfiguration { - private static final Logger log = Logger.getLogger(WorldConfiguration.class.getCanonicalName()); private static final TargetMatcherParser matcherParser = new TargetMatcherParser(); - public static final String CONFIG_HEADER = "#\r\n" + - "# WorldGuard's world configuration file\r\n" + - "#\r\n" + - "# This is a world configuration file. Anything placed into here will only\r\n" + - "# affect this world. If you don't put anything in this file, then the\r\n" + - "# settings will be inherited from the main configuration file.\r\n" + - "#\r\n" + - "# If you see {} below, that means that there are NO entries in this file.\r\n" + - "# Remove the {} and add your own entries.\r\n" + - "#\r\n"; - @Unreported private WorldGuardPlugin plugin; @Unreported private String worldName; @Unreported private YAMLProcessor parentConfig; @Unreported private YAMLProcessor config; - private File blacklistFile; - @Unreported private Blacklist blacklist; @Unreported private ChestProtection chestProtection = new SignChestProtection(); /* Configuration data start */ @@ -134,7 +125,6 @@ public class WorldConfiguration { public boolean teleportOnVoid; public boolean disableExplosionDamage; public boolean disableMobDamage; - public boolean useRegions; public boolean highFreqFlags; public boolean checkLiquidFlow; public int regionWand; @@ -146,7 +136,6 @@ public class WorldConfiguration { public int maxClaimVolume; public boolean claimOnlyInsideExistingRegions; public int maxRegionCountPerPlayer; - public boolean boundedLocationFlags; public boolean antiWolfDumbness; public boolean signChestProtection; public boolean disableSignChestProtectionCheck; @@ -193,10 +182,10 @@ public class WorldConfiguration { * Construct the object. * * @param plugin The WorldGuardPlugin instance - * @param worldName The world name that this WorldConfiguration is for. + * @param worldName The world name that this BukkitWorldConfiguration is for. * @param parentConfig The parent configuration to read defaults from */ - public WorldConfiguration(WorldGuardPlugin plugin, String worldName, YAMLProcessor parentConfig) { + public BukkitWorldConfiguration(WorldGuardPlugin plugin, String worldName, YAMLProcessor parentConfig) { File baseFolder = new File(plugin.getDataFolder(), "worlds/" + worldName); File configFile = new File(baseFolder, "config.yml"); blacklistFile = new File(baseFolder, "blacklist.txt"); @@ -216,61 +205,6 @@ public WorldConfiguration(WorldGuardPlugin plugin, String worldName, YAMLProcess } } - private boolean getBoolean(String node, boolean def) { - boolean val = parentConfig.getBoolean(node, def); - - if (config.getProperty(node) != null) { - return config.getBoolean(node, def); - } else { - return val; - } - } - - private String getString(String node, String def) { - String val = parentConfig.getString(node, def); - - if (config.getProperty(node) != null) { - return config.getString(node, def); - } else { - return val; - } - } - - private int getInt(String node, int def) { - int val = parentConfig.getInt(node, def); - - if (config.getProperty(node) != null) { - return config.getInt(node, def); - } else { - return val; - } - } - - @SuppressWarnings("unused") - private double getDouble(String node, double def) { - double val = parentConfig.getDouble(node, def); - - if (config.getProperty(node) != null) { - return config.getDouble(node, def); - } else { - return val; - } - } - - private List getIntList(String node, List def) { - List res = parentConfig.getIntList(node, def); - - if (res == null || res.size() == 0) { - parentConfig.setProperty(node, new ArrayList()); - } - - if (config.getProperty(node) != null) { - res = config.getIntList(node, def); - } - - return res; - } - private TargetMatcherSet getTargetMatchers(String node) { TargetMatcherSet set = new TargetMatcherSet(); List inputs = parentConfig.getStringList(node, null); @@ -291,47 +225,11 @@ private TargetMatcherSet getTargetMatchers(String node) { return set; } - private List getStringList(String node, List def) { - List res = parentConfig.getStringList(node, def); - - if (res == null || res.size() == 0) { - parentConfig.setProperty(node, new ArrayList()); - } - - if (config.getProperty(node) != null) { - res = config.getStringList(node, def); - } - - return res; - } - - private List getKeys(String node) { - List res = parentConfig.getKeys(node); - - if (res == null || res.size() == 0) { - res = config.getKeys(node); - } - if (res == null) { - res = new ArrayList(); - } - - return res; - } - - private Object getProperty(String node) { - Object res = parentConfig.getProperty(node); - - if (config.getProperty(node) != null) { - res = config.getProperty(node); - } - - return res; - } - /** * Load the configuration. */ - private void loadConfiguration() { + @Override + public void loadConfiguration() { try { config.load(); } catch (IOException e) { @@ -359,7 +257,7 @@ private void loadConfiguration() { disableExpDrops = getBoolean("protection.disable-xp-orb-drops", false); disableObsidianGenerators = getBoolean("protection.disable-obsidian-generators", false); - blockPotions = new HashSet(); + blockPotions = new HashSet<>(); for (String potionName : getStringList("gameplay.block-potions", null)) { PotionEffectType effect = PotionEffectType.getByName(potionName); @@ -382,7 +280,7 @@ private void loadConfiguration() { noPhysicsSand = getBoolean("physics.no-physics-sand", false); ropeLadders = getBoolean("physics.vine-like-rope-ladders", false); allowPortalAnywhere = getBoolean("physics.allow-portal-anywhere", false); - preventWaterDamage = new HashSet(getIntList("physics.disable-water-damage-blocks", null)); + preventWaterDamage = new HashSet<>(getIntList("physics.disable-water-damage-blocks", null)); blockTNTExplosions = getBoolean("ignition.block-tnt", false); blockTNTBlockDamage = getBoolean("ignition.block-tnt-block-damage", false); @@ -390,8 +288,8 @@ private void loadConfiguration() { preventLavaFire = getBoolean("fire.disable-lava-fire-spread", true); disableFireSpread = getBoolean("fire.disable-all-fire-spread", false); - disableFireSpreadBlocks = new HashSet(getIntList("fire.disable-fire-spread-blocks", null)); - allowedLavaSpreadOver = new HashSet(getIntList("fire.lava-spread-blocks", null)); + disableFireSpreadBlocks = new HashSet<>(getIntList("fire.disable-fire-spread-blocks", null)); + allowedLavaSpreadOver = new HashSet<>(getIntList("fire.lava-spread-blocks", null)); blockCreeperExplosions = getBoolean("mobs.block-creeper-explosions", false); blockCreeperBlockDamage = getBoolean("mobs.block-creeper-block-damage", false); @@ -435,7 +333,7 @@ private void loadConfiguration() { disableCreatureCropTrampling = getBoolean("crops.disable-creature-trampling", false); disablePlayerCropTrampling = getBoolean("crops.disable-player-trampling", false); - disallowedLightningBlocks = new HashSet(getIntList("weather.prevent-lightning-strike-blocks", null)); + disallowedLightningBlocks = new HashSet<>(getIntList("weather.prevent-lightning-strike-blocks", null)); preventLightningFire = getBoolean("weather.disable-lightning-strike-fire", false); disableThunder = getBoolean("weather.disable-thunderstorm", false); disableWeather = getBoolean("weather.disable-weather", false); @@ -454,7 +352,7 @@ private void loadConfiguration() { disableMyceliumSpread = getBoolean("dynamics.disable-mycelium-spread", false); disableVineGrowth = getBoolean("dynamics.disable-vine-growth", false); disableSoilDehydration = getBoolean("dynamics.disable-soil-dehydration", false); - allowedSnowFallOver = new HashSet(getIntList("dynamics.snow-fall-blocks", null)); + allowedSnowFallOver = new HashSet<>(getIntList("dynamics.snow-fall-blocks", null)); useRegions = getBoolean("regions.enable", true); regionInvinciblityRemovesMobs = getBoolean("regions.invincibility-removes-mobs", false); @@ -469,13 +367,13 @@ private void loadConfiguration() { boundedLocationFlags = getBoolean("regions.location-flags-only-inside-regions", false); maxRegionCountPerPlayer = getInt("regions.max-region-count-per-player.default", 7); - maxRegionCounts = new HashMap(); + maxRegionCounts = new HashMap<>(); maxRegionCounts.put(null, maxRegionCountPerPlayer); for (String key : getKeys("regions.max-region-count-per-player")) { if (!key.equalsIgnoreCase("default")) { Object val = getProperty("regions.max-region-count-per-player." + key); - if (val != null && val instanceof Number) { + if (val instanceof Number) { maxRegionCounts.put(key, ((Number) val).intValue()); } } @@ -485,7 +383,7 @@ private void loadConfiguration() { // buyOnClaim = getBoolean("iconomy.buy-on-claim", false); // buyOnClaimPrice = getDouble("iconomy.buy-on-claim-price", 1.0); - blockCreatureSpawn = new HashSet(); + blockCreatureSpawn = new HashSet<>(); for (String creatureName : getStringList("mobs.block-creature-spawn", null)) { EntityType creature = EntityType.fromName(creatureName); @@ -523,7 +421,7 @@ private void loadConfiguration() { } // First load the blacklist data from worldguard-blacklist.txt - Blacklist blist = new BukkitBlacklist(useBlacklistAsWhitelist, plugin); + Blacklist blist = new Blacklist(useBlacklistAsWhitelist); blist.load(blacklistFile); // If the blacklist is empty, then set the field to null @@ -598,39 +496,39 @@ public String getWorldName() { return this.worldName; } - public boolean isChestProtected(Block block, Player player) { + public boolean isChestProtected(Location block, LocalPlayer player) { if (!signChestProtection) { return false; } - if (plugin.hasPermission(player, "worldguard.chest-protection.override") - || plugin.hasPermission(player, "worldguard.override.chest-protection")) { + if (player.hasPermission("worldguard.chest-protection.override") + || player.hasPermission("worldguard.override.chest-protection")) { return false; } return chestProtection.isProtected(block, player); } - public boolean isChestProtected(Block block) { + public boolean isChestProtected(Location block) { return signChestProtection && chestProtection.isProtected(block, null); } - public boolean isChestProtectedPlacement(Block block, Player player) { + public boolean isChestProtectedPlacement(Location block, LocalPlayer player) { if (!signChestProtection) { return false; } - if (plugin.hasPermission(player, "worldguard.chest-protection.override") - || plugin.hasPermission(player, "worldguard.override.chest-protection")) { + if (player.hasPermission("worldguard.chest-protection.override") + || player.hasPermission("worldguard.override.chest-protection")) { return false; } return chestProtection.isProtectedPlacement(block, player); } - public boolean isAdjacentChestProtected(Block block, Player player) { + public boolean isAdjacentChestProtected(Location block, LocalPlayer player) { if (!signChestProtection) { return false; } - if (plugin.hasPermission(player, "worldguard.chest-protection.override") - || plugin.hasPermission(player, "worldguard.override.chest-protection")) { + if (player.hasPermission("worldguard.chest-protection.override") + || player.hasPermission("worldguard.override.chest-protection")) { return false; } return chestProtection.isAdjacentChestProtected(block, player); diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldGuardPlatform.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldGuardPlatform.java new file mode 100644 index 00000000..59654839 --- /dev/null +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldGuardPlatform.java @@ -0,0 +1,107 @@ +package com.sk89q.worldguard.bukkit; + +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.extension.platform.Actor; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldedit.world.gamemode.GameMode; +import com.sk89q.worldedit.world.gamemode.GameModes; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.internal.platform.WorldGuardPlatform; +import com.sk89q.worldguard.protection.flags.FlagContext; +import com.sk89q.worldguard.protection.flags.FlagContextCreateEvent; +import com.sk89q.worldguard.protection.regions.RegionContainer; +import com.sk89q.worldguard.session.BukkitSessionManager; +import com.sk89q.worldguard.session.SessionManager; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permissible; + +import java.util.Collection; +import java.util.Set; + +public class BukkitWorldGuardPlatform implements WorldGuardPlatform { + + private SessionManager sessionManager; + private final BukkitConfigurationManager configuration; + private final BukkitRegionContainer regionContainer; + + public BukkitWorldGuardPlatform() { + sessionManager = new BukkitSessionManager(WorldGuardPlugin.inst()); + configuration = new BukkitConfigurationManager(WorldGuardPlugin.inst()); + regionContainer = new BukkitRegionContainer(WorldGuardPlugin.inst()); + regionContainer.initialize(); + } + + @Override + public void notifyFlagContextCreate(FlagContext.FlagContextBuilder flagContextBuilder) { + Bukkit.getServer().getPluginManager().callEvent(new FlagContextCreateEvent(flagContextBuilder)); + } + + @Override + public BukkitConfigurationManager getGlobalStateManager() { + return configuration; + } + + @Override + public World getWorldByName(String worldName) { + return BukkitAdapter.adapt(Bukkit.getServer().getWorld(worldName)); + } + + @Override + public String replaceColorMacros(String string) { + return BukkitUtil.replaceColorMacros(string); + } + + public String replaceMacros(Actor sender, String message) { + Collection online = Bukkit.getServer().getOnlinePlayers(); + + message = message.replace("%name%", sender.getName()); + message = message.replace("%id%", sender.getUniqueId().toString()); + message = message.replace("%online%", String.valueOf(online.size())); + + if (sender instanceof LocalPlayer) { + LocalPlayer player = (LocalPlayer) sender; + World world = (World) player.getExtent(); + + message = message.replace("%world%", world.getName()); + message = message.replace("%health%", String.valueOf(player.getHealth())); + } + + return message; + } + + @Override + public SessionManager getSessionManager() { + return this.sessionManager; + } + + @Override + public void broadcastNotification(String message) { + Bukkit.broadcast(message, "worldguard.notify"); + Set subs = Bukkit.getPluginManager().getPermissionSubscriptions("worldguard.notify"); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (!(subs.contains(player) && player.hasPermission("worldguard.notify")) && + WorldGuardPlugin.inst().hasPermission(player, "worldguard.notify")) { // Make sure the player wasn't already broadcasted to. + player.sendMessage(message); + } + } + WorldGuard.logger.info(message); + } + + @Override + public void unload() { + configuration.unload(); + regionContainer.unload(); + } + + @Override + public RegionContainer getRegionContainer() { + return this.regionContainer; + } + + @Override + public GameMode getDefaultGameMode() { + return GameModes.get(Bukkit.getServer().getDefaultGameMode().name().toLowerCase()); + } +} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/ConfigurationManager.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/ConfigurationManager.java deleted file mode 100644 index bdadad89..00000000 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/ConfigurationManager.java +++ /dev/null @@ -1,298 +0,0 @@ -/* - * WorldGuard, a suite of tools for Minecraft - * Copyright (C) sk89q - * Copyright (C) WorldGuard team and contributors - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.sk89q.worldguard.bukkit; - -import com.google.common.collect.ImmutableMap; -import com.sk89q.util.yaml.YAMLFormat; -import com.sk89q.util.yaml.YAMLProcessor; -import com.sk89q.worldguard.protection.managers.storage.DriverType; -import com.sk89q.worldguard.protection.managers.storage.RegionDriver; -import com.sk89q.worldguard.protection.managers.storage.file.DirectoryYamlDriver; -import com.sk89q.worldguard.protection.managers.storage.sql.SQLDriver; -import com.sk89q.worldguard.session.handler.WaterBreathing; -import com.sk89q.worldguard.util.report.Unreported; -import com.sk89q.worldguard.util.sql.DataSourceConfig; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import java.util.logging.Logger; - -/** - * Represents the global configuration and also delegates configuration - * for individual worlds. - * - * @author sk89q - * @author Michael - */ -public class ConfigurationManager { - - private static final Logger log = Logger.getLogger(ConfigurationManager.class.getCanonicalName()); - - private static final String CONFIG_HEADER = "#\r\n" + - "# WorldGuard's main configuration file\r\n" + - "#\r\n" + - "# This is the global configuration file. Anything placed into here will\r\n" + - "# be applied to all worlds. However, each world has its own configuration\r\n" + - "# file to allow you to replace most settings in here for that world only.\r\n" + - "#\r\n" + - "# About editing this file:\r\n" + - "# - DO NOT USE TABS. You MUST use spaces or Bukkit will complain. If\r\n" + - "# you use an editor like Notepad++ (recommended for Windows users), you\r\n" + - "# must configure it to \"replace tabs with spaces.\" In Notepad++, this can\r\n" + - "# be changed in Settings > Preferences > Language Menu.\r\n" + - "# - Don't get rid of the indents. They are indented so some entries are\r\n" + - "# in categories (like \"enforce-single-session\" is in the \"protection\"\r\n" + - "# category.\r\n" + - "# - If you want to check the format of this file before putting it\r\n" + - "# into WorldGuard, paste it into http://yaml-online-parser.appspot.com/\r\n" + - "# and see if it gives \"ERROR:\".\r\n" + - "# - Lines starting with # are comments and so they are ignored.\r\n" + - "#\r\n"; - - @Unreported private WorldGuardPlugin plugin; - @Unreported private ConcurrentMap worlds; - @Unreported private YAMLProcessor config; - - private boolean hasCommandBookGodMode = false; - - public boolean useRegionsCreatureSpawnEvent; - public boolean activityHaltToggle = false; - public boolean useGodPermission; - public boolean useGodGroup; - public boolean useAmphibiousGroup; - public boolean usePlayerMove; - public boolean usePlayerTeleports; - public boolean deopOnJoin; - public boolean blockInGameOp; - public boolean migrateRegionsToUuid; - public boolean keepUnresolvedNames; - - @Unreported public Map hostKeys = new HashMap(); - public boolean hostKeysAllowFMLClients; - - /** - * Region Storage Configuration method, and config values - */ - @Unreported public RegionDriver selectedRegionStoreDriver; - @Unreported public Map regionStoreDriverMap; - - /** - * Construct the object. - * - * @param plugin The plugin instance - */ - public ConfigurationManager(WorldGuardPlugin plugin) { - this.plugin = plugin; - this.worlds = new ConcurrentHashMap(); - } - - /** - * Get the folder for storing data files and configuration. - * - * @return the data folder - */ - public File getDataFolder() { - return plugin.getDataFolder(); - } - - /** - * Get the folder for storing data files and configuration for each - * world. - * - * @return the data folder - */ - public File getWorldsDataFolder() { - return new File(getDataFolder(), "worlds"); - } - - /** - * Load the configuration. - */ - @SuppressWarnings("unchecked") - public void load() { - // Create the default configuration file - plugin.createDefaultConfiguration( - new File(plugin.getDataFolder(), "config.yml"), "config.yml"); - - config = new YAMLProcessor(new File(plugin.getDataFolder(), "config.yml"), true, YAMLFormat.EXTENDED); - try { - config.load(); - } catch (IOException e) { - log.severe("Error reading configuration for global config: "); - e.printStackTrace(); - } - - config.removeProperty("suppress-tick-sync-warnings"); - migrateRegionsToUuid = config.getBoolean("regions.uuid-migration.perform-on-next-start", true); - keepUnresolvedNames = config.getBoolean("regions.uuid-migration.keep-names-that-lack-uuids", true); - useRegionsCreatureSpawnEvent = config.getBoolean("regions.use-creature-spawn-event", true); - useGodPermission = config.getBoolean("auto-invincible", config.getBoolean("auto-invincible-permission", false)); - useGodGroup = config.getBoolean("auto-invincible-group", false); - useAmphibiousGroup = config.getBoolean("auto-no-drowning-group", false); - config.removeProperty("auto-invincible-permission"); - usePlayerMove = config.getBoolean("use-player-move-event", true); - usePlayerTeleports = config.getBoolean("use-player-teleports", true); - - deopOnJoin = config.getBoolean("security.deop-everyone-on-join", false); - blockInGameOp = config.getBoolean("security.block-in-game-op-command", false); - - hostKeys = new HashMap(); - Object hostKeysRaw = config.getProperty("host-keys"); - if (hostKeysRaw == null || !(hostKeysRaw instanceof Map)) { - config.setProperty("host-keys", new HashMap()); - } else { - for (Map.Entry entry : ((Map) hostKeysRaw).entrySet()) { - String key = String.valueOf(entry.getKey()); - String value = String.valueOf(entry.getValue()); - hostKeys.put(key.toLowerCase(), value); - } - } - hostKeysAllowFMLClients = config.getBoolean("security.host-keys-allow-forge-clients", false); - - // ==================================================================== - // Region store drivers - // ==================================================================== - - boolean useSqlDatabase = config.getBoolean("regions.sql.use", false); - String sqlDsn = config.getString("regions.sql.dsn", "jdbc:mysql://localhost/worldguard"); - String sqlUsername = config.getString("regions.sql.username", "worldguard"); - String sqlPassword = config.getString("regions.sql.password", "worldguard"); - String sqlTablePrefix = config.getString("regions.sql.table-prefix", ""); - - DataSourceConfig dataSourceConfig = new DataSourceConfig(sqlDsn, sqlUsername, sqlPassword, sqlTablePrefix); - SQLDriver sqlDriver = new SQLDriver(dataSourceConfig); - DirectoryYamlDriver yamlDriver = new DirectoryYamlDriver(getWorldsDataFolder(), "regions.yml"); - - this.regionStoreDriverMap = ImmutableMap.builder() - .put(DriverType.MYSQL, sqlDriver) - .put(DriverType.YAML, yamlDriver) - .build(); - this.selectedRegionStoreDriver = useSqlDatabase ? sqlDriver : yamlDriver; - - // Load configurations for each world - for (World world : plugin.getServer().getWorlds()) { - get(world); - } - - config.setHeader(CONFIG_HEADER); - } - - /** - * Unload the configuration. - */ - public void unload() { - worlds.clear(); - } - - public void disableUuidMigration() { - config.setProperty("regions.uuid-migration.perform-on-next-start", false); - if (!config.save()) { - log.severe("Error saving configuration!"); - } - } - - /** - * Get the configuration for a world. - * - * @param world The world to get the configuration for - * @return {@code world}'s configuration - */ - public WorldConfiguration get(World world) { - String worldName = world.getName(); - WorldConfiguration config = worlds.get(worldName); - WorldConfiguration newConfig = null; - - while (config == null) { - if (newConfig == null) { - newConfig = new WorldConfiguration(plugin, worldName, this.config); - } - worlds.putIfAbsent(world.getName(), newConfig); - config = worlds.get(world.getName()); - } - - return config; - } - - /** - * Check to see if god mode is enabled for a player. - * - * @param player The player to check - * @return Whether the player has godmode through WorldGuard or CommandBook - */ - public boolean hasGodMode(Player player) { - return plugin.getSessionManager().get(player).isInvincible(player); - } - - /** - * Enable amphibious mode for a player. - * - * @param player The player to enable amphibious mode for - */ - public void enableAmphibiousMode(Player player) { - WaterBreathing handler = plugin.getSessionManager().get(player).getHandler(WaterBreathing.class); - if (handler != null) { - handler.setWaterBreathing(true); - } - } - - /** - * Disable amphibious mode for a player. - * - * @param player The player to disable amphibious mode for - */ - public void disableAmphibiousMode(Player player) { - WaterBreathing handler = plugin.getSessionManager().get(player).getHandler(WaterBreathing.class); - if (handler != null) { - handler.setWaterBreathing(false); - } - } - - /** - * Check to see if amphibious mode is enabled for a player. - * - * @param player The player to check - * @return Whether {@code player} has amphibious mode - */ - public boolean hasAmphibiousMode(Player player) { - WaterBreathing handler = plugin.getSessionManager().get(player).getHandler(WaterBreathing.class); - return handler != null && handler.hasWaterBreathing(); - } - - public void updateCommandBookGodMode() { - try { - if (plugin.getServer().getPluginManager().isPluginEnabled("CommandBook")) { - Class.forName("com.sk89q.commandbook.GodComponent"); - hasCommandBookGodMode = true; - return; - } - } catch (ClassNotFoundException ignore) {} - hasCommandBookGodMode = false; - } - - public boolean hasCommandBookGodMode() { - return hasCommandBookGodMode; - } -} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/WGBukkit.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/WGBukkit.java deleted file mode 100644 index 4c91ca99..00000000 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/WGBukkit.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * WorldGuard, a suite of tools for Minecraft - * Copyright (C) sk89q - * Copyright (C) WorldGuard team and contributors - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.sk89q.worldguard.bukkit; - -import org.bukkit.World; - -import com.sk89q.worldguard.protection.managers.RegionManager; - -/** - * Helper class to get a reference to WorldGuard and its components. - */ -public class WGBukkit { - - private WGBukkit() { - } - - /** - * Get the WorldGuard plugin. If WorldGuard isn't loaded yet, then this will - * return null. - *

- * If you are depending on WorldGuard in your plugin, you should place - * softdepend: [WorldGuard] or depend: [WorldGuard] - * in your plugin.yml so that this won't return null for you. - * - * @return the WorldGuard plugin or null - */ - public static WorldGuardPlugin getPlugin() { - return WorldGuardPlugin.inst(); - } - - /** - * Set cache to null for reload WorldGuardPlugin - * @deprecated instance is now stored directly in {@link WorldGuardPlugin} - */ - @Deprecated - public static void cleanCache() { - // do nothing - plugin instance is stored in plugin class now - } - - /** - * Returns the region manager for a given world. May return null if WorldGuard - * is not loaded or region protection is not enabled for the given world. - * - * @param world world - * @return a region manager or null - */ - public static RegionManager getRegionManager(World world) { - if (getPlugin() == null) { - return null; - } - return WorldGuardPlugin.inst().getRegionManager(world); - } - -} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardPlugin.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardPlugin.java index 8dcaaa40..03a05967 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardPlugin.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardPlugin.java @@ -41,46 +41,61 @@ import com.sk89q.squirrelid.resolver.HttpRepositoryService; import com.sk89q.squirrelid.resolver.ProfileService; import com.sk89q.wepif.PermissionsResolverManager; +import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.bukkit.commands.GeneralCommands; import com.sk89q.worldguard.bukkit.commands.ProtectionCommands; import com.sk89q.worldguard.bukkit.commands.ToggleCommands; import com.sk89q.worldguard.bukkit.event.player.ProcessPlayerEvent; -import com.sk89q.worldguard.bukkit.listener.*; +import com.sk89q.worldguard.bukkit.listener.BlacklistListener; +import com.sk89q.worldguard.bukkit.listener.BlockedPotionsListener; +import com.sk89q.worldguard.bukkit.listener.BuildPermissionListener; +import com.sk89q.worldguard.bukkit.listener.ChestProtectionListener; +import com.sk89q.worldguard.bukkit.listener.DebuggingListener; +import com.sk89q.worldguard.bukkit.listener.EventAbstractionListener; +import com.sk89q.worldguard.bukkit.listener.InvincibilityListener; +import com.sk89q.worldguard.bukkit.listener.PlayerModesListener; +import com.sk89q.worldguard.bukkit.listener.PlayerMoveListener; +import com.sk89q.worldguard.bukkit.listener.RegionFlagsListener; +import com.sk89q.worldguard.bukkit.listener.RegionProtectionListener; +import com.sk89q.worldguard.bukkit.listener.WorldGuardBlockListener; +import com.sk89q.worldguard.bukkit.listener.WorldGuardCommandBookListener; +import com.sk89q.worldguard.bukkit.listener.WorldGuardEntityListener; +import com.sk89q.worldguard.bukkit.listener.WorldGuardHangingListener; +import com.sk89q.worldguard.bukkit.listener.WorldGuardPlayerListener; +import com.sk89q.worldguard.bukkit.listener.WorldGuardServerListener; +import com.sk89q.worldguard.bukkit.listener.WorldGuardVehicleListener; +import com.sk89q.worldguard.bukkit.listener.WorldGuardWeatherListener; +import com.sk89q.worldguard.bukkit.listener.WorldGuardWorldListener; +import com.sk89q.worldguard.bukkit.listener.WorldRulesListener; import com.sk89q.worldguard.bukkit.util.Events; import com.sk89q.worldguard.protection.GlobalRegionManager; -import com.sk89q.worldguard.protection.flags.DefaultFlag; import com.sk89q.worldguard.protection.flags.Flag; -import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; -import com.sk89q.worldguard.protection.flags.registry.SimpleFlagRegistry; -import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.managers.storage.StorageException; import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.util.UnresolvedNamesException; -import com.sk89q.worldguard.session.SessionManager; +import com.sk89q.worldguard.session.BukkitSessionManager; import com.sk89q.worldguard.util.concurrent.EvenMoreExecutors; import com.sk89q.worldguard.util.logging.ClassSourceValidator; import com.sk89q.worldguard.util.logging.RecordMessagePrefixer; import com.sk89q.worldguard.util.task.SimpleSupervisor; import com.sk89q.worldguard.util.task.Supervisor; import com.sk89q.worldguard.util.task.Task; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.Location; import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.World.Environment; -import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; -import org.bukkit.permissions.Permissible; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; -import javax.annotation.Nullable; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; @@ -91,7 +106,6 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; -import java.util.Set; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.RejectedExecutionException; @@ -101,20 +115,17 @@ import java.util.logging.Logger; import java.util.zip.ZipEntry; +import javax.annotation.Nullable; + /** * The main class for WorldGuard as a Bukkit plugin. */ public class WorldGuardPlugin extends JavaPlugin { - private static final Logger log = Logger.getLogger(WorldGuardPlugin.class.getCanonicalName()); - private static WorldGuardPlugin inst; + private static BukkitWorldGuardPlatform platform; private final CommandsManager commands; - private final ConfigurationManager configuration = new ConfigurationManager(this); - private final RegionContainer regionContainer = new RegionContainer(this); - private final GlobalRegionManager globalRegionManager = new GlobalRegionManager(this, regionContainer); - private final SimpleFlagRegistry flagRegistry = new SimpleFlagRegistry(); - private SessionManager sessionManager; + private final GlobalRegionManager globalRegionManager = new GlobalRegionManager((BukkitRegionContainer) WorldGuard.getInstance().getPlatform().getRegionContainer()); private final Supervisor supervisor = new SimpleSupervisor(); private ListeningExecutorService executorService; private ProfileService profileService; @@ -133,7 +144,6 @@ public boolean hasPermission(CommandSender player, String perm) { return plugin.hasPermission(player, perm); } }; - flagRegistry.registerAll(DefaultFlag.getDefaultFlags()); } /** @@ -151,13 +161,13 @@ public static WorldGuardPlugin inst() { @SuppressWarnings("deprecation") public void onEnable() { configureLogger(); - flagRegistry.setInitialized(true); getDataFolder().mkdirs(); // Need to create the plugins/WorldGuard folder executorService = MoreExecutors.listeningDecorator(EvenMoreExecutors.newBoundedCachedThreadPool(0, 1, 20)); - sessionManager = new SessionManager(this); + WorldGuard.getInstance().setPlatform(platform = new BukkitWorldGuardPlatform()); // Initialise WorldGuard + BukkitSessionManager sessionManager = (BukkitSessionManager) platform.getSessionManager(); // Set the proper command injector commands.setInjector(new SimpleInjector(this)); @@ -165,7 +175,7 @@ public void onEnable() { // Catch bad things being done by naughty plugins that include // WorldGuard's classes ClassSourceValidator verifier = new ClassSourceValidator(this); - verifier.reportMismatches(ImmutableList.of(WGBukkit.class, ProtectedRegion.class, ProtectedCuboidRegion.class, Flag.class)); + verifier.reportMismatches(ImmutableList.of(ProtectedRegion.class, ProtectedCuboidRegion.class, Flag.class)); // Register command classes final CommandsManagerRegistration reg = new CommandsManagerRegistration(this, commands); @@ -175,7 +185,7 @@ public void onEnable() { getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() { @Override public void run() { - if (!getGlobalStateManager().hasCommandBookGodMode()) { + if (!platform.getGlobalStateManager().hasCommandBookGodMode()) { reg.register(GeneralCommands.class); } } @@ -186,7 +196,7 @@ public void run() { try { profileCache = new SQLiteCache(new File(cacheDir, "profiles.sqlite")); } catch (IOException e) { - log.log(Level.WARNING, "Failed to initialize SQLite profile cache"); + WorldGuard.logger.log(Level.WARNING, "Failed to initialize SQLite profile cache"); profileCache = new HashMapCache(); } @@ -197,12 +207,10 @@ public void run() { profileCache); PermissionsResolverManager.initialize(this); - configuration.load(); - log.info("Loading region data..."); - regionContainer.initialize(); + WorldGuard.logger.info("Loading region data..."); - getServer().getScheduler().scheduleSyncRepeatingTask(this, sessionManager, SessionManager.RUN_DELAY, SessionManager.RUN_DELAY); + getServer().getScheduler().scheduleSyncRepeatingTask(this, sessionManager, BukkitSessionManager.RUN_DELAY, BukkitSessionManager.RUN_DELAY); // Register events getServer().getPluginManager().registerEvents(sessionManager, this); @@ -227,10 +235,10 @@ public void run() { (new BuildPermissionListener(this)).registerEvents(); (new InvincibilityListener(this)).registerEvents(); if ("true".equalsIgnoreCase(System.getProperty("worldguard.debug.listener"))) { - (new DebuggingListener(this, log)).registerEvents(); + (new DebuggingListener(this, WorldGuard.logger)).registerEvents(); } - configuration.updateCommandBookGodMode(); + platform.getGlobalStateManager().updateCommandBookGodMode(); if (getServer().getPluginManager().isPluginEnabled("CommandBook")) { getServer().getPluginManager().registerEvents(new WorldGuardCommandBookListener(this), this); @@ -243,7 +251,7 @@ public void run() { } worldListener.registerEvents(); - for (Player player : BukkitUtil.getOnlinePlayers()) { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { ProcessPlayerEvent event = new ProcessPlayerEvent(player); Events.fire(event); } @@ -254,7 +262,7 @@ public void onDisable() { executorService.shutdown(); try { - log.log(Level.INFO, "Shutting down executor and waiting for any pending tasks..."); + WorldGuard.logger.log(Level.INFO, "Shutting down executor and waiting for any pending tasks..."); List> tasks = supervisor.getTasks(); if (!tasks.isEmpty()) { @@ -263,7 +271,7 @@ public void onDisable() { builder.append("\n"); builder.append(task.getName()); } - log.log(Level.INFO, builder.toString()); + WorldGuard.logger.log(Level.INFO, builder.toString()); } Futures.successfulAsList(tasks).get(); @@ -271,11 +279,10 @@ public void onDisable() { } catch (InterruptedException e) { Thread.currentThread().interrupt(); } catch (ExecutionException e) { - log.log(Level.WARNING, "Some tasks failed while waiting for remaining tasks to finish", e); + WorldGuard.logger.log(Level.WARNING, "Some tasks failed while waiting for remaining tasks to finish", e); } - regionContainer.unload(); - configuration.unload(); + platform.unload(); this.getServer().getScheduler().cancelTasks(this); } @@ -309,7 +316,7 @@ public String convertThrowable(@Nullable Throwable throwable) { if (throwable instanceof NumberFormatException) { return "Number expected, string received instead."; } else if (throwable instanceof StorageException) { - log.log(Level.WARNING, "Error loading/saving regions", throwable); + WorldGuard.logger.log(Level.WARNING, "Error loading/saving regions", throwable); return "Region data could not be loaded/saved: " + throwable.getMessage(); } else if (throwable instanceof RejectedExecutionException) { return "There are currently too many tasks queued to add yours. Use /wg running to list queued and running tasks."; @@ -322,7 +329,7 @@ public String convertThrowable(@Nullable Throwable throwable) { } else if (throwable instanceof CommandException) { return throwable.getMessage(); } else { - log.log(Level.WARNING, "WorldGuard encountered an unexpected error", throwable); + WorldGuard.logger.log(Level.WARNING, "WorldGuard encountered an unexpected error", throwable); return "WorldGuard: An unexpected error occurred! Please see the server console."; } } @@ -331,51 +338,13 @@ public String convertThrowable(@Nullable Throwable throwable) { * Get the GlobalRegionManager. * * @return the plugin's global region manager - * @deprecated use {@link #getRegionContainer()} + * @deprecated use #getRegionContainer() */ @Deprecated public GlobalRegionManager getGlobalRegionManager() { return globalRegionManager; } - /** - * Get the object that manages region data. - * - * @return the region container - */ - public RegionContainer getRegionContainer() { - return regionContainer; - } - - /** - * Get the WorldGuard Configuration. - * - * @return ConfigurationManager - * @deprecated Use {@link #getGlobalStateManager()} instead - */ - @Deprecated - public ConfigurationManager getGlobalConfiguration() { - return getGlobalStateManager(); - } - - /** - * Gets the flag state manager. - * - * @return The flag state manager - */ - public SessionManager getSessionManager() { - return sessionManager; - } - - /** - * Get the global ConfigurationManager. - * USe this to access global configuration values and per-world configuration values. - * @return The global ConfigurationManager - */ - public ConfigurationManager getGlobalStateManager() { - return configuration; - } - /** * Get the supervisor. * @@ -413,15 +382,6 @@ public ProfileCache getProfileCache() { return profileCache; } - /** - * Get the flag registry. - * - * @return the flag registry - */ - public FlagRegistry getFlagRegistry() { - return flagRegistry; - } - /** * Check whether a player is in a group. * This calls the corresponding method in PermissionsResolverManager @@ -495,8 +455,7 @@ public String toName(CommandSender sender) { public boolean hasPermission(CommandSender sender, String perm) { if (sender.isOp()) { if (sender instanceof Player) { - if (this.getGlobalStateManager().get(((Player) sender). - getWorld()).opPermissions) { + if (platform.getGlobalStateManager().get(BukkitAdapter.adapt(((Player) sender).getWorld())).opPermissions) { return true; } } else { @@ -555,7 +514,7 @@ public Player checkPlayer(CommandSender sender) * @return A {@link List} of players who match {@code filter} */ public List matchPlayerNames(String filter) { - Collection players = BukkitUtil.getOnlinePlayers(); + Collection players = Bukkit.getServer().getOnlinePlayers(); filter = filter.toLowerCase(); @@ -565,18 +524,18 @@ public List matchPlayerNames(String filter) { for (Player player : players) { if (player.getName().equalsIgnoreCase(filter)) { - List list = new ArrayList(); + List list = new ArrayList<>(); list.add(player); return list; } } - return new ArrayList(); + return new ArrayList<>(); // Allow partial name matching } else if (filter.charAt(0) == '*' && filter.length() >= 2) { filter = filter.substring(1); - List list = new ArrayList(); + List list = new ArrayList<>(); for (Player player : players) { if (player.getName().toLowerCase().contains(filter)) { @@ -588,7 +547,7 @@ public List matchPlayerNames(String filter) { // Start with name matching } else { - List list = new ArrayList(); + List list = new ArrayList<>(); for (Player player : players) { if (player.getName().toLowerCase().startsWith(filter)) { @@ -636,12 +595,12 @@ protected Iterable checkPlayerMatch(List pla public Iterable matchPlayers(CommandSender source, String filter) throws CommandException { - if (BukkitUtil.getOnlinePlayers().isEmpty()) { + if (Bukkit.getServer().getOnlinePlayers().isEmpty()) { throw new CommandException("No players matched query."); } if (filter.equals("*")) { - return checkPlayerMatch(Lists.newArrayList(BukkitUtil.getOnlinePlayers())); + return checkPlayerMatch(Lists.newArrayList(Bukkit.getServer().getOnlinePlayers())); } // Handle special hash tag groups @@ -649,11 +608,11 @@ public Iterable matchPlayers(CommandSender source, String filt // Handle #world, which matches player of the same world as the // calling source if (filter.equalsIgnoreCase("#world")) { - List players = new ArrayList(); + List players = new ArrayList<>(); Player sourcePlayer = checkPlayer(source); World sourceWorld = sourcePlayer.getWorld(); - for (Player player : BukkitUtil.getOnlinePlayers()) { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { if (player.getWorld().equals(sourceWorld)) { players.add(player); } @@ -663,13 +622,13 @@ public Iterable matchPlayers(CommandSender source, String filt // Handle #near, which is for nearby players. } else if (filter.equalsIgnoreCase("#near")) { - List players = new ArrayList(); + List players = new ArrayList<>(); Player sourcePlayer = checkPlayer(source); World sourceWorld = sourcePlayer.getWorld(); org.bukkit.util.Vector sourceVector = sourcePlayer.getLocation().toVector(); - for (Player player : BukkitUtil.getOnlinePlayers()) { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { if (player.getWorld().equals(sourceWorld) && player.getLocation().toVector().distanceSquared( sourceVector) < 900) { @@ -915,7 +874,7 @@ public void createDefaultConfiguration(File actual, if (copy == null) throw new FileNotFoundException(); input = file.getInputStream(copy); } catch (IOException e) { - log.severe("Unable to read default configuration: " + defaultName); + WorldGuard.logger.severe("Unable to read default configuration: " + defaultName); } if (input != null) { @@ -929,15 +888,13 @@ public void createDefaultConfiguration(File actual, output.write(buf, 0, length); } - log.info("Default configuration file written: " + WorldGuard.logger.info("Default configuration file written: " + actual.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); } finally { try { - if (input != null) { - input.close(); - } + input.close(); } catch (IOException ignore) { } @@ -951,100 +908,8 @@ public void createDefaultConfiguration(File actual, } } - /** - * Notifies all with the worldguard.notify permission. - * This will check both superperms and WEPIF, - * but makes sure WEPIF checks don't result in duplicate notifications - * - * @param msg The notification to broadcast - */ - public void broadcastNotification(String msg) { - getServer().broadcast(msg, "worldguard.notify"); - Set subs = getServer().getPluginManager().getPermissionSubscriptions("worldguard.notify"); - for (Player player : BukkitUtil.getOnlinePlayers()) { - if (!(subs.contains(player) && player.hasPermission("worldguard.notify")) && - hasPermission(player, "worldguard.notify")) { // Make sure the player wasn't already broadcasted to. - player.sendMessage(msg); - } - } - log.info(msg); - } - - /** - * Checks to see if a player can build at a location. This will return - * true if region protection is disabled. - * - * @param player The player to check. - * @param loc The location to check at. - * @see GlobalRegionManager#canBuild(org.bukkit.entity.Player, org.bukkit.Location) - * @return whether {@code player} can build at {@code loc} - */ - public boolean canBuild(Player player, Location loc) { - return getGlobalRegionManager().canBuild(player, loc); - } - - /** - * Checks to see if a player can build at a location. This will return - * true if region protection is disabled. - * - * @param player The player to check - * @param block The block to check at. - * @see GlobalRegionManager#canBuild(org.bukkit.entity.Player, org.bukkit.block.Block) - * @return whether {@code player} can build at {@code block}'s location - */ - public boolean canBuild(Player player, Block block) { - return getGlobalRegionManager().canBuild(player, block); - } - - /** - * Gets the region manager for a world. - * - * @param world world to get the region manager for - * @return the region manager or null if regions are not enabled - */ - public RegionManager getRegionManager(World world) { - if (!getGlobalStateManager().get(world).useRegions) { - return null; - } - - return getGlobalRegionManager().get(world); - } - public PlayerMoveListener getPlayerMoveListener() { return playerMoveListener; } - /** - * Replace macros in the text. - * - * The macros replaced are as follows: - * %name%: The name of {@code sender}. See {@link #toName(org.bukkit.command.CommandSender)} - * %id%: The unique name of the sender. See {@link #toUniqueName(org.bukkit.command.CommandSender)} - * %online%: The number of players currently online on the server - * If {@code sender} is a Player: - * %world%: The name of the world {@code sender} is located in - * %health%: The health of {@code sender}. See {@link org.bukkit.entity.Player#getHealth()} - * - * @param sender The sender to check - * @param message The message to replace macros in - * @return The message with macros replaced - */ - public String replaceMacros(CommandSender sender, String message) { - Collection online = BukkitUtil.getOnlinePlayers(); - - message = message.replace("%name%", toName(sender)); - message = message.replace("%id%", toUniqueName(sender)); - message = message.replace("%online%", String.valueOf(online.size())); - - if (sender instanceof Player) { - Player player = (Player) sender; - World world = player.getWorld(); - - message = message.replace("%world%", world.getName()); - message = message.replace("%health%", String.valueOf(player.getHealth())); - } - - return message; - } - } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/chest/ChestProtection.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/chest/ChestProtection.java similarity index 67% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/chest/ChestProtection.java rename to worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/chest/ChestProtection.java index 58f58cea..02ae65c7 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/chest/ChestProtection.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/chest/ChestProtection.java @@ -17,11 +17,11 @@ * along with this program. If not, see . */ -package com.sk89q.worldguard.chest; +package com.sk89q.worldguard.bukkit.chest; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.world.block.BlockType; +import com.sk89q.worldguard.LocalPlayer; /** * Interface for chest protection. @@ -35,7 +35,7 @@ public interface ChestProtection { * @param player The player to check * @return Whether the block is protected for player */ - public boolean isProtected(Block block, Player player); + boolean isProtected(Location block, LocalPlayer player); /** * Returns whether a location where a chest block is trying to be created @@ -45,7 +45,7 @@ public interface ChestProtection { * @param player The player to check * @return Whether {@code player} can place a block at the specified block */ - public boolean isProtectedPlacement(Block block, Player player); + boolean isProtectedPlacement(Location block, LocalPlayer player); /** * Returns whether an adjacent chest is protected. @@ -54,24 +54,14 @@ public interface ChestProtection { * @param player The player to check * @return Whether {@code searchBlock} is protected from access by {@code player} */ - public boolean isAdjacentChestProtected(Block searchBlock, Player player); + boolean isAdjacentChestProtected(Location searchBlock, LocalPlayer player); /** - * Returns whether a material is a chest. + * Returns whether a blockType is a chest. * - * @param material The material to check - * @deprecated see {@link #isChest(int)} - * @return {@link #isChest(int)} + * @param blockType The blockType to check + * @return Whether a type is a 'chest' (protectable block) */ - @Deprecated - public boolean isChest(Material material); - - /** - * Returns whether a material is a chest. - * - * @param type The type to check - * @return Whether type is a 'chest' (block that can be protected) - */ - public boolean isChest(int type); + boolean isChest(BlockType blockType); } \ No newline at end of file diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/chest/SignChestProtection.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/chest/SignChestProtection.java similarity index 65% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/chest/SignChestProtection.java rename to worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/chest/SignChestProtection.java index 1dcb5899..410c719f 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/chest/SignChestProtection.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/chest/SignChestProtection.java @@ -17,14 +17,15 @@ * along with this program. If not, see . */ -package com.sk89q.worldguard.chest; +package com.sk89q.worldguard.bukkit.chest; -import com.sk89q.worldedit.blocks.BlockID; -import org.bukkit.Material; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.world.block.BlockType; +import com.sk89q.worldedit.world.block.BlockTypes; +import com.sk89q.worldguard.LocalPlayer; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.block.Sign; -import org.bukkit.entity.Player; /** * Sign-based chest protection. @@ -33,25 +34,24 @@ */ public class SignChestProtection implements ChestProtection { - public boolean isProtected(Block block, Player player) { - if (isChest(block.getTypeId())) { - Block below = block.getRelative(0, -1, 0); - return isProtectedSignAround(below, player); - } else if (block.getTypeId() == BlockID.SIGN_POST) { - return isProtectedSignAndChestBinary(block, player); + public boolean isProtected(Location location, LocalPlayer player) { + com.sk89q.worldedit.world.block.BlockState blockState = location.getExtent().getBlock(location.toVector()); + if (isChest(blockState.getBlockType())) { + return isProtectedSignAround(location.setY(location.getY() - 1), player); + } else if (blockState.getBlockType() == BlockTypes.SIGN) { + return isProtectedSignAndChestBinary(location, player); } else { - Block above = block.getRelative(0, 1, 0); - Boolean res = isProtectedSign(above, player); + Boolean res = isProtectedSign(location.setY(location.getY() + 1), player); if (res != null) return res; return false; } } - public boolean isProtectedPlacement(Block block, Player player) { + public boolean isProtectedPlacement(Location block, LocalPlayer player) { return isProtectedSignAround(block, player); } - private boolean isProtectedSignAround(Block searchBlock, Player player) { + private boolean isProtectedSignAround(Location searchBlock, LocalPlayer player) { Block side; Boolean res; @@ -78,47 +78,42 @@ private boolean isProtectedSignAround(Block searchBlock, Player player) { return false; } - private Boolean isProtectedSign(Sign sign, Player player) { + private Boolean isProtectedSign(Sign sign, LocalPlayer player) { if (sign.getLine(0).equalsIgnoreCase("[Lock]")) { if (player == null) { // No player, no access return true; } String name = player.getName(); - if (name.equalsIgnoreCase(sign.getLine(1).trim()) - || name.equalsIgnoreCase(sign.getLine(2).trim()) - || name.equalsIgnoreCase(sign.getLine(3).trim())) { - return false; - } - - // No access! - return true; + return !name.equalsIgnoreCase(sign.getLine(1).trim()) + && !name.equalsIgnoreCase(sign.getLine(2).trim()) + && !name.equalsIgnoreCase(sign.getLine(3).trim()); } return null; } - private Boolean isProtectedSign(Block block, Player player) { + private Boolean isProtectedSign(Location block, LocalPlayer player) { BlockState state = block.getState(); - if (state == null || !(state instanceof Sign)) { + if (!(state instanceof Sign)) { return null; } return isProtectedSign((Sign) state, player); } - private Boolean isProtectedSignAndChest(Block block, Player player) { + private Boolean isProtectedSignAndChest(Location block, LocalPlayer player) { if (!isChest(block.getRelative(0, 1, 0).getTypeId())) { return null; } return isProtectedSign(block, player); } - private boolean isProtectedSignAndChestBinary(Block block, Player player) { + private boolean isProtectedSignAndChestBinary(Location block, LocalPlayer player) { Boolean res = isProtectedSignAndChest(block, player); return !(res == null || !res); } - public boolean isAdjacentChestProtected(Block searchBlock, Player player) { + public boolean isAdjacentChestProtected(Location searchBlock, LocalPlayer player) { Block side; Boolean res; @@ -145,15 +140,11 @@ public boolean isAdjacentChestProtected(Block searchBlock, Player player) { return false; } - @Deprecated - public boolean isChest(Material material) { - return isChest(material.getId()); - } - - public boolean isChest(int type) { - return type == BlockID.CHEST - || type == BlockID.DISPENSER - || type == BlockID.FURNACE - || type == BlockID.BURNING_FURNACE; + public boolean isChest(BlockType type) { + return type == BlockTypes.CHEST + || type == BlockTypes.DISPENSER + || type == BlockTypes.FURNACE + || type == BlockTypes.TRAPPED_CHEST + || type == BlockTypes.DROPPER; } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/CommandUtils.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/CommandUtils.java index b8cd7f78..997250dc 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/CommandUtils.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/CommandUtils.java @@ -31,11 +31,12 @@ import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; -import javax.annotation.Nullable; import java.net.URL; import java.util.logging.Level; import java.util.logging.Logger; +import javax.annotation.Nullable; + /** * Command-related utility methods. */ @@ -153,13 +154,10 @@ public static String getOwnerName(@Nullable Object owner) { * @param sender the sender * @return a function */ - public static Function messageFunction(final CommandSender sender) { - return new Function() { - @Override - public Object apply(@Nullable String s) { - sender.sendMessage(s); - return null; - } + public static java.util.function.Function messageFunction(final CommandSender sender) { + return (Function) s -> { + sender.sendMessage(s); + return null; }; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/GeneralCommands.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/GeneralCommands.java index 238aca87..c0dcd3ad 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/GeneralCommands.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/GeneralCommands.java @@ -23,8 +23,10 @@ import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandPermissions; -import com.sk89q.worldedit.blocks.ItemType; -import com.sk89q.worldguard.bukkit.ConfigurationManager; +import com.sk89q.worldedit.world.item.ItemType; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.session.Session; import com.sk89q.worldguard.session.handler.GodMode; @@ -44,7 +46,7 @@ public GeneralCommands(WorldGuardPlugin plugin) { @Command(aliases = {"god"}, usage = "[player]", desc = "Enable godmode on a player", flags = "s", max = 1) public void god(CommandContext args, CommandSender sender) throws CommandException { - ConfigurationManager config = plugin.getGlobalStateManager(); + ConfigurationManager config = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); Iterable targets = null; boolean included = false; @@ -93,7 +95,7 @@ public void god(CommandContext args, CommandSender sender) throws CommandExcepti @Command(aliases = {"ungod"}, usage = "[player]", desc = "Disable godmode on a player", flags = "s", max = 1) public void ungod(CommandContext args, CommandSender sender) throws CommandException { - ConfigurationManager config = plugin.getGlobalStateManager(); + ConfigurationManager config = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); Iterable targets = null; boolean included = false; @@ -112,9 +114,10 @@ public void ungod(CommandContext args, CommandSender sender) throws CommandExcep } for (Player player : targets) { - Session session = plugin.getSessionManager().get(player); + LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); + Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(localPlayer); - if (GodMode.set(player, session, false)) { + if (GodMode.set(localPlayer, session, false)) { // Tell the user if (player.equals(sender)) { player.sendMessage(ChatColor.YELLOW + "God mode disabled!"); @@ -248,7 +251,7 @@ public void stack(CommandContext args, CommandSender sender) throws CommandExcep Player player = plugin.checkPlayer(sender); boolean ignoreMax = plugin.hasPermission(player, "worldguard.stack.illegitimate"); boolean ignoreDamaged = plugin.hasPermission(player, "worldguard.stack.damaged"); - + ItemStack[] items = player.getInventory().getContents(); int len = items.length; @@ -280,7 +283,7 @@ public void stack(CommandContext args, CommandSender sender) throws CommandExcep // Same type? // Blocks store their color in the damage value - if (item2.getTypeId() == item.getTypeId() && + if (item2.getType() == item.getType() && ((!ItemType.usesDamageValue(item.getTypeId()) && ignoreDamaged) || item.getDurability() == item2.getDurability()) && ((item.getItemMeta() == null && item2.getItemMeta() == null) diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/ToggleCommands.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/ToggleCommands.java index 785442fb..43528c92 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/ToggleCommands.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/ToggleCommands.java @@ -19,6 +19,7 @@ package com.sk89q.worldguard.bukkit.commands; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.command.CommandSender; @@ -30,8 +31,7 @@ import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandPermissions; import com.sk89q.worldguard.bukkit.BukkitUtil; -import com.sk89q.worldguard.bukkit.ConfigurationManager; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; public class ToggleCommands { @@ -54,7 +54,7 @@ public void stopFire(CommandContext args, CommandSender sender) throws CommandEx world = plugin.matchWorld(sender, args.getString(0)); } - WorldConfiguration wcfg = plugin.getGlobalStateManager().get(world); + BukkitWorldConfiguration wcfg = plugin.getGlobalStateManager().get(world); if (!wcfg.fireSpreadDisableToggle) { plugin.getServer().broadcastMessage( @@ -83,7 +83,7 @@ public void allowFire(CommandContext args, CommandSender sender) throws CommandE world = plugin.matchWorld(sender, args.getString(0)); } - WorldConfiguration wcfg = plugin.getGlobalStateManager().get(world); + BukkitWorldConfiguration wcfg = plugin.getGlobalStateManager().get(world); if (wcfg.fireSpreadDisableToggle) { plugin.getServer().broadcastMessage(ChatColor.YELLOW diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/WorldGuardCommands.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/WorldGuardCommands.java index 4cabeaac..d7144b32 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/WorldGuardCommands.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/WorldGuardCommands.java @@ -26,7 +26,7 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.MoreExecutors; import com.sk89q.minecraft.util.commands.*; -import com.sk89q.worldguard.bukkit.ConfigurationManager; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.util.logging.LoggerToChatHandler; import com.sk89q.worldguard.bukkit.util.report.*; diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/MemberCommands.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/MemberCommands.java index 117e056f..46fac67e 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/MemberCommands.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/MemberCommands.java @@ -31,7 +31,7 @@ import com.sk89q.worldguard.domains.DefaultDomain; import com.sk89q.worldguard.protection.util.DomainInputResolver; import com.sk89q.worldguard.protection.util.DomainInputResolver.UserLocatorPolicy; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import org.bukkit.World; @@ -107,7 +107,7 @@ public void addOwner(CommandContext args, CommandSender sender) throws CommandEx id = region.getId(); - Boolean flag = region.getFlag(DefaultFlag.BUYABLE); + Boolean flag = region.getFlag(Flags.BUYABLE); DefaultDomain owners = region.getOwners(); if (localPlayer != null) { diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/RegionCommands.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/RegionCommands.java index 311be382..925554c1 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/RegionCommands.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/RegionCommands.java @@ -19,18 +19,20 @@ package com.sk89q.worldguard.bukkit.commands.region; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.sk89q.minecraft.util.commands.Command; import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandPermissionsException; -import com.sk89q.worldedit.Location; -import com.sk89q.worldedit.bukkit.BukkitUtil; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.util.Location; import com.sk89q.worldguard.LocalPlayer; -import com.sk89q.worldguard.bukkit.ConfigurationManager; -import com.sk89q.worldguard.bukkit.RegionContainer; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.config.ConfigurationManager; +import com.sk89q.worldguard.bukkit.BukkitRegionContainer; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.commands.AsyncCommandHelper; import com.sk89q.worldguard.bukkit.commands.CommandUtils; @@ -41,10 +43,10 @@ import com.sk89q.worldguard.bukkit.commands.task.RegionManagerReloader; import com.sk89q.worldguard.bukkit.commands.task.RegionManagerSaver; import com.sk89q.worldguard.bukkit.commands.task.RegionRemover; -import com.sk89q.worldguard.bukkit.permission.RegionPermissionModel; +import com.sk89q.worldguard.internal.permission.RegionPermissionModel; import com.sk89q.worldguard.bukkit.util.logging.LoggerToChatHandler; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.FlagContext; import com.sk89q.worldguard.protection.flags.InvalidFlagFormat; @@ -76,8 +78,6 @@ import java.util.logging.Level; import java.util.logging.Logger; -import static com.google.common.base.Preconditions.checkNotNull; - /** * Implements the /region commands for WorldGuard. */ @@ -227,7 +227,7 @@ public void claim(CommandContext args, CommandSender sender) throws CommandExcep checkRegionDoesNotExist(manager, id, false); ProtectedRegion region = checkRegionFromSelection(player, id); - WorldConfiguration wcfg = plugin.getGlobalStateManager().get(player.getWorld()); + BukkitWorldConfiguration wcfg = plugin.getGlobalStateManager().get(player.getWorld()); // Check whether the player has created too many regions if (!permModel.mayClaimRegionsUnbounded()) { @@ -382,7 +382,7 @@ public void info(CommandContext args, CommandSender sender) throws CommandExcept RegionPrintoutBuilder printout = new RegionPrintoutBuilder(existing, args.hasFlag('u') ? null : plugin.getProfileCache()); ListenableFuture future = Futures.transform( plugin.getExecutorService().submit(printout), - CommandUtils.messageFunction(sender)); + CommandUtils.messageFunction(sender)::apply); // If it takes too long... FutureProgressListener.addProgressListener( @@ -494,7 +494,7 @@ public void flag(CommandContext args, CommandSender sender) throws CommandExcept throw new CommandPermissionsException(); } - Flag foundFlag = DefaultFlag.fuzzyMatchFlag(flagRegistry, flagName); + Flag foundFlag = Flags.fuzzyMatchFlag(flagRegistry, flagName); // We didn't find the flag, so let's print a list of flags that the user // can use, and do nothing afterwards @@ -945,7 +945,7 @@ public void migrateDB(CommandContext args, CommandSender sender) throws CommandE } try { - RegionContainer container = plugin.getRegionContainer(); + BukkitRegionContainer container = plugin.getRegionContainer(); sender.sendMessage(ChatColor.YELLOW + "Now performing migration... this may take a while."); container.migrate(migration); sender.sendMessage(ChatColor.YELLOW + @@ -989,7 +989,7 @@ public void migrateUuid(CommandContext args, CommandSender sender) throws Comman try { ConfigurationManager config = plugin.getGlobalStateManager(); - RegionContainer container = plugin.getRegionContainer(); + BukkitRegionContainer container = plugin.getRegionContainer(); RegionDriver driver = container.getDriver(); UUIDMigration migration = new UUIDMigration(driver, plugin.getProfileService(), plugin.getFlagRegistry()); migration.setKeepUnresolvedNames(config.keepUnresolvedNames); @@ -1033,14 +1033,14 @@ public void teleport(CommandContext args, CommandSender sender) throws CommandEx // -s for spawn location if (args.hasFlag('s')) { - teleportLocation = existing.getFlag(DefaultFlag.SPAWN_LOC); + teleportLocation = existing.getFlag(Flags.SPAWN_LOC); if (teleportLocation == null) { throw new CommandException( "The region has no spawn point associated."); } } else { - teleportLocation = existing.getFlag(DefaultFlag.TELE_LOC); + teleportLocation = existing.getFlag(Flags.TELE_LOC); if (teleportLocation == null) { throw new CommandException( @@ -1048,7 +1048,7 @@ public void teleport(CommandContext args, CommandSender sender) throws CommandEx } } - player.teleport(BukkitUtil.toLocation(teleportLocation)); + player.teleport(BukkitAdapter.adapt(teleportLocation)); sender.sendMessage("Teleported you to the region '" + existing.getId() + "'."); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/RegionCommandsBase.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/RegionCommandsBase.java index b9d18b92..7e2b63f3 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/RegionCommandsBase.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/RegionCommandsBase.java @@ -30,9 +30,9 @@ import com.sk89q.worldedit.bukkit.selections.CuboidSelection; import com.sk89q.worldedit.bukkit.selections.Polygonal2DSelection; import com.sk89q.worldedit.bukkit.selections.Selection; -import com.sk89q.worldguard.bukkit.RegionContainer; +import com.sk89q.worldguard.bukkit.BukkitRegionContainer; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import com.sk89q.worldguard.bukkit.permission.RegionPermissionModel; +import com.sk89q.worldguard.internal.permission.RegionPermissionModel; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.FlagContext; @@ -48,6 +48,7 @@ import org.bukkit.entity.Player; import java.util.Set; +import java.util.stream.Collectors; class RegionCommandsBase { @@ -61,7 +62,7 @@ protected RegionCommandsBase() { * @return the permission model */ protected static RegionPermissionModel getPermissionModel(CommandSender sender) { - return new RegionPermissionModel(WorldGuardPlugin.inst(), sender); + return new RegionPermissionModel(sender); } /** @@ -294,16 +295,11 @@ protected static ProtectedRegion checkRegionFromSelection(Player player, String * @param sender the sender to send the message to */ protected static void warnAboutSaveFailures(CommandSender sender) { - RegionContainer container = WorldGuardPlugin.inst().getRegionContainer(); + BukkitRegionContainer container = WorldGuardPlugin.inst().getRegionContainer(); Set failures = container.getSaveFailures(); if (failures.size() > 0) { - String failingList = Joiner.on(", ").join(Iterables.transform(failures, new Function() { - @Override - public String apply(RegionManager regionManager) { - return "'" + regionManager.getName() + "'"; - } - })); + String failingList = Joiner.on(", ").join(failures.stream().map(regionManager -> "'" + regionManager.getName() + "'").collect(Collectors.toList())); sender.sendMessage(ChatColor.GOLD + "(Warning: The background saving of region data is failing for these worlds: " + failingList + ". " + diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/RegionPrintoutBuilder.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/RegionPrintoutBuilder.java index 3549884e..742eb870 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/RegionPrintoutBuilder.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/commands/region/RegionPrintoutBuilder.java @@ -23,10 +23,8 @@ import com.sk89q.worldedit.BlockVector; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.domains.DefaultDomain; -import com.sk89q.worldguard.protection.flags.DefaultFlag; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.RegionGroupFlag; -import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -92,7 +90,7 @@ public void appendBasics() { */ public void appendFlags() { builder.append(ChatColor.BLUE); - builder.append("Flags: "); + builder.append("FlagUtil: "); appendFlagsList(true); @@ -100,7 +98,7 @@ public void appendFlags() { } /** - * Append just the list of flags (without "Flags:"), including colors. + * Append just the list of flags (without "FlagUtil:"), including colors. * * @param useColors true to use colors */ diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/internal/TargetMatcherSet.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/internal/TargetMatcherSet.java index c5cfc3f2..c59a32af 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/internal/TargetMatcherSet.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/internal/TargetMatcherSet.java @@ -21,7 +21,7 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import com.sk89q.worldguard.blacklist.target.MaterialTarget; +import com.sk89q.worldguard.blacklist.target.ItemTarget; import com.sk89q.worldguard.blacklist.target.Target; import com.sk89q.worldguard.blacklist.target.TargetMatcher; import org.bukkit.Material; @@ -35,7 +35,7 @@ public class TargetMatcherSet { - private final Multimap entries = HashMultimap.create(); + private final Multimap entries = HashMultimap.create(); public boolean add(TargetMatcher matcher) { checkNotNull(matcher); @@ -55,19 +55,19 @@ public boolean test(Target target) { } public boolean test(Material material) { - return test(new MaterialTarget(material.getId(), (short) 0)); + return test(new ItemTarget(material)); } public boolean test(Block block) { - return test(new MaterialTarget(block.getTypeId(), block.getData())); + return test(new ItemTarget(block.getTypeId(), block.getData())); } public boolean test(BlockState state) { - return test(new MaterialTarget(state.getTypeId(), state.getRawData())); + return test(new ItemTarget(state.getType())); } public boolean test(ItemStack itemStack) { - return test(new MaterialTarget(itemStack.getTypeId(), itemStack.getDurability())); + return test(new ItemTarget(itemStack.getTypeId())); } @Override diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/AbstractListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/AbstractListener.java index 0a15a971..9d46e19c 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/AbstractListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/AbstractListener.java @@ -19,15 +19,16 @@ package com.sk89q.worldguard.bukkit.listener; -import com.sk89q.worldguard.bukkit.ConfigurationManager; -import com.sk89q.worldguard.bukkit.WorldConfiguration; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.bukkit.event.Listener; - import static com.google.common.base.Preconditions.checkNotNull; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.config.ConfigurationManager; +import org.bukkit.event.Listener; + /** * Abstract listener to ease creation of listeners. */ @@ -67,7 +68,7 @@ protected WorldGuardPlugin getPlugin() { * @return the configuration */ protected ConfigurationManager getConfig() { - return plugin.getGlobalStateManager(); + return WorldGuard.getInstance().getPlatform().getGlobalStateManager(); } /** @@ -76,18 +77,18 @@ protected ConfigurationManager getConfig() { * @param world The world to get the configuration for. * @return The configuration for {@code world} */ - protected WorldConfiguration getWorldConfig(World world) { - return plugin.getGlobalStateManager().get(world); + protected BukkitWorldConfiguration getWorldConfig(World world) { + return (BukkitWorldConfiguration) getConfig().get(world); } /** * Get the world configuration given a player. * * @param player The player to get the wold from - * @return The {@link WorldConfiguration} for the player's world + * @return The {@link BukkitWorldConfiguration} for the player's world */ - protected WorldConfiguration getWorldConfig(Player player) { - return getWorldConfig(player.getWorld()); + protected BukkitWorldConfiguration getWorldConfig(LocalPlayer player) { + return getWorldConfig((World) player.getExtent()); } /** diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/BlacklistListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/BlacklistListener.java index 580222dd..e1b3cd50 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/BlacklistListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/BlacklistListener.java @@ -19,11 +19,20 @@ package com.sk89q.worldguard.bukkit.listener; -import com.google.common.base.Predicate; +import static com.sk89q.worldguard.bukkit.BukkitUtil.createTarget; + +import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldguard.LocalPlayer; -import com.sk89q.worldguard.blacklist.event.*; -import com.sk89q.worldguard.bukkit.ConfigurationManager; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.blacklist.event.BlockBreakBlacklistEvent; +import com.sk89q.worldguard.blacklist.event.BlockDispenseBlacklistEvent; +import com.sk89q.worldguard.blacklist.event.BlockInteractBlacklistEvent; +import com.sk89q.worldguard.blacklist.event.BlockPlaceBlacklistEvent; +import com.sk89q.worldguard.blacklist.event.ItemAcquireBlacklistEvent; +import com.sk89q.worldguard.blacklist.event.ItemDestroyWithBlacklistEvent; +import com.sk89q.worldguard.blacklist.event.ItemDropBlacklistEvent; +import com.sk89q.worldguard.blacklist.event.ItemUseBlacklistEvent; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent; import com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent; @@ -32,7 +41,7 @@ import com.sk89q.worldguard.bukkit.event.entity.SpawnEntityEvent; import com.sk89q.worldguard.bukkit.event.inventory.UseItemEvent; import com.sk89q.worldguard.bukkit.util.Materials; -import org.bukkit.Location; +import com.sk89q.worldguard.config.ConfigurationManager; import org.bukkit.Material; import org.bukkit.entity.Entity; import org.bukkit.entity.HumanEntity; @@ -47,9 +56,6 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import static com.sk89q.worldguard.bukkit.BukkitUtil.createTarget; -import static com.sk89q.worldguard.bukkit.BukkitUtil.toVector; - /** * Handle events that need to be processed by the blacklist. */ @@ -73,26 +79,23 @@ public void onBreakBlock(final BreakBlockEvent event) { } final LocalPlayer localPlayer = getPlugin().wrapPlayer(player); - final WorldConfiguration wcfg = getWorldConfig(player); + final BukkitWorldConfiguration wcfg = getWorldConfig(localPlayer); // Blacklist guard if (wcfg.getBlacklist() == null) { return; } - event.filter(new Predicate() { - @Override - public boolean apply(Location target) { - if (!wcfg.getBlacklist().check( - new BlockBreakBlacklistEvent(localPlayer, toVector(target), createTarget(target.getBlock(), event.getEffectiveMaterial())), false, false)) { - return false; - } else if (!wcfg.getBlacklist().check( - new ItemDestroyWithBlacklistEvent(localPlayer, toVector(target), createTarget(player.getItemInHand())), false, false)) { - return false; - } - - return true; + event.filter(target -> { + if (!wcfg.getBlacklist().check( + new BlockBreakBlacklistEvent(localPlayer, BukkitAdapter.asVector(target), createTarget(target.getBlock())), false, false)) { + return false; + } else if (!wcfg.getBlacklist().check( + new ItemDestroyWithBlacklistEvent(localPlayer, BukkitAdapter.asVector(target), createTarget(player.getItemInHand())), false, false)) { + return false; } + + return true; }); } @@ -105,21 +108,15 @@ public void onPlaceBlock(final PlaceBlockEvent event) { } final LocalPlayer localPlayer = getPlugin().wrapPlayer(player); - final WorldConfiguration wcfg = getWorldConfig(player); + final BukkitWorldConfiguration wcfg = getWorldConfig(localPlayer); // Blacklist guard if (wcfg.getBlacklist() == null) { return; } - event.filter(new Predicate() { - @Override - public boolean apply(Location target) { - return wcfg.getBlacklist().check(new BlockPlaceBlacklistEvent( - localPlayer, toVector(target), createTarget(target.getBlock(), event.getEffectiveMaterial())), false, false); - - } - }); + event.filter(target -> wcfg.getBlacklist().check(new BlockPlaceBlacklistEvent( + localPlayer, BukkitAdapter.asVector(target), createTarget(target.getBlock())), false, false)); } @EventHandler(ignoreCancelled = true) @@ -131,20 +128,15 @@ public void onUseBlock(final UseBlockEvent event) { } final LocalPlayer localPlayer = getPlugin().wrapPlayer(player); - final WorldConfiguration wcfg = getWorldConfig(player); + final BukkitWorldConfiguration wcfg = getWorldConfig(localPlayer); // Blacklist guard if (wcfg.getBlacklist() == null) { return; } - event.filter(new Predicate() { - @Override - public boolean apply(Location target) { - return wcfg.getBlacklist().check(new BlockInteractBlacklistEvent( - localPlayer, toVector(target), createTarget(target.getBlock(), event.getEffectiveMaterial())), false, false); - } - }); + event.filter(target -> wcfg.getBlacklist().check(new BlockInteractBlacklistEvent( + localPlayer, BukkitAdapter.asVector(target), createTarget(target.getBlock())), false, false)); } @EventHandler(ignoreCancelled = true) @@ -156,7 +148,7 @@ public void onSpawnEntity(SpawnEntityEvent event) { } LocalPlayer localPlayer = getPlugin().wrapPlayer(player); - WorldConfiguration wcfg = getWorldConfig(player); + BukkitWorldConfiguration wcfg = getWorldConfig(localPlayer); // Blacklist guard if (wcfg.getBlacklist() == null) { @@ -165,7 +157,7 @@ public void onSpawnEntity(SpawnEntityEvent event) { Material material = Materials.getRelatedMaterial(event.getEffectiveType()); if (material != null) { - if (!wcfg.getBlacklist().check(new ItemUseBlacklistEvent(localPlayer, toVector(event.getTarget()), createTarget(material)), false, false)) { + if (!wcfg.getBlacklist().check(new ItemUseBlacklistEvent(localPlayer, BukkitAdapter.asVector(event.getTarget()), createTarget(material)), false, false)) { event.setCancelled(true); } } @@ -181,7 +173,7 @@ public void onDestroyEntity(DestroyEntityEvent event) { LocalPlayer localPlayer = getPlugin().wrapPlayer(player); Entity target = event.getEntity(); - WorldConfiguration wcfg = getWorldConfig(player); + BukkitWorldConfiguration wcfg = getWorldConfig(localPlayer); // Blacklist guard if (wcfg.getBlacklist() == null) { @@ -192,7 +184,7 @@ public void onDestroyEntity(DestroyEntityEvent event) { Item item = (Item) target; if (!wcfg.getBlacklist().check( new ItemAcquireBlacklistEvent(localPlayer, - toVector(target.getLocation()), createTarget(item.getItemStack())), false, true)) { + BukkitAdapter.asVector(target.getLocation()), createTarget(item.getItemStack())), false, true)) { event.setCancelled(true); return; } @@ -201,7 +193,7 @@ public void onDestroyEntity(DestroyEntityEvent event) { Material material = Materials.getRelatedMaterial(target.getType()); if (material != null) { // Not really a block but we only have one on-break blacklist event - if (!wcfg.getBlacklist().check(new BlockBreakBlacklistEvent(localPlayer, toVector(event.getTarget()), createTarget(material)), false, false)) { + if (!wcfg.getBlacklist().check(new BlockBreakBlacklistEvent(localPlayer, BukkitAdapter.asVector(event.getTarget()), createTarget(material)), false, false)) { event.setCancelled(true); } } @@ -217,29 +209,29 @@ public void onUseItem(UseItemEvent event) { LocalPlayer localPlayer = getPlugin().wrapPlayer(player); ItemStack target = event.getItemStack(); - WorldConfiguration wcfg = getWorldConfig(player); + BukkitWorldConfiguration wcfg = getWorldConfig(localPlayer); // Blacklist guard if (wcfg.getBlacklist() == null) { return; } - if (!wcfg.getBlacklist().check(new ItemUseBlacklistEvent(localPlayer, toVector(player.getLocation()), createTarget(target)), false, false)) { + if (!wcfg.getBlacklist().check(new ItemUseBlacklistEvent(localPlayer, BukkitAdapter.asVector(player.getLocation()), createTarget(target)), false, false)) { event.setCancelled(true); } } @EventHandler(ignoreCancelled = true) public void onPlayerDropItem(PlayerDropItemEvent event) { - ConfigurationManager cfg = getPlugin().getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getPlayer().getWorld()); + ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); + BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(event.getPlayer().getWorld())); if (wcfg.getBlacklist() != null) { Item ci = event.getItemDrop(); if (!wcfg.getBlacklist().check( new ItemDropBlacklistEvent(getPlugin().wrapPlayer(event.getPlayer()), - toVector(ci.getLocation()), createTarget(ci.getItemStack())), false, false)) { + BukkitAdapter.asVector(ci.getLocation()), createTarget(ci.getItemStack())), false, false)) { event.setCancelled(true); } } @@ -247,11 +239,12 @@ public void onPlayerDropItem(PlayerDropItemEvent event) { @EventHandler(ignoreCancelled = true) public void onBlockDispense(BlockDispenseEvent event) { - ConfigurationManager cfg = getPlugin().getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); + ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); + BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(event.getBlock().getWorld())); if (wcfg.getBlacklist() != null) { - if (!wcfg.getBlacklist().check(new BlockDispenseBlacklistEvent(null, toVector(event.getBlock()), createTarget(event.getItem())), false, false)) { + if (!wcfg.getBlacklist().check(new BlockDispenseBlacklistEvent(null, BukkitAdapter.asVector(event.getBlock().getLocation()), + createTarget(event.getItem())), false, false)) { event.setCancelled(true); } } @@ -265,12 +258,12 @@ public void onInventoryClick(InventoryClickEvent event) { if (item != null && entity instanceof Player) { Player player = (Player) entity; - ConfigurationManager cfg = getPlugin().getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(entity.getWorld()); + ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); + BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(entity.getWorld())); LocalPlayer localPlayer = getPlugin().wrapPlayer(player); if (wcfg.getBlacklist() != null && !wcfg.getBlacklist().check( - new ItemAcquireBlacklistEvent(localPlayer, toVector(entity.getLocation()), createTarget(item)), false, false)) { + new ItemAcquireBlacklistEvent(localPlayer, BukkitAdapter.asVector(entity.getLocation()), createTarget(item)), false, false)) { event.setCancelled(true); if (inventory.getHolder().equals(player)) { @@ -287,12 +280,12 @@ public void onInventoryCreative(InventoryCreativeEvent event) { if (item != null && entity instanceof Player) { Player player = (Player) entity; - ConfigurationManager cfg = getPlugin().getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(entity.getWorld()); + ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); + BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(entity.getWorld())); LocalPlayer localPlayer = getPlugin().wrapPlayer(player); if (wcfg.getBlacklist() != null && !wcfg.getBlacklist().check( - new ItemAcquireBlacklistEvent(localPlayer, toVector(entity.getLocation()), createTarget(item)), false, false)) { + new ItemAcquireBlacklistEvent(localPlayer, BukkitAdapter.asVector(entity.getLocation()), createTarget(item)), false, false)) { event.setCancelled(true); event.setCursor(null); } @@ -306,12 +299,12 @@ public void onPlayerItemHeld(PlayerItemHeldEvent event) { ItemStack item = inventory.getItem(event.getNewSlot()); if (item != null) { - ConfigurationManager cfg = getPlugin().getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(player.getWorld()); + ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); + BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(player.getWorld())); LocalPlayer localPlayer = getPlugin().wrapPlayer(player); if (wcfg.getBlacklist() != null && !wcfg.getBlacklist().check( - new ItemAcquireBlacklistEvent(localPlayer, toVector(player.getLocation()), createTarget(item)), false, false)) { + new ItemAcquireBlacklistEvent(localPlayer, BukkitAdapter.asVector(player.getLocation()), createTarget(item)), false, false)) { inventory.setItem(event.getNewSlot(), null); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/BlockedPotionsListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/BlockedPotionsListener.java index 71151ec8..c4cea5de 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/BlockedPotionsListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/BlockedPotionsListener.java @@ -19,8 +19,10 @@ package com.sk89q.worldguard.bukkit.listener; -import com.sk89q.worldguard.bukkit.ConfigurationManager; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.event.entity.DamageEntityEvent; import com.sk89q.worldguard.bukkit.event.inventory.UseItemEvent; @@ -57,8 +59,8 @@ public void onProjectile(DamageEntityEvent event) { if (event.getOriginalEvent() instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent originalEvent = (EntityDamageByEntityEvent) event.getOriginalEvent(); if (Entities.isPotionArrow(originalEvent.getDamager())) { // should take care of backcompat - ConfigurationManager cfg = getPlugin().getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getWorld()); + ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); + BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(event.getWorld())); PotionEffectType blockedEffect = null; if (originalEvent.getDamager() instanceof SpectralArrow) { if (wcfg.blockPotions.contains(PotionEffectType.GLOWING)) { @@ -95,8 +97,8 @@ public void onProjectile(DamageEntityEvent event) { @EventHandler public void onItemInteract(UseItemEvent event) { - ConfigurationManager cfg = getPlugin().getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getWorld()); + ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); + BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(event.getWorld())); ItemStack item = event.getItemStack(); // We only care about potions diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/BuildPermissionListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/BuildPermissionListener.java index 2ad78b4b..53638d25 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/BuildPermissionListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/BuildPermissionListener.java @@ -19,6 +19,7 @@ package com.sk89q.worldguard.bukkit.listener; +import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent; import com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent; @@ -51,7 +52,7 @@ private boolean hasBuildPermission(CommandSender sender, String perm) { } private void tellErrorMessage(CommandSender sender, World world) { - String message = getWorldConfig(world).buildPermissionDenyMessage; + String message = getWorldConfig(BukkitAdapter.adapt(world)).buildPermissionDenyMessage; if (!message.isEmpty()) { sender.sendMessage(message); } @@ -59,7 +60,7 @@ private void tellErrorMessage(CommandSender sender, World world) { @EventHandler(ignoreCancelled = true) public void onPlaceBlock(final PlaceBlockEvent event) { - if (!getWorldConfig(event.getWorld()).buildPermissions) return; + if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return; Object rootCause = event.getCause().getRootCause(); @@ -77,7 +78,7 @@ public void onPlaceBlock(final PlaceBlockEvent event) { @EventHandler(ignoreCancelled = true) public void onBreakBlock(final BreakBlockEvent event) { - if (!getWorldConfig(event.getWorld()).buildPermissions) return; + if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return; Object rootCause = event.getCause().getRootCause(); @@ -95,7 +96,7 @@ public void onBreakBlock(final BreakBlockEvent event) { @EventHandler(ignoreCancelled = true) public void onUseBlock(final UseBlockEvent event) { - if (!getWorldConfig(event.getWorld()).buildPermissions) return; + if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return; Object rootCause = event.getCause().getRootCause(); @@ -113,7 +114,7 @@ public void onUseBlock(final UseBlockEvent event) { @EventHandler(ignoreCancelled = true) public void onSpawnEntity(SpawnEntityEvent event) { - if (!getWorldConfig(event.getWorld()).buildPermissions) return; + if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return; Object rootCause = event.getCause().getRootCause(); @@ -131,7 +132,7 @@ public void onSpawnEntity(SpawnEntityEvent event) { @EventHandler(ignoreCancelled = true) public void onDestroyEntity(DestroyEntityEvent event) { - if (!getWorldConfig(event.getWorld()).buildPermissions) return; + if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return; Object rootCause = event.getCause().getRootCause(); @@ -149,7 +150,7 @@ public void onDestroyEntity(DestroyEntityEvent event) { @EventHandler(ignoreCancelled = true) public void onUseEntity(UseEntityEvent event) { - if (!getWorldConfig(event.getWorld()).buildPermissions) return; + if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return; Object rootCause = event.getCause().getRootCause(); @@ -167,7 +168,7 @@ public void onUseEntity(UseEntityEvent event) { @EventHandler(ignoreCancelled = true) public void onDamageEntity(DamageEntityEvent event) { - if (!getWorldConfig(event.getWorld()).buildPermissions) return; + if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return; Object rootCause = event.getCause().getRootCause(); @@ -185,7 +186,7 @@ public void onDamageEntity(DamageEntityEvent event) { @EventHandler(ignoreCancelled = true) public void onUseItem(UseItemEvent event) { - if (!getWorldConfig(event.getWorld()).buildPermissions) return; + if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return; Object rootCause = event.getCause().getRootCause(); diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/ChestProtectionListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/ChestProtectionListener.java index e24ab8bb..646cd171 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/ChestProtectionListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/ChestProtectionListener.java @@ -21,7 +21,7 @@ import com.google.common.base.Predicate; import com.sk89q.worldedit.blocks.BlockID; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.event.DelegateEvent; import com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent; @@ -58,7 +58,7 @@ public void onPlaceBlock(final PlaceBlockEvent event) { final Player player = event.getCause().getFirstPlayer(); if (player != null) { - final WorldConfiguration wcfg = getWorldConfig(player); + final BukkitWorldConfiguration wcfg = getWorldConfig(player); // Early guard if (!wcfg.signChestProtection) { @@ -83,7 +83,7 @@ public boolean apply(Location target) { public void onBreakBlock(final BreakBlockEvent event) { final Player player = event.getCause().getFirstPlayer(); - final WorldConfiguration wcfg = getWorldConfig(event.getWorld()); + final BukkitWorldConfiguration wcfg = getWorldConfig(event.getWorld()); // Early guard if (!wcfg.signChestProtection) { @@ -117,7 +117,7 @@ public boolean apply(Location target) { public void onUseBlock(final UseBlockEvent event) { final Player player = event.getCause().getFirstPlayer(); - final WorldConfiguration wcfg = getWorldConfig(event.getWorld()); + final BukkitWorldConfiguration wcfg = getWorldConfig(event.getWorld()); // Early guard if (!wcfg.signChestProtection) { @@ -150,7 +150,7 @@ public boolean apply(Location target) { @EventHandler(ignoreCancelled = true) public void onSignChange(SignChangeEvent event) { Player player = event.getPlayer(); - WorldConfiguration wcfg = getWorldConfig(player); + BukkitWorldConfiguration wcfg = getWorldConfig(player); if (wcfg.signChestProtection) { if (event.getLine(0).equalsIgnoreCase("[Lock]")) { diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java index aabafdfb..3b5056cc 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java @@ -20,7 +20,7 @@ package com.sk89q.worldguard.bukkit.listener; import com.google.common.collect.Lists; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.cause.Cause; import com.sk89q.worldguard.bukkit.event.DelegateEvent; @@ -43,7 +43,7 @@ import com.sk89q.worldguard.bukkit.util.Entities; import com.sk89q.worldguard.bukkit.util.Events; import com.sk89q.worldguard.bukkit.util.Materials; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -516,7 +516,7 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) { @EventHandler(ignoreCancelled = true) public void onBlockFromTo(BlockFromToEvent event) { - WorldConfiguration config = getWorldConfig(event.getBlock().getWorld()); + BukkitWorldConfiguration config = getWorldConfig(event.getBlock().getWorld()); // This only applies to regions but nothing else cares about high // frequency events at the moment @@ -852,7 +852,7 @@ public void onPotionSplash(PotionSplashEvent event) { new UseEntityEvent(event, cause, affected); // Consider the potion splash flag - delegate.getRelevantFlags().add(DefaultFlag.POTION_SPLASH); + delegate.getRelevantFlags().add(Flags.POTION_SPLASH); if (Events.fireAndTestCancel(delegate)) { event.setIntensity(affected, 0); diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/InvincibilityListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/InvincibilityListener.java index 85153644..f628ca4c 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/InvincibilityListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/InvincibilityListener.java @@ -19,7 +19,7 @@ package com.sk89q.worldguard.bukkit.listener; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -55,7 +55,7 @@ private boolean isInvincible(Player player) { @EventHandler(ignoreCancelled = true) public void onEntityDamage(EntityDamageEvent event) { Entity victim = event.getEntity(); - WorldConfiguration worldConfig = getPlugin().getGlobalStateManager().get(victim.getWorld()); + BukkitWorldConfiguration worldConfig = getPlugin().getGlobalStateManager().get(victim.getWorld()); if (victim instanceof Player) { Player player = (Player) victim; diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerModesListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerModesListener.java index ab10bd5e..9f15ffad 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerModesListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerModesListener.java @@ -19,7 +19,7 @@ package com.sk89q.worldguard.bukkit.listener; -import com.sk89q.worldguard.bukkit.ConfigurationManager; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.event.player.ProcessPlayerEvent; import com.sk89q.worldguard.session.Session; diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java index b0511e84..17547c80 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/PlayerMoveListener.java @@ -19,6 +19,7 @@ package com.sk89q.worldguard.bukkit.listener; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.Session; @@ -55,7 +56,7 @@ public void registerEvents() { public void onPlayerRespawn(PlayerRespawnEvent event) { Player player = event.getPlayer(); - Session session = plugin.getSessionManager().get(player); + Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(player); session.testMoveTo(player, event.getRespawnLocation(), MoveType.RESPAWN, true); } @@ -64,7 +65,7 @@ public void onVehicleEnter(VehicleEnterEvent event) { Entity entity = event.getEntered(); if (entity instanceof Player) { Player player = (Player) entity; - Session session = plugin.getSessionManager().get(player); + Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(player); if (null != session.testMoveTo(player, event.getVehicle().getLocation(), MoveType.EMBARK, true)) { event.setCancelled(true); } @@ -75,7 +76,7 @@ public void onVehicleEnter(VehicleEnterEvent event) { public void onPlayerMove(PlayerMoveEvent event) { final Player player = event.getPlayer(); - Session session = plugin.getSessionManager().get(player); + Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(player); final Location override = session.testMoveTo(player, event.getTo(), MoveType.MOVE); if (override != null) { @@ -105,12 +106,7 @@ public void onPlayerMove(PlayerMoveEvent event) { player.teleport(override.clone().add(0, 1, 0)); - Bukkit.getScheduler().runTaskLater(plugin, new Runnable() { - @Override - public void run() { - player.teleport(override.clone().add(0, 1, 0)); - } - }, 1); + Bukkit.getScheduler().runTaskLater(plugin, () -> player.teleport(override.clone().add(0, 1, 0)), 1); } } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionFlagsListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionFlagsListener.java index 4befdb85..b6b4cda0 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionFlagsListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionFlagsListener.java @@ -20,15 +20,15 @@ package com.sk89q.worldguard.bukkit.listener; import com.google.common.base.Predicate; -import com.sk89q.worldguard.bukkit.RegionQuery; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.protection.regions.RegionQuery; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent; import com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent; import com.sk89q.worldguard.bukkit.util.Entities; import com.sk89q.worldguard.bukkit.util.Materials; import com.sk89q.worldguard.protection.association.RegionAssociable; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.StateFlag; import org.bukkit.Location; import org.bukkit.World; @@ -64,7 +64,7 @@ public void onPlaceBlock(final PlaceBlockEvent event) { Block block; if ((block = event.getCause().getFirstBlock()) != null) { if (Materials.isPistonBlock(block.getType())) { - event.filter(testState(query, DefaultFlag.PISTONS), false); + event.filter(testState(query, Flags.PISTONS), false); } } } @@ -73,26 +73,26 @@ public void onPlaceBlock(final PlaceBlockEvent event) { public void onBreakBlock(final BreakBlockEvent event) { if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled - WorldConfiguration config = getWorldConfig(event.getWorld()); + BukkitWorldConfiguration config = getWorldConfig(event.getWorld()); RegionQuery query = getPlugin().getRegionContainer().createQuery(); Block block; if ((block = event.getCause().getFirstBlock()) != null) { if (Materials.isPistonBlock(block.getType())) { - event.filter(testState(query, DefaultFlag.PISTONS), false); + event.filter(testState(query, Flags.PISTONS), false); } } if (event.getCause().find(EntityType.CREEPER) != null) { // Creeper - event.filter(testState(query, DefaultFlag.CREEPER_EXPLOSION), config.explosionFlagCancellation); + event.filter(testState(query, Flags.CREEPER_EXPLOSION), config.explosionFlagCancellation); } if (event.getCause().find(EntityType.ENDER_DRAGON) != null) { // Enderdragon - event.filter(testState(query, DefaultFlag.ENDERDRAGON_BLOCK_DAMAGE), config.explosionFlagCancellation); + event.filter(testState(query, Flags.ENDERDRAGON_BLOCK_DAMAGE), config.explosionFlagCancellation); } if (event.getCause().find(Entities.enderCrystalType) != null) { // should be nullsafe even if enderCrystalType field is null - event.filter(testState(query, DefaultFlag.OTHER_EXPLOSION), config.explosionFlagCancellation); + event.filter(testState(query, Flags.OTHER_EXPLOSION), config.explosionFlagCancellation); } } @@ -105,14 +105,14 @@ public void onEntityDamage(EntityDamageEvent event) { RegionQuery query = getPlugin().getRegionContainer().createQuery(); if (entity instanceof Player && event.getCause() == DamageCause.FALL) { - if (!query.testState(entity.getLocation(), (Player) entity, DefaultFlag.FALL_DAMAGE)) { + if (!query.testState(entity.getLocation(), (Player) entity, Flags.FALL_DAMAGE)) { event.setCancelled(true); return; } } else { try { if (entity instanceof Player && event.getCause() == DamageCause.FLY_INTO_WALL) { - if (!query.testState(entity.getLocation(), (Player) entity, DefaultFlag.FALL_DAMAGE)) { + if (!query.testState(entity.getLocation(), (Player) entity, Flags.FALL_DAMAGE)) { event.setCancelled(true); return; } @@ -124,7 +124,7 @@ public void onEntityDamage(EntityDamageEvent event) { if (event instanceof EntityDamageByEntityEvent) { Entity damager = (((EntityDamageByEntityEvent) event)).getDamager(); if (damager != null && damager.getType() == EntityType.FIREWORK) { - if (!query.testState(entity.getLocation(), (RegionAssociable) null, DefaultFlag.FIREWORK_DAMAGE)) { + if (!query.testState(entity.getLocation(), (RegionAssociable) null, Flags.FIREWORK_DAMAGE)) { event.setCancelled(true); return; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java index 7280d865..0a7a91d2 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java @@ -20,8 +20,8 @@ package com.sk89q.worldguard.bukkit.listener; import com.google.common.base.Predicate; -import com.sk89q.worldguard.bukkit.RegionQuery; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; +import com.sk89q.worldguard.protection.regions.RegionQuery; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.cause.Cause; import com.sk89q.worldguard.bukkit.event.DelegateEvent; @@ -33,7 +33,7 @@ import com.sk89q.worldguard.bukkit.event.entity.SpawnEntityEvent; import com.sk89q.worldguard.bukkit.event.entity.UseEntityEvent; import com.sk89q.worldguard.bukkit.internal.WGMetadata; -import com.sk89q.worldguard.bukkit.permission.RegionPermissionModel; +import com.sk89q.worldguard.internal.permission.RegionPermissionModel; import com.sk89q.worldguard.bukkit.protection.DelayedRegionOverlapAssociation; import com.sk89q.worldguard.bukkit.util.Entities; import com.sk89q.worldguard.bukkit.util.Events; @@ -42,8 +42,8 @@ import com.sk89q.worldguard.domains.Association; import com.sk89q.worldguard.protection.association.Associables; import com.sk89q.worldguard.protection.association.RegionAssociable; -import com.sk89q.worldguard.protection.events.DisallowedPVPEvent; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.bukkit.protection.events.DisallowedPVPEvent; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.StateFlag.State; import org.bukkit.ChatColor; @@ -106,7 +106,7 @@ private void tellErrorMessage(DelegateEvent event, Cause cause, Location locatio Long lastTime = WGMetadata.getIfPresent(player, DENY_MESSAGE_KEY, Long.class); if (lastTime == null || now - lastTime >= LAST_MESSAGE_DELAY) { RegionQuery query = getPlugin().getRegionContainer().createQuery(); - String message = query.queryValue(location, player, DefaultFlag.DENY_MESSAGE); + String message = query.queryValue(location, player, Flags.DENY_MESSAGE); if (message != null && !message.isEmpty()) { player.sendMessage(message.replace("%what%", what)); } @@ -131,7 +131,7 @@ private boolean isWhitelisted(Cause cause, World world, boolean pvp) { return type == Material.HOPPER || type == Material.DROPPER; } else if (rootCause instanceof Player) { Player player = (Player) rootCause; - WorldConfiguration config = getWorldConfig(world); + BukkitWorldConfiguration config = getWorldConfig(world); if (config.fakePlayerBuildOverride && InteropUtils.isFakePlayer(player)) { return true; @@ -192,16 +192,16 @@ public boolean apply(Location target) { boolean fire = block != null && block.getType() == Material.FIRE; boolean lava = block != null && Materials.isLava(block.getType()); List flags = new ArrayList(); - flags.add(DefaultFlag.BLOCK_PLACE); - flags.add(DefaultFlag.LIGHTER); - if (fire) flags.add(DefaultFlag.FIRE_SPREAD); - if (lava) flags.add(DefaultFlag.LAVA_FIRE); + flags.add(Flags.BLOCK_PLACE); + flags.add(Flags.LIGHTER); + if (fire) flags.add(Flags.FIRE_SPREAD); + if (lava) flags.add(Flags.LAVA_FIRE); canPlace = query.testBuild(target, associable, combine(event, flags.toArray(new StateFlag[flags.size()]))); what = "place fire"; /* Everything else */ } else { - canPlace = query.testBuild(target, associable, combine(event, DefaultFlag.BLOCK_PLACE)); + canPlace = query.testBuild(target, associable, combine(event, Flags.BLOCK_PLACE)); try { event.setSilent(type == Material.FROSTED_ICE); } catch (NoSuchFieldError ignored) {} // back compat @@ -237,12 +237,12 @@ public boolean apply(Location target) { /* TNT */ if (event.getCause().find(EntityType.PRIMED_TNT, EntityType.MINECART_TNT) != null) { - canBreak = query.testBuild(target, associable, combine(event, DefaultFlag.BLOCK_BREAK, DefaultFlag.TNT)); + canBreak = query.testBuild(target, associable, combine(event, Flags.BLOCK_BREAK, Flags.TNT)); what = "use dynamite"; /* Everything else */ } else { - canBreak = query.testBuild(target, associable, combine(event, DefaultFlag.BLOCK_BREAK)); + canBreak = query.testBuild(target, associable, combine(event, Flags.BLOCK_BREAK)); what = "break that block"; } @@ -280,27 +280,27 @@ public boolean apply(Location target) { /* Inventory */ } else if (Materials.isInventoryBlock(type)) { - canUse = query.testBuild(target, associable, combine(event, DefaultFlag.INTERACT, DefaultFlag.CHEST_ACCESS)); + canUse = query.testBuild(target, associable, combine(event, Flags.INTERACT, Flags.CHEST_ACCESS)); what = "open that"; /* Beds */ } else if (type == Material.BED_BLOCK) { - canUse = query.testBuild(target, associable, combine(event, DefaultFlag.INTERACT, DefaultFlag.SLEEP)); + canUse = query.testBuild(target, associable, combine(event, Flags.INTERACT, Flags.SLEEP)); what = "sleep"; /* TNT */ } else if (type == Material.TNT) { - canUse = query.testBuild(target, associable, combine(event, DefaultFlag.INTERACT, DefaultFlag.TNT)); + canUse = query.testBuild(target, associable, combine(event, Flags.INTERACT, Flags.TNT)); what = "use explosives"; /* Legacy USE flag */ } else if (Materials.isUseFlagApplicable(type)) { - canUse = query.testBuild(target, associable, combine(event, DefaultFlag.INTERACT, DefaultFlag.USE)); + canUse = query.testBuild(target, associable, combine(event, Flags.INTERACT, Flags.USE)); what = "use that"; /* Everything else */ } else { - canUse = query.testBuild(target, associable, combine(event, DefaultFlag.INTERACT)); + canUse = query.testBuild(target, associable, combine(event, Flags.INTERACT)); what = "use that"; } @@ -331,21 +331,21 @@ public void onSpawnEntity(SpawnEntityEvent event) { /* Vehicles */ if (Entities.isVehicle(type)) { - canSpawn = query.testBuild(target, associable, combine(event, DefaultFlag.PLACE_VEHICLE)); + canSpawn = query.testBuild(target, associable, combine(event, Flags.PLACE_VEHICLE)); what = "place vehicles"; /* Item pickup */ } else if (event.getEntity() instanceof Item) { - canSpawn = query.testBuild(target, associable, combine(event, DefaultFlag.ITEM_DROP)); + canSpawn = query.testBuild(target, associable, combine(event, Flags.ITEM_DROP)); what = "drop items"; /* XP drops */ } else if (type == EntityType.EXPERIENCE_ORB) { - canSpawn = query.testBuild(target, associable, combine(event, DefaultFlag.EXP_DROPS)); + canSpawn = query.testBuild(target, associable, combine(event, Flags.EXP_DROPS)); what = "drop XP"; } else if (Entities.isAoECloud(type)) { - canSpawn = query.testBuild(target, associable, combine(event, DefaultFlag.POTION_SPLASH)); + canSpawn = query.testBuild(target, associable, combine(event, Flags.POTION_SPLASH)); what = "use lingering potions"; /* Everything else */ @@ -381,12 +381,12 @@ public void onDestroyEntity(DestroyEntityEvent event) { /* Vehicles */ if (Entities.isVehicle(type)) { - canDestroy = query.testBuild(target, associable, combine(event, DefaultFlag.DESTROY_VEHICLE)); + canDestroy = query.testBuild(target, associable, combine(event, Flags.DESTROY_VEHICLE)); what = "break vehicles"; /* Item pickup */ } else if (event.getEntity() instanceof Item || event.getEntity() instanceof ExperienceOrb) { - canDestroy = query.testBuild(target, associable, combine(event, DefaultFlag.ITEM_PICKUP)); + canDestroy = query.testBuild(target, associable, combine(event, Flags.ITEM_PICKUP)); what = "pick up items"; /* Everything else */ @@ -427,12 +427,12 @@ public void onUseEntity(UseEntityEvent event) { /* Ridden on use */ } else if (Entities.isRiddenOnUse(event.getEntity())) { - canUse = query.testBuild(target, associable, combine(event, DefaultFlag.RIDE, DefaultFlag.INTERACT)); + canUse = query.testBuild(target, associable, combine(event, Flags.RIDE, Flags.INTERACT)); what = "ride that"; /* Everything else */ } else { - canUse = query.testBuild(target, associable, combine(event, DefaultFlag.INTERACT)); + canUse = query.testBuild(target, associable, combine(event, Flags.INTERACT)); what = "use that"; } @@ -502,12 +502,12 @@ public void onDamageEntity(DamageEntityEvent event) { /* damage to non-hostile mobs (e.g. animals) */ } else if (Entities.isNonHostile(event.getEntity())) { - canDamage = query.testBuild(target, associable, combine(event, DefaultFlag.DAMAGE_ANIMALS)); + canDamage = query.testBuild(target, associable, combine(event, Flags.DAMAGE_ANIMALS)); what = "harm that"; /* Everything else */ } else { - canDamage = query.testBuild(target, associable, combine(event, DefaultFlag.INTERACT)); + canDamage = query.testBuild(target, associable, combine(event, Flags.INTERACT)); what = "hit that"; } @@ -528,7 +528,7 @@ public void onVehicleExit(VehicleExitEvent event) { if (!isWhitelisted(Cause.create(player), vehicle.getWorld(), false)) { RegionQuery query = getPlugin().getRegionContainer().createQuery(); Location location = vehicle.getLocation(); - if (!query.testBuild(location, player, DefaultFlag.RIDE, DefaultFlag.INTERACT)) { + if (!query.testBuild(location, player, Flags.RIDE, Flags.INTERACT)) { long now = System.currentTimeMillis(); Long lastTime = WGMetadata.getIfPresent(player, DISEMBARK_MESSAGE_KEY, Long.class); if (lastTime == null || now - lastTime >= LAST_MESSAGE_DELAY) { diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/SpongeUtil.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/SpongeUtil.java index c5b52a67..4d1166a1 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/SpongeUtil.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/SpongeUtil.java @@ -19,8 +19,8 @@ package com.sk89q.worldguard.bukkit.listener; -import com.sk89q.worldguard.bukkit.ConfigurationManager; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import org.bukkit.World; @@ -43,7 +43,7 @@ private SpongeUtil() { */ public static void clearSpongeWater(WorldGuardPlugin plugin, World world, int ox, int oy, int oz) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); for (int cx = -wcfg.spongeRadius; cx <= wcfg.spongeRadius; cx++) { for (int cy = -wcfg.spongeRadius; cy <= wcfg.spongeRadius; cy++) { @@ -67,7 +67,7 @@ public static void clearSpongeWater(WorldGuardPlugin plugin, World world, int ox */ public static void addSpongeWater(WorldGuardPlugin plugin, World world, int ox, int oy, int oz) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); // The negative x edge int cx = ox - wcfg.spongeRadius - 1; diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardBlockListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardBlockListener.java index 04dbf548..6ef5b888 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardBlockListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardBlockListener.java @@ -22,11 +22,13 @@ import com.sk89q.worldedit.blocks.BlockID; import com.sk89q.worldedit.blocks.BlockType; import com.sk89q.worldedit.blocks.ItemType; -import com.sk89q.worldguard.bukkit.ConfigurationManager; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.association.RegionAssociable; +import com.sk89q.worldguard.protection.flags.Flags; +import com.sk89q.worldguard.protection.flags.StateFlag; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; @@ -81,7 +83,7 @@ public void registerEvents() { * @param world The world to get the configuration for. * @return The configuration for {@code world} */ - protected WorldConfiguration getWorldConfig(World world) { + protected BukkitWorldConfiguration getWorldConfig(World world) { return plugin.getGlobalStateManager().get(world); } @@ -89,9 +91,9 @@ protected WorldConfiguration getWorldConfig(World world) { * Get the world configuration given a player. * * @param player The player to get the wold from - * @return The {@link WorldConfiguration} for the player's world + * @return The {@link BukkitWorldConfiguration} for the player's world */ - protected WorldConfiguration getWorldConfig(Player player) { + protected BukkitWorldConfiguration getWorldConfig(Player player) { return getWorldConfig(player.getWorld()); } @@ -102,7 +104,7 @@ protected WorldConfiguration getWorldConfig(Player player) { public void onBlockBreak(BlockBreakEvent event) { Player player = event.getPlayer(); Block target = event.getBlock(); - WorldConfiguration wcfg = getWorldConfig(player); + BukkitWorldConfiguration wcfg = getWorldConfig(player); if (!wcfg.itemDurability) { ItemStack held = player.getItemInHand(); @@ -127,7 +129,7 @@ public void onBlockFromTo(BlockFromToEvent event) { boolean isAir = blockFrom.getTypeId() == 0; ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); if (cfg.activityHaltToggle) { event.setCancelled(true); @@ -186,14 +188,13 @@ public void onBlockFromTo(BlockFromToEvent event) { } if (wcfg.highFreqFlags && isWater - && !plugin.getGlobalRegionManager().allows(DefaultFlag.WATER_FLOW, - blockFrom.getLocation())) { + && plugin.getRegionContainer().createQuery().queryState(blockFrom.getLocation(), (RegionAssociable) null, Flags.WATER_FLOW) == StateFlag.State.DENY) { event.setCancelled(true); return; } if (wcfg.highFreqFlags && isLava - && !plugin.getGlobalRegionManager().allows(DefaultFlag.LAVA_FLOW, + && !plugin.getGlobalRegionManager().allows(Flags.LAVA_FLOW, blockFrom.getLocation())) { event.setCancelled(true); return; @@ -217,7 +218,7 @@ public void onBlockIgnite(BlockIgniteEvent event) { World world = block.getWorld(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (cfg.activityHaltToggle) { event.setCancelled(true); @@ -271,26 +272,26 @@ public void onBlockIgnite(BlockIgniteEvent event) { ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(block.getLocation()); if (wcfg.highFreqFlags && isFireSpread - && !set.allows(DefaultFlag.FIRE_SPREAD)) { + && !set.allows(Flags.FIRE_SPREAD)) { event.setCancelled(true); return; } if (wcfg.highFreqFlags && cause == IgniteCause.LAVA - && !set.allows(DefaultFlag.LAVA_FIRE)) { + && !set.allows(Flags.LAVA_FIRE)) { event.setCancelled(true); return; } if (cause == IgniteCause.FIREBALL && event.getPlayer() == null) { // wtf bukkit, FIREBALL is supposed to be reserved to players - if (!set.allows(DefaultFlag.GHAST_FIREBALL)) { + if (!set.allows(Flags.GHAST_FIREBALL)) { event.setCancelled(true); return; } } - if (cause == IgniteCause.LIGHTNING && !set.allows(DefaultFlag.LIGHTNING)) { + if (cause == IgniteCause.LIGHTNING && !set.allows(Flags.LIGHTNING)) { event.setCancelled(true); return; } @@ -303,7 +304,7 @@ public void onBlockIgnite(BlockIgniteEvent event) { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onBlockBurn(BlockBurnEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); if (cfg.activityHaltToggle) { event.setCancelled(true); @@ -344,7 +345,7 @@ public void onBlockBurn(BlockBurnEvent event) { int z = block.getZ(); ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(block.getLocation()); - if (!set.allows(DefaultFlag.FIRE_SPREAD)) { + if (!set.allows(Flags.FIRE_SPREAD)) { checkAndDestroyAround(block.getWorld(), x, y, z, BlockID.FIRE); event.setCancelled(true); } @@ -373,7 +374,7 @@ private void checkAndDestroy(World world, int x, int y, int z, int required) { @EventHandler(ignoreCancelled = true) public void onBlockPhysics(BlockPhysicsEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); if (cfg.activityHaltToggle) { event.setCancelled(true); @@ -414,7 +415,7 @@ public void onBlockPlace(BlockPlaceEvent event) { World world = target.getWorld(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (wcfg.simulateSponge && target.getType() == Material.SPONGE) { if (wcfg.redstoneSponges && target.isBlockIndirectlyPowered()) { @@ -438,7 +439,7 @@ public void onBlockRedstoneChange(BlockRedstoneEvent event) { World world = blockTo.getWorld(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (wcfg.simulateSponge && wcfg.redstoneSponges) { int ox = blockTo.getX(); @@ -467,7 +468,7 @@ public void onBlockRedstoneChange(BlockRedstoneEvent event) { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onLeavesDecay(LeavesDecayEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); if (cfg.activityHaltToggle) { event.setCancelled(true); @@ -480,7 +481,7 @@ public void onLeavesDecay(LeavesDecayEvent event) { } if (wcfg.useRegions) { - if (!plugin.getGlobalRegionManager().allows(DefaultFlag.LEAF_DECAY, + if (!plugin.getGlobalRegionManager().allows(Flags.LEAF_DECAY, event.getBlock().getLocation())) { event.setCancelled(true); } @@ -493,7 +494,7 @@ public void onLeavesDecay(LeavesDecayEvent event) { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onBlockForm(BlockFormEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); if (cfg.activityHaltToggle) { event.setCancelled(true); @@ -518,7 +519,7 @@ public void onBlockForm(BlockFormEvent event) { return; } if (wcfg.useRegions && !plugin.getGlobalRegionManager().allows( - DefaultFlag.ICE_FORM, event.getBlock().getLocation())) { + Flags.ICE_FORM, event.getBlock().getLocation())) { event.setCancelled(true); return; } @@ -538,7 +539,7 @@ public void onBlockForm(BlockFormEvent event) { } } if (wcfg.useRegions && !plugin.getGlobalRegionManager().allows( - DefaultFlag.SNOW_FALL, event.getBlock().getLocation())) { + Flags.SNOW_FALL, event.getBlock().getLocation())) { event.setCancelled(true); return; } @@ -551,7 +552,7 @@ public void onBlockForm(BlockFormEvent event) { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onBlockSpread(BlockSpreadEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); if (cfg.activityHaltToggle) { event.setCancelled(true); @@ -566,7 +567,7 @@ public void onBlockSpread(BlockSpreadEvent event) { return; } if (wcfg.useRegions && !plugin.getGlobalRegionManager().allows( - DefaultFlag.MUSHROOMS, event.getBlock().getLocation())) { + Flags.MUSHROOMS, event.getBlock().getLocation())) { event.setCancelled(true); return; } @@ -578,7 +579,7 @@ public void onBlockSpread(BlockSpreadEvent event) { return; } if (wcfg.useRegions && !plugin.getGlobalRegionManager().allows( - DefaultFlag.GRASS_SPREAD, event.getBlock().getLocation())) { + Flags.GRASS_SPREAD, event.getBlock().getLocation())) { event.setCancelled(true); return; } @@ -592,7 +593,7 @@ public void onBlockSpread(BlockSpreadEvent event) { if (wcfg.useRegions && !plugin.getGlobalRegionManager().allows( - DefaultFlag.MYCELIUM_SPREAD, event.getBlock().getLocation())) { + Flags.MYCELIUM_SPREAD, event.getBlock().getLocation())) { event.setCancelled(true); return; } @@ -606,7 +607,7 @@ public void onBlockSpread(BlockSpreadEvent event) { if (wcfg.useRegions && !plugin.getGlobalRegionManager().allows( - DefaultFlag.VINE_GROWTH, event.getBlock().getLocation())) { + Flags.VINE_GROWTH, event.getBlock().getLocation())) { event.setCancelled(true); return; } @@ -620,7 +621,7 @@ public void onBlockSpread(BlockSpreadEvent event) { public void onBlockFade(BlockFadeEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getBlock().getWorld()); switch (event.getBlock().getTypeId()) { case BlockID.ICE: @@ -630,7 +631,7 @@ public void onBlockFade(BlockFadeEvent event) { } if (wcfg.useRegions && !plugin.getGlobalRegionManager().allows( - DefaultFlag.ICE_MELT, event.getBlock().getLocation())) { + Flags.ICE_MELT, event.getBlock().getLocation())) { event.setCancelled(true); return; } @@ -643,7 +644,7 @@ public void onBlockFade(BlockFadeEvent event) { } if (wcfg.useRegions && !plugin.getGlobalRegionManager().allows( - DefaultFlag.SNOW_MELT, event.getBlock().getLocation())) { + Flags.SNOW_MELT, event.getBlock().getLocation())) { event.setCancelled(true); return; } @@ -655,7 +656,7 @@ public void onBlockFade(BlockFadeEvent event) { return; } if (wcfg.useRegions && !plugin.getGlobalRegionManager().allows( - DefaultFlag.SOIL_DRY, event.getBlock().getLocation())) { + Flags.SOIL_DRY, event.getBlock().getLocation())) { event.setCancelled(true); return; } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java index 6417cf47..2459868e 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java @@ -20,12 +20,14 @@ package com.sk89q.worldguard.bukkit.listener; import com.sk89q.worldedit.blocks.BlockID; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.bukkit.*; import com.sk89q.worldguard.bukkit.util.Entities; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.managers.RegionManager; +import com.sk89q.worldguard.protection.regions.RegionQuery; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Block; @@ -73,7 +75,7 @@ public void onEntityInteract(EntityInteractEvent event) { Block block = event.getBlock(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(entity.getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(entity.getWorld()); if (block.getTypeId() == BlockID.SOIL) { if (/* entity instanceof Creature && // catch for any entity (not thrown for players) */ @@ -85,7 +87,7 @@ public void onEntityInteract(EntityInteractEvent event) { @EventHandler(priority = EventPriority.HIGH) public void onEntityDeath(EntityDeathEvent event) { - WorldConfiguration wcfg = plugin.getGlobalStateManager().get(event.getEntity().getWorld()); + BukkitWorldConfiguration wcfg = plugin.getGlobalStateManager().get(event.getEntity().getWorld()); if (event instanceof PlayerDeathEvent && wcfg.disableDeathMessages) { ((PlayerDeathEvent) event).setDeathMessage(""); @@ -97,7 +99,7 @@ private void onEntityDamageByBlock(EntityDamageByBlockEvent event) { DamageCause type = event.getCause(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(defender.getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(defender.getWorld()); if (defender instanceof Wolf && ((Wolf) defender).isTamed()) { if (wcfg.antiWolfDumbness && !(type == DamageCause.VOID)) { @@ -106,6 +108,7 @@ private void onEntityDamageByBlock(EntityDamageByBlockEvent event) { } } else if (defender instanceof Player) { Player player = (Player) defender; + LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); if (wcfg.disableLavaDamage && type == DamageCause.LAVA) { event.setCancelled(true); @@ -119,7 +122,7 @@ private void onEntityDamageByBlock(EntityDamageByBlockEvent event) { } if (wcfg.teleportOnVoid && type == DamageCause.VOID) { - BukkitUtil.findFreePosition(player); + localPlayer.findFreePosition(); event.setCancelled(true); return; } @@ -132,7 +135,7 @@ private void onEntityDamageByBlock(EntityDamageByBlockEvent event) { if (type == DamageCause.BLOCK_EXPLOSION && (wcfg.disableExplosionDamage || wcfg.blockOtherExplosions || (wcfg.explosionFlagCancellation - && !plugin.getGlobalRegionManager().allows(DefaultFlag.OTHER_EXPLOSION, player.getLocation())))) { + && !plugin.getGlobalRegionManager().allows(Flags.OTHER_EXPLOSION, localPlayer.getLocation())))) { event.setCancelled(true); return; } @@ -143,7 +146,7 @@ private void onEntityDamageByBlock(EntityDamageByBlockEvent event) { if (type == DamageCause.BLOCK_EXPLOSION && (wcfg.blockOtherExplosions || (wcfg.explosionFlagCancellation - && !plugin.getGlobalRegionManager().allows(DefaultFlag.OTHER_EXPLOSION, defender.getLocation())))) { + && !plugin.getGlobalRegionManager().allows(Flags.OTHER_EXPLOSION, defender.getLocation())))) { event.setCancelled(true); return; } @@ -160,7 +163,7 @@ private void onEntityDamageByEntity(EntityDamageByEntityEvent event) { Entity attacker = event.getDamager(); Entity defender = event.getEntity(); - WorldConfiguration wcfg = plugin.getGlobalStateManager().get(defender.getWorld()); + BukkitWorldConfiguration wcfg = plugin.getGlobalStateManager().get(defender.getWorld()); if (defender instanceof ItemFrame) { if (checkItemFrameProtection(attacker, (ItemFrame) defender)) { @@ -179,7 +182,7 @@ private void onEntityDamageByEntity(EntityDamageByEntityEvent event) { // in the same way that creepers or tnt can if (wcfg.useRegions && wcfg.explosionFlagCancellation) { if (!plugin.getRegionContainer().createQuery().getApplicableRegions(defender.getLocation()) - .testState(null, DefaultFlag.OTHER_EXPLOSION)) { + .testState(null, Flags.OTHER_EXPLOSION)) { event.setCancelled(true); return; } @@ -227,13 +230,13 @@ private void onEntityDamageByEntity(EntityDamageByEntityEvent event) { if (wcfg.useRegions) { ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(defender.getLocation()); - if (!set.allows(DefaultFlag.MOB_DAMAGE, localPlayer) && !(attacker instanceof Tameable)) { + if (!set.allows(Flags.MOB_DAMAGE, localPlayer) && !(attacker instanceof Tameable)) { event.setCancelled(true); return; } if (attacker instanceof Creeper) { - if (!set.allows(DefaultFlag.CREEPER_EXPLOSION, localPlayer) && wcfg.explosionFlagCancellation) { + if (!set.allows(Flags.CREEPER_EXPLOSION, localPlayer) && wcfg.explosionFlagCancellation) { event.setCancelled(true); return; } @@ -255,7 +258,7 @@ private void onEntityDamageByProjectile(EntityDamageByEntityEvent event) { } ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(defender.getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(defender.getWorld()); if (defender instanceof Player) { Player player = (Player) defender; LocalPlayer localPlayer = plugin.wrapPlayer(player); @@ -268,7 +271,7 @@ private void onEntityDamageByProjectile(EntityDamageByEntityEvent event) { return; } if (wcfg.useRegions) { - if (!plugin.getRegionContainer().createQuery().getApplicableRegions(defender.getLocation()).allows(DefaultFlag.MOB_DAMAGE, localPlayer)) { + if (!plugin.getRegionContainer().createQuery().getApplicableRegions(defender.getLocation()).allows(Flags.MOB_DAMAGE, localPlayer)) { event.setCancelled(true); return; } @@ -288,7 +291,7 @@ private void onEntityDamageByProjectile(EntityDamageByEntityEvent event) { } if (wcfg.useRegions) { RegionQuery query = plugin.getRegionContainer().createQuery(); - if (!query.testState(defender.getLocation(), (Player) defender, DefaultFlag.GHAST_FIREBALL) && wcfg.explosionFlagCancellation) { + if (!query.testState(defender.getLocation(), (Player) defender, Flags.GHAST_FIREBALL) && wcfg.explosionFlagCancellation) { event.setCancelled(true); return; } @@ -324,7 +327,7 @@ public void onEntityDamage(EntityDamageEvent event) { DamageCause type = event.getCause(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(defender.getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(defender.getWorld()); if (defender instanceof Wolf && ((Wolf) defender).isTamed()) { if (wcfg.antiWolfDumbness) { @@ -333,6 +336,7 @@ public void onEntityDamage(EntityDamageEvent event) { } } else if (defender instanceof Player) { Player player = (Player) defender; + LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); if (type == DamageCause.WITHER) { // wither boss DoT tick @@ -344,14 +348,14 @@ public void onEntityDamage(EntityDamageEvent event) { if (wcfg.useRegions) { ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(defender.getLocation()); - if (!set.allows(DefaultFlag.MOB_DAMAGE, plugin.wrapPlayer(player))) { + if (!set.allows(Flags.MOB_DAMAGE, plugin.wrapPlayer(player))) { event.setCancelled(true); return; } } } - if (type == DamageCause.DROWNING && cfg.hasAmphibiousMode(player)) { + if (type == DamageCause.DROWNING && cfg.hasAmphibiousMode(localPlayer)) { player.setRemainingAir(player.getMaximumAir()); event.setCancelled(true); return; @@ -386,7 +390,7 @@ public void onEntityDamage(EntityDamageEvent event) { } if (wcfg.teleportOnSuffocation && type == DamageCause.SUFFOCATION) { - BukkitUtil.findFreePosition(player); + localPlayer.findFreePosition(); event.setCancelled(true); return; } @@ -406,7 +410,7 @@ public void onEntityExplode(EntityExplodeEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); Location l = event.getLocation(); World world = l.getWorld(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); Entity ent = event.getEntity(); if (cfg.activityHaltToggle) { @@ -463,7 +467,7 @@ public void onEntityExplode(EntityExplodeEvent event) { // allow wither skull blocking since there is no dedicated flag atm if (wcfg.useRegions) { for (Block block : event.blockList()) { - if (!plugin.getRegionContainer().createQuery().getApplicableRegions(block.getLocation()).allows(DefaultFlag.GHAST_FIREBALL)) { + if (!plugin.getRegionContainer().createQuery().getApplicableRegions(block.getLocation()).allows(Flags.GHAST_FIREBALL)) { event.blockList().clear(); if (wcfg.explosionFlagCancellation) event.setCancelled(true); return; @@ -481,7 +485,7 @@ public void onEntityExplode(EntityExplodeEvent event) { } if (wcfg.useRegions) { for (Block block : event.blockList()) { - if (!plugin.getGlobalRegionManager().allows(DefaultFlag.WITHER_DAMAGE, block.getLocation())) { + if (!plugin.getGlobalRegionManager().allows(Flags.WITHER_DAMAGE, block.getLocation())) { event.blockList().clear(); event.setCancelled(true); return; @@ -497,7 +501,7 @@ public void onEntityExplode(EntityExplodeEvent event) { if (wcfg.useRegions) { RegionManager mgr = plugin.getGlobalRegionManager().get(world); for (Block block : event.blockList()) { - if (!plugin.getRegionContainer().createQuery().getApplicableRegions(block.getLocation()).allows(DefaultFlag.OTHER_EXPLOSION)) { + if (!plugin.getRegionContainer().createQuery().getApplicableRegions(block.getLocation()).allows(Flags.OTHER_EXPLOSION)) { event.blockList().clear(); if (wcfg.explosionFlagCancellation) event.setCancelled(true); return; @@ -524,7 +528,7 @@ public void onEntityExplode(EntityExplodeEvent event) { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onExplosionPrime(ExplosionPrimeEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); Entity ent = event.getEntity(); if (cfg.activityHaltToggle) { @@ -571,7 +575,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { return; } - WorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); // allow spawning of creatures from plugins if (!wcfg.blockPluginSpawning && event.getSpawnReason() == CreatureSpawnEvent.SpawnReason.CUSTOM) { @@ -601,12 +605,12 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { if (wcfg.useRegions && cfg.useRegionsCreatureSpawnEvent) { ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(eventLoc); - if (!set.allows(DefaultFlag.MOB_SPAWNING)) { + if (!set.allows(Flags.MOB_SPAWNING)) { event.setCancelled(true); return; } - Set entityTypes = set.getFlag(DefaultFlag.DENY_SPAWN); + Set entityTypes = set.getFlag(Flags.DENY_SPAWN); if (entityTypes != null && entityTypes.contains(entityType)) { event.setCancelled(true); return; @@ -624,7 +628,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onCreatePortal(EntityCreatePortalEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); switch (event.getEntityType()) { case ENDER_DRAGON: @@ -636,7 +640,7 @@ public void onCreatePortal(EntityCreatePortalEvent event) { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onPigZap(PigZapEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); if (wcfg.disablePigZap) { event.setCancelled(true); @@ -646,7 +650,7 @@ public void onPigZap(PigZapEvent event) { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onCreeperPower(CreeperPowerEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); if (wcfg.disableCreeperPower) { event.setCancelled(true); @@ -660,7 +664,7 @@ public void onEntityRegainHealth(EntityRegainHealthEvent event) { World world = ent.getWorld(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (wcfg.disableHealthRegain) { event.setCancelled(true); @@ -680,7 +684,7 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { Location location = block.getLocation(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(ent.getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(ent.getWorld()); if (ent instanceof Enderman) { if (wcfg.disableEndermanGriefing) { event.setCancelled(true); @@ -688,7 +692,7 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { } if (wcfg.useRegions) { - if (!plugin.getGlobalRegionManager().allows(DefaultFlag.ENDER_BUILD, location)) { + if (!plugin.getGlobalRegionManager().allows(Flags.ENDER_BUILD, location)) { event.setCancelled(true); return; } @@ -699,7 +703,7 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { return; } if (wcfg.useRegions) { - if (!plugin.getGlobalRegionManager().allows(DefaultFlag.WITHER_DAMAGE, location)) { + if (!plugin.getGlobalRegionManager().allows(Flags.WITHER_DAMAGE, location)) { event.setCancelled(true); return; } @@ -722,13 +726,13 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { private boolean checkItemFrameProtection(Entity attacker, ItemFrame defender) { World world = attacker.getWorld(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (wcfg.useRegions) { // bukkit throws this event when a player attempts to remove an item from a frame RegionManager mgr = plugin.getGlobalRegionManager().get(world); if (!(attacker instanceof Player)) { if (!plugin.getGlobalRegionManager().allows( - DefaultFlag.ENTITY_ITEM_FRAME_DESTROY, defender.getLocation())) { + Flags.ENTITY_ITEM_FRAME_DESTROY, defender.getLocation())) { return true; } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardHangingListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardHangingListener.java index 8a767f09..5a0f78b9 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardHangingListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardHangingListener.java @@ -19,10 +19,10 @@ package com.sk89q.worldguard.bukkit.listener; -import com.sk89q.worldguard.bukkit.ConfigurationManager; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import org.bukkit.World; import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; @@ -70,7 +70,7 @@ public void onHangingBreak(HangingBreakEvent event) { Hanging hanging = event.getEntity(); World world = hanging.getWorld(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (event instanceof HangingBreakByEntityEvent) { HangingBreakByEntityEvent entityEvent = (HangingBreakByEntityEvent) event; @@ -87,7 +87,7 @@ public void onHangingBreak(HangingBreakEvent event) { event.setCancelled(true); return; } - if (wcfg.useRegions && !plugin.getGlobalRegionManager().allows(DefaultFlag.CREEPER_EXPLOSION, hanging.getLocation())) { + if (wcfg.useRegions && !plugin.getGlobalRegionManager().allows(Flags.CREEPER_EXPLOSION, hanging.getLocation())) { event.setCancelled(true); return; } @@ -98,12 +98,12 @@ public void onHangingBreak(HangingBreakEvent event) { if (hanging instanceof Painting && (wcfg.blockEntityPaintingDestroy || (wcfg.useRegions - && !plugin.getGlobalRegionManager().allows(DefaultFlag.ENTITY_PAINTING_DESTROY, hanging.getLocation())))) { + && !plugin.getGlobalRegionManager().allows(Flags.ENTITY_PAINTING_DESTROY, hanging.getLocation())))) { event.setCancelled(true); } else if (hanging instanceof ItemFrame && (wcfg.blockEntityItemFrameDestroy || (wcfg.useRegions - && !plugin.getGlobalRegionManager().allows(DefaultFlag.ENTITY_ITEM_FRAME_DESTROY, hanging.getLocation())))) { + && !plugin.getGlobalRegionManager().allows(Flags.ENTITY_ITEM_FRAME_DESTROY, hanging.getLocation())))) { event.setCancelled(true); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardPlayerListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardPlayerListener.java index f69c6fc4..d243b68d 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardPlayerListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardPlayerListener.java @@ -22,13 +22,13 @@ import com.sk89q.worldedit.blocks.BlockID; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.bukkit.BukkitUtil; -import com.sk89q.worldguard.bukkit.ConfigurationManager; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.event.player.ProcessPlayerEvent; import com.sk89q.worldguard.bukkit.util.Events; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion; @@ -97,7 +97,7 @@ public void registerEvents() { @EventHandler public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) { Player player = event.getPlayer(); - WorldConfiguration wcfg = plugin.getGlobalStateManager().get(player.getWorld()); + BukkitWorldConfiguration wcfg = plugin.getGlobalStateManager().get(player.getWorld()); Session session = plugin.getSessionManager().getIfPresent(player); if (session != null) { GameModeFlag handler = session.getHandler(GameModeFlag.class); @@ -117,7 +117,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { World world = player.getWorld(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (cfg.activityHaltToggle) { player.sendMessage(ChatColor.YELLOW @@ -151,10 +151,10 @@ public void onPlayerJoin(PlayerJoinEvent event) { @EventHandler(ignoreCancelled = true) public void onPlayerChat(AsyncPlayerChatEvent event) { Player player = event.getPlayer(); - WorldConfiguration wcfg = plugin.getGlobalStateManager().get(player.getWorld()); + BukkitWorldConfiguration wcfg = plugin.getGlobalStateManager().get(player.getWorld()); if (wcfg.useRegions) { LocalPlayer localPlayer = plugin.wrapPlayer(player); - if (!plugin.getGlobalRegionManager().allows(DefaultFlag.SEND_CHAT, player.getLocation(), localPlayer)) { + if (!plugin.getGlobalRegionManager().allows(Flags.SEND_CHAT, player.getLocation(), localPlayer)) { player.sendMessage(ChatColor.RED + "You don't have permission to chat in this region!"); event.setCancelled(true); return; @@ -162,7 +162,7 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { for (Iterator i = event.getRecipients().iterator(); i.hasNext();) { Player rPlayer = i.next(); - if (!plugin.getGlobalRegionManager().allows(DefaultFlag.RECEIVE_CHAT, rPlayer.getLocation(), plugin.wrapPlayer(rPlayer))) { + if (!plugin.getGlobalRegionManager().allows(Flags.RECEIVE_CHAT, rPlayer.getLocation(), plugin.wrapPlayer(rPlayer))) { i.remove(); } } @@ -217,7 +217,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { } ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (wcfg.removeInfiniteStacks && !plugin.hasPermission(player, "worldguard.override.infinite-stack")) { @@ -247,7 +247,7 @@ private void handleBlockRightClick(PlayerInteractEvent event) { @Nullable ItemStack item = event.getItem(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); // Infinite stack removal if ((type == BlockID.CHEST @@ -311,7 +311,7 @@ private void handlePhysicalInteract(PlayerInteractEvent event) { World world = player.getWorld(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (block.getTypeId() == BlockID.SOIL && wcfg.disablePlayerCropTrampling) { event.setCancelled(true); @@ -325,13 +325,13 @@ public void onPlayerRespawn(PlayerRespawnEvent event) { Location location = player.getLocation(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(player.getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(player.getWorld()); if (wcfg.useRegions) { ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(location); LocalPlayer localPlayer = plugin.wrapPlayer(player); - com.sk89q.worldedit.Location spawn = set.getFlag(DefaultFlag.SPAWN_LOC, localPlayer); + com.sk89q.worldedit.Location spawn = set.getFlag(Flags.SPAWN_LOC, localPlayer); if (spawn != null) { event.setRespawnLocation(com.sk89q.worldedit.bukkit.BukkitUtil.toLocation(spawn)); @@ -344,7 +344,7 @@ public void onItemHeldChange(PlayerItemHeldEvent event) { Player player = event.getPlayer(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(player.getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(player.getWorld()); if (wcfg.removeInfiniteStacks && !plugin.hasPermission(player, "worldguard.override.infinite-stack")) { @@ -362,7 +362,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { World world = event.getFrom().getWorld(); Player player = event.getPlayer(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (wcfg.useRegions) { ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(event.getTo()); @@ -378,8 +378,8 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { if (event.getCause() == TeleportCause.ENDER_PEARL) { if (!plugin.getGlobalRegionManager().hasBypass(localPlayer, world) - && !(set.allows(DefaultFlag.ENDERPEARL, localPlayer) - && setFrom.allows(DefaultFlag.ENDERPEARL, localPlayer))) { + && !(set.allows(Flags.ENDERPEARL, localPlayer) + && setFrom.allows(Flags.ENDERPEARL, localPlayer))) { player.sendMessage(ChatColor.DARK_RED + "You're not allowed to go there."); event.setCancelled(true); return; @@ -388,8 +388,8 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { try { if (event.getCause() == TeleportCause.CHORUS_FRUIT) { if (!plugin.getGlobalRegionManager().hasBypass(localPlayer, world)) { - boolean allowFrom = setFrom.allows(DefaultFlag.CHORUS_TELEPORT, localPlayer); - boolean allowTo = set.allows(DefaultFlag.CHORUS_TELEPORT, localPlayer); + boolean allowFrom = setFrom.allows(Flags.CHORUS_TELEPORT, localPlayer); + boolean allowTo = set.allows(Flags.CHORUS_TELEPORT, localPlayer); if (!allowFrom || !allowTo) { player.sendMessage(ChatColor.DARK_RED + "You're not allowed to teleport " + (!allowFrom ? "from here." : "there.")); @@ -408,7 +408,7 @@ public void onPlayerPortal(PlayerPortalEvent event) { return; } ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getTo().getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getTo().getWorld()); if (!wcfg.regionNetherPortalProtection) return; if (event.getCause() != TeleportCause.NETHER_PORTAL) { return; @@ -438,7 +438,7 @@ public void onPlayerPortal(PlayerPortalEvent event) { RegionManager mgr = plugin.getRegionContainer().get(event.getTo().getWorld()); if (mgr == null) return; ApplicableRegionSet set = mgr.getApplicableRegions(check); - if (!set.testState(plugin.wrapPlayer(event.getPlayer()), DefaultFlag.BUILD)) { + if (!set.testState(plugin.wrapPlayer(event.getPlayer()), Flags.BUILD)) { event.getPlayer().sendMessage(ChatColor.RED + "Destination is in a protected area."); event.setCancelled(true); return; @@ -452,13 +452,13 @@ public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { LocalPlayer localPlayer = plugin.wrapPlayer(player); World world = player.getWorld(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (wcfg.useRegions && !plugin.getGlobalRegionManager().hasBypass(player, world)) { ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(player.getLocation()); - Set allowedCommands = set.queryValue(localPlayer, DefaultFlag.ALLOWED_CMDS); - Set blockedCommands = set.queryValue(localPlayer, DefaultFlag.BLOCKED_CMDS); + Set allowedCommands = set.queryValue(localPlayer, Flags.ALLOWED_CMDS); + Set blockedCommands = set.queryValue(localPlayer, Flags.BLOCKED_CMDS); CommandFilter test = new CommandFilter(allowedCommands, blockedCommands); if (!test.apply(event.getMessage())) { diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java index 55d4eb4c..8d8dd082 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java @@ -19,10 +19,10 @@ package com.sk89q.worldguard.bukkit.listener; -import com.sk89q.worldguard.bukkit.ConfigurationManager; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import com.sk89q.worldguard.bukkit.util.Locations; +import com.sk89q.worldguard.util.Locations; import com.sk89q.worldguard.session.MoveType; import org.bukkit.World; import org.bukkit.entity.Player; @@ -59,7 +59,7 @@ public void onVehicleMove(VehicleMoveEvent event) { Player player = (Player) vehicle.getPassenger(); World world = vehicle.getWorld(); ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (wcfg.useRegions) { // Did we move a block? diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardWeatherListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardWeatherListener.java index cdac5460..7ea56c05 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardWeatherListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardWeatherListener.java @@ -19,11 +19,11 @@ package com.sk89q.worldguard.bukkit.listener; -import com.sk89q.worldguard.bukkit.ConfigurationManager; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.config.ConfigurationManager; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import org.bukkit.Location; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -55,7 +55,7 @@ public void registerEvents() { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onWeatherChange(WeatherChangeEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getWorld()); if (event.toWeatherState()) { if (wcfg.disableWeather) { @@ -71,7 +71,7 @@ public void onWeatherChange(WeatherChangeEvent event) { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onThunderChange(ThunderChangeEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getWorld()); if (event.toThunderState()) { if (wcfg.disableThunder) { @@ -87,7 +87,7 @@ public void onThunderChange(ThunderChangeEvent event) { @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onLightningStrike(LightningStrikeEvent event) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(event.getWorld()); + BukkitWorldConfiguration wcfg = cfg.get(event.getWorld()); if (wcfg.disallowedLightningBlocks.size() > 0) { int targetId = event.getLightning().getLocation().getBlock().getTypeId(); @@ -100,7 +100,7 @@ public void onLightningStrike(LightningStrikeEvent event) { if (wcfg.useRegions) { ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(loc); - if (!set.allows(DefaultFlag.LIGHTNING)) { + if (!set.allows(Flags.LIGHTNING)) { event.setCancelled(true); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardWorldListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardWorldListener.java index cb5cb58f..1c333cf8 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardWorldListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardWorldListener.java @@ -20,8 +20,8 @@ package com.sk89q.worldguard.bukkit.listener; import com.sk89q.worldguard.bukkit.BukkitUtil; -import com.sk89q.worldguard.bukkit.ConfigurationManager; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; +import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import org.bukkit.World; import org.bukkit.entity.Entity; @@ -80,15 +80,15 @@ public void onWorldLoad(WorldLoadEvent event) { /** * Initialize the settings for the specified world - * @see WorldConfiguration#alwaysRaining - * @see WorldConfiguration#disableWeather - * @see WorldConfiguration#alwaysThundering - * @see WorldConfiguration#disableThunder + * @see BukkitWorldConfiguration#alwaysRaining + * @see BukkitWorldConfiguration#disableWeather + * @see BukkitWorldConfiguration#alwaysThundering + * @see BukkitWorldConfiguration#disableThunder * @param world The specified world */ public void initWorld(World world) { ConfigurationManager cfg = plugin.getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(world); + BukkitWorldConfiguration wcfg = cfg.get(world); if (wcfg.alwaysRaining && !wcfg.disableWeather) { world.setStorm(true); } else if (wcfg.disableWeather && !wcfg.alwaysRaining) { diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldRulesListener.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldRulesListener.java index 5f799ff6..5dcb396a 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldRulesListener.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldRulesListener.java @@ -19,7 +19,7 @@ package com.sk89q.worldguard.bukkit.listener; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.event.entity.SpawnEntityEvent; import org.bukkit.entity.EntityType; @@ -39,7 +39,7 @@ public WorldRulesListener(WorldGuardPlugin plugin) { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onSpawnEntity(final SpawnEntityEvent event) { - WorldConfiguration config = getWorldConfig(event.getWorld()); + BukkitWorldConfiguration config = getWorldConfig(event.getWorld()); // ================================================================ // EXP_DROPS flag diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/protection/DelayedRegionOverlapAssociation.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/protection/DelayedRegionOverlapAssociation.java index 8577639b..3c409222 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/protection/DelayedRegionOverlapAssociation.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/protection/DelayedRegionOverlapAssociation.java @@ -19,7 +19,7 @@ package com.sk89q.worldguard.bukkit.protection; -import com.sk89q.worldguard.bukkit.RegionQuery; +import com.sk89q.worldguard.protection.regions.RegionQuery; import com.sk89q.worldguard.domains.Association; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.association.RegionAssociable; diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/events/DisallowedPVPEvent.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/protection/events/DisallowedPVPEvent.java similarity index 97% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/events/DisallowedPVPEvent.java rename to worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/protection/events/DisallowedPVPEvent.java index 739deabb..312a19bb 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/events/DisallowedPVPEvent.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/protection/events/DisallowedPVPEvent.java @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package com.sk89q.worldguard.protection.events; +package com.sk89q.worldguard.bukkit.protection.events; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java index a8b8026f..7d05a2f6 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java @@ -21,7 +21,7 @@ import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import org.bukkit.DyeColor; import org.bukkit.Material; import org.bukkit.entity.EntityType; @@ -761,7 +761,7 @@ public static boolean isInventoryBlock(Material material) { /** * Test whether the given material is affected by - * {@link DefaultFlag#USE}. + * {@link Flags#USE}. * *

Generally, materials that are considered by this method are those * that are not inventories but can be used.

diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/util/report/ConfigReport.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/util/report/ConfigReport.java index 934f4c37..a872f3a6 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/util/report/ConfigReport.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/bukkit/util/report/ConfigReport.java @@ -20,7 +20,7 @@ package com.sk89q.worldguard.bukkit.util.report; import com.sk89q.worldguard.blacklist.Blacklist; -import com.sk89q.worldguard.bukkit.WorldConfiguration; +import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.regions.ProtectedRegion; @@ -42,7 +42,7 @@ public ConfigReport(WorldGuardPlugin plugin) { append("Configuration", new ShallowObjectReport("Configuration", plugin.getGlobalStateManager())); for (World world : worlds) { - WorldConfiguration config = plugin.getGlobalStateManager().get(world); + BukkitWorldConfiguration config = plugin.getGlobalStateManager().get(world); DataReport report = new DataReport("World: " + world.getName()); report.append("UUID", world.getUID()); diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/DomainCollection.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/DomainCollection.java deleted file mode 100644 index 5359a494..00000000 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/domains/DomainCollection.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * WorldGuard, a suite of tools for Minecraft - * Copyright (C) sk89q - * Copyright (C) WorldGuard team and contributors - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.sk89q.worldguard.domains; - -import com.sk89q.worldguard.LocalPlayer; - -import java.util.LinkedHashSet; -import java.util.Set; -import java.util.UUID; - -/** - * @deprecated not used by WorldGuard and not maintained - */ -@Deprecated -public class DomainCollection implements Domain { - - private Set domains; - - public DomainCollection() { - domains = new LinkedHashSet(); - } - - public void add(Domain domain) { - domains.add(domain); - } - - public void remove(Domain domain) { - domains.remove(domain); - } - - @Override - public int size() { - return domains.size(); - } - - @Override - public void clear() { - domains.clear(); - } - - @Override - public boolean contains(LocalPlayer player) { - for (Domain domain : domains) { - if (domain.contains(player)) { - return true; - } - } - - return false; - } - - @Override - public boolean contains(UUID uniqueId) { - for (Domain domain : domains) { - if (domain.contains(uniqueId)) { - return true; - } - } - - return false; - } - - @Override - public boolean contains(String playerName) { - for (Domain domain : domains) { - if (domain.contains(playerName)) { - return true; - } - } - - return false; - } - -} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/GlobalRegionManager.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/GlobalRegionManager.java index 9de06c1d..901e44f4 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/GlobalRegionManager.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/GlobalRegionManager.java @@ -19,25 +19,24 @@ package com.sk89q.worldguard.protection; +import static com.google.common.base.Preconditions.checkNotNull; + +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.util.Location; +import com.sk89q.worldedit.world.World; import com.sk89q.worldguard.LocalPlayer; -import com.sk89q.worldguard.bukkit.BukkitPlayer; -import com.sk89q.worldguard.bukkit.RegionContainer; -import com.sk89q.worldguard.bukkit.RegionQuery; +import com.sk89q.worldguard.bukkit.BukkitRegionContainer; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.association.RegionAssociable; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.managers.RegionManager; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; +import com.sk89q.worldguard.protection.regions.RegionQuery; -import javax.annotation.Nullable; import java.util.Collections; import java.util.List; -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.Nullable; /** * This is the legacy class for accessing region data. @@ -47,19 +46,15 @@ @Deprecated public class GlobalRegionManager { - private final WorldGuardPlugin plugin; - private final RegionContainer container; + private final BukkitRegionContainer container; /** * Create a new instance. * - * @param plugin the plugin * @param container the container */ - public GlobalRegionManager(WorldGuardPlugin plugin, RegionContainer container) { - checkNotNull(plugin); + public GlobalRegionManager(BukkitRegionContainer container) { checkNotNull(container); - this.plugin = plugin; this.container = container; } @@ -75,7 +70,7 @@ public GlobalRegionManager(WorldGuardPlugin plugin, RegionContainer container) { */ @Nullable public RegionManager get(World world) { - return container.get(world); + return container.get(BukkitAdapter.adapt(world)); } /** @@ -102,47 +97,13 @@ private RegionQuery createQuery() { * @param player the player * @param world the world * @return true if a bypass is permitted - * @deprecated use {@link RegionContainer#createQuery()} + * @deprecated use {@link BukkitRegionContainer#createQuery()} */ @Deprecated public boolean hasBypass(LocalPlayer player, World world) { return player.hasPermission("worldguard.region.bypass." + world.getName()); } - /** - * Test whether the given player has region protection bypass permission. - * - * @param player the player - * @param world the world - * @return true if a bypass is permitted - * @deprecated use {@link RegionContainer#createQuery()} - */ - @Deprecated - public boolean hasBypass(Player player, World world) { - return plugin.hasPermission(player, "worldguard.region.bypass." + world.getName()); - } - - /** - * Test whether the player can build (place, use, destroy blocks and - * entities) at the given position, considering only the build flag - * and the region's members. - * - *

This method is not an absolute test as to whether WorldGuard - * would allow or block an event because this method doesn't - * consider flags (i.e. chest-access flags when concerning a chest) or - * other modules in WorldGuard (i.e chest protection).

- * - * @param player the player - * @param block the block - * @return true if a bypass is permitted - * @deprecated use {@link RegionContainer#createQuery()} - */ - @SuppressWarnings("deprecation") - @Deprecated - public boolean canBuild(Player player, Block block) { - return canBuild(player, block.getLocation()); - } - /** * Test whether the player can build (place, use, destroy blocks and * entities) at the given position, considering only the build flag @@ -156,28 +117,14 @@ public boolean canBuild(Player player, Block block) { * @param player the player * @param location the location * @return true if a bypass is permitted - * @deprecated use {@link RegionContainer#createQuery()} + * @deprecated use {@link BukkitRegionContainer#createQuery()} */ @Deprecated - public boolean canBuild(Player player, Location location) { - return hasBypass(player, location.getWorld()) || createQuery().testState(location, player, DefaultFlag.BUILD); + public boolean canBuild(LocalPlayer player, Location location) { + return hasBypass(player, (World) location.getExtent()) || createQuery().testState(location, player, Flags.BUILD); } - /** - * Test whether the player can place blocks at the given position. - * - * @param player the player - * @param block the block - * @return true if permitted - * @deprecated the construct flag is being removed - */ - @Deprecated - @SuppressWarnings("deprecation") - public boolean canConstruct(Player player, Block block) { - return canBuild(player, block.getLocation()); - } - /** * Test whether the player can place blocks at the given position. * @@ -187,7 +134,7 @@ public boolean canConstruct(Player player, Block block) { * @deprecated the construct flag is being removed */ @Deprecated - public boolean canConstruct(Player player, Location location) { + public boolean canConstruct(LocalPlayer player, Location location) { return canBuild(player, location); } @@ -197,7 +144,7 @@ public boolean canConstruct(Player player, Location location) { * @param flag the flag * @param location the location * @return true if set to true - * @deprecated use {@link RegionContainer#createQuery()} + * @deprecated use {@link BukkitRegionContainer#createQuery()} */ @Deprecated @SuppressWarnings("deprecation") @@ -213,17 +160,14 @@ public boolean allows(StateFlag flag, Location location) { * @param location the location * @param player the actor * @return true if set to true - * @deprecated use {@link RegionContainer#createQuery()} + * @deprecated use {@link BukkitRegionContainer#createQuery()} */ @Deprecated public boolean allows(StateFlag flag, Location location, @Nullable LocalPlayer player) { if (player == null) { return StateFlag.test(createQuery().queryState(location, (RegionAssociable) null, flag)); - } else if (player instanceof BukkitPlayer) { - Player p = ((BukkitPlayer) player).getPlayer(); - return StateFlag.test(createQuery().queryState(location, p, flag)); } else { - throw new IllegalArgumentException("Can't take a non-Bukkit player"); + return StateFlag.test(createQuery().queryState(location, player, flag)); } } diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/UnsupportedIntersectionException.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/UnsupportedIntersectionException.java deleted file mode 100644 index ba2c1492..00000000 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/UnsupportedIntersectionException.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * WorldGuard, a suite of tools for Minecraft - * Copyright (C) sk89q - * Copyright (C) WorldGuard team and contributors - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.sk89q.worldguard.protection; - -/** - * Thrown when an intersection between two different types of regions is not - * supported. - * - * @deprecated no longer utilized - */ -@Deprecated -public class UnsupportedIntersectionException extends Exception { -} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/EntityTypeFlag.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/EntityTypeFlag.java deleted file mode 100644 index 79f0d605..00000000 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/protection/flags/EntityTypeFlag.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * WorldGuard, a suite of tools for Minecraft - * Copyright (C) sk89q - * Copyright (C) WorldGuard team and contributors - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.sk89q.worldguard.protection.flags; - -import org.bukkit.entity.EntityType; - -/** - * Stores an entity type. - */ -public class EntityTypeFlag extends EnumFlag { - - public EntityTypeFlag(String name, RegionGroup defaultGroup) { - super(name, EntityType.class, defaultGroup); - } - - public EntityTypeFlag(String name) { - super(name, EntityType.class); - } - - @Override - public EntityType detectValue(String input) { - EntityType lowMatch = null; - - for (EntityType type : EntityType.values()) { - if (type.name().equalsIgnoreCase(input.trim())) { - return type; - } - - if (type.name().toLowerCase().startsWith(input.toLowerCase().trim())) { - lowMatch = type; - } - } - - return lowMatch; - } -} diff --git a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/SessionManager.java b/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/BukkitSessionManager.java similarity index 86% rename from worldguard-legacy/src/main/java/com/sk89q/worldguard/session/SessionManager.java rename to worldguard-legacy/src/main/java/com/sk89q/worldguard/session/BukkitSessionManager.java index 97f86a60..e020c1b3 100644 --- a/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/SessionManager.java +++ b/worldguard-legacy/src/main/java/com/sk89q/worldguard/session/BukkitSessionManager.java @@ -22,11 +22,13 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import com.sk89q.worldguard.bukkit.BukkitUtil; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.bukkit.BukkitPlayer; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.session.handler.*; import com.sk89q.worldguard.session.handler.Handler.Factory; -import org.bukkit.World; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -49,7 +51,7 @@ * Keeps tracks of sessions and also does session-related handling * (flags, etc.). */ -public class SessionManager implements Runnable, Listener { +public class BukkitSessionManager implements SessionManager, Runnable, Listener { public static final int RUN_DELAY = 20; public static final long SESSION_LIFETIME = 10; @@ -80,7 +82,7 @@ public Session load(CacheKey key) throws Exception { * * @param plugin The plugin */ - public SessionManager(WorldGuardPlugin plugin) { + public BukkitSessionManager(WorldGuardPlugin plugin) { checkNotNull(plugin, "plugin"); this.plugin = plugin; handlers.addAll(defaultHandlers); @@ -104,7 +106,8 @@ public WorldGuardPlugin getPlugin() { * @param world The world * @return A value */ - public boolean hasBypass(Player player, World world) { + @Override + public boolean hasBypass(LocalPlayer player, World world) { return bypassCache.getUnchecked(new WorldPlayerTuple(world, player)); } @@ -112,12 +115,14 @@ public boolean hasBypass(Player player, World world) { * Re-initialize handlers and clear "last position," "last state," etc. * information for all players. */ + @Override public void resetAllStates() { - Collection players = BukkitUtil.getOnlinePlayers(); + Collection players = Bukkit.getServer().getOnlinePlayers(); for (Player player : players) { - Session session = sessions.getIfPresent(new CacheKey(player)); + BukkitPlayer bukkitPlayer = new BukkitPlayer(WorldGuardPlugin.inst(), player); + Session session = sessions.getIfPresent(new CacheKey(bukkitPlayer)); if (session != null) { - session.resetState(player); + session.resetState(bukkitPlayer); } } } @@ -128,7 +133,8 @@ public void resetAllStates() { * * @param player The player */ - public void resetState(Player player) { + @Override + public void resetState(LocalPlayer player) { checkNotNull(player, "player"); @Nullable Session session = sessions.getIfPresent(new CacheKey(player)); if (session != null) { @@ -136,9 +142,9 @@ public void resetState(Player player) { } } - private LinkedList> handlers = new LinkedList>(); + private LinkedList> handlers = new LinkedList<>(); - private static final Set> defaultHandlers = new HashSet>(); + private static final Set> defaultHandlers = new HashSet<>(); static { Factory[] factories = { HealFlag.FACTORY, @@ -160,7 +166,7 @@ public void resetState(Player player) { } /** - * Register a handler with the SessionManager. + * Register a handler with the BukkitSessionManager. * * You may specify another handler class to ensure your handler is always registered after that class. * If that class is not already registered, this method will return false. @@ -175,6 +181,7 @@ public void resetState(Player player) { * @return {@code true} (as specified by {@link Collection#add}) * {@code false} if {@param after} is not registered, or {@param factory} is null */ + @Override public boolean registerHandler(Factory factory, @Nullable Factory after) { if (factory == null) return false; WorldGuardPlugin.inst().getLogger().log(Level.INFO, "Registering session handler " @@ -201,6 +208,7 @@ public boolean registerHandler(Factory factory, @Nullable Fac * @param factory the handler factory to unregister * @return true if the handler was registered and is now unregistered, false otherwise */ + @Override public boolean unregisterHandler(Factory factory) { if (defaultHandlers.contains(factory)) { WorldGuardPlugin.inst().getLogger().log(Level.WARNING, "Someone is unregistering a default WorldGuard handler: " @@ -218,7 +226,8 @@ public boolean unregisterHandler(Factory factory) { * @param player The player * @return The new session */ - private Session createSession(Player player) { + @Override + public Session createSession(LocalPlayer player) { Session session = new Session(this); for (Factory factory : handlers) { session.register(factory.create(session)); @@ -233,8 +242,9 @@ private Session createSession(Player player) { * @param player The player * @return The session */ + @Override @Nullable - public Session getIfPresent(Player player) { + public Session getIfPresent(LocalPlayer player) { return sessions.getIfPresent(player); } @@ -249,29 +259,30 @@ public Session getIfPresent(Player player) { * @param player The player to get a session for * @return The {@code player}'s session */ - public Session get(Player player) { + @Override + public Session get(LocalPlayer player) { return sessions.getUnchecked(new CacheKey(player)); } @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { // Pre-load a session - get(event.getPlayer()); + get(new BukkitPlayer(WorldGuardPlugin.inst(), event.getPlayer())); } @Override public void run() { - for (Player player : BukkitUtil.getOnlinePlayers()) { - get(player).tick(player); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + get(new BukkitPlayer(WorldGuardPlugin.inst(), player)).tick(new BukkitPlayer(WorldGuardPlugin.inst(), player)); } } private static final class CacheKey { - private final WeakReference playerRef; + private final WeakReference playerRef; private final UUID uuid; - private CacheKey(Player player) { - playerRef = new WeakReference(player); + private CacheKey(LocalPlayer player) { + playerRef = new WeakReference<>(player); uuid = player.getUniqueId(); } diff --git a/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/ApplicableRegionSetTest.java b/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/ApplicableRegionSetTest.java index 0bd313a6..db3efff7 100644 --- a/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/ApplicableRegionSetTest.java +++ b/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/ApplicableRegionSetTest.java @@ -20,7 +20,7 @@ package com.sk89q.worldguard.protection; import com.sk89q.worldguard.LocalPlayer; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.StringFlag; import com.sk89q.worldguard.protection.regions.ProtectedRegion; @@ -42,7 +42,7 @@ public void testWildernessBuild() { LocalPlayer player = mock.createPlayer(); ApplicableRegionSet set = mock.getApplicableSet(); - assertThat(set.testState(player, DefaultFlag.BUILD), is(true)); + assertThat(set.testState(player, Flags.BUILD), is(true)); } @Test @@ -54,7 +54,7 @@ public void testWildernessBuildWithGlobalRegion() { ProtectedRegion global = mock.global(); ApplicableRegionSet set = mock.getApplicableSet(); - assertThat(set.testState(player, DefaultFlag.BUILD), is(true)); + assertThat(set.testState(player, Flags.BUILD), is(true)); } @Test @@ -68,8 +68,8 @@ public void testWildernessBuildWithRegion() { region.getMembers().addPlayer(member); ApplicableRegionSet set = mock.getApplicableSet(); - assertThat(set.testState(member, DefaultFlag.BUILD), is(true)); - assertThat(set.testState(nonMember, DefaultFlag.BUILD), is(false)); + assertThat(set.testState(member, Flags.BUILD), is(true)); + assertThat(set.testState(nonMember, Flags.BUILD), is(false)); } @Test @@ -80,15 +80,15 @@ public void testWildernessFlags() { ApplicableRegionSet set = mock.getApplicableSet(); - assertThat(set.testState(player, DefaultFlag.MOB_DAMAGE), is(true)); - assertThat(set.testState(player, DefaultFlag.ENTRY), is(true)); - assertThat(set.testState(player, DefaultFlag.EXIT), is(true)); - assertThat(set.testState(player, DefaultFlag.LEAF_DECAY), is(true)); - assertThat(set.testState(player, DefaultFlag.RECEIVE_CHAT), is(true)); - assertThat(set.testState(player, DefaultFlag.SEND_CHAT), is(true)); - assertThat(set.testState(player, DefaultFlag.INVINCIBILITY), is(false)); + assertThat(set.testState(player, Flags.MOB_DAMAGE), is(true)); + assertThat(set.testState(player, Flags.ENTRY), is(true)); + assertThat(set.testState(player, Flags.EXIT), is(true)); + assertThat(set.testState(player, Flags.LEAF_DECAY), is(true)); + assertThat(set.testState(player, Flags.RECEIVE_CHAT), is(true)); + assertThat(set.testState(player, Flags.SEND_CHAT), is(true)); + assertThat(set.testState(player, Flags.INVINCIBILITY), is(false)); - assertThat(set.testState(player, DefaultFlag.BUILD), is(true)); + assertThat(set.testState(player, Flags.BUILD), is(true)); } @Test @@ -101,15 +101,15 @@ public void testWildernessFlagsWithGlobalRegion() { ApplicableRegionSet set = mock.getApplicableSet(); - assertThat(set.testState(player, DefaultFlag.MOB_DAMAGE), is(true)); - assertThat(set.testState(player, DefaultFlag.ENTRY), is(true)); - assertThat(set.testState(player, DefaultFlag.EXIT), is(true)); - assertThat(set.testState(player, DefaultFlag.LEAF_DECAY), is(true)); - assertThat(set.testState(player, DefaultFlag.RECEIVE_CHAT), is(true)); - assertThat(set.testState(player, DefaultFlag.SEND_CHAT), is(true)); - assertThat(set.testState(player, DefaultFlag.INVINCIBILITY), is(false)); + assertThat(set.testState(player, Flags.MOB_DAMAGE), is(true)); + assertThat(set.testState(player, Flags.ENTRY), is(true)); + assertThat(set.testState(player, Flags.EXIT), is(true)); + assertThat(set.testState(player, Flags.LEAF_DECAY), is(true)); + assertThat(set.testState(player, Flags.RECEIVE_CHAT), is(true)); + assertThat(set.testState(player, Flags.SEND_CHAT), is(true)); + assertThat(set.testState(player, Flags.INVINCIBILITY), is(false)); - assertThat(set.testState(player, DefaultFlag.BUILD), is(true)); + assertThat(set.testState(player, Flags.BUILD), is(true)); } @Test @@ -124,25 +124,25 @@ public void testFlagsWithRegion() { ApplicableRegionSet set = mock.getApplicableSet(); - assertThat(set.testState(member, DefaultFlag.MOB_DAMAGE), is(true)); - assertThat(set.testState(member, DefaultFlag.ENTRY), is(true)); - assertThat(set.testState(member, DefaultFlag.EXIT), is(true)); - assertThat(set.testState(member, DefaultFlag.LEAF_DECAY), is(true)); - assertThat(set.testState(member, DefaultFlag.RECEIVE_CHAT), is(true)); - assertThat(set.testState(member, DefaultFlag.SEND_CHAT), is(true)); - assertThat(set.testState(member, DefaultFlag.INVINCIBILITY), is(false)); + assertThat(set.testState(member, Flags.MOB_DAMAGE), is(true)); + assertThat(set.testState(member, Flags.ENTRY), is(true)); + assertThat(set.testState(member, Flags.EXIT), is(true)); + assertThat(set.testState(member, Flags.LEAF_DECAY), is(true)); + assertThat(set.testState(member, Flags.RECEIVE_CHAT), is(true)); + assertThat(set.testState(member, Flags.SEND_CHAT), is(true)); + assertThat(set.testState(member, Flags.INVINCIBILITY), is(false)); - assertThat(set.testState(member, DefaultFlag.BUILD), is(true)); + assertThat(set.testState(member, Flags.BUILD), is(true)); - assertThat(set.testState(nonMember, DefaultFlag.MOB_DAMAGE), is(true)); - assertThat(set.testState(nonMember, DefaultFlag.ENTRY), is(true)); - assertThat(set.testState(nonMember, DefaultFlag.EXIT), is(true)); - assertThat(set.testState(nonMember, DefaultFlag.LEAF_DECAY), is(true)); - assertThat(set.testState(nonMember, DefaultFlag.RECEIVE_CHAT), is(true)); - assertThat(set.testState(nonMember, DefaultFlag.SEND_CHAT), is(true)); - assertThat(set.testState(nonMember, DefaultFlag.INVINCIBILITY), is(false)); + assertThat(set.testState(nonMember, Flags.MOB_DAMAGE), is(true)); + assertThat(set.testState(nonMember, Flags.ENTRY), is(true)); + assertThat(set.testState(nonMember, Flags.EXIT), is(true)); + assertThat(set.testState(nonMember, Flags.LEAF_DECAY), is(true)); + assertThat(set.testState(nonMember, Flags.RECEIVE_CHAT), is(true)); + assertThat(set.testState(nonMember, Flags.SEND_CHAT), is(true)); + assertThat(set.testState(nonMember, Flags.INVINCIBILITY), is(false)); - assertThat(set.testState(nonMember, DefaultFlag.BUILD), is(false)); + assertThat(set.testState(nonMember, Flags.BUILD), is(false)); } @Test @@ -332,7 +332,7 @@ public void testBuildDenyFlag() { region = mock.add(0); region.getOwners().addPlayer(member); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.DENY); + region.setFlag(Flags.BUILD, StateFlag.State.DENY); ApplicableRegionSet set = mock.getApplicableSet(); assertFalse(set.canBuild(member)); @@ -349,7 +349,7 @@ public void testBuildAllowFlag() { region = mock.add(0); region.getOwners().addPlayer(member); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.ALLOW); + region.setFlag(Flags.BUILD, StateFlag.State.ALLOW); ApplicableRegionSet set = mock.getApplicableSet(); assertTrue(set.canBuild(member)); @@ -366,10 +366,10 @@ public void testHigherPriorityOverrideBuildDenyFlag() { region = mock.add(0); region.getOwners().addPlayer(member); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.DENY); + region.setFlag(Flags.BUILD, StateFlag.State.DENY); region = mock.add(1); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.ALLOW); + region.setFlag(Flags.BUILD, StateFlag.State.ALLOW); ApplicableRegionSet set = mock.getApplicableSet(); assertTrue(set.canBuild(member)); @@ -386,7 +386,7 @@ public void testHigherPriorityUnsetBuildDenyFlag() { region = mock.add(0); region.getOwners().addPlayer(member); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.DENY); + region.setFlag(Flags.BUILD, StateFlag.State.DENY); region = mock.add(1); @@ -404,7 +404,7 @@ public void testPriorityDisjointBuildDenyFlagAndMembership() { LocalPlayer nonMember = mock.createPlayer(); region = mock.add(0); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.DENY); + region.setFlag(Flags.BUILD, StateFlag.State.DENY); region = mock.add(1); region.getOwners().addPlayer(member); @@ -423,7 +423,7 @@ public void testPriorityDisjointBuildDenyFlagAndRegion() { LocalPlayer nonMember = mock.createPlayer(); region = mock.add(0); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.DENY); + region.setFlag(Flags.BUILD, StateFlag.State.DENY); region = mock.add(1); @@ -444,7 +444,7 @@ public void testPriorityDisjointMembershipAndBuildDenyFlag() { region.getOwners().addPlayer(member); region = mock.add(1); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.DENY); + region.setFlag(Flags.BUILD, StateFlag.State.DENY); ApplicableRegionSet set = mock.getApplicableSet(); assertFalse(set.canBuild(member)); @@ -483,7 +483,7 @@ public void testGlobalRegionBuildFlagAllow() { ProtectedRegion region; region = mock.global(); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.ALLOW); + region.setFlag(Flags.BUILD, StateFlag.State.ALLOW); LocalPlayer member = mock.createPlayer(); LocalPlayer nonMember = mock.createPlayer(); @@ -499,7 +499,7 @@ public void testGlobalRegionBuildFlagDeny() { ProtectedRegion region; region = mock.global(); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.DENY); + region.setFlag(Flags.BUILD, StateFlag.State.DENY); LocalPlayer member = mock.createPlayer(); LocalPlayer nonMember = mock.createPlayer(); @@ -518,7 +518,7 @@ public void testGlobalRegionBuildFlagAllowWithRegion() { LocalPlayer nonMember = mock.createPlayer(); region = mock.global(); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.ALLOW); + region.setFlag(Flags.BUILD, StateFlag.State.ALLOW); region = mock.add(0); region.getOwners().addPlayer(member); @@ -537,7 +537,7 @@ public void testGlobalRegionBuildFlagDenyWithRegion() { LocalPlayer nonMember = mock.createPlayer(); region = mock.global(); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.DENY); + region.setFlag(Flags.BUILD, StateFlag.State.DENY); region = mock.add(0); region.getOwners().addPlayer(member); @@ -572,7 +572,7 @@ public void testGlobalRegionHavingOwnershipBuildFlagAllow() { LocalPlayer nonMember = mock.createPlayer(); region = mock.global(); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.ALLOW); + region.setFlag(Flags.BUILD, StateFlag.State.ALLOW); region.getOwners().addPlayer(member); ApplicableRegionSet set = mock.getApplicableSet(); @@ -589,7 +589,7 @@ public void testGlobalRegionHavingOwnershipBuildFlagDeny() { LocalPlayer nonMember = mock.createPlayer(); region = mock.global(); - region.setFlag(DefaultFlag.BUILD, StateFlag.State.DENY); + region.setFlag(Flags.BUILD, StateFlag.State.DENY); region.getOwners().addPlayer(member); ApplicableRegionSet set = mock.getApplicableSet(); @@ -608,21 +608,21 @@ public void testGlobalRegionCommandBlacklistWithRegionWhitelist() { Set blocked = new HashSet(); blocked.add("/deny"); blocked.add("/strange"); - region.setFlag(DefaultFlag.BLOCKED_CMDS, blocked); + region.setFlag(Flags.BLOCKED_CMDS, blocked); region = mock.add(0); Set allowed = new HashSet(); allowed.add("/permit"); allowed.add("/strange"); - region.setFlag(DefaultFlag.ALLOWED_CMDS, allowed); + region.setFlag(Flags.ALLOWED_CMDS, allowed); ApplicableRegionSet set; CommandFilter test; set = mock.getApplicableSet(); test = new CommandFilter( - set.getFlag(DefaultFlag.ALLOWED_CMDS, nonMember), - set.getFlag(DefaultFlag.BLOCKED_CMDS, nonMember)); + set.getFlag(Flags.ALLOWED_CMDS, nonMember), + set.getFlag(Flags.BLOCKED_CMDS, nonMember)); assertThat(test.apply("/permit"), is(true)); assertThat(test.apply("/strange"), is(true)); assertThat(test.apply("/other"), is(false)); @@ -630,8 +630,8 @@ public void testGlobalRegionCommandBlacklistWithRegionWhitelist() { set = mock.getApplicableSetInWilderness(); test = new CommandFilter( - set.getFlag(DefaultFlag.ALLOWED_CMDS, nonMember), - set.getFlag(DefaultFlag.BLOCKED_CMDS, nonMember)); + set.getFlag(Flags.ALLOWED_CMDS, nonMember), + set.getFlag(Flags.BLOCKED_CMDS, nonMember)); assertThat(test.apply("/permit"), is(true)); assertThat(test.apply("/strange"), is(false)); assertThat(test.apply("/other"), is(true)); diff --git a/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/FlagValueCalculatorTest.java b/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/FlagValueCalculatorTest.java index daaf21a6..389c9387 100644 --- a/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/FlagValueCalculatorTest.java +++ b/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/FlagValueCalculatorTest.java @@ -21,7 +21,7 @@ import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.FlagValueCalculator.Result; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.RegionGroup; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.StateFlag.State; @@ -91,10 +91,10 @@ public void testGetMembershipPassthroughRegions() throws Exception { MockApplicableRegionSet mock = new MockApplicableRegionSet(); ProtectedRegion region = mock.add(0); - region.setFlag(DefaultFlag.PASSTHROUGH, State.ALLOW); + region.setFlag(Flags.PASSTHROUGH, State.ALLOW); region = mock.add(0); - region.setFlag(DefaultFlag.PASSTHROUGH, State.ALLOW); + region.setFlag(Flags.PASSTHROUGH, State.ALLOW); LocalPlayer player = mock.createPlayer(); @@ -107,7 +107,7 @@ public void testGetMembershipPassthroughAndRegion() throws Exception { MockApplicableRegionSet mock = new MockApplicableRegionSet(); ProtectedRegion region = mock.add(0); - region.setFlag(DefaultFlag.PASSTHROUGH, State.ALLOW); + region.setFlag(Flags.PASSTHROUGH, State.ALLOW); region = mock.add(0); @@ -122,7 +122,7 @@ public void testGetMembershipPassthroughAndRegionMemberOf() throws Exception { MockApplicableRegionSet mock = new MockApplicableRegionSet(); ProtectedRegion region = mock.add(0); - region.setFlag(DefaultFlag.PASSTHROUGH, State.ALLOW); + region.setFlag(Flags.PASSTHROUGH, State.ALLOW); region = mock.add(0); @@ -138,7 +138,7 @@ public void testGetMembershipPassthroughAndRegionMemberOfAndAnotherNot() throws MockApplicableRegionSet mock = new MockApplicableRegionSet(); ProtectedRegion region = mock.add(0); - region.setFlag(DefaultFlag.PASSTHROUGH, State.ALLOW); + region.setFlag(Flags.PASSTHROUGH, State.ALLOW); region = mock.add(0); @@ -162,7 +162,7 @@ public void testGetMembershipPassthroughAndRegionMemberOfAndAnotherNotWithHigher MockApplicableRegionSet mock = new MockApplicableRegionSet(); ProtectedRegion region = mock.add(0); - region.setFlag(DefaultFlag.PASSTHROUGH, State.ALLOW); + region.setFlag(Flags.PASSTHROUGH, State.ALLOW); region = mock.add(0); @@ -180,7 +180,7 @@ public void testGetMembershipPassthroughAndRegionMemberOfWithHigherPriorityAndAn MockApplicableRegionSet mock = new MockApplicableRegionSet(); ProtectedRegion region = mock.add(0); - region.setFlag(DefaultFlag.PASSTHROUGH, State.ALLOW); + region.setFlag(Flags.PASSTHROUGH, State.ALLOW); region = mock.add(10); @@ -198,7 +198,7 @@ public void testGetMembershipPassthroughAndRegionMemberOfWithAnotherParent() thr MockApplicableRegionSet mock = new MockApplicableRegionSet(); ProtectedRegion passthrough = mock.add(0); - passthrough.setFlag(DefaultFlag.PASSTHROUGH, State.ALLOW); + passthrough.setFlag(Flags.PASSTHROUGH, State.ALLOW); ProtectedRegion parent = mock.add(0); @@ -217,7 +217,7 @@ public void testGetMembershipPassthroughAndRegionMemberOfWithAnotherChild() thro MockApplicableRegionSet mock = new MockApplicableRegionSet(); ProtectedRegion passthrough = mock.add(0); - passthrough.setFlag(DefaultFlag.PASSTHROUGH, State.ALLOW); + passthrough.setFlag(Flags.PASSTHROUGH, State.ALLOW); ProtectedRegion parent = mock.add(0); @@ -236,7 +236,7 @@ public void testGetMembershipPassthroughAndRegionMemberOfWithAnotherChildAndAnot MockApplicableRegionSet mock = new MockApplicableRegionSet(); ProtectedRegion passthrough = mock.add(0); - passthrough.setFlag(DefaultFlag.PASSTHROUGH, State.ALLOW); + passthrough.setFlag(Flags.PASSTHROUGH, State.ALLOW); ProtectedRegion parent = mock.add(0); @@ -257,7 +257,7 @@ public void testGetMembershipThirdPriorityLower() throws Exception { MockApplicableRegionSet mock = new MockApplicableRegionSet(); ProtectedRegion passthrough = mock.add(0); - passthrough.setFlag(DefaultFlag.PASSTHROUGH, State.ALLOW); + passthrough.setFlag(Flags.PASSTHROUGH, State.ALLOW); ProtectedRegion parent = mock.add(0); @@ -603,7 +603,7 @@ public void testQueryValueBuildFlagWilderness() throws Exception { LocalPlayer nonMember = mock.createPlayer(); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.ALLOW)); } @Test @@ -615,7 +615,7 @@ public void testQueryValueBuildFlagWildernessAndGlobalRegion() throws Exception ProtectedRegion global = mock.global(); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.ALLOW)); } @Test @@ -625,10 +625,10 @@ public void testQueryValueBuildFlagWildernessAndGlobalRegionDeny() throws Except LocalPlayer nonMember = mock.createPlayer(); ProtectedRegion global = mock.global(); - global.setFlag(DefaultFlag.BUILD, State.DENY); + global.setFlag(Flags.BUILD, State.DENY); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is(State.DENY)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.DENY)); } @Test @@ -638,10 +638,10 @@ public void testQueryValueBuildFlagWildernessAndGlobalRegionAllow() throws Excep LocalPlayer nonMember = mock.createPlayer(); ProtectedRegion global = mock.global(); - global.setFlag(DefaultFlag.BUILD, State.ALLOW); + global.setFlag(Flags.BUILD, State.ALLOW); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.ALLOW)); } @Test @@ -655,8 +655,8 @@ public void testQueryValueBuildFlagWildernessAndGlobalRegionMembership() throws global.getMembers().addPlayer(member); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(member, DefaultFlag.BUILD), is(State.ALLOW)); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); + assertThat(result.queryValue(member, Flags.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); } @Test @@ -668,11 +668,11 @@ public void testQueryValueBuildFlagWildernessAndGlobalRegionMembershipAndDeny() ProtectedRegion global = mock.global(); global.getMembers().addPlayer(member); - global.setFlag(DefaultFlag.BUILD, State.DENY); + global.setFlag(Flags.BUILD, State.DENY); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(member, DefaultFlag.BUILD), is(State.DENY)); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is(State.DENY)); + assertThat(result.queryValue(member, Flags.BUILD), is(State.DENY)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.DENY)); } @Test @@ -684,13 +684,13 @@ public void testQueryValueBuildFlagWildernessAndGlobalRegionMembershipAndAllow() ProtectedRegion global = mock.global(); global.getMembers().addPlayer(member); - global.setFlag(DefaultFlag.BUILD, State.ALLOW); + global.setFlag(Flags.BUILD, State.ALLOW); // Cannot set ALLOW on BUILD FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(member, DefaultFlag.BUILD), is(State.ALLOW)); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); + assertThat(result.queryValue(member, Flags.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); } @Test @@ -704,8 +704,8 @@ public void testQueryValueBuildFlagRegion() throws Exception { region.getMembers().addPlayer(member); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(member, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(member, Flags.BUILD), is(State.ALLOW)); } @Test @@ -724,9 +724,9 @@ public void testQueryValueBuildFlagRegionsOverlapping() throws Exception { region.getMembers().addPlayer(memberBoth); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW)); } @Test @@ -746,9 +746,9 @@ public void testQueryValueBuildFlagRegionsOverlappingDifferingPriority() throws region.getMembers().addPlayer(memberBoth); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is(State.ALLOW)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW)); } @Test @@ -768,9 +768,9 @@ public void testQueryValueBuildFlagRegionsOverlappingInheritanceFromParent() thr region.setParent(parent); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is(State.ALLOW)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW)); } @Test @@ -790,9 +790,9 @@ public void testQueryValueBuildFlagRegionsOverlappingInheritanceFromChild() thro region.setParent(parent); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is(State.ALLOW)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW)); } @Test @@ -814,9 +814,9 @@ public void testQueryValueBuildFlagRegionsOverlappingInheritanceFromChildAndPrio ProtectedRegion priority = mock.add(10); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is((State) null)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is((State) null)); } @Test @@ -836,12 +836,12 @@ public void testQueryValueBuildFlagRegionsOverlappingInheritanceFromChildAndPrio region.setParent(parent); ProtectedRegion priority = mock.add(10); - priority.setFlag(DefaultFlag.PASSTHROUGH, State.ALLOW); + priority.setFlag(Flags.PASSTHROUGH, State.ALLOW); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is(State.ALLOW)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW)); } @Test @@ -862,9 +862,9 @@ public void testQueryValueBuildFlagRegionsOverlappingAndGlobalRegion() throws Ex region.getMembers().addPlayer(memberBoth); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW)); } @Test @@ -876,7 +876,7 @@ public void testQueryValueBuildFlagRegionsOverlappingAndGlobalRegionDenyRegionOv LocalPlayer memberBoth = mock.createPlayer(); ProtectedRegion global = mock.global(); - global.setFlag(DefaultFlag.BUILD, State.DENY); + global.setFlag(Flags.BUILD, State.DENY); ProtectedRegion region = mock.add(0); region.getMembers().addPlayer(memberOne); @@ -884,12 +884,12 @@ public void testQueryValueBuildFlagRegionsOverlappingAndGlobalRegionDenyRegionOv region = mock.add(0); region.getMembers().addPlayer(memberBoth); - region.setFlag(DefaultFlag.BUILD, State.ALLOW); + region.setFlag(Flags.BUILD, State.ALLOW); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is(State.ALLOW)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is(State.ALLOW)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW)); } @Test @@ -901,21 +901,21 @@ public void testQueryValueBuildFlagRegionsOverlappingAndGlobalRegionDenyRegionOv LocalPlayer memberBoth = mock.createPlayer(); ProtectedRegion global = mock.global(); - global.setFlag(DefaultFlag.BUILD, State.DENY); + global.setFlag(Flags.BUILD, State.DENY); ProtectedRegion region = mock.add(0); region.getMembers().addPlayer(memberOne); region.getMembers().addPlayer(memberBoth); - region.setFlag(DefaultFlag.BUILD, State.DENY); + region.setFlag(Flags.BUILD, State.DENY); region = mock.add(0); region.getMembers().addPlayer(memberBoth); - region.setFlag(DefaultFlag.BUILD, State.ALLOW); + region.setFlag(Flags.BUILD, State.ALLOW); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is(State.DENY)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is(State.DENY)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.DENY)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.DENY)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is(State.DENY)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.DENY)); } @Test @@ -927,7 +927,7 @@ public void testQueryValueBuildFlagRegionsOverlappingAndGlobalRegionAllow() thro LocalPlayer memberBoth = mock.createPlayer(); ProtectedRegion global = mock.global(); - global.setFlag(DefaultFlag.BUILD, State.ALLOW); + global.setFlag(Flags.BUILD, State.ALLOW); ProtectedRegion region = mock.add(0); region.getMembers().addPlayer(memberOne); @@ -939,9 +939,9 @@ public void testQueryValueBuildFlagRegionsOverlappingAndGlobalRegionAllow() thro // Disable setting ALLOW for safety reasons FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW)); } @Test @@ -964,10 +964,10 @@ public void testQueryValueBuildFlagRegionsOverlappingAndGlobalRegionMembership() region.getMembers().addPlayer(memberBoth); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(globalMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(globalMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW)); } @Test @@ -981,7 +981,7 @@ public void testQueryValueBuildFlagRegionsOverlappingAndGlobalRegionMembershipAn ProtectedRegion global = mock.global(); global.getMembers().addPlayer(globalMember); - global.setFlag(DefaultFlag.BUILD, State.DENY); + global.setFlag(Flags.BUILD, State.DENY); ProtectedRegion region = mock.add(0); region.getMembers().addPlayer(memberOne); @@ -992,10 +992,10 @@ public void testQueryValueBuildFlagRegionsOverlappingAndGlobalRegionMembershipAn FlagValueCalculator result = mock.getFlagCalculator(); // Inconsistent due to legacy reasons - assertThat(result.queryValue(globalMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(globalMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW)); } @Test @@ -1009,7 +1009,7 @@ public void testQueryValueBuildFlagRegionsOverlappingAndGlobalRegionMembershipAn ProtectedRegion global = mock.global(); global.getMembers().addPlayer(globalMember); - global.setFlag(DefaultFlag.BUILD, State.ALLOW); + global.setFlag(Flags.BUILD, State.ALLOW); ProtectedRegion region = mock.add(0); region.getMembers().addPlayer(memberOne); @@ -1019,10 +1019,10 @@ public void testQueryValueBuildFlagRegionsOverlappingAndGlobalRegionMembershipAn region.getMembers().addPlayer(memberBoth); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.queryValue(globalMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(nonMember, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberOne, DefaultFlag.BUILD), is((State) null)); - assertThat(result.queryValue(memberBoth, DefaultFlag.BUILD), is(State.ALLOW)); + assertThat(result.queryValue(globalMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null)); + assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW)); } // ======================================================================== @@ -1939,7 +1939,7 @@ public void testGetEffectiveFlagGlobalRegionBuild() throws Exception { ProtectedRegion global = mock.global(); FlagValueCalculator result = mock.getFlagCalculator(); - assertThat(result.getEffectiveFlag(global, DefaultFlag.BUILD, null), equalTo(null)); + assertThat(result.getEffectiveFlag(global, Flags.BUILD, null), equalTo(null)); } @Test @@ -1947,11 +1947,11 @@ public void testGetEffectiveFlagGlobalRegionBuildDeny() throws Exception { MockApplicableRegionSet mock = new MockApplicableRegionSet(); ProtectedRegion global = mock.global(); - global.setFlag(DefaultFlag.BUILD, State.DENY); + global.setFlag(Flags.BUILD, State.DENY); FlagValueCalculator result = mock.getFlagCalculator(); // Cannot let users override BUILD on GLOBAL - assertThat(result.getEffectiveFlag(global, DefaultFlag.BUILD, null), equalTo(State.DENY)); + assertThat(result.getEffectiveFlag(global, Flags.BUILD, null), equalTo(State.DENY)); } @Test @@ -1959,10 +1959,10 @@ public void testGetEffectiveFlagGlobalRegionBuildAllow() throws Exception { MockApplicableRegionSet mock = new MockApplicableRegionSet(); ProtectedRegion global = mock.global(); - global.setFlag(DefaultFlag.BUILD, State.ALLOW); + global.setFlag(Flags.BUILD, State.ALLOW); FlagValueCalculator result = mock.getFlagCalculator(); // Cannot let users override BUILD on GLOBAL - assertThat(result.getEffectiveFlag(global, DefaultFlag.BUILD, null), equalTo(null)); + assertThat(result.getEffectiveFlag(global, Flags.BUILD, null), equalTo(null)); } } \ No newline at end of file diff --git a/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/RegionEntryExitTest.java b/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/RegionEntryExitTest.java index 7273d015..0b38be6b 100644 --- a/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/RegionEntryExitTest.java +++ b/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/RegionEntryExitTest.java @@ -23,7 +23,7 @@ import com.sk89q.worldedit.Vector; import com.sk89q.worldguard.TestPlayer; import com.sk89q.worldguard.domains.DefaultDomain; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.RegionGroup; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; @@ -57,7 +57,6 @@ public abstract class RegionEntryExitTest { protected FlagRegistry getFlagRegistry() { FlagRegistry registry = new SimpleFlagRegistry(); - registry.registerAll(DefaultFlag.getDefaultFlags()); return registry; } @@ -102,8 +101,8 @@ void setUpEntryRegion() { // this is the way it's supposed to work // whatever the group flag is set to is the group that the flag APPLIES to // in this case, non members (esskay) should be DENIED entry - entryRegion.setFlag(DefaultFlag.ENTRY, StateFlag.State.DENY); - entryRegion.setFlag(DefaultFlag.ENTRY.getRegionGroupFlag(), RegionGroup.NON_MEMBERS); + entryRegion.setFlag(Flags.ENTRY, StateFlag.State.DENY); + entryRegion.setFlag(Flags.ENTRY.getRegionGroupFlag(), RegionGroup.NON_MEMBERS); } void setUpExitRegion() throws Exception { @@ -117,8 +116,8 @@ void setUpExitRegion() throws Exception { entryRegion = region; // same as above - entryRegion.setFlag(DefaultFlag.EXIT, StateFlag.State.DENY); - entryRegion.setFlag(DefaultFlag.EXIT.getRegionGroupFlag(), RegionGroup.NON_OWNERS); + entryRegion.setFlag(Flags.EXIT, StateFlag.State.DENY); + entryRegion.setFlag(Flags.EXIT.getRegionGroupFlag(), RegionGroup.NON_OWNERS); } @Test @@ -129,11 +128,11 @@ public void testEntry() throws Exception { // ProtectedRegion rg = appl.iterator().next(); // System.out.println("rg " + rg.getId()); // System.out.println("mem " + rg.getMembers().toGroupsString()); -// System.out.println("flag " + appl.getFlag(DefaultFlag.ENTRY)); -// System.out.println("grp " + appl.getFlag(DefaultFlag.ENTRY.getRegionGroupFlag())); +// System.out.println("flag " + appl.getFlag(Flags.ENTRY)); +// System.out.println("grp " + appl.getFlag(Flags.ENTRY.getRegionGroupFlag())); // System.out.println("==="); - assertTrue("Allowed Entry", appl.allows(DefaultFlag.ENTRY, vipPlayer)); - assertFalse("Forbidden Entry", appl.allows(DefaultFlag.ENTRY, builderPlayer)); + assertTrue("Allowed Entry", appl.allows(Flags.ENTRY, vipPlayer)); + assertFalse("Forbidden Entry", appl.allows(Flags.ENTRY, builderPlayer)); } @Test @@ -144,11 +143,11 @@ public void testExit() throws Exception { // ProtectedRegion rg = appl.iterator().next(); // System.out.println("rg " + rg.getId()); // System.out.println("own " + rg.getOwners().toGroupsString()); -// System.out.println("flag " + appl.getFlag(DefaultFlag.EXIT)); -// System.out.println("grp " + appl.getFlag(DefaultFlag.EXIT.getRegionGroupFlag())); +// System.out.println("flag " + appl.getFlag(Flags.EXIT)); +// System.out.println("grp " + appl.getFlag(Flags.EXIT.getRegionGroupFlag())); // System.out.println("==="); - assertTrue("Allowed Exit", appl.allows(DefaultFlag.EXIT, builderPlayer)); - assertFalse("Forbidden Exit", appl.allows(DefaultFlag.EXIT, vipPlayer)); + assertTrue("Allowed Exit", appl.allows(Flags.EXIT, builderPlayer)); + assertFalse("Forbidden Exit", appl.allows(Flags.EXIT, vipPlayer)); } } diff --git a/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/RegionOverlapTest.java b/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/RegionOverlapTest.java index a1ac185c..02dc062a 100644 --- a/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/RegionOverlapTest.java +++ b/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/RegionOverlapTest.java @@ -24,7 +24,7 @@ import com.sk89q.worldedit.Vector; import com.sk89q.worldguard.TestPlayer; import com.sk89q.worldguard.domains.DefaultDomain; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; import com.sk89q.worldguard.protection.flags.registry.SimpleFlagRegistry; @@ -62,7 +62,7 @@ public abstract class RegionOverlapTest { protected FlagRegistry getFlagRegistry() { FlagRegistry registry = new SimpleFlagRegistry(); - registry.registerAll(DefaultFlag.getDefaultFlags()); + registry.registerAll(Flags.getDefaultFlags()); return registry; } @@ -123,14 +123,14 @@ void setUpFountainRegion() throws Exception { fountain = region; fountain.setParent(courtyard); - fountain.setFlag(DefaultFlag.FIRE_SPREAD, StateFlag.State.DENY); + fountain.setFlag(Flags.FIRE_SPREAD, StateFlag.State.DENY); } void setUpNoFireRegion() throws Exception { ProtectedRegion region = new ProtectedCuboidRegion(NO_FIRE_ID, new BlockVector(100, 100, 100), new BlockVector(200, 200, 200)); manager.addRegion(region); - region.setFlag(DefaultFlag.FIRE_SPREAD, StateFlag.State.DENY); + region.setFlag(Flags.FIRE_SPREAD, StateFlag.State.DENY); } @Test @@ -139,17 +139,17 @@ public void testNonBuildFlag() { // Outside appl = manager.getApplicableRegions(outside); - assertTrue(appl.allows(DefaultFlag.FIRE_SPREAD)); + assertTrue(appl.allows(Flags.FIRE_SPREAD)); // Inside courtyard appl = manager.getApplicableRegions(inCourtyard); - assertTrue(appl.allows(DefaultFlag.FIRE_SPREAD)); + assertTrue(appl.allows(Flags.FIRE_SPREAD)); // Inside fountain appl = manager.getApplicableRegions(inFountain); - assertFalse(appl.allows(DefaultFlag.FIRE_SPREAD)); + assertFalse(appl.allows(Flags.FIRE_SPREAD)); // Inside no fire zone appl = manager.getApplicableRegions(inNoFire); - assertFalse(appl.allows(DefaultFlag.FIRE_SPREAD)); + assertFalse(appl.allows(Flags.FIRE_SPREAD)); } @Test diff --git a/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/RegionPriorityTest.java b/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/RegionPriorityTest.java index 77d62a60..4ec669d5 100644 --- a/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/RegionPriorityTest.java +++ b/worldguard-legacy/src/test/java/com/sk89q/worldguard/protection/RegionPriorityTest.java @@ -24,7 +24,7 @@ import com.sk89q.worldedit.Vector; import com.sk89q.worldguard.TestPlayer; import com.sk89q.worldguard.domains.DefaultDomain; -import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; import com.sk89q.worldguard.protection.flags.registry.SimpleFlagRegistry; @@ -60,7 +60,7 @@ public abstract class RegionPriorityTest { protected FlagRegistry getFlagRegistry() { FlagRegistry registry = new SimpleFlagRegistry(); - registry.registerAll(DefaultFlag.getDefaultFlags()); + registry.registerAll(Flags.getDefaultFlags()); return registry; } @@ -107,7 +107,7 @@ void setUpCourtyardRegion() { manager.addRegion(region); courtyard = region; - courtyard.setFlag(DefaultFlag.MOB_SPAWNING, StateFlag.State.DENY); + courtyard.setFlag(Flags.MOB_SPAWNING, StateFlag.State.DENY); } void setUpFountainRegion() throws Exception { @@ -121,8 +121,8 @@ void setUpFountainRegion() throws Exception { fountain = region; fountain.setParent(courtyard); - fountain.setFlag(DefaultFlag.FIRE_SPREAD, StateFlag.State.DENY); - fountain.setFlag(DefaultFlag.MOB_SPAWNING, StateFlag.State.ALLOW); + fountain.setFlag(Flags.FIRE_SPREAD, StateFlag.State.DENY); + fountain.setFlag(Flags.MOB_SPAWNING, StateFlag.State.ALLOW); } @Test @@ -133,11 +133,11 @@ public void testNoPriorities() throws Exception { fountain.setPriority(0); appl = manager.getApplicableRegions(inCourtyard); - assertTrue(appl.allows(DefaultFlag.FIRE_SPREAD)); - assertFalse(appl.allows(DefaultFlag.MOB_SPAWNING)); + assertTrue(appl.allows(Flags.FIRE_SPREAD)); + assertFalse(appl.allows(Flags.MOB_SPAWNING)); appl = manager.getApplicableRegions(inFountain); - assertFalse(appl.allows(DefaultFlag.FIRE_SPREAD)); - assertTrue(appl.allows(DefaultFlag.MOB_SPAWNING)); + assertFalse(appl.allows(Flags.FIRE_SPREAD)); + assertTrue(appl.allows(Flags.MOB_SPAWNING)); } @Test @@ -148,9 +148,9 @@ public void testPriorities() throws Exception { fountain.setPriority(0); appl = manager.getApplicableRegions(inCourtyard); - assertTrue(appl.allows(DefaultFlag.FIRE_SPREAD)); + assertTrue(appl.allows(Flags.FIRE_SPREAD)); appl = manager.getApplicableRegions(inFountain); - assertFalse(appl.allows(DefaultFlag.FIRE_SPREAD)); + assertFalse(appl.allows(Flags.FIRE_SPREAD)); } @Test @@ -161,8 +161,8 @@ public void testPriorities2() throws Exception { fountain.setPriority(5); appl = manager.getApplicableRegions(inCourtyard); - assertFalse(appl.allows(DefaultFlag.MOB_SPAWNING)); + assertFalse(appl.allows(Flags.MOB_SPAWNING)); appl = manager.getApplicableRegions(inFountain); - assertTrue(appl.allows(DefaultFlag.MOB_SPAWNING)); + assertTrue(appl.allows(Flags.MOB_SPAWNING)); } }