From 5ce955d6ee479d401ac37e73056a5cb9e39012c0 Mon Sep 17 00:00:00 2001 From: stjn Date: Sun, 7 Nov 2021 18:10:50 +0100 Subject: [PATCH] Charge money/give money when buying/selling --- .../java/com/alttd/GUI/windows/BuyGUI.java | 22 ++++++++++++++----- .../java/com/alttd/GUI/windows/SellGUI.java | 15 ++++++++----- src/main/java/com/alttd/VillagerUI.java | 21 ++++++++++++++++++ src/main/java/com/alttd/config/Config.java | 6 +++++ 4 files changed, 54 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/alttd/GUI/windows/BuyGUI.java b/src/main/java/com/alttd/GUI/windows/BuyGUI.java index 3669b54..7b1dd38 100644 --- a/src/main/java/com/alttd/GUI/windows/BuyGUI.java +++ b/src/main/java/com/alttd/GUI/windows/BuyGUI.java @@ -1,12 +1,14 @@ package com.alttd.GUI.windows; import com.alttd.GUI.GUIMerchant; +import com.alttd.VillagerUI; import com.alttd.config.Config; import com.alttd.objects.Price; import com.alttd.objects.VillagerType; import com.alttd.util.Utilities; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.Template; +import net.milkbowl.vault.economy.Economy; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -35,11 +37,21 @@ public class BuyGUI extends GUIMerchant { private void buy(Player player, Material material, int amount, double price) { - player.sendMessage(MiniMessage.get().parse( - "Hi! you bought: " + amount + - " " + material.name() + - " for " + price + - ".")); + Economy econ = VillagerUI.getEcon(); + double balance = econ.getBalance(player); + + price *= amount; + if (balance < amount) { + player.sendMessage(MiniMessage.get().parse(Config.NOT_ENOUGH_MONEY, + Template.of("money", String.valueOf(Utilities.round(balance, 2))), + Template.of("price", String.valueOf(price)))); + return; + } + econ.withdrawPlayer(player, price); + player.sendMessage(MiniMessage.get().parse(Config.PURCHASED_ITEM, + Template.of("amount", String.valueOf(amount)), + Template.of("item", material.toString()), + Template.of("price", String.valueOf(price)))); } private ItemStack getPriceItem(double price) { diff --git a/src/main/java/com/alttd/GUI/windows/SellGUI.java b/src/main/java/com/alttd/GUI/windows/SellGUI.java index 3aafda9..9e1c435 100644 --- a/src/main/java/com/alttd/GUI/windows/SellGUI.java +++ b/src/main/java/com/alttd/GUI/windows/SellGUI.java @@ -1,12 +1,14 @@ package com.alttd.GUI.windows; import com.alttd.GUI.GUIMerchant; +import com.alttd.VillagerUI; import com.alttd.config.Config; import com.alttd.objects.Price; import com.alttd.objects.VillagerType; import com.alttd.util.Utilities; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.Template; +import net.milkbowl.vault.economy.Economy; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -35,11 +37,14 @@ public class SellGUI extends GUIMerchant { private void sell(Player player, Material material, int amount, double price) { - player.sendMessage(MiniMessage.get().parse( - "Hi! you sold: " + amount + - " " + material.name() + - " for " + price + - ".")); + Economy econ = VillagerUI.getEcon(); + price *= amount; + + econ.depositPlayer(player, price); + player.sendMessage(MiniMessage.get().parse(Config.PURCHASED_ITEM, + Template.of("amount", String.valueOf(amount)), + Template.of("item", material.toString()), + Template.of("price", String.valueOf(price)))); } private ItemStack getPriceItem(double price) { diff --git a/src/main/java/com/alttd/VillagerUI.java b/src/main/java/com/alttd/VillagerUI.java index ea79fb3..573ade4 100644 --- a/src/main/java/com/alttd/VillagerUI.java +++ b/src/main/java/com/alttd/VillagerUI.java @@ -8,16 +8,23 @@ import com.alttd.config.VillagerConfig; import com.alttd.config.WorthConfig; import com.alttd.events.VillagerInteract; import com.alttd.util.Logger; +import net.milkbowl.vault.economy.Economy; +import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; public class VillagerUI extends JavaPlugin { public static VillagerUI instance; + private static Economy econ = null; public static VillagerUI getInstance() { return instance; } + public static Economy getEcon() { + return econ; + } + @Override public void onLoad() { instance = this; @@ -30,6 +37,11 @@ public class VillagerUI extends JavaPlugin { Config.reload(); VillagerConfig.reload(); WorthConfig.reload(); + if (!setupEconomy()) { + Logger.severe("% - Unable to find vault", getDescription().getName()); + getServer().getPluginManager().disablePlugin(this); + return; + } Database.init(); Logger.info("--------------------------------------------------"); Logger.info("Villager UI started"); @@ -41,4 +53,13 @@ public class VillagerUI extends JavaPlugin { getServer().getPluginManager().registerEvents(new VillagerInteract(), this); } + private boolean setupEconomy() { + if (getServer().getPluginManager().getPlugin("Vault") == null) return false; + RegisteredServiceProvider rsp = getServer().getServicesManager().getRegistration(Economy.class); + if (rsp == null) return false; + econ = rsp.getProvider(); + + return econ != null; + } + } diff --git a/src/main/java/com/alttd/config/Config.java b/src/main/java/com/alttd/config/Config.java index 6840a14..4052611 100644 --- a/src/main/java/com/alttd/config/Config.java +++ b/src/main/java/com/alttd/config/Config.java @@ -80,6 +80,12 @@ public final class Config extends AbstractConfig { VILLAGER_NAME = config.getString("idkyet.villager-name", VILLAGER_NAME); //TODO change path } + public static final String NOT_ENOUGH_MONEY = "You only have $, you need at least $ for this purchase."; + public static final String PURCHASED_ITEM = "You bought for !"; + private static void loadMessages() { + + } + private static void loadVillagerTypes() { VillagerType.clearVillagerTypes(); ConfigurationSection configurationSection = config.getConfigurationSection("villager-types");