diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/region/TNTListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/region/TNTListener.java index ff1b0b9c..ea90e212 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/region/TNTListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/region/TNTListener.java @@ -31,11 +31,16 @@ import de.steamwar.bausystem.region.flags.flagvalues.TNTMode; import de.steamwar.bausystem.region.utils.RegionExtensionType; import de.steamwar.bausystem.region.utils.RegionType; import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.block.Block; import org.bukkit.entity.Player; +import org.bukkit.event.Event; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockExplodeEvent; import org.bukkit.event.entity.EntityExplodeEvent; +import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @Linked(LinkageType.LISTENER) @@ -44,10 +49,9 @@ public class TNTListener implements Listener { @LinkedInstance public CustomScriptManager customScriptManager; - @EventHandler - public void onExplode(EntityExplodeEvent event) { + private void explode(List blockList, Location location, EventType eventType, Event event) { AtomicBoolean inBuild = new AtomicBoolean(); - event.blockList().removeIf(block -> { + blockList.removeIf(block -> { Region region = Region.getRegion(block.getLocation()); TNTMode value = region.getPlain(Flag.TNT); if (value == TNTMode.ALLOW) { @@ -66,12 +70,22 @@ public class TNTListener implements Listener { return value == TNTMode.DENY; }); if (inBuild.get()) { - Region region = Region.getRegion(event.getLocation()); + Region region = Region.getRegion(location); for (Player player : Bukkit.getOnlinePlayers()) { if (region.inRegion(player.getLocation(), RegionType.NORMAL, RegionExtensionType.NORMAL)) { - customScriptManager.callEvent(EventType.TNTExplodeInBuild, player, event); + customScriptManager.callEvent(eventType, player, event); } } } } + + @EventHandler + public void onBlockExplode(BlockExplodeEvent event) { + explode(event.blockList(), event.getBlock().getLocation(), null, null); + } + + @EventHandler + public void onExplode(EntityExplodeEvent event) { + explode(event.blockList(), event.getLocation(), EventType.TNTExplodeInBuild, event); + } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/CustomScriptManager.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/CustomScriptManager.java index 13300337..06b23727 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/CustomScriptManager.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/CustomScriptManager.java @@ -249,9 +249,8 @@ public class CustomScriptManager implements Listener { } public void callEvent(EventType eventType, Player p, Event e) { - if (!eventType.getEventType().equals(e.getClass())) { - return; - } + if (eventType == null) return; + if (!eventType.getEventType().equals(e.getClass())) return; List customEvents = playerMap.getOrDefault(p, new ArrayList<>()).stream().filter(CustomScript.CustomEvent.class::isInstance).map(CustomScript.CustomEvent.class::cast).collect(Collectors.toList()); for (CustomScript.CustomEvent customEvent : customEvents) {