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.
This commit is contained in:
TomyLobo 2013-06-10 02:34:58 +02:00
parent beb0bb3a1e
commit c88052eeb8

View File

@ -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.
*/