From 523a7fe16b5b32ba658ac255c2032c02085df787 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Fri, 17 Dec 2021 20:44:38 +0100 Subject: [PATCH] Added math stuff to calculate price based on points (thanks everett) --- pom.xml | 30 ++++++++++++++++++- .../java/com/alttd/GUI/windows/BuyGUI.java | 10 ++++--- .../java/com/alttd/GUI/windows/SellGUI.java | 4 ++- .../java/com/alttd/config/VillagerConfig.java | 4 --- .../java/com/alttd/config/WorthConfig.java | 5 ++++ .../com/alttd/events/VillagerInteract.java | 3 +- src/main/java/com/alttd/objects/Price.java | 12 ++++++++ 7 files changed, 57 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 0a817a3..285c2a9 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,28 @@ 16 + + + + + maven-assembly-plugin + + + package + + single + + + + + + jar-with-dependencies + + + + + + papermc @@ -29,10 +51,16 @@ + + org.apache.commons + commons-math3 + 3.2 + compile + io.papermc.paper paper-api - 1.17-R0.1-SNAPSHOT + 1.18-R0.1-SNAPSHOT provided diff --git a/src/main/java/com/alttd/GUI/windows/BuyGUI.java b/src/main/java/com/alttd/GUI/windows/BuyGUI.java index c028286..3ddc4df 100644 --- a/src/main/java/com/alttd/GUI/windows/BuyGUI.java +++ b/src/main/java/com/alttd/GUI/windows/BuyGUI.java @@ -3,6 +3,7 @@ package com.alttd.GUI.windows; import com.alttd.GUI.GUIMerchant; import com.alttd.VillagerUI; import com.alttd.config.Config; +import com.alttd.config.WorthConfig; import com.alttd.events.SpawnShopEvent; import com.alttd.objects.EconUser; import com.alttd.objects.Price; @@ -39,7 +40,10 @@ public class BuyGUI extends GUIMerchant { private void buy(VillagerType villagerType, Player player, Material material, int amount, Price price) { Economy econ = VillagerUI.getInstance().getEconomy(); double balance = econ.getBalance(player); - double cost = price.getPrice(amount); + int trans_pts = (int) (Math.floor(price.getPrice(amount)/ WorthConfig.POINT_MOD) * amount); + EconUser econUser = EconUser.users.get(player.getUniqueId()); + int oldPoints = econUser.getPointsMap().get(villagerType.getName()); + double cost = price.calculatePriceThing(oldPoints, trans_pts); if (balance < cost) { player.sendMessage(MiniMessage.get().parse(Config.NOT_ENOUGH_MONEY, @@ -47,11 +51,9 @@ public class BuyGUI extends GUIMerchant { Template.of("price", String.valueOf(price)))); return; } - EconUser econUser = EconUser.users.get(player.getUniqueId()); - int oldPoints = econUser.getPointsMap().get(villagerType.getName()); econ.withdrawPlayer(player, cost); - econUser.addPoints(villagerType.getName(), price.getPoints()); + econUser.addPoints(villagerType.getName(), trans_pts); player.sendMessage(MiniMessage.get().parse(Config.PURCHASED_ITEM, Template.of("amount", String.valueOf(amount)), Template.of("item", material.toString()), diff --git a/src/main/java/com/alttd/GUI/windows/SellGUI.java b/src/main/java/com/alttd/GUI/windows/SellGUI.java index fd78512..714756e 100644 --- a/src/main/java/com/alttd/GUI/windows/SellGUI.java +++ b/src/main/java/com/alttd/GUI/windows/SellGUI.java @@ -3,6 +3,7 @@ package com.alttd.GUI.windows; import com.alttd.GUI.GUIMerchant; import com.alttd.VillagerUI; import com.alttd.config.Config; +import com.alttd.config.WorthConfig; import com.alttd.events.SpawnShopEvent; import com.alttd.objects.EconUser; import com.alttd.objects.Price; @@ -39,9 +40,10 @@ public class SellGUI extends GUIMerchant { private void sell(VillagerType villagerType, Player player, Material material, int amount, Price price) { Economy econ = VillagerUI.getInstance().getEconomy(); - double cost = price.getPrice(amount); EconUser econUser = EconUser.users.get(player.getUniqueId()); int oldPoints = econUser.getPointsMap().get(villagerType.getName()); + int trans_pts = (int) (Math.floor(price.getPrice(amount)/ WorthConfig.POINT_MOD) * amount); + double cost = price.calculatePriceThing(oldPoints, trans_pts); econ.depositPlayer(player, cost); econUser.addPoints(villagerType.getName(), -price.getPoints()); diff --git a/src/main/java/com/alttd/config/VillagerConfig.java b/src/main/java/com/alttd/config/VillagerConfig.java index c0422d3..91fee3e 100644 --- a/src/main/java/com/alttd/config/VillagerConfig.java +++ b/src/main/java/com/alttd/config/VillagerConfig.java @@ -1,12 +1,8 @@ package com.alttd.config; -import com.alttd.VillagerUI; import com.alttd.objects.LoadedVillagers; import com.alttd.objects.VillagerType; import com.alttd.util.Logger; -import org.bukkit.configuration.ConfigurationSection; - -import java.util.Set; import java.util.UUID; public class VillagerConfig extends AbstractConfig { diff --git a/src/main/java/com/alttd/config/WorthConfig.java b/src/main/java/com/alttd/config/WorthConfig.java index c408c8c..0bcc48d 100644 --- a/src/main/java/com/alttd/config/WorthConfig.java +++ b/src/main/java/com/alttd/config/WorthConfig.java @@ -46,4 +46,9 @@ public class WorthConfig extends AbstractConfig { prices.put(Material.getMaterial(key), new Price(Utilities.round(worth.getDouble(key), 2))); } } + + public static int POINT_MOD = 4; + private static void loadOtherStuff() { + POINT_MOD = config.getInt("point-mod", POINT_MOD); + } } diff --git a/src/main/java/com/alttd/events/VillagerInteract.java b/src/main/java/com/alttd/events/VillagerInteract.java index f7f971f..f96d9c8 100644 --- a/src/main/java/com/alttd/events/VillagerInteract.java +++ b/src/main/java/com/alttd/events/VillagerInteract.java @@ -5,6 +5,7 @@ import com.alttd.VillagerUI; import com.alttd.config.Config; import com.alttd.objects.LoadedVillagers; import com.alttd.objects.VillagerType; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -23,7 +24,7 @@ public class VillagerInteract implements Listener { return; if (!event.getPlayer().hasPermission(loadedVillager.getPermission())) { - event.getPlayer().sendMessage(Config.NO_PERMISSION); //TODO more specific message? + event.getPlayer().sendMessage(MiniMessage.get().parse(Config.NO_PERMISSION)); //TODO more specific message? return; } new BukkitRunnable() { diff --git a/src/main/java/com/alttd/objects/Price.java b/src/main/java/com/alttd/objects/Price.java index 751c87d..131b08f 100644 --- a/src/main/java/com/alttd/objects/Price.java +++ b/src/main/java/com/alttd/objects/Price.java @@ -3,11 +3,17 @@ package com.alttd.objects; import com.alttd.config.Config; import com.alttd.util.Logger; import com.alttd.util.Utilities; +import org.apache.commons.math3.analysis.function.StepFunction; +import org.apache.commons.math3.analysis.integration.TrapezoidIntegrator; public final class Price { private final double price; private final int points; + double x_mult[] = {0, 500, 2000, 4000}; + double y_mult[] = {1.0, 1.5, 2.5, 5.0}; + StepFunction multiplierModel = new StepFunction(x_mult, y_mult); + public Price(double price) { this.price = price; for (int key : Config.pointsRangeMap.keySet()) { @@ -28,6 +34,12 @@ public final class Price { return (Utilities.round(price * multiplier, 2)); } + public double calculatePriceThing(int oldPoints, int transPts) { + // Compute numerical integration to determine price + TrapezoidIntegrator trapez = new TrapezoidIntegrator(); + return (price * trapez.integrate(10, multiplierModel, oldPoints, oldPoints + transPts)); + } + public int getPoints() { return (points); }