From 2536b9ae428c71ad0a12c7686df7ecadb1a65c74 Mon Sep 17 00:00:00 2001 From: ImproperIssues Date: Sat, 15 Apr 2023 23:58:23 -0700 Subject: [PATCH] commit --- .../events/InventoryActionListener.java | 37 +++++-- .../ogredupealias/plugin/ItemPresets.java | 21 ++++ .../plugin/custom/CustomTable.java | 32 ------ .../custom/{ => forging}/CraftingKey.java | 12 ++- .../plugin/custom/forging/CustomTable.java | 99 +++++++++++++++++++ 5 files changed, 158 insertions(+), 43 deletions(-) delete mode 100644 src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/CustomTable.java rename src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/{ => forging}/CraftingKey.java (73%) create mode 100644 src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/forging/CustomTable.java diff --git a/src/main/java/io/github/itzispyder/ogredupealias/events/InventoryActionListener.java b/src/main/java/io/github/itzispyder/ogredupealias/events/InventoryActionListener.java index ad7051c..6dbb80d 100644 --- a/src/main/java/io/github/itzispyder/ogredupealias/events/InventoryActionListener.java +++ b/src/main/java/io/github/itzispyder/ogredupealias/events/InventoryActionListener.java @@ -1,24 +1,43 @@ package io.github.itzispyder.ogredupealias.events; -import io.github.itzispyder.ogredupealias.plugin.custom.CustomTable; -import org.bukkit.entity.Player; +import io.github.itzispyder.ogredupealias.plugin.ItemPresets; +import io.github.itzispyder.ogredupealias.plugin.custom.forging.CraftingKey; +import io.github.itzispyder.ogredupealias.plugin.custom.forging.CustomTable; +import io.github.itzispyder.ogredupealias.utils.Text; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; public class InventoryActionListener implements Listener { + static { + CraftingKey.register("netherite_scrap:{}-trident:{}-netherite_scrap:{}-enchanted_golden_apple:{}-player_head:{SkullOwner:{Id:[I;1216354028,1738164382,-1623044432,661086651],Name:\"DeepWarden\",Properties:{textures:[{Signature:\"pXTxO6vKSFkC2d9rWQc0cgSZoNTUsOb1lTiJKr2XwfL6k6XBZifYZramoitpB+NEav3GlVlIcgmC7+dcLIjVQTZAw1G7AyxAVdH2ggk3uArosj+vQlTZU2kGD0JFCrFN74avDlUgdp61E6AaXRgIOvhHs/Oeo/tzjllAvrgqauwxV/hlb/yTy2CRtrF1ooEXFmbti6iwntwfnwrSkzRb5eDvztneGbNQOZ2XYhyEU0lXCDzrrhYYExW8yHOjkqZPR2sd7eOsGRi19UpjQx2F4iX+MWFuiXJmUVrXEwCeggwywsuoQh0DxENwSyQxxGLk6Ck5pU3G19WXKXssN8+D9EdUQpYN58tMS4zO5B/htD0+n43O5ohOv8AgCrsorRiVGMc7wPIeQmgbsdegwiUlI535OHoIVy2Q9QPJhMm4C4kLbh+VbnoCRNzzDboodGeP146izCbd3S1tLv7H1z5vaCoA1tk8dSZeGipky45up6CHyGwrpPY9dOCtqIrAvlbdWNU3NUSDMdj2SqzHkM/7KtIQzOsuJ1/CmbZgFyvVWK4Yo55aatPoOnGI7D96A9VtjqpPC3rfX/Slo9iLVKEnhF6OYvjO+VgiJR5rHvplzGRyFd1cw3Q1n5ZTWUg1pMSd4GIAWeWz4DO6DuXGgdY4qnRSWLqAn5tL64MDLWG1h5Y=\",Value:\"ewogICJ0aW1lc3RhbXAiIDogMTY4MTYyNjMxNTgzOSwKICAicHJvZmlsZUlkIiA6ICI0ODgwMTZlYzY3OWE0ODllOWY0MjRlYjAyNzY3NjFiYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJEZWVwV2FyZGVuIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E4MDRhYTg3YzlmNGQwNmNhODJkNzk3ZWUyYjk0YjdlMjhjZmQ2MDcxMDI3NmEyODhlMjNmNzkwNjI5NDA0NjAiCiAgICB9CiAgfQp9\"}]}}}-enchanted_golden_apple:{}-netherite_scrap:{}-dragon_head:{}-netherite_scrap:{}", ItemPresets.LEGENDARY_CORE); + CraftingKey.register("totem_of_undying:{}-netherite_ingot:{}-totem_of_undying:{}-netherite_ingot:{}-structure_block:{Enchantments:[{id:\"minecraft:lure\",lvl:1s}],HideFlags:1,display:{Lore:['{\"extra\":[{\"bold\":false,\"italic\":false,\"underlined\":false,\"strikethrough\":false,\"obfuscated\":false,\"color\":\"dark_gray\",\"text\":\"- \"},{\"italic\":false,\"color\":\"gray\",\"text\":\"Used for forging\"}],\"text\":\"\"}'],Name:'{\"extra\":[{\"bold\":false,\"italic\":false,\"underlined\":false,\"strikethrough\":false,\"obfuscated\":false,\"color\":\"red\",\"text\":\"Legendary Core\"}],\"text\":\"\"}'}}-netherite_ingot:{}-totem_of_undying:{}-netherite_ingot:{}-totem_of_undying:{}", ItemPresets.LEGENDARY_INGOT); + } + @EventHandler - public void onClose(InventoryCloseEvent e) { - final Inventory inv = e.getInventory(); - final Player p = (Player) e.getPlayer(); + public void onClick(InventoryClickEvent e) { + final Inventory inv = e.getClickedInventory(); + final String title = e.getView().getTitle(); try { - CustomTable table = new CustomTable(inv); - table.getGrid().forEach(item -> { - p.sendMessage(item.getType().name()); - }); + if (inv == null) return; + if (inv.getType() == InventoryType.PLAYER) return; + + if (title.equals(Text.color("&eForging Table"))) CustomTable.onInventoryAction(e); + } + catch (Exception ignore) {} + } + + @EventHandler + public void onClose(InventoryCloseEvent e) { + final String title = e.getView().getTitle(); + + try { + if (title.equals(Text.color("&eForging Table"))) CustomTable.onInventoryClose(e); } catch (Exception ignore) {} } diff --git a/src/main/java/io/github/itzispyder/ogredupealias/plugin/ItemPresets.java b/src/main/java/io/github/itzispyder/ogredupealias/plugin/ItemPresets.java index 71c78e2..9020e47 100644 --- a/src/main/java/io/github/itzispyder/ogredupealias/plugin/ItemPresets.java +++ b/src/main/java/io/github/itzispyder/ogredupealias/plugin/ItemPresets.java @@ -1,6 +1,27 @@ package io.github.itzispyder.ogredupealias.plugin; +import io.github.itzispyder.ogredupealias.data.builder.ItemBuilder; +import io.github.itzispyder.ogredupealias.utils.Text; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; + public abstract class ItemPresets { + public static ItemStack LEGENDARY_CORE = ItemBuilder.create() + .material(Material.STRUCTURE_BLOCK) + .name(Text.color("&cLegendary Core")) + .lore(Text.color("&8- &7Used for forging")) + .enchant(Enchantment.LURE,1) + .flag(ItemFlag.HIDE_ENCHANTS) + .build(); + public static ItemStack LEGENDARY_INGOT = ItemBuilder.create() + .material(Material.NETHERITE_INGOT) + .name(Text.color("&cLegendary Ingot")) + .lore(Text.color("&8- &7Used for forging")) + .enchant(Enchantment.LURE,1) + .flag(ItemFlag.HIDE_ENCHANTS) + .build(); } diff --git a/src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/CustomTable.java b/src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/CustomTable.java deleted file mode 100644 index 7b7a260..0000000 --- a/src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/CustomTable.java +++ /dev/null @@ -1,32 +0,0 @@ -package io.github.itzispyder.ogredupealias.plugin.custom; - -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; -import java.util.List; - -public class CustomTable { - - private final Inventory inv; - - public CustomTable(Inventory inv) { - this.inv = inv; - } - - public void clearGrid() { - getGrid().forEach(item -> item.setAmount(0)); - } - - public List getGrid() { - List list = new ArrayList<>(); - for (int x = 0; x < 3; x++) { - for (int i = 1; i < 4; i++) list.add(inv.getItem(i + (x * 9))); - } - return list; - } - - public ItemStack getResult() { - return inv.getItem(16); - } -} diff --git a/src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/CraftingKey.java b/src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/forging/CraftingKey.java similarity index 73% rename from src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/CraftingKey.java rename to src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/forging/CraftingKey.java index 5208f47..2a0dda6 100644 --- a/src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/CraftingKey.java +++ b/src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/forging/CraftingKey.java @@ -1,4 +1,4 @@ -package io.github.itzispyder.ogredupealias.plugin.custom; +package io.github.itzispyder.ogredupealias.plugin.custom.forging; import io.github.itzispyder.ogredupealias.utils.ArrayUtils; import org.bukkit.Material; @@ -17,13 +17,21 @@ public class CraftingKey { REGISTERED_KEYS.put(key.getKey(),result); } + public static void register(String key, ItemStack result) { + REGISTERED_KEYS.put(key,result); + } + public static ItemStack getResult(CraftingKey key) { ItemStack result = REGISTERED_KEYS.get(key.getKey()); return result != null ? result : new ItemStack(Material.AIR); } public CraftingKey(Iterable input) { - this.key = String.join("-", ArrayUtils.toNewList(input,item -> item.getType().name().toLowerCase() + ":" + item.getItemMeta().getAsString())); + this.key = String.join("-", ArrayUtils.toNewList(input,this::keyOfStack)); + } + + private String keyOfStack(ItemStack item) { + return item != null && item.getItemMeta() != null ? item.getType().name().toLowerCase() + ":" + item.getItemMeta().getAsString() : "air:{}"; } public CraftingKey(ItemStack[] input) { diff --git a/src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/forging/CustomTable.java b/src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/forging/CustomTable.java new file mode 100644 index 0000000..ed0391f --- /dev/null +++ b/src/main/java/io/github/itzispyder/ogredupealias/plugin/custom/forging/CustomTable.java @@ -0,0 +1,99 @@ +package io.github.itzispyder.ogredupealias.plugin.custom.forging; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class CustomTable { + + private final Inventory inv; + + public CustomTable(Inventory inv) { + this.inv = inv; + } + + public void clearGrid() { + getGrid().stream().filter(Objects::nonNull).forEach(item -> item.setAmount(item.getAmount() - 1)); + } + + public List getGrid() { + List list = new ArrayList<>(); + for (int x = 0; x < 3; x++) { + for (int i = 1; i < 4; i++) list.add(inv.getItem(i + (x * 9))); + } + return list; + } + + public CraftingKey getGridKey() { + return new CraftingKey(getGrid()); + } + + public ItemStack getResult() { + return inv.getItem(16); + } + + public int getResultSlot() { + return 16; + } + + public int getCraftingSlot() { + return 14; + } + + public boolean attemptCraft() { + if (CraftingKey.getResult(this.getGridKey()).getType().isAir()) return false; + ItemStack resultSlotItem = inv.getItem(this.getResultSlot()); + if (resultSlotItem != null && !resultSlotItem.getType().isAir()) return false; + ItemStack result = CraftingKey.getResult(this.getGridKey()); + this.clearGrid(); + inv.setItem(this.getResultSlot(),result); + return true; + } + + public List getGridSlots() { + List list = new ArrayList<>(); + for (int x = 0; x < 3; x++) { + for (int i = 1; i < 4; i++) list.add(i + (x * 9)); + } + return list; + } + + public boolean isUnresponsiveSlot(int slot) { + return slot != getCraftingSlot() && slot != getResultSlot() && !getGridSlots().contains(slot); + } + + public static void onInventoryAction(InventoryClickEvent e) { + final Inventory inv = e.getClickedInventory(); + final Player p = (Player) e.getWhoClicked(); + final int slot = e.getSlot(); + final CustomTable table = new CustomTable(inv); + + if (table.isUnresponsiveSlot(slot)) { + e.setCancelled(true); + return; + } + + if (slot == table.getCraftingSlot()) { + e.setCancelled(true); + if (table.attemptCraft()) p.playSound(p.getLocation(), Sound.BLOCK_SMITHING_TABLE_USE,1,1); + else p.playSound(p.getLocation(), Sound.UI_BUTTON_CLICK,1,1); + } + } + + public static void onInventoryClose(InventoryCloseEvent e) { + final Inventory inv = e.getInventory(); + final Player p = (Player) e.getPlayer(); + final CustomTable table = new CustomTable(inv); + + table.getGrid().stream().filter(Objects::nonNull).forEach(item -> { + p.getWorld().dropItem(p.getLocation(),item); + }); + } +}