mirror of
https://github.com/EngineHub/WorldGuard.git
synced 2024-09-07 04:48:07 +02:00
Updated block damage event handling to work around issues.
This commit is contained in:
parent
feacf3af7b
commit
d584fba31c
@ -61,15 +61,41 @@ public WorldGuardBlockListener(WorldGuardPlugin plugin) {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onBlockDamage(BlockDamageEvent event) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if (!plugin.itemDurability && event.getDamageLevel() == BlockDamageLevel.BROKEN) {
|
if (!plugin.itemDurability) {
|
||||||
ItemStack held = player.getItemInHand();
|
ItemStack held = player.getItemInHand();
|
||||||
if (held.getTypeId() > 0) {
|
if (held.getTypeId() > 0) {
|
||||||
held.setDurability((short) -1);
|
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());
|
Vector pt = BukkitUtil.toVector(event.getBlock());
|
||||||
LocalPlayer localPlayer = plugin.wrapPlayer(player);
|
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(
|
if (!plugin.blacklist.check(
|
||||||
new BlockBreakBlacklistEvent(plugin.wrapPlayer(player),
|
new BlockBreakBlacklistEvent(plugin.wrapPlayer(player),
|
||||||
toVector(event.getBlock()),
|
toVector(event.getBlock()),
|
||||||
@ -106,22 +132,6 @@ public void onBlockDamage(BlockDamageEvent event) {
|
|||||||
return;
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -191,6 +191,7 @@ public void onDisable() {
|
|||||||
*/
|
*/
|
||||||
private void registerEvents() {
|
private void registerEvents() {
|
||||||
registerEvent(Event.Type.BLOCK_DAMAGED, blockListener, Priority.High);
|
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_FLOW, blockListener, Priority.Normal);
|
||||||
registerEvent(Event.Type.BLOCK_IGNITE, blockListener, Priority.High);
|
registerEvent(Event.Type.BLOCK_IGNITE, blockListener, Priority.High);
|
||||||
registerEvent(Event.Type.BLOCK_PHYSICS, blockListener, Priority.Normal);
|
registerEvent(Event.Type.BLOCK_PHYSICS, blockListener, Priority.Normal);
|
||||||
|
Loading…
Reference in New Issue
Block a user