ShopGUI.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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.InventoryGUI;
  6. import me.lethunderhawk.fluxapi.util.gui.PaginatedInventoryGUI;
  7. import me.lethunderhawk.fluxapi.util.itemdesign.ItemOptions;
  8. import me.lethunderhawk.fluxapi.util.itemdesign.LoreDesigner;
  9. import me.lethunderhawk.util.StringUtil;
  10. import net.kyori.adventure.text.Component;
  11. import net.kyori.adventure.text.format.NamedTextColor;
  12. import org.bukkit.Material;
  13. import org.bukkit.entity.Player;
  14. import org.bukkit.event.inventory.ClickType;
  15. import org.bukkit.inventory.ItemStack;
  16. import java.util.Comparator;
  17. import java.util.List;
  18. import java.util.Map;
  19. public class ShopGUI extends PaginatedInventoryGUI<Map.Entry<Material, Double>> implements InventoryGUI.AutoCloseHandler {
  20. private final Player player;
  21. private final Map<Material, Double> prices;
  22. private final EconomyManager manager;
  23. public ShopGUI(Player p) {
  24. super("Shop", 45, p);
  25. this.player = p;
  26. this.prices = FluxService.get(EconomyAPI.class).getManager().getItemValues().getSellingItems();
  27. this.manager = FluxService.get(EconomyAPI.class).getManager();
  28. }
  29. @Override
  30. public void performAdditionalComputationOnPlayer(Player p) {
  31. }
  32. @Override
  33. public void buildContent() {
  34. fillGlassPaneBackground();
  35. List<Integer> slots = computeRectangleSlots(10, 23);
  36. setupPagination(prices.entrySet(), slots);
  37. sortElements(Comparator.comparing(e -> e.getKey().name()));
  38. renderPage();
  39. addNavigationButtons();
  40. setCloseButton(40);
  41. setItemWithClickAction(41,
  42. new ItemOptions(Material.HOPPER)
  43. .setName(Component.text("Sell Items", NamedTextColor.YELLOW))
  44. .setLore(LoreDesigner.createLore("<dark_gray>Drag and drop items into this hopper to sell them!"))
  45. .buildItemStack(),
  46. this::sellItem);
  47. if(player.isOp()){
  48. setEditShopButton();
  49. }
  50. if(hasPreviousGUI()){
  51. setBackButton(39);
  52. }
  53. }
  54. private void setEditShopButton() {
  55. setItemWithClickAction(44, new ItemOptions(Material.BOOK).setName(Component.text("Edit the shop", NamedTextColor.RED)).buildItemStack(), this::openEditGUI);
  56. }
  57. private void openEditGUI(Player player, ClickType type) {
  58. openNext(player, new ShopEditGUI());
  59. }
  60. @Override
  61. protected void onClick(Map.Entry<Material, Double> element, Player player, ClickType type) {
  62. if(manager.removeMoney(player.getUniqueId(), element.getValue())){
  63. player.getInventory().addItem(new ItemStack(element.getKey()));
  64. }
  65. }
  66. private void sellItem(Player player, ClickType type) {
  67. ItemValues values = manager.getItemValues();
  68. if(values.getBuyingItems().containsKey(player.getItemOnCursor().getType()) ){
  69. ItemStack cursor = player.getItemOnCursor();
  70. long amount = values.getBuyingItems().get(cursor.getType()).longValue() * cursor.getAmount();
  71. manager.addMoney(player.getUniqueId(), amount);
  72. cursor.setAmount(0);
  73. }
  74. }
  75. @Override
  76. public void update() {
  77. }
  78. @Override
  79. protected ItemStack createItem(Map.Entry<Material, Double> entry) {
  80. Material material = entry.getKey();
  81. double price = entry.getValue();
  82. return new ItemOptions(material)
  83. .setName(Component.text(StringUtil.toCamelCase(material.name()), NamedTextColor.GREEN))
  84. .setLore(List.of(
  85. Component.text("Sell Price: $" + price, NamedTextColor.YELLOW)
  86. ))
  87. .buildItemStack();
  88. }
  89. @Override
  90. public void onClosedByPlayer(Player player) {
  91. }
  92. }