diff --git a/src/main/java/com/alttd/GUI/windows/BuyGUI.java b/src/main/java/com/alttd/GUI/windows/BuyGUI.java
index 0034e0a..afc1186 100644
--- a/src/main/java/com/alttd/GUI/windows/BuyGUI.java
+++ b/src/main/java/com/alttd/GUI/windows/BuyGUI.java
@@ -20,6 +20,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
+import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@@ -27,7 +28,7 @@ public class BuyGUI extends GUIMerchant {
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
- public BuyGUI(VillagerType villagerType, EconUser econUser) {
+ public BuyGUI(VillagerType villagerType, EconUser econUser, boolean bulk) {
super(miniMessage.deserialize(Config.BUY_WINDOW, TemplateResolver.resolving(
Template.template("trader", villagerType.getDisplayName()),
Template.template("points", String.valueOf(Objects.requireNonNullElse(
@@ -35,6 +36,8 @@ public class BuyGUI extends GUIMerchant {
0)))
)), villagerType);
for (ItemStack itemStack : villagerType.getBuying()) {
+ if (bulk)
+ itemStack.setAmount(itemStack.getMaxStackSize());
Price price = Utilities.getPrice(itemStack, WorthConfig.buy);
if (price == null)
continue;
@@ -58,7 +61,8 @@ public class BuyGUI extends GUIMerchant {
if (balance < cost) {
player.sendMiniMessage(Config.NOT_ENOUGH_MONEY, List.of(
Template.template("money", String.valueOf(Utilities.round(balance, 2))),
- Template.template("price", String.valueOf(cost))));
+ Template.template("price", String.valueOf(cost))
+ ));
return;
}
diff --git a/src/main/java/com/alttd/GUI/windows/OpenGUI.java b/src/main/java/com/alttd/GUI/windows/OpenGUI.java
index ec0988b..a382b4a 100644
--- a/src/main/java/com/alttd/GUI/windows/OpenGUI.java
+++ b/src/main/java/com/alttd/GUI/windows/OpenGUI.java
@@ -18,8 +18,10 @@ import java.util.Objects;
public class OpenGUI extends GUIInventory {
+ private static final ItemStack BULK_BUY = new ItemStack(Material.GOLD_BLOCK);
private static final ItemStack BUY = new ItemStack(Material.GOLD_INGOT);
private static final ItemStack SELL = new ItemStack(Material.BUCKET);
+ private static final ItemStack BULK_SELL = new ItemStack(Material.CAULDRON);
private static final MiniMessage miniMessage;
static {
miniMessage = MiniMessage.miniMessage();
@@ -34,6 +36,16 @@ public class OpenGUI extends GUIInventory {
itemMeta.displayName(miniMessage.deserialize("Sell"));
SELL.setItemMeta(itemMeta);
}
+ {
+ itemMeta = BULK_BUY.getItemMeta();
+ itemMeta.displayName(miniMessage.deserialize("Bulk Buy"));
+ BULK_BUY.setItemMeta(itemMeta);
+ }
+ {
+ itemMeta = BULK_SELL.getItemMeta();
+ itemMeta.displayName(miniMessage.deserialize("Bulk Sell"));
+ BULK_SELL.setItemMeta(itemMeta);
+ }
}
public OpenGUI(VillagerType villagerType, EconUser econUser) {
@@ -43,29 +55,57 @@ public class OpenGUI extends GUIInventory {
econUser.getPointsMap().get(villagerType.getName()),
0)))))
);
- setItem(1, BUY, player -> new BukkitRunnable() {
- @Override
- public void run() {
- BuyGUI buyGUI = new BuyGUI(villagerType, econUser);
- new BukkitRunnable() {
- @Override
- public void run() {
- buyGUI.open(player);
- }
- }.runTask(VillagerUI.getInstance());
- }
- }.runTaskAsynchronously(VillagerUI.getInstance()));
- setItem(3, SELL, player -> new BukkitRunnable() {
- @Override
- public void run() {
- SellGUI sellGUI = new SellGUI(villagerType, econUser);
- new BukkitRunnable() {
- @Override
- public void run() {
- sellGUI.open(player);
- }
- }.runTask(VillagerUI.getInstance());
- }
- }.runTaskAsynchronously(VillagerUI.getInstance()));
+ if (!villagerType.getBuying().isEmpty()) {
+ setItem(0, BULK_BUY, player -> new BukkitRunnable() {
+ @Override
+ public void run() {
+ BuyGUI buyGUI = new BuyGUI(villagerType, econUser, true);
+ new BukkitRunnable() {
+ @Override
+ public void run() {
+ buyGUI.open(player);
+ }
+ }.runTask(VillagerUI.getInstance());
+ }
+ }.runTaskAsynchronously(VillagerUI.getInstance()));
+ setItem(1, BUY, player -> new BukkitRunnable() {
+ @Override
+ public void run() {
+ BuyGUI buyGUI = new BuyGUI(villagerType, econUser, false);
+ new BukkitRunnable() {
+ @Override
+ public void run() {
+ buyGUI.open(player);
+ }
+ }.runTask(VillagerUI.getInstance());
+ }
+ }.runTaskAsynchronously(VillagerUI.getInstance()));
+ }
+ if (!villagerType.getSelling().isEmpty()) {
+ setItem(3, SELL, player -> new BukkitRunnable() {
+ @Override
+ public void run() {
+ SellGUI sellGUI = new SellGUI(villagerType, econUser, false);
+ new BukkitRunnable() {
+ @Override
+ public void run() {
+ sellGUI.open(player);
+ }
+ }.runTask(VillagerUI.getInstance());
+ }
+ }.runTaskAsynchronously(VillagerUI.getInstance()));
+ setItem(4, BULK_SELL, player -> new BukkitRunnable() {
+ @Override
+ public void run() {
+ SellGUI sellGUI = new SellGUI(villagerType, econUser, true);
+ new BukkitRunnable() {
+ @Override
+ public void run() {
+ sellGUI.open(player);
+ }
+ }.runTask(VillagerUI.getInstance());
+ }
+ }.runTaskAsynchronously(VillagerUI.getInstance()));
+ }
}
}
diff --git a/src/main/java/com/alttd/GUI/windows/SellGUI.java b/src/main/java/com/alttd/GUI/windows/SellGUI.java
index 1bb6ca0..4570eeb 100644
--- a/src/main/java/com/alttd/GUI/windows/SellGUI.java
+++ b/src/main/java/com/alttd/GUI/windows/SellGUI.java
@@ -30,34 +30,41 @@ public class SellGUI extends GUIMerchant {
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
- public SellGUI(VillagerType villagerType, EconUser econUser) {
+ public SellGUI(VillagerType villagerType, EconUser econUser, boolean bulk) {
super(MiniMessage.miniMessage().deserialize(Config.SELL_WINDOW, TemplateResolver.resolving(
Template.template("trader", villagerType.getDisplayName()),
Template.template("points", String.valueOf(Objects
.requireNonNullElse(econUser.getPointsMap().get(villagerType.getName())
, 0))))), villagerType);
for (ItemStack itemStack : villagerType.getSelling()) {
+ if (bulk)
+ itemStack.setAmount(1);
Price price = Utilities.getPrice(itemStack, WorthConfig.sell);
if (price == null)
continue;
addItem(itemStack,
getPriceItem(price.getPrice(itemStack.getAmount())),
null,
- player -> sell(villagerType, player, itemStack.getType(), itemStack.getAmount(), price)
+ player -> sell(villagerType, player, itemStack.getType(), itemStack.getAmount(), price, bulk)
);
}
}
- private void sell(VillagerType villagerType, Player player, Material material, int amount, Price price) {
+ private void sell(VillagerType villagerType, Player player, Material material, int amount, Price price, boolean bulk) {
PlayerInventory inventory = player.getInventory();
- if (!inventory.containsAtLeast(new ItemStack(material), amount)) {
+ if (!inventory.containsAtLeast(new ItemStack(material), bulk ? 1 : amount)) {
player.sendMiniMessage(Config.NOT_ENOUGH_ITEMS, List.of(
Template.template("type", material.name()),
- Template.template("amount", String.valueOf(amount))));
+ Template.template("amount", String.valueOf(bulk ? 1 : amount))));
return;
}
+ if (bulk)
+ amount = Arrays.stream(inventory.getContents())
+ .filter(Objects::nonNull)
+ .filter(itemStack -> itemStack.getType().equals(material))
+ .mapToInt(ItemStack::getAmount).sum();
Economy econ = VillagerUI.getInstance().getEconomy();
EconUser econUser = EconUser.getUser(player.getUniqueId());
int oldPoints = Objects.requireNonNullElse(econUser.getPointsMap().get(villagerType.getName()), 0);