From 85687c86b56c53950304ce76c3d2d1542a018d61 Mon Sep 17 00:00:00 2001 From: Andreas Troelsen Date: Thu, 19 Jul 2018 02:01:41 +0200 Subject: [PATCH] Prevent snow and ice from melting in arenas. The block fade event is called when a block fades from one state to another, such as when snow melts and becomes air, or ice melts and becomes water. Cancelling it solves the issue of snow and ice melting in arenas. Fixes #249. --- .../com/garbagemule/MobArena/ArenaListener.java | 16 ++++++++++++++++ .../MobArena/listeners/MAGlobalListener.java | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/src/main/java/com/garbagemule/MobArena/ArenaListener.java b/src/main/java/com/garbagemule/MobArena/ArenaListener.java index c12b916..68d437e 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaListener.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaListener.java @@ -43,6 +43,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockEvent; +import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.event.block.BlockFormEvent; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockIgniteEvent; @@ -334,6 +335,21 @@ public class ArenaListener arena.addBlock(event.getBlock()); } + public void onBlockFade(BlockFadeEvent event) { + if (!protect) { + return; + } + if (!arena.getRegion().contains(event.getBlock().getLocation())) { + return; + } + switch (event.getBlock().getType()) { + case ICE: + case SNOW: + event.setCancelled(true); + break; + } + } + /* * TODO: Figure out a solution to this problem with soft-restore. * diff --git a/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java b/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java index a9a319e..8ce0a38 100644 --- a/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java +++ b/src/main/java/com/garbagemule/MobArena/listeners/MAGlobalListener.java @@ -14,6 +14,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockExplodeEvent; +import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.event.block.BlockFormEvent; import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.block.BlockPlaceEvent; @@ -105,6 +106,13 @@ public class MAGlobalListener implements Listener // arena.getEventListener().onBlockFromTo(event); // } + @EventHandler(priority = EventPriority.NORMAL) + public void blockFade(BlockFadeEvent event) { + for (Arena arena : am.getArenas()) { + arena.getEventListener().onBlockFade(event); + } + } + @EventHandler(priority = EventPriority.HIGH) public void blockIgnite(BlockIgniteEvent event) { for (Arena arena : am.getArenas())