SellingItemsEditGUI.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package me.lethunderhawk.economy.shop;
  2. import me.lethunderhawk.economy.api.EconomyAPI;
  3. import me.lethunderhawk.economy.currency.EconomyManager;
  4. import me.lethunderhawk.fluxapi.FluxService;
  5. import me.lethunderhawk.fluxapi.util.gui.ConfirmationMenu;
  6. import me.lethunderhawk.fluxapi.util.gui.PaginatedInventoryGUI;
  7. import me.lethunderhawk.fluxapi.util.gui.input.SignMenuFactory;
  8. import me.lethunderhawk.fluxapi.util.itemdesign.ItemOptions;
  9. import me.lethunderhawk.fluxapi.util.itemdesign.LoreDesigner;
  10. import me.lethunderhawk.main.BazaarFlux;
  11. import me.lethunderhawk.util.StringUtil;
  12. import net.kyori.adventure.text.Component;
  13. import net.kyori.adventure.text.format.NamedTextColor;
  14. import org.bukkit.Material;
  15. import org.bukkit.entity.Player;
  16. import org.bukkit.event.inventory.ClickType;
  17. import org.bukkit.inventory.ItemStack;
  18. import java.util.Comparator;
  19. import java.util.List;
  20. import java.util.Map;
  21. public class SellingItemsEditGUI extends PaginatedInventoryGUI<Map.Entry<Material, Double>> {
  22. private final EconomyManager manager;
  23. public SellingItemsEditGUI(Player p) {
  24. super("Edit Selling Items", 45, p);
  25. this.manager = FluxService.get(EconomyAPI.class).getManager();
  26. }
  27. @Override
  28. public void buildContent() {
  29. fillGlassPaneBackground();
  30. List<Integer> slots = computeRectangleSlots(10, 23);
  31. setupPagination(manager.getItemValues().getSellingItems().entrySet(), slots);
  32. sortElements(Comparator.comparing(e -> e.getKey().name()));
  33. renderPage();
  34. addNavigationButtons();
  35. setAddItemButton();
  36. setBackButton(39);
  37. setCloseButton(40);
  38. }
  39. private void setAddItemButton() {
  40. setItemWithClickAction(8, new ItemOptions(Material.GREEN_DYE)
  41. .setName(Component.text("Create new Sell offer"))
  42. .setLore(LoreDesigner.createLore("Adds a new Item to the selling List of the Shop GUI"))
  43. .buildItemStack(), this::showAddMaterialSign);
  44. }
  45. private void showAddMaterialSign(Player player, ClickType type) {
  46. new SignMenuFactory(FluxService.get(BazaarFlux.class)).newMenu(List.of(
  47. "",
  48. "",
  49. "l1: Material Name",
  50. "l2: The Price"
  51. )).reopenIfFail(true).response((pl, str) -> {
  52. try{
  53. manager.getItemValues().addSellingItem(Material.valueOf(str[0]), Double.parseDouble(str[1]));
  54. openWithListener(player);
  55. update();
  56. }catch (Exception e){
  57. return false;
  58. }
  59. return true;
  60. }).open(player);
  61. }
  62. @Override
  63. public void update() {
  64. List<Integer> slots = computeRectangleSlots(10, 23);
  65. setupPagination(manager.getItemValues().getSellingItems().entrySet(), slots);
  66. sortElements(Comparator.comparing(e -> e.getKey().name()));
  67. renderPage();
  68. }
  69. @Override
  70. protected void onClick(Map.Entry<Material, Double> element, Player player, ClickType type) {
  71. if(type == ClickType.LEFT) {
  72. showEditSign(player, element);
  73. }else if(type == ClickType.RIGHT) {
  74. showDeletionConfirmation(player, element);
  75. }
  76. }
  77. private void showDeletionConfirmation(Player player, Map.Entry<Material, Double> element) {
  78. ConfirmationMenu menu = new ConfirmationMenu("Stop " + element.getKey().name() + " from selling?", (p) -> {
  79. deleteSellingItem(element);
  80. });
  81. openNext(player, menu);
  82. }
  83. private void deleteSellingItem(Map.Entry<Material, Double> element) {
  84. manager.getItemValues().removeSellingItem(element.getKey());
  85. }
  86. private void showEditSign(Player player, Map.Entry<Material, Double> element) {
  87. new SignMenuFactory(FluxService.get(BazaarFlux.class)).newMenu(List.of(
  88. "",
  89. "^^^^^^^^^^",
  90. "Enter the new",
  91. "price here"
  92. )).reopenIfFail(true).response((pl, str) -> {
  93. editPrice(element, Double.parseDouble(str[0]));
  94. return true;
  95. }).open(player);
  96. }
  97. private void editPrice(Map.Entry<Material, Double> entry, double newPrice) {
  98. manager.getItemValues().addSellingItem(entry.getKey(), newPrice);
  99. }
  100. @Override
  101. protected ItemStack createItem(Map.Entry<Material, Double> entry) {
  102. Material material = entry.getKey();
  103. double price = entry.getValue();
  104. String defaultWidth = LoreDesigner.defaultWidthReference;
  105. return new ItemOptions(material)
  106. .setName(Component.text(StringUtil.toCamelCase(material.name()), NamedTextColor.GREEN))
  107. .setLore(LoreDesigner.createLore("<yellow>Sell Price: " + price + " coins" +
  108. "<br><br><gray>Left click to edit" +
  109. "<br>Right click to delete", defaultWidth)
  110. )
  111. .buildItemStack();
  112. }
  113. }