| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- 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<Map.Entry<Material, Double>> implements InventoryGUI.AutoCloseHandler {
- private final Player player;
- private final Map<Material, Double> 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<Integer> 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("<dark_gray>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<Material, Double> 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<Material, Double> 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) {
- }
- }
|