ChestShop-3/com/Acrobot/ChestShop/Listeners/blockBreak.java

60 lines
2.2 KiB
Java
Raw Normal View History

2011-05-15 19:33:03 +02:00
package com.Acrobot.ChestShop.Listeners;
2011-06-09 22:54:01 +02:00
import com.Acrobot.ChestShop.Permission;
import com.Acrobot.ChestShop.Utils.uBlock;
import com.Acrobot.ChestShop.Utils.uLongName;
import com.Acrobot.ChestShop.Utils.uSign;
2011-06-09 22:54:01 +02:00
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockListener;
import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;
/**
* @author Acrobot
*/
public class blockBreak extends BlockListener {
public static boolean cancellingBlockBreak(Block block, Player player) {
if (player != null && (Permission.has(player, Permission.ADMIN) || Permission.has(player, Permission.MOD))) return false;
2011-05-29 13:25:25 +02:00
if (uSign.isSign(block)) block.getState().update();
Sign sign = uBlock.findRestrictedSign(block);
if (sign != null && isCorrectSign(sign, block)) return true;
2011-06-09 22:54:01 +02:00
sign = uBlock.findSign(block);
return sign != null && (isCorrectSign(sign, block) && playerIsNotOwner(player, sign));
}
2011-06-09 22:54:01 +02:00
public void onBlockBreak(BlockBreakEvent event) {
if (cancellingBlockBreak(event.getBlock(), event.getPlayer())) event.setCancelled(true);
}
2011-07-02 20:34:14 +02:00
private static boolean isCorrectSign(Sign sign, Block block) {
return sign.getBlock() == block || getAttachedFace(sign) == block;
}
private static Block getAttachedFace(Sign sign) {
return sign.getBlock().getRelative(((org.bukkit.material.Sign) sign.getData()).getAttachedFace());
}
private static boolean playerIsNotOwner(Player player, Sign sign) {
return player == null || !uLongName.stripName(player.getName()).equals(sign.getLine(0));
}
public void onBlockPistonExtend(BlockPistonExtendEvent event) {
for (Block b : event.getBlocks()) {
if (cancellingBlockBreak(b, null)) {
event.setCancelled(true);
return;
}
2011-06-09 22:54:01 +02:00
}
}
public void onBlockPistonRetract(BlockPistonRetractEvent event) {
if (!uSign.isSign(event.getRetractLocation().getBlock()) && cancellingBlockBreak(event.getRetractLocation().getBlock(), null)) event.setCancelled(true);
}
}