diff --git a/src/main/java/com/alttd/playershops/gui/ListTransactionsGui.java b/src/main/java/com/alttd/playershops/gui/ListTransactionsGui.java new file mode 100644 index 0000000..417db30 --- /dev/null +++ b/src/main/java/com/alttd/playershops/gui/ListTransactionsGui.java @@ -0,0 +1,51 @@ +package com.alttd.playershops.gui; + +import com.alttd.playershops.config.MessageConfig; +import com.alttd.playershops.shop.PlayerShop; +import com.alttd.playershops.shop.ShopTransaction; +import com.alttd.playershops.utils.ShopUtil; +import com.alttd.playershops.utils.Util; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import java.util.List; +import java.util.UUID; + +public class ListTransactionsGui extends AbstractGui { + + private final List transactions; + public ListTransactionsGui(UUID uuid, PlayerShop shop) { + super(uuid); + this.transactions = shop.getTransactions(); + TagResolver placeholders = TagResolver.resolver( + Placeholder.unparsed("page", Integer.toString(pageIndex + 1)), + Placeholder.unparsed("pages", Integer.toString((int) Math.ceil(transactions.size() / 45))) + ); + this.inventory = Bukkit.createInventory(this, INV_SIZE, Util.parseMiniMessage(MessageConfig.GUI_LIST_TRANSACTIONS_TITLE, placeholders)); + initInvContents(); + makeMenuBar(); + } + + @Override + void initInvContents() { + super.initInvContents(); + + int startIndex = pageIndex * 45; + ItemStack item; + for (int i = startIndex; i < transactions.size(); i++) { + item = ShopUtil.getShopTransactionItem(transactions.get(i)); + + if (!addItem(item)) { + addNextPageItem(); + break; + } + } + if (pageIndex > 0) { + addPrevPageItem(); + } + } + +} diff --git a/src/main/java/com/alttd/playershops/gui/ShopManagementGui.java b/src/main/java/com/alttd/playershops/gui/ShopManagementGui.java index 41cf5a7..3125920 100644 --- a/src/main/java/com/alttd/playershops/gui/ShopManagementGui.java +++ b/src/main/java/com/alttd/playershops/gui/ShopManagementGui.java @@ -88,7 +88,9 @@ public class ShopManagementGui extends AbstractGui { getPlayer().sendMiniMessage("You can't widraw money from this shop", null); } } else if (slot == GuiIcon.MANAGE_SHOP_SALES.getSlot() && GuiIcon.MANAGE_SHOP_SALES.getItemStack().equals(item)) { - + ListTransactionsGui listTransactionsGui = new ListTransactionsGui(uuid, shop); + listTransactionsGui.setLastGui(this); + listTransactionsGui.open(); } else if (slot == GuiIcon.MANAGE_SHOP_ITEM.getSlot() && GuiIcon.MANAGE_SHOP_ITEM.getItemStack().equals(item)) { openChangePrompt(ConversationType.CHANGE_ITEM); } else if (slot == GuiIcon.MANAGE_SHOP_TYPE.getSlot() && GuiIcon.MANAGE_SHOP_TYPE.getItemStack().equals(item)) { diff --git a/src/main/java/com/alttd/playershops/shop/PlayerShop.java b/src/main/java/com/alttd/playershops/shop/PlayerShop.java index 56a5266..cec445b 100644 --- a/src/main/java/com/alttd/playershops/shop/PlayerShop.java +++ b/src/main/java/com/alttd/playershops/shop/PlayerShop.java @@ -17,6 +17,7 @@ import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; +import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -50,6 +51,8 @@ public class PlayerShop { private boolean notifiedOwner = false; @Getter @Setter private boolean dirty; + @Getter + private List transactions = new ArrayList<>(); public PlayerShop(Location shopLocation, Location signLocation, Player player) { this(shopLocation, signLocation, player.getUniqueId(), player.getName()); @@ -270,6 +273,7 @@ public class PlayerShop { InventoryUtils.addItem(player.getInventory(), itemStack); player.updateInventory(); + addTransaction(new ShopTransaction(ShopAction.SELL, player.getName(), orders, price)); return TransactionError.NONE; } @@ -310,6 +314,7 @@ public class PlayerShop { InventoryUtils.addItem(getInventory(), itemStack); player.updateInventory(); + addTransaction(new ShopTransaction(ShopAction.BUY, player.getName(), orders, price)); return TransactionError.NONE; } @@ -379,6 +384,10 @@ public class PlayerShop { updateSign(); } + private void addTransaction(ShopTransaction transaction) { + transactions.add(transaction); + } + @Override public String toString() { return "Shop: " + this.getShopID() diff --git a/src/main/java/com/alttd/playershops/shop/ShopTransaction.java b/src/main/java/com/alttd/playershops/shop/ShopTransaction.java new file mode 100644 index 0000000..3e881ca --- /dev/null +++ b/src/main/java/com/alttd/playershops/shop/ShopTransaction.java @@ -0,0 +1,3 @@ +package com.alttd.playershops.shop; + +public record ShopTransaction(ShopAction shopAction, String Name, int transactions, double value) {} diff --git a/src/main/java/com/alttd/playershops/utils/ShopUtil.java b/src/main/java/com/alttd/playershops/utils/ShopUtil.java index 567d4ea..1f079c1 100644 --- a/src/main/java/com/alttd/playershops/utils/ShopUtil.java +++ b/src/main/java/com/alttd/playershops/utils/ShopUtil.java @@ -1,9 +1,13 @@ package com.alttd.playershops.utils; +import com.alttd.playershops.gui.GuiIcon; import com.alttd.playershops.shop.PlayerShop; +import com.alttd.playershops.shop.ShopTransaction; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -12,8 +16,11 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.EnchantmentStorageMeta; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.UUID; @@ -150,6 +157,27 @@ public class ShopUtil { return skull; } + public static ItemStack getShopTransactionItem(ShopTransaction shopTransaction) { + ItemStack itemStack = new ItemStack(Material.ENCHANTED_BOOK); + ItemMeta meta = itemStack.getItemMeta(); + List lore = new ArrayList<>(); + TagResolver placeholders = TagResolver.resolver( + Placeholder.unparsed("name", shopTransaction.Name()), + Placeholder.unparsed("amount", shopTransaction.transactions() + ""), + Placeholder.unparsed("value", shopTransaction.value() + ""), + Placeholder.unparsed("action", shopTransaction.shopAction().name() + "") + ); + lore.add(Util.parseMiniMessage("PlayerName: ", placeholders)); + lore.add(Util.parseMiniMessage("Amount: ", placeholders)); + lore.add(Util.parseMiniMessage("Value: ", placeholders)); + lore.add(Util.parseMiniMessage("Action: ", placeholders)); + + meta.lore(lore); + itemStack.setItemMeta(meta); + + return itemStack; + } + // TODO upgrade this to an util method check if owner/trusted and open management interface public static boolean canManageShop(Player player, PlayerShop playerShop) { if (playerShop.getOwnerUUID().equals(player.getUniqueId())) {