From f55646cf95c40b0ce222363e3d35561d5a96ea3b Mon Sep 17 00:00:00 2001 From: Molzonas Date: Sun, 24 Aug 2025 15:21:45 +0200 Subject: [PATCH] Addition of UltimateShop Provider & everything around Took 1 hour 14 minutes --- pom.xml | 6 +++ .../fr/molzonas/painfulloss/PainfulLoss.java | 2 +- .../commands/PainfulLossCommand.java | 2 +- .../painfulloss/listeners/DeathListener.java | 4 +- .../provider/CountPriceProvider.java | 10 ++++- .../provider/EssentialsPriceProvider.java | 4 +- .../painfulloss/provider/PriceProvider.java | 9 +++- .../provider/UltimateShopPriceProvider.java | 43 +++++++++++++++++++ .../painfulloss/utils/PriceCalculator.java | 15 +++---- .../{enums => utils}/PropertiesEnum.java | 5 ++- src/main/resources/config.yml | 3 ++ 11 files changed, 86 insertions(+), 17 deletions(-) create mode 100644 src/main/java/fr/molzonas/painfulloss/provider/UltimateShopPriceProvider.java rename src/main/java/fr/molzonas/painfulloss/{enums => utils}/PropertiesEnum.java (94%) diff --git a/pom.xml b/pom.xml index 372de0f..2be01c4 100644 --- a/pom.xml +++ b/pom.xml @@ -90,5 +90,11 @@ 2.21.2 provided + + cn.superiormc + ultimateshop + 3.10.2 + provided + diff --git a/src/main/java/fr/molzonas/painfulloss/PainfulLoss.java b/src/main/java/fr/molzonas/painfulloss/PainfulLoss.java index b459f50..c190d6e 100644 --- a/src/main/java/fr/molzonas/painfulloss/PainfulLoss.java +++ b/src/main/java/fr/molzonas/painfulloss/PainfulLoss.java @@ -1,7 +1,7 @@ package fr.molzonas.painfulloss; import fr.molzonas.painfulloss.commands.PainfulLossCommand; -import fr.molzonas.painfulloss.enums.PropertiesEnum; +import fr.molzonas.painfulloss.utils.PropertiesEnum; import fr.molzonas.painfulloss.listeners.DeathListener; import fr.molzonas.painfulloss.provider.CountPriceProvider; import fr.molzonas.painfulloss.provider.EssentialsPriceProvider; diff --git a/src/main/java/fr/molzonas/painfulloss/commands/PainfulLossCommand.java b/src/main/java/fr/molzonas/painfulloss/commands/PainfulLossCommand.java index ca0d482..9d6967f 100644 --- a/src/main/java/fr/molzonas/painfulloss/commands/PainfulLossCommand.java +++ b/src/main/java/fr/molzonas/painfulloss/commands/PainfulLossCommand.java @@ -1,7 +1,7 @@ package fr.molzonas.painfulloss.commands; import fr.molzonas.painfulloss.PainfulLoss; -import fr.molzonas.painfulloss.enums.PropertiesEnum; +import fr.molzonas.painfulloss.utils.PropertiesEnum; import fr.molzonas.painfulloss.utils.Message; import fr.molzonas.painfulloss.utils.PriceCalculator; import org.bukkit.ChatColor; diff --git a/src/main/java/fr/molzonas/painfulloss/listeners/DeathListener.java b/src/main/java/fr/molzonas/painfulloss/listeners/DeathListener.java index dc39fcf..9e9e150 100644 --- a/src/main/java/fr/molzonas/painfulloss/listeners/DeathListener.java +++ b/src/main/java/fr/molzonas/painfulloss/listeners/DeathListener.java @@ -1,7 +1,7 @@ package fr.molzonas.painfulloss.listeners; import fr.molzonas.painfulloss.PainfulLoss; -import fr.molzonas.painfulloss.enums.PropertiesEnum; +import fr.molzonas.painfulloss.utils.PropertiesEnum; import fr.molzonas.painfulloss.utils.Message; import fr.molzonas.painfulloss.utils.PriceCalculator; import org.bukkit.GameRule; @@ -31,7 +31,7 @@ public class DeathListener implements Listener { if (lostItems.isEmpty()) return; - double total = PriceCalculator.estimate(lostItems); + double total = PriceCalculator.estimate(lostItems, player); if (PropertiesEnum.ENCHANT_ENABLED.getBoolean()) total += PriceCalculator.enchantEstimate(lostItems); diff --git a/src/main/java/fr/molzonas/painfulloss/provider/CountPriceProvider.java b/src/main/java/fr/molzonas/painfulloss/provider/CountPriceProvider.java index 4ee8b60..a1002b4 100644 --- a/src/main/java/fr/molzonas/painfulloss/provider/CountPriceProvider.java +++ b/src/main/java/fr/molzonas/painfulloss/provider/CountPriceProvider.java @@ -1,7 +1,10 @@ package fr.molzonas.painfulloss.provider; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import javax.annotation.Nullable; +import java.util.List; import java.util.Optional; public class CountPriceProvider implements PriceProvider{ @@ -11,10 +14,15 @@ public class CountPriceProvider implements PriceProvider{ } @Override - public Optional getPrice(ItemStack stack) { + public Optional getPrice(ItemStack stack, @Nullable Player player) { return Optional.of((double) stack.getAmount()); } + @Override + public Optional getPrices(List stack, @org.jetbrains.annotations.Nullable Player player) { + return Optional.of(stack.stream().mapToDouble(ItemStack::getAmount).sum()); + } + @Override public boolean isCountBased() { return true; diff --git a/src/main/java/fr/molzonas/painfulloss/provider/EssentialsPriceProvider.java b/src/main/java/fr/molzonas/painfulloss/provider/EssentialsPriceProvider.java index 98fb194..7596307 100644 --- a/src/main/java/fr/molzonas/painfulloss/provider/EssentialsPriceProvider.java +++ b/src/main/java/fr/molzonas/painfulloss/provider/EssentialsPriceProvider.java @@ -2,8 +2,10 @@ package fr.molzonas.painfulloss.provider; import com.earth2me.essentials.Worth; import com.earth2me.essentials.IEssentials; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import javax.annotation.Nullable; import java.math.BigDecimal; import java.util.Optional; @@ -23,7 +25,7 @@ public class EssentialsPriceProvider implements PriceProvider { } @Override - public Optional getPrice(ItemStack stack) { + public Optional getPrice(ItemStack stack, @Nullable Player player) { if (stack == null || stack.getAmount() <= 0) return Optional.empty(); try { diff --git a/src/main/java/fr/molzonas/painfulloss/provider/PriceProvider.java b/src/main/java/fr/molzonas/painfulloss/provider/PriceProvider.java index 86e2179..131a3bd 100644 --- a/src/main/java/fr/molzonas/painfulloss/provider/PriceProvider.java +++ b/src/main/java/fr/molzonas/painfulloss/provider/PriceProvider.java @@ -1,12 +1,19 @@ package fr.molzonas.painfulloss.provider; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import javax.annotation.Nullable; +import java.util.List; import java.util.Optional; public interface PriceProvider { String getName(); - Optional getPrice(ItemStack stack); + Optional getPrice(ItemStack stack, @Nullable Player player); + default Optional getPrices(List stack, @Nullable Player player) { + if (stack.isEmpty()) return Optional.empty(); + return Optional.of(stack.stream().mapToDouble(x -> this.getPrice(x, player).orElse(0d)).sum()); + } default boolean isReady() { return true; } default boolean isCountBased() { return false; } } diff --git a/src/main/java/fr/molzonas/painfulloss/provider/UltimateShopPriceProvider.java b/src/main/java/fr/molzonas/painfulloss/provider/UltimateShopPriceProvider.java new file mode 100644 index 0000000..8d3ef07 --- /dev/null +++ b/src/main/java/fr/molzonas/painfulloss/provider/UltimateShopPriceProvider.java @@ -0,0 +1,43 @@ +package fr.molzonas.painfulloss.provider; + +import cn.superiormc.ultimateshop.api.ShopHelper; +import cn.superiormc.ultimateshop.objects.items.AbstractSingleThing; +import cn.superiormc.ultimateshop.objects.items.GiveResult; +import fr.molzonas.painfulloss.utils.PropertiesEnum; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.Nullable; + +import java.math.BigDecimal; +import java.util.Map; +import java.util.Optional; + +public class UltimateShopPriceProvider implements PriceProvider { + + @Override + public String getName() { + return "UltimateShop"; + } + + @Override + public Optional getPrice(ItemStack stack, @Nullable Player player) { + if (stack == null || stack.getType() == Material.AIR || stack.getAmount() <= 0) return Optional.empty(); + double total = 0d; + GiveResult gr = ShopHelper.getSellPrices(new ItemStack[]{stack}, player, stack.getAmount()); + if (gr == null) return Optional.empty(); + Map map = gr.getResultMap(); + if (map == null || map.isEmpty()) return Optional.empty(); + for (Map.Entry entry : map.entrySet()) { + AbstractSingleThing key = entry.getKey(); + BigDecimal value = entry.getValue(); + ConfigurationSection section = key.getSingleSection(); + String econ = section.getString("economy-plugin", ""); + if (econ.equalsIgnoreCase(PropertiesEnum.PRICE_PROVIDER.getString())) { + total += value.doubleValue(); + } + } + return total > 0 ? Optional.of(total) : Optional.empty(); + } +} diff --git a/src/main/java/fr/molzonas/painfulloss/utils/PriceCalculator.java b/src/main/java/fr/molzonas/painfulloss/utils/PriceCalculator.java index 5e0b30a..3ee163f 100644 --- a/src/main/java/fr/molzonas/painfulloss/utils/PriceCalculator.java +++ b/src/main/java/fr/molzonas/painfulloss/utils/PriceCalculator.java @@ -1,7 +1,6 @@ package fr.molzonas.painfulloss.utils; import fr.molzonas.painfulloss.PainfulLoss; -import fr.molzonas.painfulloss.enums.PropertiesEnum; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; @@ -15,23 +14,23 @@ public class PriceCalculator { private PriceCalculator() {} public static Double estimate(Player player) { - return estimate(player.getInventory().getContents()); + return estimate(player.getInventory().getContents(), player); } - public static Double estimate(ItemStack[] items) { + public static Double estimate(ItemStack[] items, Player player) { double rs = 0d; for (ItemStack item : items) { - rs += estimate(item); + rs += estimate(item, player); } return rs; } - public static Double estimate(List items) { - return items.stream().mapToDouble(PriceCalculator::estimate).sum(); + public static Double estimate(List items, Player player) { + return items.stream().mapToDouble(x -> estimate(x, player)).sum(); } - public static Double estimate(ItemStack item) { - return PainfulLoss.getPriceProvider().getPrice(item).orElse(0d); + public static Double estimate(ItemStack item, Player player) { + return PainfulLoss.getPriceProvider().getPrice(item, player).orElse(0d); } public static Double enchantEstimate(Player player) { diff --git a/src/main/java/fr/molzonas/painfulloss/enums/PropertiesEnum.java b/src/main/java/fr/molzonas/painfulloss/utils/PropertiesEnum.java similarity index 94% rename from src/main/java/fr/molzonas/painfulloss/enums/PropertiesEnum.java rename to src/main/java/fr/molzonas/painfulloss/utils/PropertiesEnum.java index 17a34ef..dc9c3a8 100644 --- a/src/main/java/fr/molzonas/painfulloss/enums/PropertiesEnum.java +++ b/src/main/java/fr/molzonas/painfulloss/utils/PropertiesEnum.java @@ -1,4 +1,4 @@ -package fr.molzonas.painfulloss.enums; +package fr.molzonas.painfulloss.utils; import fr.molzonas.painfulloss.PainfulLoss; import lombok.Getter; @@ -12,7 +12,8 @@ public enum PropertiesEnum { DEBUG("debug", "false"), PRICE_PROVIDER("priceProvider"), ENCHANT_ENABLED("estimation.enchant.enabled"), - ENCHANT_DEFAULT_PER_LEVEL("estimation.enchant.default_per_level") + ENCHANT_DEFAULT_PER_LEVEL("estimation.enchant.default_per_level"), + ECONOMY_PROVIDER("economyProvider", "Vault") ; @Getter private final String path; diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 1bad89a..689c3d7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -8,6 +8,9 @@ debug: false # Keep it empty will take the first available in order between UltimateShop, Essentials and Count. priceProvider: +# Used to do estimations with UltimateShop, can only be Vault... for now. +economyProvider: Vault + estimation: # Is enchants on items used in worth calculation ? enchant: