| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- 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<Map.Entry<Material, Double>> {
- 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<Integer> 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<Integer> slots = computeRectangleSlots(10, 23);
- setupPagination(manager.getItemValues().getSellingItems().entrySet(), slots);
- sortElements(Comparator.comparing(e -> e.getKey().name()));
- renderPage();
- }
- @Override
- protected void onClick(Map.Entry<Material, Double> 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<Material, Double> element) {
- ConfirmationMenu menu = new ConfirmationMenu("Stop " + element.getKey().name() + " from selling?", (p) -> {
- deleteSellingItem(element);
- });
- openNext(player, menu);
- }
- private void deleteSellingItem(Map.Entry<Material, Double> element) {
- manager.getItemValues().removeSellingItem(element.getKey());
- }
- private void showEditSign(Player player, Map.Entry<Material, Double> 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<Material, Double> entry, double newPrice) {
- manager.getItemValues().addSellingItem(entry.getKey(), newPrice);
- }
- @Override
- protected ItemStack createItem(Map.Entry<Material, Double> 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("<yellow>Sell Price: " + price + " coins" +
- "<br><br><gray>Left click to edit" +
- "<br>Right click to delete", defaultWidth)
- )
- .buildItemStack();
- }
- }
|