From c88052eeb8e9aa4e4ff89f8e6c7d01dc6c7e946d Mon Sep 17 00:00:00 2001 From: TomyLobo Date: Mon, 10 Jun 2013 02:34:58 +0200 Subject: [PATCH] No longer destroying additional fire blocks when fire-spread is disallowed. Problem: This feature breaks the consistency of Bukkit's BlockFadeEvent. Resolution 1: Emit BlockFadeEvent before removing. - This might break plugins if they don't expect fire to disappear the way WG removes it. Resolution 2: Remove the additional dousing. - Fire still spreads around a bit (probably due to a bukkit bug), but does not destroy anything. I picked resolution 2. Rationale: Occam's razor. --- .../bukkit/WorldGuardBlockListener.java | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardBlockListener.java b/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardBlockListener.java index 6c7bccec..c3dc3ce3 100644 --- a/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardBlockListener.java +++ b/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardBlockListener.java @@ -399,9 +399,7 @@ public void onBlockBurn(BlockBurnEvent event) { } if (wcfg.fireSpreadDisableToggle) { - Block block = event.getBlock(); event.setCancelled(true); - checkAndDestroyAround(block.getWorld(), block.getX(), block.getY(), block.getZ(), BlockID.FIRE); return; } @@ -410,7 +408,6 @@ public void onBlockBurn(BlockBurnEvent event) { if (wcfg.disableFireSpreadBlocks.contains(block.getTypeId())) { event.setCancelled(true); - checkAndDestroyAround(block.getWorld(), block.getX(), block.getY(), block.getZ(), BlockID.FIRE); return; } } @@ -422,15 +419,11 @@ public void onBlockBurn(BlockBurnEvent event) { if (wcfg.useRegions) { Block block = event.getBlock(); - int x = block.getX(); - int y = block.getY(); - int z = block.getZ(); Vector pt = toVector(block); RegionManager mgr = plugin.getGlobalRegionManager().get(block.getWorld()); ApplicableRegionSet set = mgr.getApplicableRegions(pt); if (!set.allows(DefaultFlag.FIRE_SPREAD)) { - checkAndDestroyAround(block.getWorld(), x, y, z, BlockID.FIRE); event.setCancelled(true); return; } @@ -438,21 +431,6 @@ public void onBlockBurn(BlockBurnEvent event) { } } - private void checkAndDestroyAround(World world, int x, int y, int z, int required) { - checkAndDestroy(world, x, y, z + 1, required); - checkAndDestroy(world, x, y, z - 1, required); - checkAndDestroy(world, x, y + 1, z, required); - checkAndDestroy(world, x, y - 1, z, required); - checkAndDestroy(world, x + 1, y, z, required); - checkAndDestroy(world, x - 1, y, z, required); - } - - private void checkAndDestroy(World world, int x, int y, int z, int required) { - if (world.getBlockTypeIdAt(x, y, z) == required) { - world.getBlockAt(x, y, z).setTypeId(BlockID.AIR); - } - } - /* * Called when block physics occurs. */