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) {