2011-05-15 19:33:03 +02:00
|
|
|
package com.Acrobot.ChestShop.Listeners;
|
2011-05-15 18:16:25 +02:00
|
|
|
|
2011-06-09 22:54:01 +02:00
|
|
|
import com.Acrobot.ChestShop.Permission;
|
2011-07-05 19:08:55 +02:00
|
|
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
2011-07-23 21:00:47 +02:00
|
|
|
import com.Acrobot.ChestShop.Utils.uLongName;
|
2011-07-05 19:08:55 +02:00
|
|
|
import com.Acrobot.ChestShop.Utils.uSign;
|
2011-06-09 22:54:01 +02:00
|
|
|
import org.bukkit.block.Block;
|
2011-09-29 20:29:39 +02:00
|
|
|
import org.bukkit.block.BlockFace;
|
2011-06-09 22:54:01 +02:00
|
|
|
import org.bukkit.block.Sign;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.event.block.BlockBreakEvent;
|
2011-05-15 18:16:25 +02:00
|
|
|
import org.bukkit.event.block.BlockListener;
|
2011-07-23 21:00:47 +02:00
|
|
|
import org.bukkit.event.block.BlockPistonExtendEvent;
|
|
|
|
import org.bukkit.event.block.BlockPistonRetractEvent;
|
2011-09-29 20:29:39 +02:00
|
|
|
import org.bukkit.material.PistonBaseMaterial;
|
2011-05-15 18:16:25 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Acrobot
|
|
|
|
*/
|
|
|
|
public class blockBreak extends BlockListener {
|
2011-07-24 16:56:18 +02:00
|
|
|
public static boolean cancellingBlockBreak(Block block, Player player) {
|
2011-09-22 15:56:06 +02:00
|
|
|
if (block == null || (player != null && (Permission.has(player, Permission.ADMIN) || Permission.has(player, Permission.MOD)))) return false;
|
2011-07-24 16:56:18 +02:00
|
|
|
if (uSign.isSign(block)) block.getState().update();
|
|
|
|
|
2011-07-23 21:00:47 +02:00
|
|
|
Sign sign = uBlock.findRestrictedSign(block);
|
2011-09-09 15:15:53 +02:00
|
|
|
if (isCorrectSign(sign, block)) return true;
|
2011-06-09 22:54:01 +02:00
|
|
|
|
2011-07-23 21:00:47 +02:00
|
|
|
sign = uBlock.findSign(block);
|
2011-09-09 15:15:53 +02:00
|
|
|
return isCorrectSign(sign, block) && playerIsNotOwner(player, sign);
|
2011-07-23 21:00:47 +02:00
|
|
|
}
|
2011-06-09 22:54:01 +02:00
|
|
|
|
2011-07-23 21:00:47 +02:00
|
|
|
public void onBlockBreak(BlockBreakEvent event) {
|
|
|
|
if (cancellingBlockBreak(event.getBlock(), event.getPlayer())) event.setCancelled(true);
|
|
|
|
}
|
2011-07-02 20:34:14 +02:00
|
|
|
|
2011-09-06 19:01:57 +02:00
|
|
|
private static boolean isCorrectSign(Sign sign, Block block) {
|
2011-09-10 20:50:24 +02:00
|
|
|
return sign != null && (sign.getBlock() == block || getAttachedFace(sign) == block);
|
2011-08-31 20:57:10 +02:00
|
|
|
}
|
|
|
|
|
2011-09-06 19:01:57 +02:00
|
|
|
private static Block getAttachedFace(Sign sign) {
|
2011-08-26 23:12:32 +02:00
|
|
|
return sign.getBlock().getRelative(((org.bukkit.material.Sign) sign.getData()).getAttachedFace());
|
|
|
|
}
|
|
|
|
|
2011-09-06 19:01:57 +02:00
|
|
|
private static boolean playerIsNotOwner(Player player, Sign sign) {
|
2011-08-26 23:12:32 +02:00
|
|
|
return player == null || !uLongName.stripName(player.getName()).equals(sign.getLine(0));
|
|
|
|
}
|
|
|
|
|
2011-07-23 21:00:47 +02:00
|
|
|
public void onBlockPistonExtend(BlockPistonExtendEvent event) {
|
2011-07-24 16:56:18 +02:00
|
|
|
for (Block b : event.getBlocks()) {
|
|
|
|
if (cancellingBlockBreak(b, null)) {
|
|
|
|
event.setCancelled(true);
|
|
|
|
return;
|
|
|
|
}
|
2011-06-09 22:54:01 +02:00
|
|
|
}
|
|
|
|
}
|
2011-07-23 21:00:47 +02:00
|
|
|
|
|
|
|
public void onBlockPistonRetract(BlockPistonRetractEvent event) {
|
2011-09-22 15:56:06 +02:00
|
|
|
if (cancellingBlockBreak(getRetractBlock(event), null)) event.setCancelled(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
private static Block getRetractBlock(BlockPistonRetractEvent event) {
|
2011-09-29 20:29:39 +02:00
|
|
|
Block block = getRetractLocationBlock(event);
|
|
|
|
return (block != null && !uSign.isSign(block) ? block : null);
|
|
|
|
}
|
|
|
|
|
|
|
|
//Those are fixes for CraftBukkit's piston bug, where piston appears not to be a piston.
|
|
|
|
private static BlockFace getPistonDirection(Block block) {
|
|
|
|
return block.getState().getData() instanceof PistonBaseMaterial ? ((PistonBaseMaterial) block.getState().getData()).getFacing() : null;
|
|
|
|
}
|
|
|
|
|
|
|
|
private static Block getRetractLocationBlock(BlockPistonRetractEvent event) {
|
|
|
|
BlockFace pistonDirection = getPistonDirection(event.getBlock());
|
|
|
|
return pistonDirection != null ? event.getBlock().getRelative((pistonDirection), 2).getLocation().getBlock() : null;
|
2011-07-23 21:00:47 +02:00
|
|
|
}
|
2011-05-15 18:16:25 +02:00
|
|
|
}
|