From ad1473d7b84713575c0251957fb49c791e422698 Mon Sep 17 00:00:00 2001 From: Isaac Kim Date: Tue, 19 Aug 2025 18:54:11 -0700 Subject: [PATCH 1/2] Fix for respawn anchor damage not being mitigated in the End --- src/main/java/com/MrEngMan/ExplodeMe/listeners/Listeners.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/MrEngMan/ExplodeMe/listeners/Listeners.java b/src/main/java/com/MrEngMan/ExplodeMe/listeners/Listeners.java index d941a3a..186d3f2 100644 --- a/src/main/java/com/MrEngMan/ExplodeMe/listeners/Listeners.java +++ b/src/main/java/com/MrEngMan/ExplodeMe/listeners/Listeners.java @@ -58,8 +58,8 @@ public void onPlayerInteract(PlayerInteractEvent event) { blockExplosionCauseList.add(new LocationUUIDPair(block.getLocation(), player.getUniqueId())); } - // If it's a respawn anchor in the overworld - else if (blockIsRespawnAnchor && block.getLocation().getWorld().getEnvironment() == World.Environment.NORMAL) { + // If it's a respawn anchor in the overworld or end (they explode outside the nether) + else if (blockIsRespawnAnchor && (block.getLocation().getWorld().getEnvironment() == World.Environment.NORMAL || block.getLocation().getWorld().getEnvironment() == World.Environment.THE_END)) { RespawnAnchor respawnAnchor = ((RespawnAnchor)block.getBlockData()); if(respawnAnchor.getCharges() > 0) { From 3c6dc15af4f711f578b0016517e227ea36c60d2a Mon Sep 17 00:00:00 2001 From: Isaac Kim Date: Tue, 19 Aug 2025 18:55:06 -0700 Subject: [PATCH 2/2] Add configuration option to protect the Ender Dragon from bed and respawn anchor explosions I specifically did not include end crystals as they naturally exist in the End and are a fair way to damage the Ender Dragon, in my opinion. --- .../com/MrEngMan/ExplodeMe/ExplodeMe.java | 6 +++++ .../ExplodeMe/listeners/Listeners.java | 26 ++++++++++++++++++- src/main/resources/config.yml | 3 +++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/MrEngMan/ExplodeMe/ExplodeMe.java b/src/main/java/com/MrEngMan/ExplodeMe/ExplodeMe.java index 3885627..f7f3cd1 100644 --- a/src/main/java/com/MrEngMan/ExplodeMe/ExplodeMe.java +++ b/src/main/java/com/MrEngMan/ExplodeMe/ExplodeMe.java @@ -19,6 +19,7 @@ public class ExplodeMe extends JavaPlugin implements Listener { private boolean debug; private float blockExplodeCheckRadius; + private boolean protectEnderDragon; // When plugin is first enabled @SuppressWarnings("static-access") @@ -44,6 +45,7 @@ public void reloadTheConfig() { reloadConfig(); debug = getConfig().getBoolean("debug", false); blockExplodeCheckRadius = getConfig().getInt("block-explode-check-radius", 10); + protectEnderDragon = getConfig().getBoolean("protect-ender-dragon", true); } @@ -91,5 +93,9 @@ public boolean isDebugEnabled() { return debug; } + public boolean isEnderDragonProtected() { + return protectEnderDragon; + } + } \ No newline at end of file diff --git a/src/main/java/com/MrEngMan/ExplodeMe/listeners/Listeners.java b/src/main/java/com/MrEngMan/ExplodeMe/listeners/Listeners.java index 186d3f2..e270f10 100644 --- a/src/main/java/com/MrEngMan/ExplodeMe/listeners/Listeners.java +++ b/src/main/java/com/MrEngMan/ExplodeMe/listeners/Listeners.java @@ -20,7 +20,6 @@ import org.bukkit.event.entity.EntityDamageByBlockEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.MetadataValue; @@ -149,6 +148,31 @@ public void onEntityDamageByBlock(EntityDamageByBlockEvent event) { } + // Ender Dragon damaged by block explosion + else if (damagedEntity.getType() == EntityType.ENDER_DRAGON && event.getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) { + + // Check if Ender Dragon protection is enabled + if (ExplodeMe.getPlugin().isEnderDragonProtected()) { + Utils.debugPrint(Utils.SendChatMessage("&3Check cause list for Ender Dragon: " + blockExplosionCauseList.toString())); + + // Check if there's a nearby bed/respawn anchor explosion + boolean foundBedOrAnchorExplosion = false; + for(LocationUUIDPair locationUUIDPair : blockExplosionCauseList) { + if(locationUUIDPair.location.getWorld() == damagedEntity.getWorld() && locationUUIDPair.location.distance(damagedEntity.getLocation()) <= ExplodeMe.getPlugin().getBlockExplodeCheckRadius()) { + foundBedOrAnchorExplosion = true; + break; + } + } + + // Cancel damage if it's from a bed or respawn anchor explosion + if (foundBedOrAnchorExplosion) { + Utils.debugPrint(Utils.SendChatMessage("&eProtected Ender Dragon from bed/respawn anchor explosion")); + event.setCancelled(true); + } else { + Utils.debugPrint(Utils.SendChatMessage("&eEnder Dragon damaged by non-bed/anchor explosion")); + } + } + } } @EventHandler(priority = EventPriority.LOW) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index a2cc189..5afee69 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -5,5 +5,8 @@ no-permission-message: '&8[&7ExplodeMe&8] &cSorry, you don''t have permission to # How far can players be to a bed/respawn anchor to consider them in the area of influence block-explode-check-radius: 10 +# Prevent bed and respawn anchor explosions from damaging the Ender Dragon +protect-ender-dragon: false + # Print debug messages to console (leave as false) debug: false \ No newline at end of file