From acb439e3d9d9e3098181328a983e4d4a119e46e7 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Tue, 21 Dec 2021 22:01:59 +0100 Subject: [PATCH 1/5] Limit block breaking to team area Signed-off-by: Lixfel --- .../de/steamwar/fightsystem/listener/TeamArea.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/TeamArea.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/TeamArea.java index 75a1fd8..383acf2 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/TeamArea.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/TeamArea.java @@ -34,6 +34,7 @@ import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; @@ -77,6 +78,16 @@ public class TeamArea implements Listener { FightSystem.getMessage().sendPrefixless("NO_BLOCK_PLACE", player, ChatMessageType.ACTION_BAR); } + @EventHandler + public void blockBreak(BlockBreakEvent event) { + Block block = event.getBlock(); + if(Config.BlueExtendRegion.inRegion(block) || Config.RedExtendRegion.inRegion(block)) + return; + + event.setCancelled(true); + FightSystem.getMessage().sendPrefixless("NO_BLOCK_BREAK", event.getPlayer(), ChatMessageType.ACTION_BAR); + } + private void checkInTeamRegion(PlayerMoveEvent event, FightTeam team, Player player, FightTeam playerTeam) { boolean spectator = player.getGameMode() == GameMode.SPECTATOR; if(!spectator && playerTeam != null && playerTeam.canPlayerEntern(player)) From 27056e4842f5ff0f1a91eb007d57fa016635e154 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Wed, 22 Dec 2021 12:17:33 +0100 Subject: [PATCH 2/5] Limit block breaking below ground Signed-off-by: Lixfel --- .../src/de/steamwar/fightsystem/listener/TeamArea.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/TeamArea.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/TeamArea.java index 383acf2..5dfa2a4 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/TeamArea.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/TeamArea.java @@ -81,7 +81,7 @@ public class TeamArea implements Listener { @EventHandler public void blockBreak(BlockBreakEvent event) { Block block = event.getBlock(); - if(Config.BlueExtendRegion.inRegion(block) || Config.RedExtendRegion.inRegion(block)) + if(Config.BluePasteRegion.getMinY() >= block.getY()) return; event.setCancelled(true); From 2086366debd2fae1ed99fb645608f7354ff58c07 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Wed, 22 Dec 2021 12:40:41 +0100 Subject: [PATCH 3/5] Allow stationary moving pistons during preparation Signed-off-by: Lixfel --- .../fightsystem/listener/PrepareSchem.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/PrepareSchem.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/PrepareSchem.java index 8efd4ad..550394b 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/PrepareSchem.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/PrepareSchem.java @@ -26,6 +26,7 @@ import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.states.FightState; +import de.steamwar.fightsystem.states.OneShotStateDependent; import de.steamwar.fightsystem.states.StateDependentListener; import de.steamwar.fightsystem.utils.FlatteningWrapper; import de.steamwar.fightsystem.utils.Region; @@ -37,10 +38,25 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.util.Vector; + +import java.util.HashSet; +import java.util.Set; public class PrepareSchem implements Listener { + private final Set stationaryMovingPistons = new HashSet<>(); + public PrepareSchem() { + new OneShotStateDependent(ArenaMode.Prepare, FightState.PostSchemSetup, () -> Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), () -> { + stationaryMovingPistons.clear(); + World world = Bukkit.getWorlds().get(0); + Fight.getUnrotated().getSchemRegion().forEach((x, y, z) -> { + if(FlatteningWrapper.impl.checkPistonMoving(world.getBlockAt(x, y, z))) + stationaryMovingPistons.add(new Vector(x, y, z)); + }); + }, 1)); + new StateDependentListener(ArenaMode.Prepare, FightState.Setup, this){ @Override public void disable() { @@ -60,7 +76,7 @@ public class PrepareSchem implements Listener { try{ region.forEach((x, y, z) -> { - if(FlatteningWrapper.impl.checkPistonMoving(world.getBlockAt(x, y, z))){ + if(FlatteningWrapper.impl.checkPistonMoving(world.getBlockAt(x, y, z)) && !stationaryMovingPistons.contains(new Vector(x, y, z))){ FightSystem.getMessage().broadcast("PREPARE_ACTIVE_PISTON"); Bukkit.shutdown(); throw new IllegalStateException(); From bb3114ba6165863caa17af76ad930b1a46bdd1ca Mon Sep 17 00:00:00 2001 From: Lixfel Date: Thu, 23 Dec 2021 12:09:27 +0100 Subject: [PATCH 4/5] Fix direction Signed-off-by: Lixfel --- .../src/de/steamwar/fightsystem/listener/TeamArea.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/TeamArea.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/TeamArea.java index 5dfa2a4..2dfaf34 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/TeamArea.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/TeamArea.java @@ -81,7 +81,7 @@ public class TeamArea implements Listener { @EventHandler public void blockBreak(BlockBreakEvent event) { Block block = event.getBlock(); - if(Config.BluePasteRegion.getMinY() >= block.getY()) + if(Config.BluePasteRegion.getMinY() <= block.getY()) return; event.setCancelled(true); From cd8a3d3eb56f0b088f0661894688adfa4f9d5605 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Thu, 23 Dec 2021 16:19:58 +0100 Subject: [PATCH 5/5] Fix pistons destroying blocks Signed-off-by: Lixfel --- .../src/de/steamwar/fightsystem/listener/PistonListener.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/PistonListener.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/PistonListener.java index f49257c..1587f24 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/PistonListener.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/PistonListener.java @@ -25,6 +25,7 @@ import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentListener; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.block.PistonMoveReaction; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockPistonExtendEvent; @@ -44,7 +45,8 @@ public class PistonListener implements Listener { public void handlePistonExtend(BlockPistonExtendEvent e){ BlockFace face = e.getDirection(); for(Block block : e.getBlocks()){ - if(!Config.BlueExtendRegion.inRegion(block.getRelative(face)) && !Config.RedExtendRegion.inRegion(block.getRelative(face))){ + Block target = block.getRelative(face); + if(!Config.BlueExtendRegion.inRegion(target) && !Config.RedExtendRegion.inRegion(target) && block.getPistonMoveReaction() != PistonMoveReaction.BREAK) { e.setCancelled(true); return; }