/**
* Checks if a block is fortified when broken by a player.
* @param event fires when a player breaks a block.
*/
@EventHandler (priority = EventPriority.HIGHEST)
public void onBlockBreak(BlockBreakEvent event) {
// Get bottom half if block is a door
Block block = event.getBlock();
if (BlockUtils.isDoor(block)) {
block = BlockUtils.getBottomPartOfDoor(block);
}
// Check if block is fortified
FortifiedBlock fortifiedBlock = CKGlobal.getFortifiedBlock(block.getLocation());
if (fortifiedBlock == null) {
if (BiomeData.isCrop(block.getType())) {
FarmingHandler.removeCrop(block.getLocation());
}
// Check if snitch is nearby
SnitchHandler.handleBlockBreak(event);
return;
}
// Check if fortified block is from your group
Resident res = CKGlobal.getResident(event.getPlayer());
if (res.getGroups().contains(fortifiedBlock.getGroup())) {
if (res.hasPermission(fortifiedBlock.getGroup(), Permissions.BLOCKS)) {
removeNametag(block.getLocation());
fortifiedBlock.delete();
return;
}
}
// Remove one reinforcement from block
fortifiedBlock.decrement();
if (fortifiedBlock.getReinforcements() <= 0) {
if (BiomeData.isCrop(block.getType())) {
FarmingHandler.removeCrop(block.getLocation());
}
removeNametag(block.getLocation());
// Check if snitch is nearby
SnitchHandler.handleBlockBreak(event);
return;
}
event.setCancelled(true);
// Update block nametag
BlockFace face = getPlayerFacing(event.getPlayer());
Location adjustedLocation = adjustLocationForFace(block.getLocation(), face);
FortifiedBlock fb = CKGlobal.getFortifiedBlock(block.getLocation());
if (fb != null) {
updateNametag(adjustedLocation, fb);
}
}