package com.Acrobot.ChestShop.Listeners.PreShopCreation; import com.Acrobot.Breeze.Utils.MaterialUtil; import com.Acrobot.ChestShop.Configuration.Messages; import com.Acrobot.ChestShop.Configuration.Properties; import com.Acrobot.ChestShop.Events.PreShopCreationEvent; import com.Acrobot.ChestShop.Signs.ChestShopSign; import com.Acrobot.ChestShop.Utils.uBlock; import org.bukkit.ChatColor; import org.bukkit.block.Chest; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.inventory.ItemStack; import java.util.regex.Matcher; import static com.Acrobot.Breeze.Utils.MaterialUtil.*; import static com.Acrobot.ChestShop.Events.PreShopCreationEvent.CreationOutcome.INVALID_ITEM; import static com.Acrobot.ChestShop.Events.PreShopCreationEvent.CreationOutcome.ITEM_AUTOFILL; import static com.Acrobot.ChestShop.Signs.ChestShopSign.ITEM_LINE; import static com.Acrobot.ChestShop.Signs.ChestShopSign.AUTOFILL_CODE; /** * @author Acrobot */ public class ItemChecker implements Listener { @EventHandler(priority = EventPriority.LOWEST) public static void onPreShopCreation(PreShopCreationEvent event) { String itemCode = event.getSignLine(ITEM_LINE); ItemStack item = MaterialUtil.getItem(itemCode); if (item == null) { if (Properties.ALLOW_AUTO_ITEM_FILL && itemCode.equals(AUTOFILL_CODE)) { boolean foundItem = false; Chest chest = uBlock.findConnectedChest(event.getSign()); if (chest != null) { for (ItemStack stack : chest.getInventory().getContents()) { if (!MaterialUtil.isEmpty(stack)) { itemCode = MaterialUtil.getSignName(stack); event.setSignLine(ITEM_LINE, itemCode); foundItem = true; break; } } } if (!foundItem) { event.setSignLine(ITEM_LINE, ChatColor.BOLD + ChestShopSign.AUTOFILL_CODE); event.setOutcome(ITEM_AUTOFILL); event.getPlayer().sendMessage(Messages.prefix(Messages.CLICK_TO_AUTOFILL_ITEM)); return; } } else { event.setOutcome(INVALID_ITEM); return; } } if (itemCode.length() > MAXIMUM_SIGN_LETTERS) { event.setOutcome(INVALID_ITEM); return; } } private static boolean isSameItem(String newCode, ItemStack item) { ItemStack newItem = MaterialUtil.getItem(newCode); return newItem != null && MaterialUtil.equals(newItem, item); } private static String getMetadata(String itemCode) { Matcher m = METADATA.matcher(itemCode); if (!m.find()) { return ""; } return m.group(); } }