diff --git a/Common/pom.xml b/Common/pom.xml index 766dada..ddbc7b8 100644 --- a/Common/pom.xml +++ b/Common/pom.xml @@ -3,7 +3,7 @@ net.goldtreeservers worldguardextraflags - 4.1.0 + 4.1.1 net.goldtreeservers.worldguardextraflags @@ -26,11 +26,6 @@ empcraft http://ci.athion.net/job/FastAsyncWorldEdit/ws/mvn/ - - - elMakers - http://maven.elmakers.com/repository/ - @@ -62,14 +57,14 @@ com.sk89q.worldedit - worldedit - 7.0-SNAPSHOT + worldedit-bukkit + 7.0.0-SNAPSHOT provided com.sk89q.worldguard worldguard-legacy - 7.0-SNAPSHOT + 7.0.0-SNAPSHOT provided diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/WorldGuardExtraFlagsPlugin.java b/Common/src/main/java/net/goldtreeservers/worldguardextraflags/WorldGuardExtraFlagsPlugin.java index 9ba1a8d..521cee0 100644 --- a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/WorldGuardExtraFlagsPlugin.java +++ b/Common/src/main/java/net/goldtreeservers/worldguardextraflags/WorldGuardExtraFlagsPlugin.java @@ -19,7 +19,6 @@ import net.goldtreeservers.worldguardextraflags.listeners.EntityListenerOnePoint import net.goldtreeservers.worldguardextraflags.listeners.PlayerListener; import net.goldtreeservers.worldguardextraflags.listeners.WorldEditListener; import net.goldtreeservers.worldguardextraflags.listeners.WorldListener; -import net.goldtreeservers.worldguardextraflags.utils.WorldUtils; import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils; import net.goldtreeservers.worldguardextraflags.wg.handlers.BlockedEffectsFlagHandler; import net.goldtreeservers.worldguardextraflags.wg.handlers.CommandOnEntryFlagHandler; @@ -36,6 +35,8 @@ import net.goldtreeservers.worldguardextraflags.wg.handlers.TeleportOnExitFlagHa import net.goldtreeservers.worldguardextraflags.wg.handlers.WalkSpeedFlagHandler; import net.goldtreeservers.worldguardextraflags.wg.wrappers.AbstractSessionManagerWrapper; import net.goldtreeservers.worldguardextraflags.wg.wrappers.WorldGuardCommunicator; +import net.goldtreeservers.worldguardextraflags.wg.wrappers.v6.WorldGuardSixCommunicator; +import net.goldtreeservers.worldguardextraflags.wg.wrappers.v7.WorldGuardSevenCommunicator; public class WorldGuardExtraFlagsPlugin extends JavaPlugin { @@ -60,12 +61,14 @@ public class WorldGuardExtraFlagsPlugin extends JavaPlugin this.worldEditPlugin = (WorldEditPlugin)this.getServer().getPluginManager().getPlugin("WorldEdit"); this.worldGuardPlugin = (WorldGuardPlugin)this.getServer().getPluginManager().getPlugin("WorldGuard"); - this.worldGuardCommunicator = WorldGuardUtils.createWorldGuardCommunicator(); + this.worldGuardCommunicator = WorldGuardExtraFlagsPlugin.createWorldGuardCommunicator(); if (this.worldGuardCommunicator == null) { throw new RuntimeException("Unsupported WorldGuard version: " + this.worldGuardPlugin.getDescription().getVersion()); } + WorldGuardUtils.setCommunicator(this.worldGuardCommunicator); + try { this.worldGuardCommunicator.onLoad(); @@ -195,7 +198,7 @@ public class WorldGuardExtraFlagsPlugin extends JavaPlugin } else { - this.worldEditPlugin.getWorldEdit().getEventBus().register(new WorldEditListener()); + this.worldEditPlugin.getWorldEdit().getEventBus().register(new WorldEditListener(this)); } if (this.essentialsHelper != null) @@ -205,7 +208,36 @@ public class WorldGuardExtraFlagsPlugin extends JavaPlugin for(World world : this.getServer().getWorlds()) { - WorldUtils.doUnloadChunkFlagCheck(world); + this.getWorldGuardCommunicator().doUnloadChunkFlagCheck(world); } } + + public static WorldGuardCommunicator createWorldGuardCommunicator() + { + try + { + Class.forName("com.sk89q.worldguard.WorldGuard"); //Only exists in WG 7 + + return new WorldGuardSevenCommunicator(); + } + catch (Throwable ignored) + { + + } + + try + { + Class clazz = Class.forName("com.sk89q.worldguard.bukkit.WorldGuardPlugin"); + if (clazz.getMethod("getFlagRegistry") != null) + { + return new WorldGuardSixCommunicator(); + } + } + catch (Throwable ignored) + { + ignored.printStackTrace(); + } + + return null; + } } diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/listeners/WorldEditListener.java b/Common/src/main/java/net/goldtreeservers/worldguardextraflags/listeners/WorldEditListener.java index 8ae4c91..e6001b5 100644 --- a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/listeners/WorldEditListener.java +++ b/Common/src/main/java/net/goldtreeservers/worldguardextraflags/listeners/WorldEditListener.java @@ -6,17 +6,21 @@ import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.util.eventbus.EventHandler; import com.sk89q.worldedit.util.eventbus.Subscribe; -import net.goldtreeservers.worldguardextraflags.we.WorldEditFlagHandler; +import lombok.RequiredArgsConstructor; +import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin; +@RequiredArgsConstructor public class WorldEditListener { + private final WorldGuardExtraFlagsPlugin plugin; + @Subscribe(priority = EventHandler.Priority.VERY_EARLY) public void onEditSessionEvent(EditSessionEvent event) { Actor actor = event.getActor(); if (actor != null && actor.isPlayer()) { - event.setExtent(new WorldEditFlagHandler(event.getWorld(), event.getExtent(), (Player)actor)); + event.setExtent(this.plugin.getWorldGuardCommunicator().getWorldEditFlag(event.getWorld(), event.getExtent(), (Player)actor)); } } } diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/listeners/WorldListener.java b/Common/src/main/java/net/goldtreeservers/worldguardextraflags/listeners/WorldListener.java index dc73cff..a4a1bc5 100644 --- a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/listeners/WorldListener.java +++ b/Common/src/main/java/net/goldtreeservers/worldguardextraflags/listeners/WorldListener.java @@ -8,16 +8,9 @@ import org.bukkit.event.Listener; import org.bukkit.event.world.ChunkUnloadEvent; import org.bukkit.event.world.WorldLoadEvent; -import com.sk89q.worldedit.BlockVector; -import com.sk89q.worldguard.protection.flags.StateFlag.State; -import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; - import lombok.Getter; import lombok.RequiredArgsConstructor; import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin; -import net.goldtreeservers.worldguardextraflags.flags.Flags; -import net.goldtreeservers.worldguardextraflags.utils.WorldUtils; @RequiredArgsConstructor public class WorldListener implements Listener @@ -27,7 +20,9 @@ public class WorldListener implements Listener @EventHandler(priority = EventPriority.MONITOR) public void onWorldLoadEvent(WorldLoadEvent event) { - WorldUtils.doUnloadChunkFlagCheck(event.getWorld()); + World world = event.getWorld(); + + this.plugin.getWorldGuardCommunicator().doUnloadChunkFlagCheck(world); } @EventHandler(ignoreCancelled = true) @@ -35,14 +30,10 @@ public class WorldListener implements Listener { World world = event.getWorld(); Chunk chunk = event.getChunk(); - - for (ProtectedRegion region : this.plugin.getWorldGuardCommunicator().getRegionContainer().get(world).getApplicableRegions(new ProtectedCuboidRegion("UnloadChunkFlagTester", new BlockVector(chunk.getX() * 16, 0, chunk.getZ() * 16), new BlockVector(chunk.getX() * 16 + 15, 256, chunk.getZ() * 16 + 15)))) + + if (!this.plugin.getWorldGuardCommunicator().doUnloadChunkFlagCheck(world, chunk)) { - if (region.getFlag(Flags.CHUNK_UNLOAD) == State.DENY) - { - event.setCancelled(true); - break; - } + event.setCancelled(true); } } } \ No newline at end of file diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/utils/WorldUtils.java b/Common/src/main/java/net/goldtreeservers/worldguardextraflags/utils/WorldUtils.java deleted file mode 100644 index 839473a..0000000 --- a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/utils/WorldUtils.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.goldtreeservers.worldguardextraflags.utils; - -import org.bukkit.World; - -import com.sk89q.worldedit.BlockVector; -import com.sk89q.worldguard.protection.flags.StateFlag.State; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; - -import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin; -import net.goldtreeservers.worldguardextraflags.flags.Flags; - -public class WorldUtils -{ - public static void doUnloadChunkFlagCheck(World world) - { - for (ProtectedRegion region : WorldGuardExtraFlagsPlugin.getPlugin().getWorldGuardCommunicator().getRegionContainer().get(world).getRegions().values()) - { - if (region.getFlag(Flags.CHUNK_UNLOAD) == State.DENY) - { - WorldGuardExtraFlagsPlugin.getPlugin().getLogger().info("Loading chunks for region " + region.getId() + " located in " + world.getName() + " due to chunk-unload flag being deny"); - - BlockVector min = region.getMinimumPoint(); - BlockVector max = region.getMaximumPoint(); - - for(int x = min.getBlockX() << 16; x <= max.getBlockX() << 16; x++) - { - for(int z = max.getBlockZ() << 16; z <= max.getBlockZ() << 16; z++) - { - world.getChunkAt(x, z).load(true); - } - } - } - } - } -} diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/we/AbstractWorldEditFlagHandler.java b/Common/src/main/java/net/goldtreeservers/worldguardextraflags/we/AbstractWorldEditFlagHandler.java deleted file mode 100644 index 70a1ba0..0000000 --- a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/we/AbstractWorldEditFlagHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.goldtreeservers.worldguardextraflags.we; - -import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.WorldEditException; -import com.sk89q.worldedit.entity.Player; -import com.sk89q.worldedit.extent.AbstractDelegateExtent; -import com.sk89q.worldedit.extent.Extent; -import com.sk89q.worldedit.world.World; -import com.sk89q.worldedit.world.block.BlockState; -import com.sk89q.worldedit.world.block.BlockStateHolder; - -import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin; - -public abstract class AbstractWorldEditFlagHandler extends AbstractDelegateExtent -{ - protected final org.bukkit.World world; - protected final org.bukkit.entity.Player player; - - protected AbstractWorldEditFlagHandler(World world, Extent extent, Player player) - { - super(extent); - - this.world = WorldGuardExtraFlagsPlugin.getPlugin().getServer().getWorld(world.getName()); - this.player = WorldGuardExtraFlagsPlugin.getPlugin().getServer().getPlayer(player.getUniqueId()); - } - - public abstract boolean setBlock(Vector location, BlockState block) throws WorldEditException; - - //TODO: Prebuild list - @Override - public boolean setBlock(Vector location, @SuppressWarnings("rawtypes") BlockStateHolder block) throws WorldEditException - { - if (this.setBlock(location, block.toImmutableState())) - { - return super.setBlock(location, block); - } - - return false; - } -} diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/we/WorldEditFlagHandler.java b/Common/src/main/java/net/goldtreeservers/worldguardextraflags/we/WorldEditFlagHandler.java deleted file mode 100644 index a7cf7b6..0000000 --- a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/we/WorldEditFlagHandler.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.goldtreeservers.worldguardextraflags.we; - -import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.WorldEditException; -import com.sk89q.worldedit.entity.Player; -import com.sk89q.worldedit.extent.Extent; -import com.sk89q.worldedit.world.World; -import com.sk89q.worldedit.world.block.BlockState; -import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.StateFlag.State; - -import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin; -import net.goldtreeservers.worldguardextraflags.flags.Flags; -import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils; - -public class WorldEditFlagHandler extends AbstractWorldEditFlagHandler -{ - public WorldEditFlagHandler(World world, Extent extent, Player player) - { - super(world, extent, player); - } - - @Override - public boolean setBlock(Vector location, BlockState block) throws WorldEditException - { - ApplicableRegionSet regions = WorldGuardExtraFlagsPlugin.getPlugin().getWorldGuardCommunicator().getRegionContainer().get(this.world).getApplicableRegions(location); - - State state = WorldGuardUtils.queryState(this.player, this.world, regions.getRegions(), Flags.WORLDEDIT); - if (state != State.DENY) - { - return true; - } - - return false; - } -} diff --git a/Spigot/pom.xml b/Spigot/pom.xml index 1d14522..62d54de 100644 --- a/Spigot/pom.xml +++ b/Spigot/pom.xml @@ -3,7 +3,7 @@ net.goldtreeservers worldguardextraflags - 4.1.0 + 4.1.1 net.goldtreeservers.worldguardextraflags diff --git a/Spigot/src/main/resources/plugin.yml b/Spigot/src/main/resources/plugin.yml index f261ce8..ac05f59 100644 --- a/Spigot/src/main/resources/plugin.yml +++ b/Spigot/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: WorldGuardExtraFlags -version: 4.1.0 +version: 4.1.1 description: Adds more flags to WorldGuard to help manage your server easily! author: isokissa3 website: https://goldtreevers.net diff --git a/WG/pom.xml b/WG/pom.xml index 165a1fa..48c51d2 100644 --- a/WG/pom.xml +++ b/WG/pom.xml @@ -3,7 +3,7 @@ net.goldtreeservers worldguardextraflags - 4.1.0 + 4.1.1 net.goldtreeservers.worldguardextraflags @@ -18,11 +18,6 @@ sk89q-repo https://maven.sk89q.com/repo/ - - - elMakers - http://maven.elmakers.com/repository/ - @@ -34,14 +29,26 @@ com.sk89q.worldedit - worldedit - 7.0-SNAPSHOT + worldedit-core + 7.0.0-20181117.020138-26 + provided + + + com.sk89q.worldedit + worldedit-bukkit + 7.0.0-20181117.020138-26 + provided + + + com.sk89q.worldguard + worldguard-core + 7.0.0-20181117.063337-9 provided com.sk89q.worldguard worldguard-legacy - 7.0-SNAPSHOT + 7.0.0-20181117.063337-9 provided diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/Flags.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/Flags.java similarity index 85% rename from Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/Flags.java rename to WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/Flags.java index 4c29d86..14599af 100644 --- a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/Flags.java +++ b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/Flags.java @@ -12,23 +12,23 @@ import com.sk89q.worldguard.protection.flags.SetFlag; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.StringFlag; -import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin; import net.goldtreeservers.worldguardextraflags.flags.data.SoundData; import net.goldtreeservers.worldguardextraflags.flags.helpers.MaterialFlag; import net.goldtreeservers.worldguardextraflags.flags.helpers.PotionEffectFlag; import net.goldtreeservers.worldguardextraflags.flags.helpers.PotionEffectTypeFlag; import net.goldtreeservers.worldguardextraflags.flags.helpers.SoundDataFlag; +import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils; public final class Flags { public final static LocationFlag TELEPORT_ON_ENTRY = new LocationFlag("teleport-on-entry"); public final static LocationFlag TELEPORT_ON_EXIT = new LocationFlag("teleport-on-exit"); - public final static SetFlag COMMAND_ON_ENTRY = WorldGuardExtraFlagsPlugin.getPlugin().getWorldGuardCommunicator().getCustomSetFlag("command-on-entry", new CommandStringFlag(null)); - public final static SetFlag COMMAND_ON_EXIT = WorldGuardExtraFlagsPlugin.getPlugin().getWorldGuardCommunicator().getCustomSetFlag("command-on-exit", new CommandStringFlag(null)); + public final static SetFlag COMMAND_ON_ENTRY = WorldGuardUtils.getCommunicator().getCustomSetFlag("command-on-entry", new CommandStringFlag(null)); + public final static SetFlag COMMAND_ON_EXIT = WorldGuardUtils.getCommunicator().getCustomSetFlag("command-on-exit", new CommandStringFlag(null)); - public final static SetFlag CONSOLE_COMMAND_ON_ENTRY = WorldGuardExtraFlagsPlugin.getPlugin().getWorldGuardCommunicator().getCustomSetFlag("console-command-on-entry", new CommandStringFlag(null)); - public final static SetFlag CONSOLE_COMMAND_ON_EXIT = WorldGuardExtraFlagsPlugin.getPlugin().getWorldGuardCommunicator().getCustomSetFlag("console-command-on-exit", new CommandStringFlag(null)); + public final static SetFlag CONSOLE_COMMAND_ON_ENTRY = WorldGuardUtils.getCommunicator().getCustomSetFlag("console-command-on-entry", new CommandStringFlag(null)); + public final static SetFlag CONSOLE_COMMAND_ON_EXIT = WorldGuardUtils.getCommunicator().getCustomSetFlag("console-command-on-exit", new CommandStringFlag(null)); public final static DoubleFlag WALK_SPEED = new DoubleFlag("walk-speed"); diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/data/PotionEffectDetails.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/data/PotionEffectDetails.java similarity index 100% rename from Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/data/PotionEffectDetails.java rename to WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/data/PotionEffectDetails.java diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/data/SoundData.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/data/SoundData.java similarity index 100% rename from Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/data/SoundData.java rename to WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/data/SoundData.java diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/MaterialFlag.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/MaterialFlag.java similarity index 100% rename from Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/MaterialFlag.java rename to WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/MaterialFlag.java diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/PotionEffectFlag.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/PotionEffectFlag.java similarity index 100% rename from Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/PotionEffectFlag.java rename to WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/PotionEffectFlag.java diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/PotionEffectTypeFlag.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/PotionEffectTypeFlag.java similarity index 100% rename from Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/PotionEffectTypeFlag.java rename to WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/PotionEffectTypeFlag.java diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/SoundDataFlag.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/SoundDataFlag.java similarity index 100% rename from Common/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/SoundDataFlag.java rename to WG/src/main/java/net/goldtreeservers/worldguardextraflags/flags/helpers/SoundDataFlag.java diff --git a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/wg/WorldGuardUtils.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/WorldGuardUtils.java similarity index 73% rename from Common/src/main/java/net/goldtreeservers/worldguardextraflags/wg/WorldGuardUtils.java rename to WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/WorldGuardUtils.java index 24ebc47..6fc471e 100644 --- a/Common/src/main/java/net/goldtreeservers/worldguardextraflags/wg/WorldGuardUtils.java +++ b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/WorldGuardUtils.java @@ -16,18 +16,19 @@ import com.sk89q.worldguard.protection.flags.StateFlag.State; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.util.NormativeOrders; -import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin; +import lombok.Getter; +import lombok.Setter; import net.goldtreeservers.worldguardextraflags.wg.wrappers.WorldGuardCommunicator; -import net.goldtreeservers.worldguardextraflags.wg.wrappers.v6.WorldGuardSixCommunicator; -import net.goldtreeservers.worldguardextraflags.wg.wrappers.v7.WorldGuardSevenCommunicator; public class WorldGuardUtils { public static final String PREVENT_TELEPORT_LOOP_META = "WGEFP: TLP"; + @Getter @Setter private static WorldGuardCommunicator communicator; + private static LocalPlayer wrapPlayer(Player player) { - return WorldGuardExtraFlagsPlugin.getPlugin().getWorldGuardCommunicator().wrapPlayer(player); + return WorldGuardUtils.getCommunicator().wrapPlayer(player); } public static boolean hasBypass(Player player, World world, ProtectedRegion region, Flag flag) @@ -75,7 +76,7 @@ public class WorldGuardUtils NormativeOrders.sort(checkForRegions); - ProtectedRegion global = WorldGuardExtraFlagsPlugin.getPlugin().getWorldGuardCommunicator().getRegionContainer().get(world).getRegion(ProtectedRegion.GLOBAL_REGION); + ProtectedRegion global = WorldGuardUtils.getCommunicator().getRegionContainer().get(world).getRegion(ProtectedRegion.GLOBAL_REGION); if (global != null) //Global region can be null { if (WorldGuardUtils.hasBypass(player, world, global, flag)) //Lets do like this for now to reduce dublicated code @@ -86,33 +87,4 @@ public class WorldGuardUtils return new FlagValueCalculator(checkForRegions, global); } - - public static WorldGuardCommunicator createWorldGuardCommunicator() - { - try - { - Class.forName("com.sk89q.worldguard.WorldGuard"); //Only exists in WG 7 - - return new WorldGuardSevenCommunicator(); - } - catch (Throwable ignored) - { - - } - - try - { - Class clazz = Class.forName("com.sk89q.worldguard.bukkit.WorldGuardPlugin"); - if (clazz.getMethod("getFlagRegistry") != null) - { - return new WorldGuardSixCommunicator(); - } - } - catch (Throwable ignored) - { - ignored.printStackTrace(); - } - - return null; - } } diff --git a/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/AbstractRegionManagerWrapper.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/AbstractRegionManagerWrapper.java index 609e041..1811a39 100644 --- a/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/AbstractRegionManagerWrapper.java +++ b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/AbstractRegionManagerWrapper.java @@ -4,8 +4,6 @@ import java.util.Map; import org.bukkit.Location; -import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; @@ -23,17 +21,9 @@ public abstract class AbstractRegionManagerWrapper return this.regionManager.getRegion(id); } - public ApplicableRegionSet getApplicableRegions(Vector location) - { - return this.regionManager.getApplicableRegions(location); - } + public abstract ApplicableRegionSet getApplicableRegions(Location location); - public ApplicableRegionSet getApplicableRegions(Location location) - { - return this.getApplicableRegions(BukkitAdapter.asVector(location)); - } - - public ApplicableRegionSet getApplicableRegions(ProtectedCuboidRegion protectedCuboidRegion) + public ApplicableRegionSet getApplicableRegions(ProtectedCuboidRegion protectedCuboidRegion) { return this.regionManager.getApplicableRegions(protectedCuboidRegion); } diff --git a/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/WorldGuardCommunicator.java b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/WorldGuardCommunicator.java index cc6993b..7c3cd55 100644 --- a/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/WorldGuardCommunicator.java +++ b/WG/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/WorldGuardCommunicator.java @@ -2,6 +2,9 @@ package net.goldtreeservers.worldguardextraflags.wg.wrappers; import org.bukkit.entity.Player; +import com.sk89q.worldedit.extent.AbstractDelegateExtent; +import com.sk89q.worldedit.extent.Extent; +import com.sk89q.worldedit.world.World; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.SetFlag; @@ -20,4 +23,9 @@ public interface WorldGuardCommunicator public LocalPlayer wrapPlayer(Player player); public SetFlag getCustomSetFlag(String name, Flag flag); + + public AbstractDelegateExtent getWorldEditFlag(World world, Extent extent, com.sk89q.worldedit.entity.Player player); + + public void doUnloadChunkFlagCheck(org.bukkit.World world); + public boolean doUnloadChunkFlagCheck(org.bukkit.World world, org.bukkit.Chunk chunk); } diff --git a/WG6/pom.xml b/WG6/pom.xml index dc45e2d..4ab0d55 100644 --- a/WG6/pom.xml +++ b/WG6/pom.xml @@ -3,7 +3,7 @@ net.goldtreeservers worldguardextraflags - 4.1.0 + 4.1.1 net.goldtreeservers.worldguardextraflags @@ -39,6 +39,12 @@ 1.2 provided + + com.sk89q.worldedit + worldedit-bukkit + 6.1.3-SNAPSHOT + provided + com.sk89q.worldguard worldguard-legacy diff --git a/WG6/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v6/RegionManagerWrapper.java b/WG6/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v6/RegionManagerWrapper.java index e751bbc..6cdb2bd 100644 --- a/WG6/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v6/RegionManagerWrapper.java +++ b/WG6/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v6/RegionManagerWrapper.java @@ -1,5 +1,9 @@ package net.goldtreeservers.worldguardextraflags.wg.wrappers.v6; +import org.bukkit.Location; + +import com.sk89q.worldguard.bukkit.BukkitUtil; +import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.managers.RegionManager; import net.goldtreeservers.worldguardextraflags.wg.wrappers.AbstractRegionManagerWrapper; @@ -10,4 +14,10 @@ public class RegionManagerWrapper extends AbstractRegionManagerWrapper { super(regionManager); } + + @Override + public ApplicableRegionSet getApplicableRegions(Location location) + { + return this.regionManager.getApplicableRegions(BukkitUtil.toVector(location)); + } } diff --git a/WG6/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v6/WorldEditFlagHandler.java b/WG6/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v6/WorldEditFlagHandler.java new file mode 100644 index 0000000..0d1ec85 --- /dev/null +++ b/WG6/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v6/WorldEditFlagHandler.java @@ -0,0 +1,48 @@ +package net.goldtreeservers.worldguardextraflags.wg.wrappers.v6; + +import org.bukkit.Bukkit; + +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.WorldEditException; +import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.bukkit.BukkitWorld; +import com.sk89q.worldedit.entity.Player; +import com.sk89q.worldedit.extent.AbstractDelegateExtent; +import com.sk89q.worldedit.extent.Extent; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.flags.StateFlag.State; + +import net.goldtreeservers.worldguardextraflags.flags.Flags; +import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils; + +public class WorldEditFlagHandler extends AbstractDelegateExtent +{ + protected final World world; + protected final org.bukkit.entity.Player player; + + protected WorldEditFlagHandler(World world, Extent extent, Player player) + { + super(extent); + + this.world = world; + this.player = Bukkit.getPlayer(player.getUniqueId()); + } + + @Override + public boolean setBlock(Vector location, BaseBlock block) throws WorldEditException + { + org.bukkit.World world = ((BukkitWorld)this.world).getWorld(); + + ApplicableRegionSet regions = WorldGuardPlugin.inst().getRegionContainer().get(world).getApplicableRegions(location); + + State state = WorldGuardUtils.queryState(this.player, world, regions.getRegions(), Flags.WORLDEDIT); + if (state != State.DENY) + { + return super.setBlock(location, block); + } + + return false; + } +} diff --git a/WG6/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v6/WorldGuardSixCommunicator.java b/WG6/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v6/WorldGuardSixCommunicator.java index 7ca399c..15f36a7 100644 --- a/WG6/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v6/WorldGuardSixCommunicator.java +++ b/WG6/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v6/WorldGuardSixCommunicator.java @@ -1,13 +1,22 @@ package net.goldtreeservers.worldguardextraflags.wg.wrappers.v6; +import org.bukkit.Chunk; import org.bukkit.entity.Player; +import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldedit.extent.AbstractDelegateExtent; +import com.sk89q.worldedit.extent.Extent; +import com.sk89q.worldedit.world.World; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.SetFlag; +import com.sk89q.worldguard.protection.flags.StateFlag.State; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; +import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import net.goldtreeservers.worldguardextraflags.flags.Flags; import net.goldtreeservers.worldguardextraflags.wg.wrappers.AbstractRegionContainerWrapper; import net.goldtreeservers.worldguardextraflags.wg.wrappers.AbstractSessionManagerWrapper; import net.goldtreeservers.worldguardextraflags.wg.wrappers.WorldGuardCommunicator; @@ -58,4 +67,47 @@ public class WorldGuardSixCommunicator implements WorldGuardCommunicator { return new CustomSetFlag(name, flag); } + + @Override + public AbstractDelegateExtent getWorldEditFlag(World world, Extent extent, com.sk89q.worldedit.entity.Player player) + { + return new WorldEditFlagHandler(world, extent, player); + } + + @Override + public void doUnloadChunkFlagCheck(org.bukkit.World world) + { + for (ProtectedRegion region : this.getRegionContainer().get(world).getRegions().values()) + { + if (region.getFlag(Flags.CHUNK_UNLOAD) == State.DENY) + { + System.out.println("Loading chunks for region " + region.getId() + " located in " + world.getName() + " due to chunk-unload flag being deny"); + + BlockVector min = region.getMinimumPoint(); + BlockVector max = region.getMaximumPoint(); + + for(int x = min.getBlockX() << 16; x <= max.getBlockX() << 16; x++) + { + for(int z = max.getBlockZ() << 16; z <= max.getBlockZ() << 16; z++) + { + world.getChunkAt(x, z).load(true); + } + } + } + } + } + + @Override + public boolean doUnloadChunkFlagCheck(org.bukkit.World world, Chunk chunk) + { + for (ProtectedRegion region : this.getRegionContainer().get(world).getApplicableRegions(new ProtectedCuboidRegion("UnloadChunkFlagTester", new BlockVector(chunk.getX() * 16, 0, chunk.getZ() * 16), new BlockVector(chunk.getX() * 16 + 15, 256, chunk.getZ() * 16 + 15)))) + { + if (region.getFlag(Flags.CHUNK_UNLOAD) == State.DENY) + { + return false; + } + } + + return true; + } } diff --git a/WG7/pom.xml b/WG7/pom.xml index c53d124..76cf3d7 100644 --- a/WG7/pom.xml +++ b/WG7/pom.xml @@ -3,7 +3,7 @@ net.goldtreeservers worldguardextraflags - 4.1.0 + 4.1.1 net.goldtreeservers.worldguardextraflags @@ -18,11 +18,6 @@ sk89q-repo https://maven.sk89q.com/repo/ - - - elMakers - http://maven.elmakers.com/repository/ - @@ -40,14 +35,26 @@ com.sk89q.worldedit - worldedit - 7.0-SNAPSHOT + worldedit-core + 7.0.0-20181117.020138-26 + provided + + + com.sk89q.worldedit + worldedit-bukkit + 7.0.0-20181117.020138-26 + provided + + + com.sk89q.worldguard + worldguard-core + 7.0.0-20181117.063337-9 provided com.sk89q.worldguard worldguard-legacy - 7.0-SNAPSHOT + 7.0.0-20181117.063337-9 provided diff --git a/WG7/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v7/RegionManagerWrapper.java b/WG7/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v7/RegionManagerWrapper.java index 6f14810..9f0c869 100644 --- a/WG7/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v7/RegionManagerWrapper.java +++ b/WG7/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v7/RegionManagerWrapper.java @@ -1,5 +1,9 @@ package net.goldtreeservers.worldguardextraflags.wg.wrappers.v7; +import org.bukkit.Location; + +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.managers.RegionManager; import net.goldtreeservers.worldguardextraflags.wg.wrappers.AbstractRegionManagerWrapper; @@ -10,4 +14,10 @@ public class RegionManagerWrapper extends AbstractRegionManagerWrapper { super(regionManager); } + + @Override + public ApplicableRegionSet getApplicableRegions(Location location) + { + return this.regionManager.getApplicableRegions(BukkitAdapter.asBlockVector(location)); + } } diff --git a/WG7/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v7/WorldEditFlagHandler.java b/WG7/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v7/WorldEditFlagHandler.java new file mode 100644 index 0000000..90e9318 --- /dev/null +++ b/WG7/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v7/WorldEditFlagHandler.java @@ -0,0 +1,46 @@ +package net.goldtreeservers.worldguardextraflags.wg.wrappers.v7; + +import org.bukkit.Bukkit; + +import com.sk89q.worldedit.WorldEditException; +import com.sk89q.worldedit.bukkit.BukkitWorld; +import com.sk89q.worldedit.entity.Player; +import com.sk89q.worldedit.extent.AbstractDelegateExtent; +import com.sk89q.worldedit.extent.Extent; +import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.world.World; +import com.sk89q.worldedit.world.block.BlockStateHolder; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.flags.StateFlag.State; + +import net.goldtreeservers.worldguardextraflags.flags.Flags; +import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils; + +public class WorldEditFlagHandler extends AbstractDelegateExtent +{ + protected final World world; + protected final org.bukkit.entity.Player player; + + public WorldEditFlagHandler(World world, Extent extent, Player player) + { + super(extent); + + this.world = world; + this.player = Bukkit.getPlayer(player.getUniqueId()); + } + + @Override + public boolean setBlock(BlockVector3 location, BlockStateHolder block) throws WorldEditException + { + ApplicableRegionSet regions = WorldGuard.getInstance().getPlatform().getRegionContainer().get(this.world).getApplicableRegions(location); + + State state = WorldGuardUtils.queryState(this.player, ((BukkitWorld)this.world).getWorld(), regions.getRegions(), Flags.WORLDEDIT); + if (state != State.DENY) + { + return super.setBlock(location, block); + } + + return false; + } +} diff --git a/WG7/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v7/WorldGuardSevenCommunicator.java b/WG7/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v7/WorldGuardSevenCommunicator.java index 43f3490..4e441e6 100644 --- a/WG7/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v7/WorldGuardSevenCommunicator.java +++ b/WG7/src/main/java/net/goldtreeservers/worldguardextraflags/wg/wrappers/v7/WorldGuardSevenCommunicator.java @@ -1,14 +1,23 @@ package net.goldtreeservers.worldguardextraflags.wg.wrappers.v7; +import org.bukkit.Chunk; import org.bukkit.entity.Player; +import com.sk89q.worldedit.extent.AbstractDelegateExtent; +import com.sk89q.worldedit.extent.Extent; +import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.world.World; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.SetFlag; +import com.sk89q.worldguard.protection.flags.StateFlag.State; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; +import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import net.goldtreeservers.worldguardextraflags.flags.Flags; import net.goldtreeservers.worldguardextraflags.wg.wrappers.AbstractRegionContainerWrapper; import net.goldtreeservers.worldguardextraflags.wg.wrappers.AbstractSessionManagerWrapper; import net.goldtreeservers.worldguardextraflags.wg.wrappers.WorldGuardCommunicator; @@ -59,4 +68,47 @@ public class WorldGuardSevenCommunicator implements WorldGuardCommunicator { return new CustomSetFlag(name, flag); } + + @Override + public AbstractDelegateExtent getWorldEditFlag(World world, Extent extent, com.sk89q.worldedit.entity.Player player) + { + return new WorldEditFlagHandler(world, extent, player); + } + + @Override + public void doUnloadChunkFlagCheck(org.bukkit.World world) + { + for (ProtectedRegion region : this.getRegionContainer().get(world).getRegions().values()) + { + if (region.getFlag(Flags.CHUNK_UNLOAD) == State.DENY) + { + System.out.println("Loading chunks for region " + region.getId() + " located in " + world.getName() + " due to chunk-unload flag being deny"); + + BlockVector3 min = region.getMinimumPoint(); + BlockVector3 max = region.getMaximumPoint(); + + for(int x = min.getBlockX() << 16; x <= max.getBlockX() << 16; x++) + { + for(int z = max.getBlockZ() << 16; z <= max.getBlockZ() << 16; z++) + { + world.getChunkAt(x, z).load(true); + } + } + } + } + } + + @Override + public boolean doUnloadChunkFlagCheck(org.bukkit.World world, Chunk chunk) + { + for (ProtectedRegion region : this.getRegionContainer().get(world).getApplicableRegions(new ProtectedCuboidRegion("UnloadChunkFlagTester", BlockVector3.at(chunk.getX() * 16, 0, chunk.getZ() * 16), BlockVector3.at(chunk.getX() * 16 + 15, 256, chunk.getZ() * 16 + 15)))) + { + if (region.getFlag(Flags.CHUNK_UNLOAD) == State.DENY) + { + return false; + } + } + + return true; + } } diff --git a/pom.xml b/pom.xml index 9abbd49..95ad396 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ net.goldtreeservers worldguardextraflags WorldGuardExtraFlags - 4.1.0 + 4.1.1 pom