From 9fbe89c0b428c59a381fea02ef1486de66562325 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 26 Aug 2024 16:19:00 +0200 Subject: [PATCH 1/5] Add #8 --- .../movecraft/worldguard/CustomFlags.java | 2 ++ .../listener/ExplosionListener.java | 33 +++++++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/countercraft/movecraft/worldguard/CustomFlags.java b/src/main/java/net/countercraft/movecraft/worldguard/CustomFlags.java index 179004e..3c9dbc8 100644 --- a/src/main/java/net/countercraft/movecraft/worldguard/CustomFlags.java +++ b/src/main/java/net/countercraft/movecraft/worldguard/CustomFlags.java @@ -13,6 +13,7 @@ public class CustomFlags { public static final StateFlag ALLOW_CRAFT_SINK = new StateFlag("allow-craft-sink", false); public static final StateFlag ALLOW_CRAFT_TRANSLATE = new StateFlag("allow-craft-translate", false); public static final StateFlag ALLOW_CRAFT_REPAIR = new StateFlag("allow-craft-repair", false); + public static final StateFlag ONLY_DAMAGE_PILOTED_CRAFTS = new StateFlag("only-damage-piloted-crafts", false); public static void register() { try { @@ -23,6 +24,7 @@ public static void register() { registry.register(ALLOW_CRAFT_SINK); registry.register(ALLOW_CRAFT_TRANSLATE); registry.register(ALLOW_CRAFT_REPAIR); + registry.register(ONLY_DAMAGE_PILOTED_CRAFTS); } catch (Exception e) { MovecraftWorldGuard.getInstance().getLogger().log( diff --git a/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java b/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java index e883b8f..3d23d2d 100644 --- a/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java +++ b/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java @@ -1,25 +1,46 @@ package net.countercraft.movecraft.worldguard.listener; import com.sk89q.worldguard.protection.flags.Flags; +import net.countercraft.movecraft.MovecraftLocation; +import net.countercraft.movecraft.craft.CraftManager; import net.countercraft.movecraft.events.ExplosionEvent; +import net.countercraft.movecraft.worldguard.CustomFlags; import net.countercraft.movecraft.worldguard.MovecraftWorldGuard; +import net.countercraft.movecraft.worldguard.utils.WorldGuardUtils; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.Location; public class ExplosionListener implements Listener { @EventHandler public void onExplosion(ExplosionEvent e) { - switch (MovecraftWorldGuard.getInstance().getWGUtils().getState( - null, e.getExplosionLocation(), Flags.OTHER_EXPLOSION)) { - case ALLOW: - case NONE: - break; // Other-explosion is allowed + var wgUtils = MovecraftWorldGuard.getInstance().getWGUtils(); + Location explosionLocation = e.getExplosionLocation(); + + switch (wgUtils.getState(null, explosionLocation, Flags.OTHER_EXPLOSION)) { case DENY: // Other-explosion is not allowed e.setCancelled(true); return; - default: + case ALLOW: // Other-explosion is allowed + case NONE: break; } + + WorldGuardUtils.State onlyDamagePilotedCrafts = wgUtils.getState(null, explosionLocation, CustomFlags.ONLY_DAMAGE_PILOTED_CRAFTS); + if (onlyDamagePilotedCrafts != WorldGuardUtils.State.ALLOW) { + return; + } + + MovecraftLocation movecraftLocation = new MovecraftLocation(explosionLocation.getBlockX(), explosionLocation.getBlockY(), explosionLocation.getBlockZ()); + boolean explodingOnCraft = CraftManager.getInstance().getCrafts().stream().anyMatch(it -> { + if (it.getWorld() != explosionLocation.getWorld()) { + return false; + } + + return it.getHitBox().contains(movecraftLocation); + }); + + e.setCancelled(!explodingOnCraft); } } From 267e4dad7d2f82dc7749c12e2bfd65e3f24886b9 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 26 Aug 2024 16:25:17 +0200 Subject: [PATCH 2/5] Simplify --- .../movecraft/worldguard/listener/ExplosionListener.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java b/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java index 3d23d2d..cb7b322 100644 --- a/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java +++ b/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java @@ -33,13 +33,7 @@ public void onExplosion(ExplosionEvent e) { } MovecraftLocation movecraftLocation = new MovecraftLocation(explosionLocation.getBlockX(), explosionLocation.getBlockY(), explosionLocation.getBlockZ()); - boolean explodingOnCraft = CraftManager.getInstance().getCrafts().stream().anyMatch(it -> { - if (it.getWorld() != explosionLocation.getWorld()) { - return false; - } - - return it.getHitBox().contains(movecraftLocation); - }); + boolean explodingOnCraft = CraftManager.getInstance().getCraftsInWorld(explosionLocation.getWorld()).stream().anyMatch(it -> it.getHitBox().contains(movecraftLocation)); e.setCancelled(!explodingOnCraft); } From dc6c21ed6b170fb31cc10a3b954bc8432d583dc7 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 26 Aug 2024 16:32:37 +0200 Subject: [PATCH 3/5] Add burn listener --- .../worldguard/MovecraftWorldGuard.java | 1 + .../worldguard/listener/BurnListener.java | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/main/java/net/countercraft/movecraft/worldguard/listener/BurnListener.java diff --git a/src/main/java/net/countercraft/movecraft/worldguard/MovecraftWorldGuard.java b/src/main/java/net/countercraft/movecraft/worldguard/MovecraftWorldGuard.java index e81c901..b7831a8 100644 --- a/src/main/java/net/countercraft/movecraft/worldguard/MovecraftWorldGuard.java +++ b/src/main/java/net/countercraft/movecraft/worldguard/MovecraftWorldGuard.java @@ -72,6 +72,7 @@ public void onEnable() { getServer().getPluginManager().registerEvents(new CraftSinkListener(), this); getServer().getPluginManager().registerEvents(new CraftTranslateListener(), this); getServer().getPluginManager().registerEvents(new ExplosionListener(), this); + getServer().getPluginManager().registerEvents(new BurnListener(), this); } public WorldGuardUtils getWGUtils() { diff --git a/src/main/java/net/countercraft/movecraft/worldguard/listener/BurnListener.java b/src/main/java/net/countercraft/movecraft/worldguard/listener/BurnListener.java new file mode 100644 index 0000000..abd0fc9 --- /dev/null +++ b/src/main/java/net/countercraft/movecraft/worldguard/listener/BurnListener.java @@ -0,0 +1,29 @@ +package net.countercraft.movecraft.worldguard.listener; + +import net.countercraft.movecraft.MovecraftLocation; +import net.countercraft.movecraft.craft.CraftManager; +import net.countercraft.movecraft.worldguard.CustomFlags; +import net.countercraft.movecraft.worldguard.MovecraftWorldGuard; +import net.countercraft.movecraft.worldguard.utils.WorldGuardUtils; +import org.bukkit.Location; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBurnEvent; + +public class BurnListener implements Listener { + @EventHandler + public void onBurn(BlockBurnEvent e) { + Location location = e.getBlock().getLocation(); + + var wgUtils = MovecraftWorldGuard.getInstance().getWGUtils(); + WorldGuardUtils.State onlyDamagePilotedCrafts = wgUtils.getState(null, location, CustomFlags.ONLY_DAMAGE_PILOTED_CRAFTS); + if (onlyDamagePilotedCrafts != WorldGuardUtils.State.ALLOW) { + return; + } + + MovecraftLocation movecraftLocation = new MovecraftLocation(location.getBlockX(), location.getBlockY(), location.getBlockZ()); + boolean burningCraft = CraftManager.getInstance().getCraftsInWorld(location.getWorld()).stream().anyMatch(it -> it.getHitBox().contains(movecraftLocation)); + + e.setCancelled(!burningCraft); + } +} From a9b07c2da70bb5f2a07fccaee07d7a738639f500 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 26 Aug 2024 23:23:58 +0200 Subject: [PATCH 4/5] revert switch --- .../movecraft/worldguard/listener/ExplosionListener.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java b/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java index cb7b322..c197c3c 100644 --- a/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java +++ b/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java @@ -17,13 +17,15 @@ public void onExplosion(ExplosionEvent e) { var wgUtils = MovecraftWorldGuard.getInstance().getWGUtils(); Location explosionLocation = e.getExplosionLocation(); - switch (wgUtils.getState(null, explosionLocation, Flags.OTHER_EXPLOSION)) { + switch (wgUtils.getState(null, e.getExplosionLocation(), Flags.OTHER_EXPLOSION)) { + case ALLOW: + case NONE: + break; // Other-explosion is allowed case DENY: // Other-explosion is not allowed e.setCancelled(true); return; - case ALLOW: // Other-explosion is allowed - case NONE: + default: break; } From 917a72a135326b8c878dd0e3cf5195336183a366 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 26 Aug 2024 23:38:53 +0200 Subject: [PATCH 5/5] Use mathUtils to convert location --- .../movecraft/worldguard/listener/BurnListener.java | 3 ++- .../movecraft/worldguard/listener/ExplosionListener.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/countercraft/movecraft/worldguard/listener/BurnListener.java b/src/main/java/net/countercraft/movecraft/worldguard/listener/BurnListener.java index abd0fc9..a5a11a9 100644 --- a/src/main/java/net/countercraft/movecraft/worldguard/listener/BurnListener.java +++ b/src/main/java/net/countercraft/movecraft/worldguard/listener/BurnListener.java @@ -2,6 +2,7 @@ import net.countercraft.movecraft.MovecraftLocation; import net.countercraft.movecraft.craft.CraftManager; +import net.countercraft.movecraft.util.MathUtils; import net.countercraft.movecraft.worldguard.CustomFlags; import net.countercraft.movecraft.worldguard.MovecraftWorldGuard; import net.countercraft.movecraft.worldguard.utils.WorldGuardUtils; @@ -21,7 +22,7 @@ public void onBurn(BlockBurnEvent e) { return; } - MovecraftLocation movecraftLocation = new MovecraftLocation(location.getBlockX(), location.getBlockY(), location.getBlockZ()); + MovecraftLocation movecraftLocation = MathUtils.bukkit2MovecraftLoc(location); boolean burningCraft = CraftManager.getInstance().getCraftsInWorld(location.getWorld()).stream().anyMatch(it -> it.getHitBox().contains(movecraftLocation)); e.setCancelled(!burningCraft); diff --git a/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java b/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java index c197c3c..9ddf3bb 100644 --- a/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java +++ b/src/main/java/net/countercraft/movecraft/worldguard/listener/ExplosionListener.java @@ -4,6 +4,7 @@ import net.countercraft.movecraft.MovecraftLocation; import net.countercraft.movecraft.craft.CraftManager; import net.countercraft.movecraft.events.ExplosionEvent; +import net.countercraft.movecraft.util.MathUtils; import net.countercraft.movecraft.worldguard.CustomFlags; import net.countercraft.movecraft.worldguard.MovecraftWorldGuard; import net.countercraft.movecraft.worldguard.utils.WorldGuardUtils; @@ -34,7 +35,7 @@ public void onExplosion(ExplosionEvent e) { return; } - MovecraftLocation movecraftLocation = new MovecraftLocation(explosionLocation.getBlockX(), explosionLocation.getBlockY(), explosionLocation.getBlockZ()); + MovecraftLocation movecraftLocation = MathUtils.bukkit2MovecraftLoc(explosionLocation); boolean explodingOnCraft = CraftManager.getInstance().getCraftsInWorld(explosionLocation.getWorld()).stream().anyMatch(it -> it.getHitBox().contains(movecraftLocation)); e.setCancelled(!explodingOnCraft);