commit
This commit is contained in:
@@ -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) {}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user