ChestShop-3/src/main/java/com/Acrobot/ChestShop/Signs/ChestShopSign.java

96 lines
3.0 KiB
Java
Raw Normal View History

package com.Acrobot.ChestShop.Signs;
import com.Acrobot.Breeze.Utils.BlockUtil;
import com.Acrobot.ChestShop.Configuration.Properties;
2012-09-15 20:32:22 +02:00
import com.Acrobot.ChestShop.Containers.AdminInventory;
import com.Acrobot.ChestShop.Utils.uBlock;
import com.Acrobot.ChestShop.Utils.uName;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
2014-01-08 00:12:29 +01:00
import org.bukkit.block.DoubleChest;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
2012-09-15 20:32:22 +02:00
import org.bukkit.inventory.Inventory;
2014-01-08 00:12:29 +01:00
import org.bukkit.inventory.InventoryHolder;
import java.util.regex.Pattern;
/**
* @author Acrobot
*/
public class ChestShopSign {
public static final byte NAME_LINE = 0;
public static final byte QUANTITY_LINE = 1;
public static final byte PRICE_LINE = 2;
public static final byte ITEM_LINE = 3;
public static final Pattern[] SHOP_SIGN_PATTERN = {
2013-09-29 00:18:37 +02:00
Pattern.compile("^?[\\w -.]*$"),
Pattern.compile("^[1-9][0-9]*$"),
2012-09-12 12:35:48 +02:00
Pattern.compile("(?i)^[\\d.bs(free) :]+$"),
2014-03-12 13:27:30 +01:00
Pattern.compile("^[\\w? #:-]+$")
};
2012-09-15 20:32:22 +02:00
public static boolean isAdminShop(Inventory ownerInventory) {
return ownerInventory instanceof AdminInventory;
}
public static boolean isAdminShop(String owner) {
return owner.replace(" ", "").equalsIgnoreCase(Properties.ADMIN_SHOP_NAME.replace(" ", ""));
}
public static boolean isAdminShop(Sign sign) {
return isAdminShop(sign.getLine(NAME_LINE));
}
public static boolean isValid(Sign sign) {
return isValid(sign.getLines());
}
public static boolean isValid(String[] line) {
return isValidPreparedSign(line) && (line[PRICE_LINE].toUpperCase().contains("B") || line[PRICE_LINE].toUpperCase().contains("S")) && !line[NAME_LINE].isEmpty();
}
public static boolean isValid(Block sign) {
return BlockUtil.isSign(sign) && isValid((Sign) sign.getState());
}
public static boolean isShopChest(Block chest) {
2013-03-16 19:27:24 +01:00
if (!BlockUtil.isChest(chest)) {
return false;
}
return uBlock.getConnectedSign((Chest) chest.getState()) != null;
}
2014-01-08 00:12:29 +01:00
public static boolean isShopChest(InventoryHolder holder) {
if (!BlockUtil.isChest(holder)) {
return false;
}
if (holder instanceof DoubleChest) {
return isShopChest(((DoubleChest) holder).getLocation().getBlock());
} else if (holder instanceof Chest) {
return isShopChest(((Chest) holder).getBlock());
} else {
return false;
}
}
public static boolean canAccess(Player player, Sign sign) {
if (player == null) return false;
if (sign == null) return true;
return uName.canUseName(player, sign.getLine(0));
}
public static boolean isValidPreparedSign(String[] lines) {
for (int i = 0; i < 4; i++) {
if (!SHOP_SIGN_PATTERN[i].matcher(lines[i]).matches()) {
return false;
}
}
return lines[PRICE_LINE].indexOf(':') == lines[PRICE_LINE].lastIndexOf(':');
}
}