package me.lethunderhawk.economy.shop; import me.lethunderhawk.economy.api.EconomyAPI; import me.lethunderhawk.economy.currency.EconomyManager; import me.lethunderhawk.fluxapi.FluxService; import me.lethunderhawk.fluxapi.util.gui.InventoryGUI; import me.lethunderhawk.fluxapi.util.gui.PaginatedInventoryGUI; import me.lethunderhawk.fluxapi.util.itemdesign.ItemOptions; import me.lethunderhawk.fluxapi.util.itemdesign.LoreDesigner; import me.lethunderhawk.util.StringUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; import java.util.Comparator; import java.util.List; import java.util.Map; public class ShopGUI extends PaginatedInventoryGUI> implements InventoryGUI.AutoCloseHandler { private final Player player; private final Map prices; private final EconomyManager manager; public ShopGUI(Player p) { super("Shop", 45, p); this.player = p; this.prices = FluxService.get(EconomyAPI.class).getManager().getItemValues().getSellingItems(); this.manager = FluxService.get(EconomyAPI.class).getManager(); } @Override public void performAdditionalComputationOnPlayer(Player p) { } @Override public void buildContent() { fillGlassPaneBackground(); List slots = computeRectangleSlots(10, 23); setupPagination(prices.entrySet(), slots); sortElements(Comparator.comparing(e -> e.getKey().name())); renderPage(); addNavigationButtons(); setCloseButton(40); setItemWithClickAction(41, new ItemOptions(Material.HOPPER) .setName(Component.text("Sell Items", NamedTextColor.YELLOW)) .setLore(LoreDesigner.createLore("Drag and drop items into this hopper to sell them!")) .buildItemStack(), this::sellItem); if(player.isOp()){ setEditShopButton(); } if(hasPreviousGUI()){ setBackButton(39); } } private void setEditShopButton() { setItemWithClickAction(44, new ItemOptions(Material.BOOK).setName(Component.text("Edit the shop", NamedTextColor.RED)).buildItemStack(), this::openEditGUI); } private void openEditGUI(Player player, ClickType type) { openNext(player, new ShopEditGUI()); } @Override protected void onClick(Map.Entry element, Player player, ClickType type) { if(manager.removeMoney(player.getUniqueId(), element.getValue())){ player.getInventory().addItem(new ItemStack(element.getKey())); } } private void sellItem(Player player, ClickType type) { ItemValues values = manager.getItemValues(); if(values.getBuyingItems().containsKey(player.getItemOnCursor().getType()) ){ ItemStack cursor = player.getItemOnCursor(); long amount = values.getBuyingItems().get(cursor.getType()).longValue() * cursor.getAmount(); manager.addMoney(player.getUniqueId(), amount); cursor.setAmount(0); } } @Override public void update() { } @Override protected ItemStack createItem(Map.Entry entry) { Material material = entry.getKey(); double price = entry.getValue(); return new ItemOptions(material) .setName(Component.text(StringUtil.toCamelCase(material.name()), NamedTextColor.GREEN)) .setLore(List.of( Component.text("Sell Price: $" + price, NamedTextColor.YELLOW) )) .buildItemStack(); } @Override public void onClosedByPlayer(Player player) { } }