diff --git a/eco-api/src/main/java/com/willfp/eco/core/price/ConfiguredPrice.java b/eco-api/src/main/java/com/willfp/eco/core/price/ConfiguredPrice.java index 1f4d200d..88d5eaee 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/price/ConfiguredPrice.java +++ b/eco-api/src/main/java/com/willfp/eco/core/price/ConfiguredPrice.java @@ -82,6 +82,14 @@ public final class ConfiguredPrice implements Price { this.price.setMultiplier(player, multiplier); } + @Override + public @NotNull ConfiguredPrice withMultiplier(final double multiplier) { + return new ConfiguredPrice( + this.price.withMultiplier(multiplier), + formatString + ); + } + /** * Get the price that this delegates to. * diff --git a/eco-api/src/main/java/com/willfp/eco/core/price/Price.java b/eco-api/src/main/java/com/willfp/eco/core/price/Price.java index 40351ea3..e351d960 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/price/Price.java +++ b/eco-api/src/main/java/com/willfp/eco/core/price/Price.java @@ -88,4 +88,14 @@ public interface Price { final double multiplier) { // Override when needed. } + + /** + * Copy this price with a given base multiplier. + * + * @param multiplier The multiplier. + */ + @NotNull + default Price withMultiplier(final double multiplier) { + return this; + } } diff --git a/eco-api/src/main/java/com/willfp/eco/core/price/impl/PriceEconomy.java b/eco-api/src/main/java/com/willfp/eco/core/price/impl/PriceEconomy.java index 1f209723..e1fdc628 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/price/impl/PriceEconomy.java +++ b/eco-api/src/main/java/com/willfp/eco/core/price/impl/PriceEconomy.java @@ -81,4 +81,12 @@ public final class PriceEconomy implements Price { final double multiplier) { this.multipliers.put(player.getUniqueId(), multiplier); } + + @Override + public @NotNull PriceEconomy withMultiplier(double multiplier) { + return new PriceEconomy( + baseContext, + ctx -> function.apply(ctx) * multiplier + ); + } } diff --git a/eco-api/src/main/java/com/willfp/eco/core/price/impl/PriceItem.java b/eco-api/src/main/java/com/willfp/eco/core/price/impl/PriceItem.java index d83d2bc7..d1a6555a 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/price/impl/PriceItem.java +++ b/eco-api/src/main/java/com/willfp/eco/core/price/impl/PriceItem.java @@ -146,4 +146,13 @@ public final class PriceItem implements Price { final double multiplier) { this.multipliers.put(player.getUniqueId(), multiplier); } + + @Override + public @NotNull PriceItem withMultiplier(double multiplier) { + return new PriceItem( + baseContext, + ctx -> function.apply(ctx) * multiplier, + item + ); + } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/integrations/price/PriceFactoryUltraEconomy.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/integrations/price/PriceFactoryUltraEconomy.kt index 43b23476..67da0a40 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/integrations/price/PriceFactoryUltraEconomy.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/integrations/price/PriceFactoryUltraEconomy.kt @@ -54,5 +54,14 @@ class PriceFactoryUltraEconomy(private val currency: Currency) : PriceFactory { override fun setMultiplier(player: Player, multiplier: Double) { multipliers[player.uniqueId] = multiplier } + + override fun withMultiplier(multiplier: Double): Price { + return PriceUltraEconomy( + currency, + baseContext + ) { + function(it) * multiplier + } + } } }