diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/command/abstraction/Command.java b/common/src/main/java/dev/xhyrom/lighteco/common/command/abstraction/Command.java index 9460863..131ecb1 100644 --- a/common/src/main/java/dev/xhyrom/lighteco/common/command/abstraction/Command.java +++ b/common/src/main/java/dev/xhyrom/lighteco/common/command/abstraction/Command.java @@ -1,6 +1,9 @@ package dev.xhyrom.lighteco.common.command.abstraction; import dev.xhyrom.lighteco.common.command.argument.Argument; +import dev.xhyrom.lighteco.common.command.argument.Arguments; +import dev.xhyrom.lighteco.common.model.chat.CommandSender; +import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin; import lombok.Getter; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -25,4 +28,6 @@ public abstract class Command { this.permission = permission; this.args = List.of(args); } + + public abstract void execute(LightEcoPlugin plugin, CommandSender sender, Arguments args); } diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/Argument.java b/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/Argument.java index 744607c..4d46bd9 100644 --- a/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/Argument.java +++ b/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/Argument.java @@ -6,15 +6,13 @@ import lombok.Getter; public abstract class Argument { @Getter private final String name; - protected final LightEcoPlugin plugin; - protected Argument(LightEcoPlugin plugin, String name) { - this.plugin = plugin; + protected Argument(String name) { this.name = name; } public abstract Class getPrimitiveType(); public abstract ArgumentType getArgumentType(); - public abstract T parse(String input); + public abstract T parse(LightEcoPlugin plugin, String input); } diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/Arguments.java b/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/Arguments.java new file mode 100644 index 0000000..d74dcac --- /dev/null +++ b/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/Arguments.java @@ -0,0 +1,25 @@ +package dev.xhyrom.lighteco.common.command.argument; + +import dev.xhyrom.lighteco.common.model.user.User; + +import java.util.Map; + +public class Arguments { + private final Map arguments; + + public Arguments(Map arguments) { + this.arguments = arguments; + } + + public User offlineUser(String name) { + return (User) this.arguments.get(name); + } + + public int integer(String name) { + return (int) this.arguments.get(name); + } + + public double dbl(String name) { + return (double) this.arguments.get(name); + } +} diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/type/DoubleArgument.java b/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/type/DoubleArgument.java new file mode 100644 index 0000000..8a23dd0 --- /dev/null +++ b/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/type/DoubleArgument.java @@ -0,0 +1,26 @@ +package dev.xhyrom.lighteco.common.command.argument.type; + +import dev.xhyrom.lighteco.common.command.argument.Argument; +import dev.xhyrom.lighteco.common.command.argument.ArgumentType; +import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin; + +public class DoubleArgument extends Argument { + protected DoubleArgument(String name) { + super(name); + } + + @Override + public Class getPrimitiveType() { + return Double.class; + } + + @Override + public ArgumentType getArgumentType() { + return ArgumentType.DOUBLE; + } + + @Override + public Double parse(LightEcoPlugin plugin, String input) { + return Double.parseDouble(input); + } +} diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/type/IntegerArgument.java b/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/type/IntegerArgument.java new file mode 100644 index 0000000..e69c230 --- /dev/null +++ b/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/type/IntegerArgument.java @@ -0,0 +1,26 @@ +package dev.xhyrom.lighteco.common.command.argument.type; + +import dev.xhyrom.lighteco.common.command.argument.Argument; +import dev.xhyrom.lighteco.common.command.argument.ArgumentType; +import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin; + +public class IntegerArgument extends Argument { + protected IntegerArgument(String name) { + super(name); + } + + @Override + public Class getPrimitiveType() { + return Integer.class; + } + + @Override + public ArgumentType getArgumentType() { + return ArgumentType.INTEGER; + } + + @Override + public Integer parse(LightEcoPlugin plugin, String input) { + return Integer.parseInt(input); + } +} diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/type/OfflineUserArgument.java b/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/type/OfflineUserArgument.java index 1894c3e..fa01bbd 100644 --- a/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/type/OfflineUserArgument.java +++ b/common/src/main/java/dev/xhyrom/lighteco/common/command/argument/type/OfflineUserArgument.java @@ -8,8 +8,8 @@ import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin; import java.util.UUID; public class OfflineUserArgument extends Argument { - public OfflineUserArgument(LightEcoPlugin plugin, String name) { - super(plugin, name); + public OfflineUserArgument(String name) { + super(name); } @Override @@ -23,12 +23,12 @@ public class OfflineUserArgument extends Argument { } @Override - public User parse(String input) { - UUID uniqueId = this.plugin.getBootstrap().lookupUniqueId(input).orElse(null); + public User parse(LightEcoPlugin plugin, String input) { + UUID uniqueId = plugin.getBootstrap().lookupUniqueId(input).orElse(null); if (uniqueId == null) { return null; } - return this.plugin.getUserManager().loadUser(uniqueId).join(); + return plugin.getUserManager().loadUser(uniqueId).join(); } } diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/commands/BalanceCommand.java b/common/src/main/java/dev/xhyrom/lighteco/common/commands/BalanceCommand.java new file mode 100644 index 0000000..ca4152d --- /dev/null +++ b/common/src/main/java/dev/xhyrom/lighteco/common/commands/BalanceCommand.java @@ -0,0 +1,56 @@ +package dev.xhyrom.lighteco.common.commands; + +import dev.xhyrom.lighteco.common.command.abstraction.Command; +import dev.xhyrom.lighteco.common.command.argument.Argument; +import dev.xhyrom.lighteco.common.command.argument.Arguments; +import dev.xhyrom.lighteco.common.config.message.CurrencyMessageConfig; +import dev.xhyrom.lighteco.common.model.chat.CommandSender; +import dev.xhyrom.lighteco.common.model.currency.Currency; +import dev.xhyrom.lighteco.common.model.user.User; +import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.math.BigDecimal; +import java.util.Map; + +public class BalanceCommand extends Command { + private final Currency currency; + + public BalanceCommand(@Nullable String permission, @NonNull Currency currency) { + this(permission, currency, new Argument[0]); + } + + public BalanceCommand(@Nullable String permission, @NonNull Currency currency, @NonNull Argument... args) { + super("balance", permission + ".balance", args); + + this.currency = currency; + } + + @Override + public void execute(LightEcoPlugin plugin, CommandSender sender, Arguments args) { + User user = plugin.getUserManager().getIfLoaded(sender.getUniqueId()); + BigDecimal balance = user.getBalance(currency); + + sender.sendMessage( + MiniMessage.miniMessage().deserialize( + getConfig(plugin, currency).balance, + Placeholder.parsed("currency", currency.getIdentifier()), + Placeholder.parsed("balance", balance.toPlainString()) + ) + ); + } + + protected CurrencyMessageConfig getConfig(LightEcoPlugin plugin, Currency currency) { + Map config = plugin.getConfig().messages.currency; + CurrencyMessageConfig currencyMessageConfig = config.get(currency.getIdentifier()); + + if (currencyMessageConfig == null) { + return config.get("default"); + } + + return currencyMessageConfig; + } +} diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/commands/BalanceOtherCommand.java b/common/src/main/java/dev/xhyrom/lighteco/common/commands/BalanceOtherCommand.java new file mode 100644 index 0000000..f35b21f --- /dev/null +++ b/common/src/main/java/dev/xhyrom/lighteco/common/commands/BalanceOtherCommand.java @@ -0,0 +1,39 @@ +package dev.xhyrom.lighteco.common.commands; + +import dev.xhyrom.lighteco.common.command.argument.Arguments; +import dev.xhyrom.lighteco.common.command.argument.type.OfflineUserArgument; +import dev.xhyrom.lighteco.common.model.chat.CommandSender; +import dev.xhyrom.lighteco.common.model.currency.Currency; +import dev.xhyrom.lighteco.common.model.user.User; +import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.math.BigDecimal; + +public class BalanceOtherCommand extends BalanceCommand { + private final Currency currency; + + public BalanceOtherCommand(@Nullable String permission, @NonNull Currency currency) { + super(permission + ".balance.others", currency, new OfflineUserArgument("target")); + + this.currency = currency; + } + + @Override + public void execute(LightEcoPlugin plugin, CommandSender sender, Arguments args) { + User target = args.offlineUser("target"); + BigDecimal balance = target.getBalance(currency); + + sender.sendMessage( + MiniMessage.miniMessage().deserialize( + getConfig(plugin, currency).balanceOthers, + Placeholder.parsed("currency", currency.getIdentifier()), + Placeholder.parsed("target", target.getUsername()), + Placeholder.parsed("balance", balance.toPlainString()) + ) + ); + } +}