Updated block damage event handling to work around issues.

This commit is contained in:
sk89q 2011-02-23 11:06:22 -08:00
parent feacf3af7b
commit d584fba31c
2 changed files with 32 additions and 21 deletions

View File

@ -61,15 +61,41 @@ public WorldGuardBlockListener(WorldGuardPlugin plugin) {
*/
@Override
public void onBlockDamage(BlockDamageEvent event) {
if (event.isCancelled()) {
return;
}
if(event.isCancelled())
{
Player player = event.getPlayer();
Block blockDamaged = event.getBlock();
if (plugin.useRegions && blockDamaged.getType() == Material.CAKE_BLOCK) {
Vector pt = toVector(blockDamaged);
LocalPlayer localPlayer = plugin.wrapPlayer(player);
if (!plugin.hasPermission(player, "/regionbypass")
&& !plugin.regionManager.getApplicableRegions(pt).canBuild(localPlayer)) {
player.sendMessage(ChatColor.DARK_RED + "You're not invited to this tea party!");
event.setCancelled(true);
return;
}
}
}
/**
* Called when a block is destroyed by a player.
*
* @param event Relevant event details
*/
@Override
public void onBlockBreak(BlockBreakEvent event) {
if (event.isCancelled()) {
return;
}
Player player = event.getPlayer();
if (!plugin.itemDurability && event.getDamageLevel() == BlockDamageLevel.BROKEN) {
if (!plugin.itemDurability) {
ItemStack held = player.getItemInHand();
if (held.getTypeId() > 0) {
held.setDurability((short) -1);
@ -77,7 +103,7 @@ public void onBlockDamage(BlockDamageEvent event) {
}
}
if (plugin.useRegions && event.getDamageLevel() == BlockDamageLevel.BROKEN) {
if (plugin.useRegions) {
Vector pt = BukkitUtil.toVector(event.getBlock());
LocalPlayer localPlayer = plugin.wrapPlayer(player);
@ -89,7 +115,7 @@ public void onBlockDamage(BlockDamageEvent event) {
}
}
if (plugin.blacklist != null && event.getDamageLevel() == BlockDamageLevel.BROKEN) {
if (plugin.blacklist != null) {
if (!plugin.blacklist.check(
new BlockBreakBlacklistEvent(plugin.wrapPlayer(player),
toVector(event.getBlock()),
@ -106,22 +132,6 @@ public void onBlockDamage(BlockDamageEvent event) {
return;
}
}
Block blockDamaged = event.getBlock();
if (plugin.useRegions && blockDamaged.getType() == Material.CAKE_BLOCK) {
Vector pt = toVector(blockDamaged);
LocalPlayer localPlayer = plugin.wrapPlayer(player);
if (!plugin.hasPermission(player, "/regionbypass")
&& !plugin.regionManager.getApplicableRegions(pt).canBuild(localPlayer)) {
player.sendMessage(ChatColor.DARK_RED + "You don't have permission for this area.");
event.setCancelled(true);
return;
}
}
}
/**

View File

@ -191,6 +191,7 @@ public void onDisable() {
*/
private void registerEvents() {
registerEvent(Event.Type.BLOCK_DAMAGED, blockListener, Priority.High);
registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.High);
registerEvent(Event.Type.BLOCK_FLOW, blockListener, Priority.Normal);
registerEvent(Event.Type.BLOCK_IGNITE, blockListener, Priority.High);
registerEvent(Event.Type.BLOCK_PHYSICS, blockListener, Priority.Normal);