This commit is contained in:
ImproperIssues
2023-04-15 23:58:23 -07:00
parent f97fbcac21
commit 2536b9ae42
5 changed files with 158 additions and 43 deletions

View File

@@ -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) {}
}

View File

@@ -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();
}

View File

@@ -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<ItemStack> getGrid() {
List<ItemStack> 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);
}
}

View File

@@ -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<ItemStack> 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) {

View File

@@ -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<ItemStack> getGrid() {
List<ItemStack> 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<Integer> getGridSlots() {
List<Integer> 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);
});
}
}