Merge pull request #53 from remyroy/master

Fix for issue #52 Fortified rails do not resist lava.
This commit is contained in:
Justin
2012-09-01 05:31:30 -07:00
2 changed files with 41 additions and 0 deletions

View File

@@ -26,11 +26,13 @@ import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.BlockRedstoneEvent;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.material.MaterialData;
import org.bukkit.material.Openable;
import org.bukkit.material.PistonBaseMaterial;
import org.bukkit.Effect;
import com.untamedears.citadel.Citadel;
import com.untamedears.citadel.PlacementMode;
@@ -189,6 +191,27 @@ public class BlockListener implements Listener {
}
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOW)
public void blockPhysics(BlockPhysicsEvent bpe) {
Material changedType = bpe.getChangedType();
if (Material.LAVA == changedType) {
Block block = bpe.getBlock();
// Protection for reinforced rails types from lava. Similar to water, transform surrounding blocks in cobblestone to stop the lava effect.
if (Material.RAILS == block.getType() || Material.POWERED_RAIL == block.getType() || Material.DETECTOR_RAIL == block.getType()) {
boolean isReinforced = maybeReinforcementDamaged(block);
if (isReinforced) {
for (BlockFace blockFace : new BlockFace[]{BlockFace.DOWN, BlockFace.UP, BlockFace.EAST, BlockFace.WEST, BlockFace.NORTH, BlockFace.SOUTH}) {
Block otherBlock = block.getRelative(blockFace);
if (Material.LAVA == otherBlock.getType()) {
otherBlock.setType(Material.COBBLESTONE);
otherBlock.getWorld().playEffect(otherBlock.getLocation(), Effect.EXTINGUISH, 0);
}
}
}
}
}
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void redstonePower(BlockRedstoneEvent bre) {
try {

View File

@@ -1,11 +1,13 @@
package com.untamedears.citadel.listener;
import static com.untamedears.citadel.Utility.createReinforcement;
import static com.untamedears.citadel.Utility.maybeReinforcementDamaged;
import static com.untamedears.citadel.Utility.sendMessage;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
@@ -15,6 +17,7 @@ import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.material.Openable;
import com.untamedears.citadel.Citadel;
@@ -88,6 +91,21 @@ public class PlayerListener implements Listener {
interact(pie);
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOW)
public void bucketEmpty(PlayerBucketEmptyEvent pbee) {
Material bucket = pbee.getBucket();
if (Material.LAVA_BUCKET == bucket) {
Block block = pbee.getBlockClicked();
BlockFace face = pbee.getBlockFace();
Block relativeBlock = block.getRelative(face);
// Protection for reinforced rails types from direct lava bucket drop.
if (Material.RAILS == relativeBlock.getType() || Material.POWERED_RAIL == relativeBlock.getType() || Material.DETECTOR_RAIL == relativeBlock.getType()) {
boolean isReinforced = maybeReinforcementDamaged(relativeBlock);
pbee.setCancelled(isReinforced);
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void interact(PlayerInteractEvent pie) {
try {