diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/market/MarketManager.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/market/MarketManager.java index 4fc68f5b..6d3fcbb5 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/market/MarketManager.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/market/MarketManager.java @@ -58,4 +58,6 @@ public interface MarketManager extends Reloadable { * @return the earning limit as a double */ double earningLimit(Context context); + + double earningsMultiplier(Context context); } diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/config/BukkitConfigManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/config/BukkitConfigManager.java index 79248d47..5b05caee 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/config/BukkitConfigManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/config/BukkitConfigManager.java @@ -638,7 +638,7 @@ public class BukkitConfigManager extends ConfigManager { } })); } - case "group-mod" -> { + case "group-mod", "group_mod" -> { var op = parseGroupWeightOperation(section.getStringList("value")); return (((effect, context, phase) -> { if (phase == 1) { @@ -647,7 +647,7 @@ public class BukkitConfigManager extends ConfigManager { } })); } - case "group-mod-ignore-conditions" -> { + case "group-mod-ignore-conditions", "group_mod_ignore_conditions" -> { var op = parseGroupWeightOperation(section.getStringList("value")); return (((effect, context, phase) -> { if (phase == 1) { @@ -656,7 +656,7 @@ public class BukkitConfigManager extends ConfigManager { } })); } - case "wait-time" -> { + case "wait-time", "wait_time" -> { MathValue value = MathValue.auto(section.get("value")); return (((effect, context, phase) -> { if (phase == 2) { @@ -665,7 +665,7 @@ public class BukkitConfigManager extends ConfigManager { } })); } - case "hook-time", "wait-time-multiplier" -> { + case "hook-time", "hook_time", "wait-time-multiplier", "wait_time_multiplier" -> { MathValue value = MathValue.auto(section.get("value")); return (((effect, context, phase) -> { if (phase == 2) { @@ -683,7 +683,7 @@ public class BukkitConfigManager extends ConfigManager { } })); } - case "difficulty-multiplier", "difficulty-bonus" -> { + case "difficulty-multiplier", "difficulty_multiplier", "difficulty-bonus" -> { MathValue value = MathValue.auto(section.get("value")); return (((effect, context, phase) -> { if (phase == 2) { diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/market/BukkitMarketManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/market/BukkitMarketManager.java index f28f9dd3..77838e1d 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/market/BukkitMarketManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/market/BukkitMarketManager.java @@ -62,6 +62,7 @@ public class BukkitMarketManager implements MarketManager, Listener { private final HashMap> priceMap; private String formula; private MathValue earningsLimit; + private MathValue earningsMultiplier; private boolean allowItemWithNoPrice; protected boolean sellFishingBag; @@ -173,6 +174,7 @@ public class BukkitMarketManager implements MarketManager, Listener { } this.earningsLimit = config.getBoolean("limitation.enable", true) ? MathValue.auto(config.getString("limitation.earnings", "10000")) : MathValue.plain(-1); + this.earningsMultiplier = MathValue.auto(config.get("earnings-multiplier", 1d)); // Load item prices from the configuration Section priceSection = config.getSection("item-price"); @@ -337,7 +339,7 @@ public class BukkitMarketManager implements MarketManager, Listener { if (element.getSymbol() == sellSlot) { Pair pair = getItemsToSell(gui.context, gui.getItemsInGUI()); - double totalWorth = pair.right(); + double totalWorth = pair.right() * earningsMultiplier(gui.context); gui.context.arg(ContextKeys.MONEY, money(totalWorth)) .arg(ContextKeys.MONEY_FORMATTED, String.format("%.2f", totalWorth)) .arg(ContextKeys.REST, money(earningLimit - earningData.earnings)) @@ -367,7 +369,7 @@ public class BukkitMarketManager implements MarketManager, Listener { optionalUserData.ifPresent(userData -> itemStacksToSell.addAll(storageContentsToList(userData.holder().getInventory().getStorageContents()))); } Pair pair = getItemsToSell(gui.context, itemStacksToSell); - double totalWorth = pair.right(); + double totalWorth = pair.right() * earningsMultiplier(gui.context); gui.context.arg(ContextKeys.MONEY, money(totalWorth)) .arg(ContextKeys.MONEY_FORMATTED, String.format("%.2f", totalWorth)) .arg(ContextKeys.REST, money(earningLimit - earningData.earnings)) @@ -485,6 +487,11 @@ public class BukkitMarketManager implements MarketManager, Listener { return earningsLimit.evaluate(context); } + @Override + public double earningsMultiplier(Context context) { + return earningsMultiplier.evaluate(context); + } + public Pair getItemsToSell(Context context, List itemStacks) { int amount = 0; double worth = 0d; @@ -506,9 +513,7 @@ public class BukkitMarketManager implements MarketManager, Listener { if (allowBundle && itemStack.getItemMeta() instanceof BundleMeta bundleMeta) { clearWorthyItems(context, bundleMeta.getItems()); List newItems = new ArrayList<>(bundleMeta.getItems()); - newItems.removeIf(item -> { - return item.getAmount() == 0 || item.getType() == Material.AIR; - }); + newItems.removeIf(item -> item.getAmount() == 0 || item.getType() == Material.AIR); bundleMeta.setItems(newItems); itemStack.setItemMeta(bundleMeta); continue; @@ -527,8 +532,7 @@ public class BukkitMarketManager implements MarketManager, Listener { } protected String money(double money) { - String str = String.format("%.2f", money); - return str.replace(",", "."); + return String.format(Locale.US, "%.2f", money); } protected List storageContentsToList(ItemStack[] itemStacks) { diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/market/MarketGUI.java b/core/src/main/java/net/momirealms/customfishing/bukkit/market/MarketGUI.java index 6222c6ff..41d65a8c 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/market/MarketGUI.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/market/MarketGUI.java @@ -114,7 +114,7 @@ public class MarketGUI { MarketDynamicGUIElement sellElement = (MarketDynamicGUIElement) getElement(manager.sellSlot); if (sellElement != null && !sellElement.getSlots().isEmpty()) { Pair pair = manager.getItemsToSell(context, getItemsInGUI()); - double totalWorth = pair.right(); + double totalWorth = pair.right() * manager.earningsMultiplier(context); int soldAmount = pair.left(); context.arg(ContextKeys.MONEY, manager.money(totalWorth)) .arg(ContextKeys.MONEY_FORMATTED, String.format("%.2f", totalWorth)) @@ -138,7 +138,7 @@ public class MarketGUI { optionalUserData.ifPresent(userData -> itemStacksToSell.addAll(manager.storageContentsToList(userData.holder().getInventory().getStorageContents()))); } Pair pair = manager.getItemsToSell(context, itemStacksToSell); - double totalWorth = pair.right(); + double totalWorth = pair.right() * manager.earningsMultiplier(context); int soldAmount = pair.left(); context.arg(ContextKeys.MONEY, manager.money(totalWorth)) .arg(ContextKeys.MONEY_FORMATTED, String.format("%.2f", totalWorth)) diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index 1d67e7fb..1cca1adb 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -202,6 +202,8 @@ mechanics: limitation: enable: true earnings: '10000' # Expressions can be used here + # You can use expressions here if you want some players to earn more from selling fish + earnings-multiplier: 1 # Layout for the market menu layout: - 'AAAAAAAAA' diff --git a/gradle.properties b/gradle.properties index ada91247..ca4229b3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=2.2.33 -config_version=36 +project_version=2.2.34 +config_version=37 project_group=net.momirealms # Supported languages