diff --git a/pom.xml b/pom.xml index 75e7733..7b8a340 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ 4.0.0 ca.tweetzy auctionhouse - 2.18.4 + 2.19.0 UTF-8 diff --git a/src/main/java/ca/tweetzy/auctionhouse/guis/GUIAuctionHouse.java b/src/main/java/ca/tweetzy/auctionhouse/guis/GUIAuctionHouse.java index 8750601..abc61ff 100644 --- a/src/main/java/ca/tweetzy/auctionhouse/guis/GUIAuctionHouse.java +++ b/src/main/java/ca/tweetzy/auctionhouse/guis/GUIAuctionHouse.java @@ -167,6 +167,7 @@ public class GUIAuctionHouse extends Gui { cleanup(); e.manager.showGUI(e.player, new GUIConfirmPurchase(this.auctionPlayer, auctionItem, false)); + AuctionHouse.getInstance().getTransactionManager().addPrePurchase(e.player, auctionItem.getKey()); } return; } diff --git a/src/main/java/ca/tweetzy/auctionhouse/guis/GUIContainerInspect.java b/src/main/java/ca/tweetzy/auctionhouse/guis/GUIContainerInspect.java index 484a36a..ebe23c9 100644 --- a/src/main/java/ca/tweetzy/auctionhouse/guis/GUIContainerInspect.java +++ b/src/main/java/ca/tweetzy/auctionhouse/guis/GUIContainerInspect.java @@ -2,6 +2,9 @@ package ca.tweetzy.auctionhouse.guis; import ca.tweetzy.auctionhouse.AuctionHouse; import ca.tweetzy.auctionhouse.api.AuctionAPI; +import ca.tweetzy.auctionhouse.auction.AuctionItem; +import ca.tweetzy.auctionhouse.auction.AuctionPlayer; +import ca.tweetzy.auctionhouse.guis.confirmation.GUIConfirmPurchase; import ca.tweetzy.auctionhouse.helpers.ConfigurationItemHelper; import ca.tweetzy.auctionhouse.settings.Settings; import ca.tweetzy.core.gui.Gui; @@ -26,9 +29,14 @@ import java.util.stream.Collectors; */ public class GUIContainerInspect extends Gui { - final int[] fillSlots = {0, 1, 2, 3, 4, 5, 6, 7, 8, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 46, 47, 48, 50, 51, 52, 53}; - final ItemStack container; - List items; + private final int[] fillSlots = {0, 1, 2, 3, 4, 5, 6, 7, 8, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 46, 47, 48, 50, 51, 52, 53}; + private final ItemStack container; + private List items; + + private AuctionPlayer auctionPlayer; + private AuctionItem auctionItem; + private boolean buyingSpecificQuantity; + private boolean fromPurchaseGUI; /** * Used to inspect a shulker box from it's item stack. @@ -37,6 +45,7 @@ public class GUIContainerInspect extends Gui { */ public GUIContainerInspect(ItemStack container) { this.container = container; + this.fromPurchaseGUI = false; setTitle(TextUtils.formatText(Settings.GUI_INSPECT_TITLE.getString())); setDefaultItem(Settings.GUI_INSPECT_BG_ITEM.getMaterial().parseItem()); setUseLockedCells(false); @@ -64,6 +73,20 @@ public class GUIContainerInspect extends Gui { setOnClose(close -> close.manager.showGUI(close.player, new GUIAuctionHouse(AuctionHouse.getInstance().getAuctionPlayerManager().getPlayer(close.player.getUniqueId())))); } + public GUIContainerInspect(ItemStack container, AuctionPlayer auctionPlayer, AuctionItem auctionItem, boolean buyingSpecificQuantity) { + this(container); + this.auctionPlayer = auctionPlayer; + this.auctionItem = auctionItem; + this.buyingSpecificQuantity = buyingSpecificQuantity; + this.fromPurchaseGUI = true; + + // Overwrite the default close, since they are accessing the inspection from the purchase screen + setOnClose(close -> { + AuctionHouse.getInstance().getTransactionManager().addPrePurchase(close.player, auctionItem.getKey()); + close.manager.showGUI(close.player, new GUIConfirmPurchase(this.auctionPlayer, this.auctionItem, this.buyingSpecificQuantity)); + }); + } + private void draw() { reset(); pages = (int) Math.max(1, Math.ceil(this.items.size() / (double) 27L)); @@ -71,7 +94,14 @@ public class GUIContainerInspect extends Gui { for (int i : fillSlots) setItem(i, getDefaultItem()); setPrevPage(5, 3, new TItemBuilder(Objects.requireNonNull(Settings.GUI_BACK_BTN_ITEM.getMaterial().parseMaterial())).setName(Settings.GUI_BACK_BTN_NAME.getString()).setLore(Settings.GUI_BACK_BTN_LORE.getStringList()).toItemStack()); - setButton(5, 4, ConfigurationItemHelper.createConfigurationItem(Settings.GUI_CLOSE_BTN_ITEM.getString(), Settings.GUI_CLOSE_BTN_NAME.getString(), Settings.GUI_CLOSE_BTN_LORE.getStringList(), null), e -> e.manager.showGUI(e.player, new GUIAuctionHouse(AuctionHouse.getInstance().getAuctionPlayerManager().getPlayer(e.player.getUniqueId())))); + setButton(5, 4, ConfigurationItemHelper.createConfigurationItem(Settings.GUI_CLOSE_BTN_ITEM.getString(), Settings.GUI_CLOSE_BTN_NAME.getString(), Settings.GUI_CLOSE_BTN_LORE.getStringList(), null), e -> { + if (fromPurchaseGUI) { + AuctionHouse.getInstance().getTransactionManager().addPrePurchase(e.player, auctionItem.getKey()); + e.manager.showGUI(e.player, new GUIConfirmPurchase(this.auctionPlayer, this.auctionItem, this.buyingSpecificQuantity)); + } else { + e.manager.showGUI(e.player, new GUIAuctionHouse(AuctionHouse.getInstance().getAuctionPlayerManager().getPlayer(e.player.getUniqueId()))); + } + }); setNextPage(5, 5, new TItemBuilder(Objects.requireNonNull(Settings.GUI_NEXT_BTN_ITEM.getMaterial().parseMaterial())).setName(Settings.GUI_NEXT_BTN_NAME.getString()).setLore(Settings.GUI_NEXT_BTN_LORE.getStringList()).toItemStack()); setOnPage(e -> draw()); diff --git a/src/main/java/ca/tweetzy/auctionhouse/guis/confirmation/GUIConfirmPurchase.java b/src/main/java/ca/tweetzy/auctionhouse/guis/confirmation/GUIConfirmPurchase.java index 02f3c46..a749ad9 100644 --- a/src/main/java/ca/tweetzy/auctionhouse/guis/confirmation/GUIConfirmPurchase.java +++ b/src/main/java/ca/tweetzy/auctionhouse/guis/confirmation/GUIConfirmPurchase.java @@ -8,6 +8,7 @@ import ca.tweetzy.auctionhouse.auction.AuctionPlayer; import ca.tweetzy.auctionhouse.auction.AuctionSaleType; import ca.tweetzy.auctionhouse.exception.ItemNotFoundException; import ca.tweetzy.auctionhouse.guis.GUIAuctionHouse; +import ca.tweetzy.auctionhouse.guis.GUIContainerInspect; import ca.tweetzy.auctionhouse.helpers.ConfigurationItemHelper; import ca.tweetzy.auctionhouse.managers.SoundManager; import ca.tweetzy.auctionhouse.settings.Settings; @@ -18,9 +19,11 @@ import ca.tweetzy.core.utils.TextUtils; import ca.tweetzy.core.utils.items.TItemBuilder; import org.apache.commons.lang.WordUtils; import org.bukkit.Bukkit; +import org.bukkit.block.ShulkerBox; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BlockStateMeta; import java.util.HashMap; import java.util.Objects; @@ -73,10 +76,21 @@ public class GUIConfirmPurchase extends Gui { } private void draw() { + ItemStack deserializeItem = AuctionAPI.getInstance().deserializeItem(this.auctionItem.getRawItem()); + setItems(this.buyingSpecificQuantity ? 9 : 0, this.buyingSpecificQuantity ? 12 : 3, new TItemBuilder(Objects.requireNonNull(Settings.GUI_CONFIRM_BUY_YES_ITEM.getMaterial().parseMaterial())).setName(Settings.GUI_CONFIRM_BUY_YES_NAME.getString()).setLore(Settings.GUI_CONFIRM_BUY_YES_LORE.getStringList()).toItemStack()); - setItem(this.buyingSpecificQuantity ? 1 : 0, 4, AuctionAPI.getInstance().deserializeItem(this.auctionItem.getRawItem())); + setItem(this.buyingSpecificQuantity ? 1 : 0, 4, deserializeItem); setItems(this.buyingSpecificQuantity ? 14 : 5, this.buyingSpecificQuantity ? 17 : 8, new TItemBuilder(Objects.requireNonNull(Settings.GUI_CONFIRM_BUY_NO_ITEM.getMaterial().parseMaterial())).setName(Settings.GUI_CONFIRM_BUY_NO_NAME.getString()).setLore(Settings.GUI_CONFIRM_BUY_NO_LORE.getStringList()).toItemStack()); + setAction(this.buyingSpecificQuantity ? 1 : 0, 4, ClickType.LEFT, e -> { + if (deserializeItem.getItemMeta() instanceof BlockStateMeta) { + if (((BlockStateMeta) deserializeItem.getItemMeta()).getBlockState() instanceof ShulkerBox) { + AuctionHouse.getInstance().getTransactionManager().getPrePurchaseHolding().remove(e.player); + e.manager.showGUI(e.player, new GUIContainerInspect(e.clickedItem, this.auctionPlayer, this.auctionItem, this.buyingSpecificQuantity)); + } + } + }); + setActionForRange(this.buyingSpecificQuantity ? 14 : 5, this.buyingSpecificQuantity ? 17 : 8, ClickType.LEFT, e -> { e.gui.close(); }); diff --git a/src/main/java/ca/tweetzy/auctionhouse/managers/TransactionManager.java b/src/main/java/ca/tweetzy/auctionhouse/managers/TransactionManager.java index 1991936..cfd2aee 100644 --- a/src/main/java/ca/tweetzy/auctionhouse/managers/TransactionManager.java +++ b/src/main/java/ca/tweetzy/auctionhouse/managers/TransactionManager.java @@ -7,10 +7,7 @@ import ca.tweetzy.core.utils.TextUtils; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -23,7 +20,7 @@ import java.util.stream.Collectors; public class TransactionManager { private final ConcurrentHashMap transactions = new ConcurrentHashMap<>(); - private final HashMap prePurchaseHolding = new HashMap<>(); + private final ConcurrentHashMap prePurchaseHolding = new ConcurrentHashMap<>(); public void addTransaction(Transaction transaction) { if (transaction == null) return; @@ -43,11 +40,27 @@ public class TransactionManager { } public int getTotalItemsBought(UUID buyer) { - return (int) this.transactions.entrySet().stream().filter(set -> set.getValue().getBuyer().equals(buyer)).count(); + int total = 0; + Iterator> iterator = this.transactions.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (entry.getValue().getBuyer().equals(buyer)) { + total++; + } + } + return total; } public int getTotalItemsSold(UUID seller) { - return (int) this.transactions.entrySet().stream().filter(set -> set.getValue().getSeller().equals(seller)).count(); + int total = 0; + Iterator> iterator = this.transactions.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (entry.getValue().getSeller().equals(seller)) { + total++; + } + } + return total; } public void addPrePurchase(Player player, UUID uuid) { @@ -58,8 +71,8 @@ public class TransactionManager { this.prePurchaseHolding.keySet().removeIf(p -> this.prePurchaseHolding.get(p).equals(uuid)); } - public HashMap getPrePurchaseHolding() { - return prePurchaseHolding; + public ConcurrentHashMap getPrePurchaseHolding() { + return this.prePurchaseHolding; } public List getPrePurchasePlayers(UUID uuid) {