mirror of
https://github.com/ChestShop-authors/ChestShop-3.git
synced 2024-11-24 19:15:48 +01:00
5908eb67fa
- Copied utilities from ChestShop-4 - Made code really, really nicer to read - Made every external plugin's wrapper a listener, so it listens to events instead of being hard-coded.
111 lines
3.4 KiB
Java
111 lines
3.4 KiB
Java
package com.Acrobot.ChestShop.Utils;
|
|
|
|
import com.Acrobot.Breeze.Utils.BlockUtil;
|
|
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
|
import com.Acrobot.ChestShop.Signs.RestrictedSign;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.block.Block;
|
|
import org.bukkit.block.BlockFace;
|
|
import org.bukkit.block.Chest;
|
|
import org.bukkit.block.Sign;
|
|
import org.bukkit.material.Attachable;
|
|
|
|
/**
|
|
* @author Acrobot
|
|
*/
|
|
public class uBlock {
|
|
private static final BlockFace[] CHEST_EXTENSION_FACES = {BlockFace.EAST, BlockFace.NORTH, BlockFace.WEST, BlockFace.SOUTH};
|
|
private static final BlockFace[] SHOP_FACES = {BlockFace.SELF, BlockFace.DOWN, BlockFace.UP, BlockFace.EAST, BlockFace.NORTH, BlockFace.WEST, BlockFace.SOUTH};
|
|
|
|
public static Chest findConnectedChest(Sign sign) {
|
|
Block block = sign.getBlock();
|
|
return findConnectedChest(block);
|
|
}
|
|
|
|
public static Chest findConnectedChest(Block block) {
|
|
for (BlockFace bf : SHOP_FACES) {
|
|
Block faceBlock = block.getRelative(bf);
|
|
if (faceBlock.getType() == Material.CHEST) {
|
|
return (Chest) faceBlock.getState();
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static Sign findValidShopSign(Block block, String originalName) {
|
|
Sign ownerShopSign = null;
|
|
|
|
for (BlockFace bf : SHOP_FACES) {
|
|
Block faceBlock = block.getRelative(bf);
|
|
|
|
if (!BlockUtil.isSign(faceBlock)) {
|
|
continue;
|
|
}
|
|
|
|
Sign sign = (Sign) faceBlock.getState();
|
|
|
|
if (ChestShopSign.isValid(sign) && signIsAttachedToBlock(sign, block)) {
|
|
if (!sign.getLine(0).equals(originalName)) {
|
|
return sign;
|
|
} else if (ownerShopSign == null) {
|
|
ownerShopSign = sign;
|
|
}
|
|
}
|
|
}
|
|
|
|
return ownerShopSign;
|
|
}
|
|
|
|
public static Sign findAnyNearbyShopSign(Block block) {
|
|
for (BlockFace bf : SHOP_FACES) {
|
|
Block faceBlock = block.getRelative(bf);
|
|
|
|
if (!BlockUtil.isSign(faceBlock)) {
|
|
continue;
|
|
}
|
|
|
|
Sign sign = (Sign) faceBlock.getState();
|
|
|
|
if (ChestShopSign.isValid(sign)) {
|
|
return sign;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static Sign findRestrictedSign(Block block) {
|
|
for (BlockFace bf : SHOP_FACES) {
|
|
Block faceBlock = block.getRelative(bf);
|
|
|
|
if (!BlockUtil.isSign(faceBlock)) {
|
|
continue;
|
|
}
|
|
|
|
Sign sign = (Sign) faceBlock.getState();
|
|
|
|
if (RestrictedSign.isRestricted(sign) && signIsAttachedToBlock(sign, block)) {
|
|
return sign;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static Chest findNeighbor(Block block) {
|
|
for (BlockFace blockFace : CHEST_EXTENSION_FACES) {
|
|
Block neighborBlock = block.getRelative(blockFace);
|
|
if (neighborBlock.getType() == Material.CHEST) {
|
|
return (Chest) neighborBlock.getState();
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private static boolean signIsAttachedToBlock(Sign sign, Block block) {
|
|
return sign.getBlock().equals(block) || getAttachedFace(sign).equals(block);
|
|
}
|
|
|
|
public static Block getAttachedFace(Sign sign) {
|
|
return sign.getBlock().getRelative(((Attachable) sign.getData()).getAttachedFace());
|
|
}
|
|
}
|