diff --git a/api b/api index 0c97d80c..952140c2 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 0c97d80cb3f0237b8e20fea0b036bddfd5a7dd66 +Subproject commit 952140c2cee5b0b257f540b1ad1628cc86a57f53 diff --git a/impactor/src/main/java/net/impactdev/impactor/core/commands/economy/EconomyCommands.java b/impactor/src/main/java/net/impactdev/impactor/core/commands/economy/EconomyCommands.java index dcc8a32c..17b55191 100644 --- a/impactor/src/main/java/net/impactdev/impactor/core/commands/economy/EconomyCommands.java +++ b/impactor/src/main/java/net/impactdev/impactor/core/commands/economy/EconomyCommands.java @@ -206,7 +206,7 @@ public void reset( @ProxiedBy("pay") @CommandMethod("economy|eco pay [currency] [source]") - @CommandPermission("impactor.commands.economy.pay") + @CommandPermission("impactor.commands.economy.pay.base") public void transfer( final @NotNull CommandSource source, @Argument("amount") double amount, @@ -220,10 +220,6 @@ public void transfer( Context context = Context.empty(); context.append(Currency.class, c); - if(target.equals(focus)) { - ImpactorTranslations.ECONOMY_CANT_PAY_SELF.send(source, context); - return; - } if(from != null) { PermissionsService permissions = Impactor.instance().services().provide(PermissionsService.class); @@ -231,6 +227,11 @@ public void transfer( ImpactorTranslations.NO_PERMISSION.send(source, context); return; } + } else { + if(target.uuid().equals(source.uuid())) { + ImpactorTranslations.ECONOMY_CANT_PAY_SELF.send(source, context); + return; + } } if(c.transferable() == TriState.FALSE) { diff --git a/impactor/src/main/java/net/impactdev/impactor/core/economy/currency/ImpactorCurrency.java b/impactor/src/main/java/net/impactdev/impactor/core/economy/currency/ImpactorCurrency.java index ac68304e..8060403c 100644 --- a/impactor/src/main/java/net/impactdev/impactor/core/economy/currency/ImpactorCurrency.java +++ b/impactor/src/main/java/net/impactdev/impactor/core/economy/currency/ImpactorCurrency.java @@ -25,14 +25,16 @@ package net.impactdev.impactor.core.economy.currency; +import com.google.common.base.Strings; import net.impactdev.impactor.api.economy.currency.Currency; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; import net.kyori.adventure.util.TriState; -import net.luckperms.api.util.Tristate; import org.jetbrains.annotations.NotNull; import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import java.util.Locale; import static net.kyori.adventure.text.Component.text; @@ -50,7 +52,7 @@ public class ImpactorCurrency implements Currency { private final boolean primary; private final TriState transferable; - private final String pattern; + private final String formatPattern; private ImpactorCurrency(final ImpactorCurrencyBuilder builder) { this.key = builder.key; @@ -63,7 +65,14 @@ private ImpactorCurrency(final ImpactorCurrencyBuilder builder) { this.primary = builder.primary; this.transferable = builder.transferable; - this.pattern = "%." + this.decimals + "f"; + StringBuilder sb = new StringBuilder(); + sb.append("#,##0"); + if(this.decimals > 0) { + sb.append("."); + sb.append(Strings.repeat("0", this.decimals)); + } + + this.formatPattern = sb.toString(); } @Override @@ -93,7 +102,8 @@ public SymbolFormatting formatting() { @Override public Component format(@NotNull BigDecimal amount, boolean condensed, @NotNull Locale locale) { - Component value = text(String.format(locale, this.pattern, amount.doubleValue())); + DecimalFormat formatter = new DecimalFormat(this.formatPattern, new DecimalFormatSymbols(locale)); + Component value = text(formatter.format(amount.doubleValue())); if(condensed) { return this.formatting.modify(this, value); } diff --git a/impactor/src/main/java/net/impactdev/impactor/core/plugin/BaseImpactorPlugin.java b/impactor/src/main/java/net/impactdev/impactor/core/plugin/BaseImpactorPlugin.java index 0d760b99..ab2a89d7 100644 --- a/impactor/src/main/java/net/impactdev/impactor/core/plugin/BaseImpactorPlugin.java +++ b/impactor/src/main/java/net/impactdev/impactor/core/plugin/BaseImpactorPlugin.java @@ -141,8 +141,10 @@ public void construct() { Platform platform = Impactor.instance().platform(); if(platform.info().plugin("luckperms").isPresent()) { + this.logger().info("LuckPerms detected, initializing luckperms integration..."); service.services().register(PermissionsService.class, new LuckPermsPermissionsService()); } else { + this.logger().info("No particular permissions service located, all permissions are now allowed!"); service.services().register(PermissionsService.class, new NoOpPermissionsService()); } diff --git a/impactor/src/test/java/net/impactdev/impactor/test/economy/BasicEconomyTest.java b/impactor/src/test/java/net/impactdev/impactor/test/economy/BasicEconomyTest.java index 889a638f..7d857905 100644 --- a/impactor/src/test/java/net/impactdev/impactor/test/economy/BasicEconomyTest.java +++ b/impactor/src/test/java/net/impactdev/impactor/test/economy/BasicEconomyTest.java @@ -222,6 +222,13 @@ public void verifyFormatting() { condensed = currency.format(amount, true, Locale.CANADA_FRENCH); assertEquals("$17,38", PlainTextComponentSerializer.plainText().serialize(condensed)); + + BigDecimal large = BigDecimal.valueOf(100_540_233); + condensed = currency.format(large, Locale.US); + assertEquals("$100,540,233.00", PlainTextComponentSerializer.plainText().serialize(condensed)); + + condensed = currency.format(large, Locale.ITALIAN); + assertEquals("$100.540.233,00", PlainTextComponentSerializer.plainText().serialize(condensed)); } @Test