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.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
|
@ -27,7 +28,7 @@ public class BuyGUI extends GUIMerchant {
|
||||||
|
|
||||||
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
|
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(
|
super(miniMessage.deserialize(Config.BUY_WINDOW, TemplateResolver.resolving(
|
||||||
Template.template("trader", villagerType.getDisplayName()),
|
Template.template("trader", villagerType.getDisplayName()),
|
||||||
Template.template("points", String.valueOf(Objects.requireNonNullElse(
|
Template.template("points", String.valueOf(Objects.requireNonNullElse(
|
||||||
|
|
@ -35,6 +36,8 @@ public class BuyGUI extends GUIMerchant {
|
||||||
0)))
|
0)))
|
||||||
)), villagerType);
|
)), villagerType);
|
||||||
for (ItemStack itemStack : villagerType.getBuying()) {
|
for (ItemStack itemStack : villagerType.getBuying()) {
|
||||||
|
if (bulk)
|
||||||
|
itemStack.setAmount(itemStack.getMaxStackSize());
|
||||||
Price price = Utilities.getPrice(itemStack, WorthConfig.buy);
|
Price price = Utilities.getPrice(itemStack, WorthConfig.buy);
|
||||||
if (price == null)
|
if (price == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -58,7 +61,8 @@ public class BuyGUI extends GUIMerchant {
|
||||||
if (balance < cost) {
|
if (balance < cost) {
|
||||||
player.sendMiniMessage(Config.NOT_ENOUGH_MONEY, List.of(
|
player.sendMiniMessage(Config.NOT_ENOUGH_MONEY, List.of(
|
||||||
Template.template("money", String.valueOf(Utilities.round(balance, 2))),
|
Template.template("money", String.valueOf(Utilities.round(balance, 2))),
|
||||||
Template.template("price", String.valueOf(cost))));
|
Template.template("price", String.valueOf(cost))
|
||||||
|
));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,10 @@ import java.util.Objects;
|
||||||
|
|
||||||
public class OpenGUI extends GUIInventory {
|
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 BUY = new ItemStack(Material.GOLD_INGOT);
|
||||||
private static final ItemStack SELL = new ItemStack(Material.BUCKET);
|
private static final ItemStack SELL = new ItemStack(Material.BUCKET);
|
||||||
|
private static final ItemStack BULK_SELL = new ItemStack(Material.CAULDRON);
|
||||||
private static final MiniMessage miniMessage;
|
private static final MiniMessage miniMessage;
|
||||||
static {
|
static {
|
||||||
miniMessage = MiniMessage.miniMessage();
|
miniMessage = MiniMessage.miniMessage();
|
||||||
|
|
@ -34,6 +36,16 @@ public class OpenGUI extends GUIInventory {
|
||||||
itemMeta.displayName(miniMessage.deserialize("<green>Sell</green>"));
|
itemMeta.displayName(miniMessage.deserialize("<green>Sell</green>"));
|
||||||
SELL.setItemMeta(itemMeta);
|
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) {
|
public OpenGUI(VillagerType villagerType, EconUser econUser) {
|
||||||
|
|
@ -43,29 +55,57 @@ public class OpenGUI extends GUIInventory {
|
||||||
econUser.getPointsMap().get(villagerType.getName()),
|
econUser.getPointsMap().get(villagerType.getName()),
|
||||||
0)))))
|
0)))))
|
||||||
);
|
);
|
||||||
setItem(1, BUY, player -> new BukkitRunnable() {
|
if (!villagerType.getBuying().isEmpty()) {
|
||||||
@Override
|
setItem(0, BULK_BUY, player -> new BukkitRunnable() {
|
||||||
public void run() {
|
@Override
|
||||||
BuyGUI buyGUI = new BuyGUI(villagerType, econUser);
|
public void run() {
|
||||||
new BukkitRunnable() {
|
BuyGUI buyGUI = new BuyGUI(villagerType, econUser, true);
|
||||||
@Override
|
new BukkitRunnable() {
|
||||||
public void run() {
|
@Override
|
||||||
buyGUI.open(player);
|
public void run() {
|
||||||
}
|
buyGUI.open(player);
|
||||||
}.runTask(VillagerUI.getInstance());
|
}
|
||||||
}
|
}.runTask(VillagerUI.getInstance());
|
||||||
}.runTaskAsynchronously(VillagerUI.getInstance()));
|
}
|
||||||
setItem(3, SELL, player -> new BukkitRunnable() {
|
}.runTaskAsynchronously(VillagerUI.getInstance()));
|
||||||
@Override
|
setItem(1, BUY, player -> new BukkitRunnable() {
|
||||||
public void run() {
|
@Override
|
||||||
SellGUI sellGUI = new SellGUI(villagerType, econUser);
|
public void run() {
|
||||||
new BukkitRunnable() {
|
BuyGUI buyGUI = new BuyGUI(villagerType, econUser, false);
|
||||||
@Override
|
new BukkitRunnable() {
|
||||||
public void run() {
|
@Override
|
||||||
sellGUI.open(player);
|
public void run() {
|
||||||
}
|
buyGUI.open(player);
|
||||||
}.runTask(VillagerUI.getInstance());
|
}
|
||||||
}
|
}.runTask(VillagerUI.getInstance());
|
||||||
}.runTaskAsynchronously(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();
|
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(
|
super(MiniMessage.miniMessage().deserialize(Config.SELL_WINDOW, TemplateResolver.resolving(
|
||||||
Template.template("trader", villagerType.getDisplayName()),
|
Template.template("trader", villagerType.getDisplayName()),
|
||||||
Template.template("points", String.valueOf(Objects
|
Template.template("points", String.valueOf(Objects
|
||||||
.requireNonNullElse(econUser.getPointsMap().get(villagerType.getName())
|
.requireNonNullElse(econUser.getPointsMap().get(villagerType.getName())
|
||||||
, 0))))), villagerType);
|
, 0))))), villagerType);
|
||||||
for (ItemStack itemStack : villagerType.getSelling()) {
|
for (ItemStack itemStack : villagerType.getSelling()) {
|
||||||
|
if (bulk)
|
||||||
|
itemStack.setAmount(1);
|
||||||
Price price = Utilities.getPrice(itemStack, WorthConfig.sell);
|
Price price = Utilities.getPrice(itemStack, WorthConfig.sell);
|
||||||
if (price == null)
|
if (price == null)
|
||||||
continue;
|
continue;
|
||||||
addItem(itemStack,
|
addItem(itemStack,
|
||||||
getPriceItem(price.getPrice(itemStack.getAmount())),
|
getPriceItem(price.getPrice(itemStack.getAmount())),
|
||||||
null,
|
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();
|
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(
|
player.sendMiniMessage(Config.NOT_ENOUGH_ITEMS, List.of(
|
||||||
Template.template("type", material.name()),
|
Template.template("type", material.name()),
|
||||||
Template.template("amount", String.valueOf(amount))));
|
Template.template("amount", String.valueOf(bulk ? 1 : amount))));
|
||||||
return;
|
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();
|
Economy econ = VillagerUI.getInstance().getEconomy();
|
||||||
EconUser econUser = EconUser.getUser(player.getUniqueId());
|
EconUser econUser = EconUser.getUser(player.getUniqueId());
|
||||||
int oldPoints = Objects.requireNonNullElse(econUser.getPointsMap().get(villagerType.getName()), 0);
|
int oldPoints = Objects.requireNonNullElse(econUser.getPointsMap().get(villagerType.getName()), 0);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user