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.ConfirmationMenu; import me.lethunderhawk.fluxapi.util.gui.PaginatedInventoryGUI; import me.lethunderhawk.fluxapi.util.gui.input.SignMenuFactory; import me.lethunderhawk.fluxapi.util.itemdesign.ItemOptions; import me.lethunderhawk.fluxapi.util.itemdesign.LoreDesigner; import me.lethunderhawk.main.BazaarFlux; 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 SellingItemsEditGUI extends PaginatedInventoryGUI> { private final EconomyManager manager; public SellingItemsEditGUI(Player p) { super("Edit Selling Items", 45, p); this.manager = FluxService.get(EconomyAPI.class).getManager(); } @Override public void buildContent() { fillGlassPaneBackground(); List slots = computeRectangleSlots(10, 23); setupPagination(manager.getItemValues().getSellingItems().entrySet(), slots); sortElements(Comparator.comparing(e -> e.getKey().name())); renderPage(); addNavigationButtons(); setAddItemButton(); setBackButton(39); setCloseButton(40); } private void setAddItemButton() { setItemWithClickAction(8, new ItemOptions(Material.GREEN_DYE) .setName(Component.text("Create new Sell offer")) .setLore(LoreDesigner.createLore("Adds a new Item to the selling List of the Shop GUI")) .buildItemStack(), this::showAddMaterialSign); } private void showAddMaterialSign(Player player, ClickType type) { new SignMenuFactory(FluxService.get(BazaarFlux.class)).newMenu(List.of( "", "", "l1: Material Name", "l2: The Price" )).reopenIfFail(true).response((pl, str) -> { try{ manager.getItemValues().addSellingItem(Material.valueOf(str[0]), Double.parseDouble(str[1])); openWithListener(player); update(); }catch (Exception e){ return false; } return true; }).open(player); } @Override public void update() { List slots = computeRectangleSlots(10, 23); setupPagination(manager.getItemValues().getSellingItems().entrySet(), slots); sortElements(Comparator.comparing(e -> e.getKey().name())); renderPage(); } @Override protected void onClick(Map.Entry element, Player player, ClickType type) { if(type == ClickType.LEFT) { showEditSign(player, element); }else if(type == ClickType.RIGHT) { showDeletionConfirmation(player, element); } } private void showDeletionConfirmation(Player player, Map.Entry element) { ConfirmationMenu menu = new ConfirmationMenu("Stop " + element.getKey().name() + " from selling?", (p) -> { deleteSellingItem(element); }); openNext(player, menu); } private void deleteSellingItem(Map.Entry element) { manager.getItemValues().removeSellingItem(element.getKey()); } private void showEditSign(Player player, Map.Entry element) { new SignMenuFactory(FluxService.get(BazaarFlux.class)).newMenu(List.of( "", "^^^^^^^^^^", "Enter the new", "price here" )).reopenIfFail(true).response((pl, str) -> { editPrice(element, Double.parseDouble(str[0])); return true; }).open(player); } private void editPrice(Map.Entry entry, double newPrice) { manager.getItemValues().addSellingItem(entry.getKey(), newPrice); } @Override protected ItemStack createItem(Map.Entry entry) { Material material = entry.getKey(); double price = entry.getValue(); String defaultWidth = LoreDesigner.defaultWidthReference; return new ItemOptions(material) .setName(Component.text(StringUtil.toCamelCase(material.name()), NamedTextColor.GREEN)) .setLore(LoreDesigner.createLore("Sell Price: " + price + " coins" + "

Left click to edit" + "
Right click to delete", defaultWidth) ) .buildItemStack(); } }