diff --git a/src/main/java/com/Acrobot/Breeze/Utils/BlockUtil.java b/src/main/java/com/Acrobot/Breeze/Utils/BlockUtil.java index 2d9ead651..299481485 100644 --- a/src/main/java/com/Acrobot/Breeze/Utils/BlockUtil.java +++ b/src/main/java/com/Acrobot/Breeze/Utils/BlockUtil.java @@ -18,6 +18,7 @@ public class BlockUtil { private static EnumSet SIGNS = EnumSet.noneOf(Material.class); + private static EnumSet SHULKER_BOXES = EnumSet.noneOf(Material.class); private static EnumSet CONTAINERS = EnumSet.noneOf(Material.class); static { SIGNS.add(Material.ACACIA_SIGN); @@ -33,26 +34,28 @@ public class BlockUtil { SIGNS.add(Material.SPRUCE_SIGN); SIGNS.add(Material.SPRUCE_WALL_SIGN); + SHULKER_BOXES.add(Material.SHULKER_BOX); + SHULKER_BOXES.add(Material.BLACK_SHULKER_BOX); + SHULKER_BOXES.add(Material.BLUE_SHULKER_BOX); + SHULKER_BOXES.add(Material.BROWN_SHULKER_BOX); + SHULKER_BOXES.add(Material.CYAN_SHULKER_BOX); + SHULKER_BOXES.add(Material.GRAY_SHULKER_BOX); + SHULKER_BOXES.add(Material.GREEN_SHULKER_BOX); + SHULKER_BOXES.add(Material.LIGHT_BLUE_SHULKER_BOX); + SHULKER_BOXES.add(Material.LIGHT_GRAY_SHULKER_BOX); + SHULKER_BOXES.add(Material.LIME_SHULKER_BOX); + SHULKER_BOXES.add(Material.MAGENTA_SHULKER_BOX); + SHULKER_BOXES.add(Material.ORANGE_SHULKER_BOX); + SHULKER_BOXES.add(Material.PINK_SHULKER_BOX); + SHULKER_BOXES.add(Material.PURPLE_SHULKER_BOX); + SHULKER_BOXES.add(Material.RED_SHULKER_BOX); + SHULKER_BOXES.add(Material.WHITE_SHULKER_BOX); + SHULKER_BOXES.add(Material.YELLOW_SHULKER_BOX); + CONTAINERS.add(Material.CHEST); CONTAINERS.add(Material.TRAPPED_CHEST); CONTAINERS.add(Material.BARREL); - CONTAINERS.add(Material.SHULKER_BOX); - CONTAINERS.add(Material.BLACK_SHULKER_BOX); - CONTAINERS.add(Material.BLUE_SHULKER_BOX); - CONTAINERS.add(Material.BROWN_SHULKER_BOX); - CONTAINERS.add(Material.CYAN_SHULKER_BOX); - CONTAINERS.add(Material.GRAY_SHULKER_BOX); - CONTAINERS.add(Material.GREEN_SHULKER_BOX); - CONTAINERS.add(Material.LIGHT_BLUE_SHULKER_BOX); - CONTAINERS.add(Material.LIGHT_GRAY_SHULKER_BOX); - CONTAINERS.add(Material.LIME_SHULKER_BOX); - CONTAINERS.add(Material.MAGENTA_SHULKER_BOX); - CONTAINERS.add(Material.ORANGE_SHULKER_BOX); - CONTAINERS.add(Material.PINK_SHULKER_BOX); - CONTAINERS.add(Material.PURPLE_SHULKER_BOX); - CONTAINERS.add(Material.RED_SHULKER_BOX); - CONTAINERS.add(Material.WHITE_SHULKER_BOX); - CONTAINERS.add(Material.YELLOW_SHULKER_BOX); + CONTAINERS.addAll(SHULKER_BOXES); } /** @@ -88,6 +91,17 @@ public static boolean isChest(Block block) { return block != null && CONTAINERS.contains(block.getType()); } + /** + * Checks if the material is a shulker box + * + * @param type + * Material to check + * @return Is this material a shulker box? + */ + public static boolean isShulkerBox(Material type) { + return SHULKER_BOXES.contains(type); + } + /** * Gets the block to which the sign is attached * diff --git a/src/main/java/com/Acrobot/ChestShop/Listeners/Player/PlayerInteract.java b/src/main/java/com/Acrobot/ChestShop/Listeners/Player/PlayerInteract.java index 995b5073c..d61c759df 100644 --- a/src/main/java/com/Acrobot/ChestShop/Listeners/Player/PlayerInteract.java +++ b/src/main/java/com/Acrobot/ChestShop/Listeners/Player/PlayerInteract.java @@ -35,6 +35,7 @@ import org.bukkit.OfflinePlayer; import org.bukkit.block.Block; import org.bukkit.block.Container; +import org.bukkit.block.ShulkerBox; import org.bukkit.block.Sign; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -138,6 +139,12 @@ private static void showShopInfo(Player player, Sign sign) { if (!ChestShopSign.isAdminShop(sign)) { Container chest = uBlock.findConnectedChest(sign); if (chest != null) { + // do not allow shulker boxes inside of shulker boxes + if (chest instanceof ShulkerBox && BlockUtil.isShulkerBox(item.getType())) { + player.sendMessage(Messages.prefix(Messages.INVALID_SHOP_DETECTED)); + return; + } + player.sendMessage(Messages.prefix(Messages.SHOP_INFO)); String prices = sign.getLine(PRICE_LINE); Inventory inventory = chest.getInventory(); @@ -181,6 +188,11 @@ private static PreTransactionEvent preparePreTransactionEvent(Sign sign, Player player.sendMessage(Messages.prefix(Messages.INVALID_SHOP_DETECTED)); return null; } + // do not allow shulker boxes inside of shulker boxes + if (!ChestShopSign.isAdminShop(sign) && chest instanceof ShulkerBox && BlockUtil.isShulkerBox(item.getType())) { + player.sendMessage(Messages.prefix(Messages.INVALID_SHOP_DETECTED)); + return null; + } int amount = Integer.parseInt(quantity);