From 93e95b42a0f0ed21e1352789f0400268cec59c6d Mon Sep 17 00:00:00 2001 From: tastybento Date: Tue, 5 Feb 2019 23:22:18 -0800 Subject: [PATCH] Remove end exit island deletion Reverts that part because it causes an endless loop of chunk reloading and block placement. --- .../bentobox/listeners/BlockEndDragon.java | 49 ++++++++++--------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/listeners/BlockEndDragon.java b/src/main/java/world/bentobox/bentobox/listeners/BlockEndDragon.java index dbbf544d8..ed1dd52f9 100644 --- a/src/main/java/world/bentobox/bentobox/listeners/BlockEndDragon.java +++ b/src/main/java/world/bentobox/bentobox/listeners/BlockEndDragon.java @@ -3,13 +3,13 @@ package world.bentobox.bentobox.listeners; import java.util.Arrays; import java.util.List; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.World.Environment; import org.bukkit.entity.EntityType; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.world.ChunkLoadEvent; @@ -35,7 +35,7 @@ public class BlockEndDragon implements Listener { } /** - * This handles end dragon spawning prevention + * This handles end dragon spawning prevention. Does not kill dragon because that generates random portal placement * * @param e - event * @return true if dragon can spawn, false if not @@ -53,11 +53,7 @@ public class BlockEndDragon implements Listener { /** - * This listener aims to delete the end trophy from the end when it is generated - * It is added by special code in the server that can't be overidden so the only - * option is to delete it manually. This means that any island at 0,0 will have - * a dead zone of a few blocks directly above it. Hopefully this will not be a - * major issue. + * This listener moves the end exit island high up in the sky * @param e - event */ @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -67,29 +63,16 @@ public class BlockEndDragon implements Listener { || !plugin.getIWM().inWorld(e.getWorld()) || !plugin.getIWM().isEndGenerate(e.getWorld()) || !plugin.getIWM().isEndIslands(e.getWorld()) - || !CHUNKS.contains(new Pair(e.getChunk().getX(), e.getChunk().getZ()))) { + || !(e.getChunk().getX() == 0 && e.getChunk().getZ() == 0)) { return; } // Setting a bedrock block here forces the spike to be placed as high as possible - if (e.getChunk().getX() == 0 && e.getChunk().getZ() == 0) { - e.getChunk().getBlock(0, 255, 0).setType(Material.BEDROCK); - } - // Remove trophy spike / exit portal after a while - Bukkit.getScheduler().runTaskLater(plugin, () -> { - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - for (int y = DEAD_ZONE_Y; y < e.getWorld().getMaxHeight(); y++) { - e.getChunk().getBlock(x, y, z).setType(Material.AIR); - } - } - } - }, 20L); + e.getChunk().getBlock(0, 255, 0).setType(Material.BEDROCK); } /** * Silently prevents block placing in the dead zone. - * This is just a simple protection. If the player uses fancy ways to get blocks - * into the dead zone it'll just mean they get deleted next time the chunks are loaded. + * This is just a simple protection. * @param e - event */ @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) @@ -106,4 +89,24 @@ public class BlockEndDragon implements Listener { } e.setCancelled(true); } + + /** + * Silently prevents block breaking in the dead zone. + * This is just a simple protection. + * @param e - event + */ + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onEndBlockBreak(BlockBreakEvent e) { + if (!Flags.REMOVE_END_EXIT_ISLAND.isSetForWorld(e.getBlock().getWorld()) + || e.getBlock().getY() < DEAD_ZONE_Y + || !e.getBlock().getWorld().getEnvironment().equals(Environment.THE_END) + || !plugin.getIWM().inWorld(e.getBlock().getWorld()) + || !plugin.getIWM().isEndGenerate(e.getBlock().getWorld()) + || !plugin.getIWM().isEndIslands(e.getBlock().getWorld()) + || !CHUNKS.contains(new Pair(e.getBlock().getChunk().getX(), e.getBlock().getChunk().getZ())) + ) { + return; + } + e.setCancelled(true); + } }