From 45727808273d85c5703995a2c20e47147da598f7 Mon Sep 17 00:00:00 2001 From: aromaa Date: Sun, 13 Dec 2020 19:36:52 +0200 Subject: [PATCH] Disable block specifig flags on WG 7, fixes #152 --- .../WorldGuardExtraFlagsPlugin.java | 13 ++- .../listeners/BlockListener.java | 82 ------------------- .../wg/wrappers/WorldGuardCommunicator.java | 14 +++- .../v6/WorldGuardSixCommunicator.java | 6 ++ .../v7/WorldGuardSevenCommunicator.java | 6 ++ 5 files changed, 28 insertions(+), 93 deletions(-) diff --git a/Spigot/src/main/java/net/goldtreeservers/worldguardextraflags/WorldGuardExtraFlagsPlugin.java b/Spigot/src/main/java/net/goldtreeservers/worldguardextraflags/WorldGuardExtraFlagsPlugin.java index 4c08914..30644cc 100644 --- a/Spigot/src/main/java/net/goldtreeservers/worldguardextraflags/WorldGuardExtraFlagsPlugin.java +++ b/Spigot/src/main/java/net/goldtreeservers/worldguardextraflags/WorldGuardExtraFlagsPlugin.java @@ -8,6 +8,7 @@ import java.util.Set; import java.util.concurrent.Callable; import java.util.stream.Collectors; +import net.goldtreeservers.worldguardextraflags.listeners.*; import org.bstats.bukkit.Metrics; import org.bukkit.World; import org.bukkit.block.BlockState; @@ -23,13 +24,6 @@ import lombok.Getter; import net.goldtreeservers.worldguardextraflags.essentials.EssentialsHelper; import net.goldtreeservers.worldguardextraflags.fawe.FAWEHelper; import net.goldtreeservers.worldguardextraflags.flags.Flags; -import net.goldtreeservers.worldguardextraflags.listeners.BlockListener; -import net.goldtreeservers.worldguardextraflags.listeners.EntityListener; -import net.goldtreeservers.worldguardextraflags.listeners.EntityListenerOnePointNine; -import net.goldtreeservers.worldguardextraflags.listeners.EntityPotionEffectEventListener; -import net.goldtreeservers.worldguardextraflags.listeners.PlayerListener; -import net.goldtreeservers.worldguardextraflags.listeners.WorldEditListener; -import net.goldtreeservers.worldguardextraflags.listeners.WorldListener; import net.goldtreeservers.worldguardextraflags.protocollib.ProtocolLibHelper; import net.goldtreeservers.worldguardextraflags.utils.SupportedFeatures; import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils; @@ -143,6 +137,11 @@ public class WorldGuardExtraFlagsPlugin extends AbstractWorldGuardExtraFlagsPlug this.getServer().getPluginManager().registerEvents(new PlayerListener(this), this); this.getServer().getPluginManager().registerEvents(new BlockListener(this), this); this.getServer().getPluginManager().registerEvents(new WorldListener(this), this); + + if (this.worldGuardCommunicator.isLegacy()) + { + this.getServer().getPluginManager().registerEvents(new BlockListenerWG(this), this); + } try { diff --git a/Spigot/src/main/java/net/goldtreeservers/worldguardextraflags/listeners/BlockListener.java b/Spigot/src/main/java/net/goldtreeservers/worldguardextraflags/listeners/BlockListener.java index 92808b2..b0e2104 100644 --- a/Spigot/src/main/java/net/goldtreeservers/worldguardextraflags/listeners/BlockListener.java +++ b/Spigot/src/main/java/net/goldtreeservers/worldguardextraflags/listeners/BlockListener.java @@ -59,86 +59,4 @@ public class BlockListener implements Listener } } } - - //TODO: Figure out something better for this - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false) - public void onBlockPlaceEvent(PlaceBlockEvent event) - { - Result originalResult = event.getResult(); - Object cause = event.getCause().getRootCause(); - - if (cause instanceof Player) - { - Player player = (Player)cause; - - for(Block block : event.getBlocks()) - { - Material type = block.getType(); - if (type == Material.AIR) //Workaround for https://github.com/aromaa/WorldGuardExtraFlagsPlugin/issues/12 - { - type = event.getEffectiveMaterial(); - } - - ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(block.getLocation()); - - Set state = WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.ALLOW_BLOCK_PLACE); - if (state != null && state.contains(type)) - { - event.setResult(Result.ALLOW); - } - else - { - Set state2 = WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.DENY_BLOCK_PLACE); - if (state2 != null && state2.contains(type)) - { - event.setResult(Result.DENY); - return; - } - else - { - event.setResult(originalResult); - return; - } - } - } - } - } - - //TODO: Figure out something better for this - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false) - public void onBlockBreakEvent(BreakBlockEvent event) - { - Result originalResult = event.getResult(); - Object cause = event.getCause().getRootCause(); - - if (cause instanceof Player) - { - Player player = (Player)cause; - - for(Block block : event.getBlocks()) - { - ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(block.getLocation()); - - Set state = WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.ALLOW_BLOCK_BREAK); - if (state != null && state.contains(block.getType())) - { - event.setResult(Result.ALLOW); - } - else - { - Set state2 = WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.DENY_BLOCK_BREAK); - if (state2 != null && state2.contains(block.getType())) - { - event.setResult(Result.DENY); - return; - } - else - { - event.setResult(originalResult); - return; - } - } - } - } - } } 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 4329044..52a4df8 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 @@ -54,14 +54,18 @@ public interface WorldGuardCommunicator flagRegistry.register(Flags.MYTHICMOB_EGGS); flagRegistry.register(Flags.FROSTWALKER); flagRegistry.register(Flags.NETHER_PORTALS); - flagRegistry.register(Flags.ALLOW_BLOCK_PLACE); - flagRegistry.register(Flags.DENY_BLOCK_PLACE); - flagRegistry.register(Flags.ALLOW_BLOCK_BREAK); - flagRegistry.register(Flags.DENY_BLOCK_BREAK); flagRegistry.register(Flags.GLIDE); flagRegistry.register(Flags.CHUNK_UNLOAD); flagRegistry.register(Flags.ITEM_DURABILITY); flagRegistry.register(Flags.JOIN_LOCATION); + + if (this.isLegacy()) + { + flagRegistry.register(Flags.ALLOW_BLOCK_PLACE); + flagRegistry.register(Flags.DENY_BLOCK_PLACE); + flagRegistry.register(Flags.ALLOW_BLOCK_BREAK); + flagRegistry.register(Flags.DENY_BLOCK_BREAK); + } } default public void onEnable(Plugin plugin) throws Exception @@ -82,6 +86,8 @@ public interface WorldGuardCommunicator sessionManager.registerHandler(PlaySoundsFlagHandler.FACTORY(plugin)); sessionManager.registerHandler(GlideFlagHandler.FACTORY(plugin)); } + + public boolean isLegacy(); public FlagRegistry getFlagRegistry(); 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 f35cdea..efd9c65 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 @@ -42,6 +42,12 @@ public class WorldGuardSixCommunicator implements WorldGuardCommunicator WorldGuardCommunicator.super.onEnable(plugin); } + @Override + public boolean isLegacy() + { + return true; + } + @Override public FlagRegistry getFlagRegistry() { 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 ecd52de..751c16d 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 @@ -57,6 +57,12 @@ public class WorldGuardSevenCommunicator implements WorldGuardCommunicator WorldGuardCommunicator.super.onEnable(plugin); } + @Override + public boolean isLegacy() + { + return false; + } + @Override public FlagRegistry getFlagRegistry() {