Added bulk selling/buying
This commit is contained in:
parent
deb2494ce4
commit
149dd46eaf
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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("<green>Sell</green>"));
|
||||
SELL.setItemMeta(itemMeta);
|
||||
}
|
||||
{
|
||||
itemMeta = BULK_BUY.getItemMeta();
|
||||
itemMeta.displayName(miniMessage.deserialize("<green>Bulk Buy</green>"));
|
||||
BULK_BUY.setItemMeta(itemMeta);
|
||||
}
|
||||
{
|
||||
itemMeta = BULK_SELL.getItemMeta();
|
||||
itemMeta.displayName(miniMessage.deserialize("<green>Bulk Sell</green>"));
|
||||
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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user