diff --git a/pom.xml b/pom.xml
index 9062f41..0487c28 100644
--- a/pom.xml
+++ b/pom.xml
@@ -107,7 +107,7 @@
dev.padrewin
colddev
- 1.4.6
+ 1.4.9
compile
diff --git a/src/main/java/dev/padrewin/coldbits/ColdBits.java b/src/main/java/dev/padrewin/coldbits/ColdBits.java
index 4c8d0cf..ff1c933 100644
--- a/src/main/java/dev/padrewin/coldbits/ColdBits.java
+++ b/src/main/java/dev/padrewin/coldbits/ColdBits.java
@@ -18,7 +18,6 @@
import dev.padrewin.coldbits.manager.LocaleManager;
import dev.padrewin.coldbits.setting.SettingKey;
import dev.padrewin.coldbits.util.BitsUtils;
-import org.black_ixx.playerpoints.PlayerPointsAPI;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.ServicePriority;
@@ -30,7 +29,7 @@
public class ColdBits extends ColdPlugin {
private static ColdBits instance;
- private PlayerPointsAPI api;
+ private ColdBitsAPI api;
private ColdBitsVaultLayer vaultLayer;
String ANSI_RESET = "\u001B[0m";
@@ -45,13 +44,14 @@ public class ColdBits extends ColdPlugin {
public ColdBits() {
super("Cold-Development", "ColdBits", 23639, DataManager.class, LocaleManager.class, null);
instance = this;
+ this.api = new ColdBitsAPI(this);
}
@Override
public void enable() {
instance = this;
- this.api = new PlayerPointsAPI(this);
+ this.api = new ColdBitsAPI(this);
String name = getDescription().getName();
getLogger().info("");
@@ -191,7 +191,7 @@ public static ColdBits getInstance() {
*
* @return API instance.
*/
- public PlayerPointsAPI getAPI() {
+ public ColdBitsAPI getAPI() {
return api;
}
diff --git a/src/main/java/dev/padrewin/coldbits/commands/BaseBitsCommand.java b/src/main/java/dev/padrewin/coldbits/commands/BaseBitsCommand.java
new file mode 100644
index 0000000..cfb57f2
--- /dev/null
+++ b/src/main/java/dev/padrewin/coldbits/commands/BaseBitsCommand.java
@@ -0,0 +1,19 @@
+package dev.padrewin.coldbits.commands;
+
+import dev.padrewin.colddev.command.framework.BaseColdCommand;
+import dev.padrewin.coldbits.ColdBits;
+import dev.padrewin.coldbits.manager.LocaleManager;
+import dev.padrewin.coldbits.ColdBitsAPI;
+
+public abstract class BaseBitsCommand extends BaseColdCommand {
+
+ protected final ColdBitsAPI api;
+ protected final LocaleManager localeManager;
+
+ public BaseBitsCommand(ColdBits coldBits) {
+ super(coldBits);
+ this.api = coldBits.getAPI();
+ this.localeManager = coldBits.getManager(LocaleManager.class);
+ }
+
+}
diff --git a/src/main/java/dev/padrewin/coldbits/commands/BaseCommand.java b/src/main/java/dev/padrewin/coldbits/commands/BaseCommand.java
new file mode 100644
index 0000000..1a66724
--- /dev/null
+++ b/src/main/java/dev/padrewin/coldbits/commands/BaseCommand.java
@@ -0,0 +1,78 @@
+package dev.padrewin.coldbits.commands;
+
+import dev.padrewin.colddev.command.HelpCommand;
+import dev.padrewin.colddev.command.PrimaryCommand;
+import dev.padrewin.colddev.command.ReloadCommand;
+import dev.padrewin.colddev.command.framework.Argument;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.ColdCommand;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
+import java.util.Optional;
+import dev.padrewin.coldbits.ColdBits;
+import dev.padrewin.coldbits.setting.SettingKey;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class BaseCommand extends PrimaryCommand {
+
+ private final ColdBits coldBits;
+
+ public BaseCommand(ColdBits coldBits) {
+ super(coldBits);
+ this.coldBits = coldBits;
+ }
+
+ @ColdExecutable
+ @Override
+ public void execute(CommandContext context) {
+ String baseRedirect = SettingKey.BASE_COMMAND_REDIRECT.get();
+ if (baseRedirect.trim().isEmpty())
+ baseRedirect = "me";
+
+ CommandSender sender = context.getSender();
+ Optional subcommand = this.findCommand(sender, baseRedirect);
+ if (subcommand.isPresent()) {
+ subcommand.get().invoke(context);
+ } else {
+ this.findCommand(sender, "help").ifPresent(x -> x.invoke(context));
+ }
+ }
+
+ private Optional findCommand(CommandSender sender, String name) {
+ Argument.SubCommandArgument argument = (Argument.SubCommandArgument) this.getCommandArguments().get(0);
+ return argument.subCommands().stream()
+ .filter(x -> x.getName().equalsIgnoreCase(name) || x.getAliases().stream().anyMatch(y -> y.equalsIgnoreCase(name)))
+ .findFirst()
+ .filter(x -> !x.isPlayerOnly() || sender instanceof Player);
+ }
+
+ @Override
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("bits")
+ .aliases("bits")
+ .permission("coldbits.basecommand")
+ .arguments(ArgumentsDefinition.builder()
+ .optionalSub(
+ new BroadcastCommand(this.coldBits),
+ new ExportCommand(this.coldBits),
+ new GiveAllCommand(this.coldBits),
+ new GiveCommand(this.coldBits),
+ new HelpCommand(this.coldBits, this),
+ new ImportCommand(this.coldBits),
+ new ImportLegacyCommand(this.coldBits),
+ new LeadCommand(this.coldBits),
+ new LookCommand(this.coldBits),
+ new MeCommand(this.coldBits),
+ new PayCommand(this.coldBits),
+ new ReloadCommand(this.coldBits),
+ new ResetCommand(this.coldBits),
+ new SetCommand(this.coldBits),
+ new TakeCommand(this.coldBits),
+ new VersionCommand(this.coldBits)
+ ))
+ .build();
+ }
+
+}
diff --git a/src/main/java/dev/padrewin/coldbits/commands/BroadcastCommand.java b/src/main/java/dev/padrewin/coldbits/commands/BroadcastCommand.java
index 1bdc1dd..c592f18 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/BroadcastCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/BroadcastCommand.java
@@ -1,48 +1,49 @@
package dev.padrewin.coldbits.commands;
+import dev.padrewin.colddev.command.argument.ArgumentHandlers;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.colddev.utils.StringPlaceholders;
-import java.util.Collections;
-import java.util.List;
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
-import dev.padrewin.coldbits.manager.LocaleManager;
+import dev.padrewin.coldbits.commands.arguments.StringSuggestingArgumentHandler;
import dev.padrewin.coldbits.util.BitsUtils;
import org.bukkit.Bukkit;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-public class BroadcastCommand extends BitsCommand {
+public class BroadcastCommand extends BaseBitsCommand {
- public BroadcastCommand() {
- super("broadcast", CommandManager.CommandAliases.BROADCAST);
+ public BroadcastCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
- if (args.length < 1) {
- localeManager.sendMessage(sender, "command-broadcast-usage");
- return;
- }
-
- BitsUtils.getPlayerByName(args[0], player -> {
+ @ColdExecutable
+ public void execute(CommandContext context, String target) {
+ BitsUtils.getPlayerByName(target, player -> {
if (player == null) {
- localeManager.sendMessage(sender, "unknown-player", StringPlaceholders.of("player", args[0]));
+ this.localeManager.sendCommandMessage(context.getSender(), "unknown-player", StringPlaceholders.of("player", target));
return;
}
- int bits = plugin.getAPI().look(player.getFirst());
+ int bits = this.api.look(player.getFirst());
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
- localeManager.sendMessage(onlinePlayer, "command-broadcast-message", StringPlaceholders.builder("player", player.getSecond())
+ this.localeManager.sendCommandMessage(onlinePlayer, "command-broadcast-message", StringPlaceholders.builder("player", player.getSecond())
.add("amount", BitsUtils.formatBits(bits))
- .add("currency", localeManager.getCurrencyName(bits)).build());
+ .add("currency", this.localeManager.getCurrencyName(bits)).build());
}
});
}
@Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- return args.length != 1 ? Collections.emptyList() : BitsUtils.getPlayerTabComplete(args[0]);
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("broadcast")
+ .descriptionKey("command-broadcast-description")
+ .permission("coldbits.broadcast")
+ .arguments(ArgumentsDefinition.builder()
+ .required("target", new StringSuggestingArgumentHandler(BitsUtils::getPlayerTabComplete))
+ .build())
+ .build();
}
}
diff --git a/src/main/java/dev/padrewin/coldbits/commands/ExportCommand.java b/src/main/java/dev/padrewin/coldbits/commands/ExportCommand.java
index 5891aa5..eb6874d 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/ExportCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/ExportCommand.java
@@ -1,39 +1,43 @@
package dev.padrewin.coldbits.commands;
+import dev.padrewin.colddev.command.argument.ArgumentHandlers;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
+
import java.io.File;
import java.io.IOException;
-import java.util.Collections;
import java.util.List;
+
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
import dev.padrewin.coldbits.manager.DataManager;
-import dev.padrewin.coldbits.manager.LocaleManager;
import dev.padrewin.coldbits.models.SortedPlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
-public class ExportCommand extends BitsCommand {
+public class ExportCommand extends BaseBitsCommand {
- public ExportCommand() {
- super("export", CommandManager.CommandAliases.EXPORT);
+ public ExportCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- plugin.getScheduler().runTaskAsync(() -> {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
- File file = new File(plugin.getDataFolder(), "storage.yml");
- if (file.exists() && (args.length < 1 || !args[0].equalsIgnoreCase("confirm"))) {
- localeManager.sendMessage(sender, "command-export-warning");
+ @ColdExecutable
+ public void execute(CommandContext context, String confirm) {
+ this.coldPlugin.getScheduler().runTaskAsync(() -> {
+ CommandSender sender = context.getSender();
+ File file = new File(this.coldPlugin.getDataFolder(), "storage.yml");
+ if (file.exists() && confirm == null) {
+ this.localeManager.sendCommandMessage(sender, "command-export-warning");
return;
}
if (file.exists())
file.delete();
- List data = plugin.getManager(DataManager.class).getTopSortedBits(null);
+ List data = this.coldPlugin.getManager(DataManager.class).getTopSortedBits(null);
FileConfiguration configuration = YamlConfiguration.loadConfiguration(file);
ConfigurationSection bitsSection = configuration.createSection("Bits");
ConfigurationSection uuidSection = configuration.createSection("UUIDs");
@@ -50,13 +54,19 @@ public void execute(ColdBits plugin, CommandSender sender, String[] args) {
e.printStackTrace();
}
- localeManager.sendMessage(sender, "command-export-success");
+ this.localeManager.sendCommandMessage(sender, "command-export-success");
});
}
@Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- return Collections.emptyList();
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("export")
+ .descriptionKey("command-export-description")
+ .permission("coldbits.export")
+ .arguments(ArgumentsDefinition.builder()
+ .optional("confirm", ArgumentHandlers.forValues(String.class, "confirm"))
+ .build())
+ .build();
}
}
diff --git a/src/main/java/dev/padrewin/coldbits/commands/GiveAllCommand.java b/src/main/java/dev/padrewin/coldbits/commands/GiveAllCommand.java
index de190b9..b5fd3d7 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/GiveAllCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/GiveAllCommand.java
@@ -1,12 +1,15 @@
package dev.padrewin.coldbits.commands;
+import dev.padrewin.colddev.command.argument.ArgumentHandlers;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.colddev.utils.StringPlaceholders;
-import java.util.Collections;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
import dev.padrewin.coldbits.manager.DataManager;
import dev.padrewin.coldbits.manager.LocaleManager;
import dev.padrewin.coldbits.util.BitsUtils;
@@ -14,68 +17,48 @@
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-public class GiveAllCommand extends BitsCommand {
+public class GiveAllCommand extends BaseBitsCommand {
- public GiveAllCommand() {
- super("giveall", CommandManager.CommandAliases.GIVEALL);
+ public GiveAllCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
- if (args.length < 1) {
- localeManager.sendMessage(sender, "command-giveall-usage");
- return;
- }
-
- int amount;
- try {
- amount = Integer.parseInt(args[0]);
- } catch (NumberFormatException e) {
- localeManager.sendMessage(sender, "invalid-amount");
- return;
- }
-
- final boolean silent = args.length > 1 && args[args.length - 1].equalsIgnoreCase("-s");
- final boolean includeOffline = args.length > 1 && args[1].equals("*");
-
- plugin.getScheduler().runTaskAsync(() -> {
- boolean success;
- if (includeOffline) {
- success = plugin.getManager(DataManager.class).offsetAllBits(amount);
+ @ColdExecutable
+ public void execute(CommandContext context, Integer amount, String includeOffline, String silentFlag) {
+ this.coldPlugin.getScheduler().runTaskAsync(() -> {
+ if (includeOffline != null) {
+ this.coldPlugin.getManager(DataManager.class).offsetAllBits(amount);
} else {
List playerIds = Bukkit.getOnlinePlayers().stream().map(Player::getUniqueId).collect(Collectors.toList());
- success = plugin.getAPI().giveAll(playerIds, amount);
+ this.api.giveAll(playerIds, amount);
}
- if (success) {
- if (!silent) {
- for (Player player : Bukkit.getOnlinePlayers()) {
- localeManager.sendMessage(player, "command-give-received", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
- .add("currency", localeManager.getCurrencyName(amount))
- .build());
- }
+ CommandSender sender = context.getSender();
+ if (silentFlag == null) {
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ this.localeManager.sendCommandMessage(player, "command-give-received", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
+ .add("currency", this.localeManager.getCurrencyName(amount))
+ .build());
}
- localeManager.sendMessage(sender, "command-giveall-success", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
- .add("currency", localeManager.getCurrencyName(amount))
+ this.localeManager.sendCommandMessage(sender, "command-giveall-success", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
+ .add("currency", this.localeManager.getCurrencyName(amount))
.build());
}
});
}
@Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- switch (args.length) {
- case 1:
- return Collections.singletonList("");
- case 2:
- return Collections.singletonList("*");
- case 3:
- return Collections.singletonList("-s");
- default:
- return Collections.emptyList();
- }
-
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("giveall")
+ .descriptionKey("command-giveall-description")
+ .permission("coldbits.giveall")
+ .arguments(ArgumentsDefinition.builder()
+ .required("amount", ArgumentHandlers.INTEGER)
+ .optional("*", ArgumentHandlers.forValues(String.class, "*"))
+ .optional("-s", ArgumentHandlers.forValues(String.class, "-s"))
+ .build())
+ .build();
}
+
}
diff --git a/src/main/java/dev/padrewin/coldbits/commands/GiveCommand.java b/src/main/java/dev/padrewin/coldbits/commands/GiveCommand.java
index 9748ec7..02d4f77 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/GiveCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/GiveCommand.java
@@ -1,88 +1,83 @@
package dev.padrewin.coldbits.commands;
+import dev.padrewin.colddev.command.argument.ArgumentHandlers;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.colddev.utils.StringPlaceholders;
-import java.util.Collections;
-import java.util.List;
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
+import dev.padrewin.coldbits.commands.arguments.StringSuggestingArgumentHandler;
import dev.padrewin.coldbits.manager.LocaleManager;
import dev.padrewin.coldbits.util.BitsUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-public class GiveCommand extends BitsCommand {
+public class GiveCommand extends BaseBitsCommand {
- public GiveCommand() {
- super("give", CommandManager.CommandAliases.GIVE);
+ public GiveCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
- if (args.length < 2) {
- localeManager.sendMessage(sender, "command-give-usage");
- return;
- }
-
- boolean silent = args.length > 2 && args[args.length - 1].equalsIgnoreCase("-s");
-
- BitsUtils.getPlayerByName(args[0], player -> {
+ @ColdExecutable
+ public void execute(CommandContext context, String target, Integer amount, String silentFlag) {
+ BitsUtils.getPlayerByName(target, player -> {
+ CommandSender sender = context.getSender();
if (player == null) {
- localeManager.sendMessage(sender, "unknown-player", StringPlaceholders.of("player", args[0]));
- return;
- }
-
- int amount;
- try {
- amount = Integer.parseInt(args[1]);
- } catch (NumberFormatException e) {
- localeManager.sendMessage(sender, "invalid-amount");
+ this.localeManager.sendCommandMessage(sender, "unknown-player", StringPlaceholders.of("player", target));
return;
}
if (amount <= 0) {
- localeManager.sendMessage(sender, "invalid-amount");
+ this.localeManager.sendCommandMessage(sender, "invalid-amount");
return;
}
- if (plugin.getAPI().give(player.getFirst(), amount)) {
- Player onlinePlayer = Bukkit.getPlayer(player.getFirst());
- if (onlinePlayer != null && !silent) {
- localeManager.sendMessage(onlinePlayer, "command-give-received", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
- .add("currency", localeManager.getCurrencyName(amount))
- .build());
- }
+ boolean success = this.api.give(player.getFirst(), amount);
- int newBalance = plugin.getAPI().look(player.getFirst());
+ if (success) {
+ // Get new balance after giving bits
+ int newBalance = this.api.look(player.getFirst());
- localeManager.sendMessage(sender, "command-give-success", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
- .add("currency", localeManager.getCurrencyName(amount))
- .add("player", player.getSecond())
- .build());
-
- localeManager.sendMessage(Bukkit.getConsoleSender(), "command-give-log", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
- .add("currency", localeManager.getCurrencyName(amount))
+ // Log to console regardless of silent flag
+ this.localeManager.sendMessage(Bukkit.getConsoleSender(), "command-give-log", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
+ .add("currency", this.localeManager.getCurrencyName(amount))
.add("player", player.getSecond())
.add("new_balance", BitsUtils.formatBits(newBalance))
.build());
+
+ // Only send player notifications if not silent
+ if (silentFlag == null) {
+ // Send message to receiver if they're online
+ Player onlinePlayer = Bukkit.getPlayer(player.getFirst());
+ if (onlinePlayer != null) {
+ this.localeManager.sendCommandMessage(onlinePlayer, "command-give-received", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
+ .add("currency", this.localeManager.getCurrencyName(amount))
+ .build());
+ }
+
+ // Send message to sender
+ this.localeManager.sendCommandMessage(sender, "command-give-success", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
+ .add("currency", this.localeManager.getCurrencyName(amount))
+ .add("player", player.getSecond())
+ .build());
+ }
}
});
}
@Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- if (args.length == 1) {
- return BitsUtils.getPlayerTabComplete(args[0]);
- } else if (args.length == 2) {
- return Collections.singletonList("");
- } else if (args.length ==3) {
- return Collections.singletonList("*");
- } else if (args.length == 4) {
- return Collections.singletonList("-s");
- } else {
- return Collections.emptyList();
- }
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("give")
+ .descriptionKey("command-give-description")
+ .permission("coldbits.give")
+ .arguments(ArgumentsDefinition.builder()
+ .required("target", new StringSuggestingArgumentHandler(BitsUtils::getPlayerTabComplete))
+ .required("amount", ArgumentHandlers.INTEGER)
+ .optional("-s", ArgumentHandlers.forValues(String.class, "-s"))
+ .build())
+ .build();
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/dev/padrewin/coldbits/commands/ImportCommand.java b/src/main/java/dev/padrewin/coldbits/commands/ImportCommand.java
index 53713b1..da937e5 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/ImportCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/ImportCommand.java
@@ -1,54 +1,56 @@
package dev.padrewin.coldbits.commands;
+import dev.padrewin.colddev.command.argument.ArgumentHandlers;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.colddev.database.MySQLConnector;
import dev.padrewin.colddev.utils.StringPlaceholders;
import java.io.File;
-import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.UUID;
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
import dev.padrewin.coldbits.manager.DataManager;
-import dev.padrewin.coldbits.manager.LocaleManager;
import dev.padrewin.coldbits.models.SortedPlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
-public class ImportCommand extends BitsCommand {
+public class ImportCommand extends BaseBitsCommand {
- public ImportCommand() {
- super("import", CommandManager.CommandAliases.IMPORT);
+ public ImportCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
- File file = new File(plugin.getDataFolder(), "storage.yml");
+ @ColdExecutable
+ public void execute(CommandContext context, String confirm) {
+ CommandSender sender = context.getSender();
+ File file = new File(this.coldPlugin.getDataFolder(), "storage.yml");
if (!file.exists()) {
- localeManager.sendMessage(sender, "command-import-no-backup");
+ this.localeManager.sendMessage(sender, "command-import-no-backup");
return;
}
- if (args.length < 1 || !args[0].equalsIgnoreCase("confirm")) {
- String databaseType = plugin.getManager(DataManager.class).getDatabaseConnector() instanceof MySQLConnector ? "MySQL" : "SQLite";
- localeManager.sendMessage(sender, "command-import-warning", StringPlaceholders.of("type", databaseType));
+ DataManager dataManager = this.coldPlugin.getManager(DataManager.class);
+ if (confirm == null) {
+ String databaseType = dataManager.getDatabaseConnector() instanceof MySQLConnector ? "MySQL" : "SQLite";
+ this.localeManager.sendMessage(sender, "command-import-warning", StringPlaceholders.of("type", databaseType));
return;
}
- plugin.getScheduler().runTaskAsync(() -> {
+ this.coldPlugin.getScheduler().runTaskAsync(() -> {
FileConfiguration configuration = YamlConfiguration.loadConfiguration(file);
ConfigurationSection bitsSection = configuration.getConfigurationSection("Bits");
if (bitsSection == null)
bitsSection = configuration.getConfigurationSection("Players");
if (bitsSection == null) {
- plugin.getLogger().warning("Malformed storage.yml file.");
+ this.coldPlugin.getLogger().warning("Malformed storage.yml file.");
return;
}
@@ -75,14 +77,20 @@ public void execute(ColdBits plugin, CommandSender sender, String[] args) {
}
}
- plugin.getManager(DataManager.class).importData(data, uuidMap);
- localeManager.sendMessage(sender, "command-import-success");
+ dataManager.importData(data, uuidMap);
+ this.localeManager.sendCommandMessage(sender, "command-import-success");
});
}
@Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- return Collections.emptyList();
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("import")
+ .descriptionKey("command-import-description")
+ .permission("coldbits.import")
+ .arguments(ArgumentsDefinition.builder()
+ .optional("confirm", ArgumentHandlers.forValues(String.class, "confirm"))
+ .build())
+ .build();
}
}
diff --git a/src/main/java/dev/padrewin/coldbits/commands/ImportLegacyCommand.java b/src/main/java/dev/padrewin/coldbits/commands/ImportLegacyCommand.java
index 9e1bc38..843edba 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/ImportLegacyCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/ImportLegacyCommand.java
@@ -1,46 +1,49 @@
package dev.padrewin.coldbits.commands;
+import dev.padrewin.colddev.command.argument.ArgumentHandlers;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.colddev.database.MySQLConnector;
import dev.padrewin.colddev.utils.StringPlaceholders;
-import java.util.Collections;
-import java.util.List;
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
import dev.padrewin.coldbits.manager.DataManager;
-import dev.padrewin.coldbits.manager.LocaleManager;
import org.bukkit.command.CommandSender;
-public class ImportLegacyCommand extends BitsCommand {
+public class ImportLegacyCommand extends BaseBitsCommand {
- public ImportLegacyCommand() {
- super("importlegacy", CommandManager.CommandAliases.IMPORTLEGACY);
+ public ImportLegacyCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- plugin.getScheduler().runTaskAsync(() -> {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
- if (!(plugin.getManager(DataManager.class).getDatabaseConnector() instanceof MySQLConnector)) {
- localeManager.sendMessage(sender, "command-importlegacy-only-mysql");
- return;
- }
-
- if (args.length < 1) {
- localeManager.sendMessage(sender, "command-importlegacy-usage");
- return;
- }
-
- if (plugin.getManager(DataManager.class).importLegacyTable(args[0])) {
- localeManager.sendMessage(sender, "command-importlegacy-success", StringPlaceholders.of("table", args[0]));
+ @ColdExecutable
+ public void execute(CommandContext context, String tableName) {
+ CommandSender sender = context.getSender();
+ DataManager dataManager = this.coldPlugin.getManager(DataManager.class);
+ if (!(dataManager.getDatabaseConnector() instanceof MySQLConnector)) {
+ this.localeManager.sendCommandMessage(sender, "command-importlegacy-only-mysql");
+ return;
+ }
+
+ this.coldPlugin.getScheduler().runTaskAsync(() -> {
+ if (dataManager.importLegacyTable(tableName)) {
+ this.localeManager.sendCommandMessage(sender, "command-importlegacy-success", StringPlaceholders.of("table", tableName));
} else {
- localeManager.sendMessage(sender, "command-importlegacy-failure", StringPlaceholders.of("table", args[0]));
+ this.localeManager.sendCommandMessage(sender, "command-importlegacy-failure", StringPlaceholders.of("table", tableName));
}
});
}
@Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- return Collections.emptyList();
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("importlegacy")
+ .descriptionKey("command-importlegacy-description")
+ .permission("coldbits.importlegacy")
+ .arguments(ArgumentsDefinition.builder()
+ .required("tableName", ArgumentHandlers.STRING)
+ .build())
+ .build();
}
}
diff --git a/src/main/java/dev/padrewin/coldbits/commands/LeadCommand.java b/src/main/java/dev/padrewin/coldbits/commands/LeadCommand.java
index 6716550..fded6e3 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/LeadCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/LeadCommand.java
@@ -1,41 +1,72 @@
package dev.padrewin.coldbits.commands;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.colddev.utils.StringPlaceholders;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
+import dev.padrewin.coldbits.commands.arguments.StringSuggestingArgumentHandler;
import dev.padrewin.coldbits.manager.DataManager;
-import dev.padrewin.coldbits.manager.LocaleManager;
import dev.padrewin.coldbits.models.SortedPlayer;
import dev.padrewin.coldbits.setting.SettingKey;
import dev.padrewin.coldbits.util.BitsUtils;
-import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
-import org.bukkit.permissions.Permissible;
-public class LeadCommand extends CommandHandler {
+public class LeadCommand extends BaseBitsCommand {
/**
- * Current page the player is viewing.
+ * Current page the player is viewing
*/
private final Map pageMap = new HashMap<>();
- public LeadCommand(ColdBits plugin) {
- super(plugin, "lead", CommandManager.CommandAliases.LEAD);
+ public LeadCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void noArgs(CommandSender sender) {
- LocaleManager localeManager = this.plugin.getManager(LocaleManager.class);
- int limit = SettingKey.LEADERBOARD_PER_PAGE.get();
+ @ColdExecutable
+ public void execute(CommandContext context, String pageArg) {
+ CommandSender sender = context.getSender();
+ String name = sender.getName();
+ int current = this.pageMap.getOrDefault(name, 0);
- this.plugin.getScheduler().runTaskAsync(() -> {
- List leaders = this.plugin.getManager(DataManager.class).getTopSortedBits(null);
+ if (pageArg == null) {
+ this.pageMap.put(name, 0);
+ this.send(context);
+ return;
+ } else if (pageArg.equalsIgnoreCase("prev")) {
+ this.pageMap.put(name, current - 1);
+ this.send(context);
+ return;
+ } else if (pageArg.equalsIgnoreCase("next")) {
+ this.pageMap.put(name, current + 1);
+ this.send(context);
+ return;
+ } else {
+ try {
+ current = Integer.parseInt(pageArg);
+ this.pageMap.put(name, current - 1);
+ this.send(context);
+ return;
+ } catch (NumberFormatException e) {
+ // Handle notification later
+ }
+ }
+
+ // Handle invalid input
+ this.localeManager.sendCommandMessage(sender, "command-lead-usage");
+ }
+
+ private void send(CommandContext context) {
+ this.coldPlugin.getScheduler().runTaskAsync(() -> {
+ List leaders = this.coldPlugin.getManager(DataManager.class).getTopSortedBits(null);
+
+ CommandSender sender = context.getSender();
+ int limit = SettingKey.LEADERBOARD_PER_PAGE.get();
int currentPage = this.pageMap.getOrDefault(sender.getName(), 0);
int numPages = (int) Math.ceil(leaders.size() / (double) limit);
@@ -58,7 +89,7 @@ public void noArgs(CommandSender sender) {
.limit(limit)
.collect(Collectors.toList());
- localeManager.sendMessage(sender, "command-lead-title", StringPlaceholders.builder("page", currentPage + 1)
+ this.localeManager.sendCommandMessage(sender, "command-lead-title", StringPlaceholders.builder("page", currentPage + 1)
.add("pages", numPages).build());
// Page through
@@ -66,52 +97,24 @@ public void noArgs(CommandSender sender) {
int position = currentPage * limit + i + 1;
SortedPlayer player = listedPlayers.get(i);
- localeManager.sendSimpleMessage(sender, "command-lead-entry", StringPlaceholders.builder("position", position)
+ this.localeManager.sendSimpleCommandMessage(sender, "command-lead-entry", StringPlaceholders.builder("position", position)
.add("player", player.getUsername())
.add("amount", BitsUtils.formatBits(player.getBits()))
- .add("currency", localeManager.getCurrencyName(player.getBits()))
+ .add("currency", this.localeManager.getCurrencyName(player.getBits()))
.build());
}
});
}
@Override
- public void unknownCommand(CommandSender sender, String[] args) {
- String pageArg = args[0];
-
- int current = this.pageMap.getOrDefault(sender.getName(), 0);
-
- if (pageArg.equalsIgnoreCase("prev")) {
- this.pageMap.put(sender.getName(), current - 1);
- this.noArgs(sender);
- return;
- } else if (pageArg.equals("next")) {
- this.pageMap.put(sender.getName(), current + 1);
- this.noArgs(sender);
- return;
- } else {
- try {
- current = Integer.parseInt(pageArg);
- this.pageMap.put(sender.getName(), current - 1);
- this.noArgs(sender);
- return;
- } catch (NumberFormatException e) {
- // Handle notification later
- }
- }
-
- // Handle invalid input
- this.plugin.getManager(LocaleManager.class).sendMessage(sender, "command-lead-usage");
- }
-
- @Override
- public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
- return args.length == 1 ? Arrays.asList("next", "prev", "1") : Collections.emptyList();
- }
-
- @Override
- public boolean hasPermission(Permissible permissible) {
- return permissible.hasPermission("ColdBits.lead");
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("lead")
+ .descriptionKey("command-lead-description")
+ .permission("coldbits.lead")
+ .arguments(ArgumentsDefinition.builder()
+ .optional("page", new StringSuggestingArgumentHandler("prev", "next", "1"))
+ .build())
+ .build();
}
}
diff --git a/src/main/java/dev/padrewin/coldbits/commands/LookCommand.java b/src/main/java/dev/padrewin/coldbits/commands/LookCommand.java
index ba29d22..8f66bd9 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/LookCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/LookCommand.java
@@ -1,45 +1,51 @@
package dev.padrewin.coldbits.commands;
+import dev.padrewin.colddev.command.argument.ArgumentHandlers;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.colddev.utils.StringPlaceholders;
-import java.util.Collections;
-import java.util.List;
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
+import dev.padrewin.coldbits.commands.arguments.StringSuggestingArgumentHandler;
import dev.padrewin.coldbits.manager.LocaleManager;
import dev.padrewin.coldbits.util.BitsUtils;
+import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
-public class LookCommand extends BitsCommand {
+public class LookCommand extends BaseBitsCommand {
- public LookCommand() {
- super("look", CommandManager.CommandAliases.LOOK);
+ public LookCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
- if (args.length < 1) {
- localeManager.sendMessage(sender, "command-look-usage");
- return;
- }
-
- BitsUtils.getPlayerByName(args[0], player -> {
+ @ColdExecutable
+ public void execute(CommandContext context, String target) {
+ BitsUtils.getPlayerByName(target, player -> {
+ CommandSender sender = context.getSender();
if (player == null) {
- localeManager.sendMessage(sender, "unknown-player", StringPlaceholders.of("player", args[0]));
+ this.localeManager.sendCommandMessage(sender, "unknown-player", StringPlaceholders.of("player", target));
return;
}
- int amount = plugin.getAPI().look(player.getFirst());
- localeManager.sendMessage(sender, "command-look-success", StringPlaceholders.builder("player", player.getSecond())
+ int amount = this.api.look(player.getFirst());
+ this.localeManager.sendCommandMessage(sender, "command-look-success", StringPlaceholders.builder("player", player.getSecond())
.add("amount", BitsUtils.formatBits(amount))
- .add("currency", localeManager.getCurrencyName(amount))
+ .add("currency", this.localeManager.getCurrencyName(amount))
.build());
});
}
@Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- return args.length == 1 ? BitsUtils.getPlayerTabComplete(args[0]) : Collections.emptyList();
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("look")
+ .descriptionKey("command-look-description")
+ .permission("coldbits.look")
+ .arguments(ArgumentsDefinition.builder()
+ .required("target", new StringSuggestingArgumentHandler(BitsUtils::getPlayerTabComplete))
+ .build())
+ .build();
}
}
diff --git a/src/main/java/dev/padrewin/coldbits/commands/MeCommand.java b/src/main/java/dev/padrewin/coldbits/commands/MeCommand.java
index e1c5f27..f821100 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/MeCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/MeCommand.java
@@ -1,40 +1,38 @@
package dev.padrewin.coldbits.commands;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.colddev.utils.StringPlaceholders;
-import java.util.Collections;
-import java.util.List;
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
import dev.padrewin.coldbits.manager.LocaleManager;
import dev.padrewin.coldbits.util.BitsUtils;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-public class MeCommand extends BitsCommand {
+public class MeCommand extends BaseBitsCommand {
- public MeCommand() {
- super("me", CommandManager.CommandAliases.ME);
+ public MeCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
- if (!(sender instanceof Player)) {
- localeManager.sendMessage(sender, "no-console");
- return;
- }
-
- plugin.getScheduler().runTaskAsync(() -> {
- int amount = plugin.getAPI().look(((Player) sender).getUniqueId());
- localeManager.sendMessage(sender, "command-me-success", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
- .add("currency", localeManager.getCurrencyName(amount))
- .build());
- });
+ @ColdExecutable
+ public void execute(CommandContext context) {
+ CommandSender sender = context.getSender();
+ LocaleManager localeManager = this.coldPlugin.getManager(LocaleManager.class);
+ int amount = this.api.look(((Player) sender).getUniqueId());
+ localeManager.sendCommandMessage(sender, "command-me-success", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
+ .add("currency", localeManager.getCurrencyName(amount))
+ .build());
}
@Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- return Collections.emptyList();
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("me")
+ .descriptionKey("command-me-description")
+ .permission("coldbits.me")
+ .playerOnly()
+ .build();
}
}
diff --git a/src/main/java/dev/padrewin/coldbits/commands/PayCommand.java b/src/main/java/dev/padrewin/coldbits/commands/PayCommand.java
index cb87e72..4c32179 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/PayCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/PayCommand.java
@@ -2,109 +2,88 @@
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
+import dev.padrewin.colddev.command.argument.ArgumentHandlers;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.colddev.utils.StringPlaceholders;
-import java.util.Collections;
-import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
-import dev.padrewin.coldbits.manager.LocaleManager;
+import dev.padrewin.coldbits.commands.arguments.StringSuggestingArgumentHandler;
import dev.padrewin.coldbits.util.BitsUtils;
import org.bukkit.Bukkit;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-public class PayCommand extends BitsCommand {
+public class PayCommand extends BaseBitsCommand {
private static final Cache PAY_COOLDOWN = CacheBuilder.newBuilder()
.expireAfterWrite(500, TimeUnit.MILLISECONDS)
.build();
- public PayCommand() {
- super("pay", CommandManager.CommandAliases.PAY);
+ public PayCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
- if (!(sender instanceof Player)) {
- localeManager.sendMessage(sender, "no-console");
- return;
- }
-
- Player player = (Player) sender;
- if (args.length < 2) {
- localeManager.sendMessage(player, "command-pay-usage");
- return;
- }
-
+ @ColdExecutable
+ public void execute(CommandContext context, String targetName, Integer amount) {
+ Player player = (Player) context.getSender();
if (PAY_COOLDOWN.getIfPresent(player.getUniqueId()) != null) {
- localeManager.sendMessage(player, "command-cooldown");
+ this.localeManager.sendCommandMessage(player, "command-cooldown");
return;
}
PAY_COOLDOWN.put(player.getUniqueId(), System.currentTimeMillis());
- BitsUtils.getPlayerByName(args[0], target -> {
+ BitsUtils.getPlayerByName(targetName, target -> {
if (target == null) {
- localeManager.sendMessage(player, "unknown-player", StringPlaceholders.of("player", args[0]));
+ this.localeManager.sendCommandMessage(player, "unknown-player", StringPlaceholders.of("player", targetName));
return;
}
if (player.getUniqueId().equals(target.getFirst())) {
- localeManager.sendMessage(player, "command-pay-self");
- return;
- }
-
- int amount;
- try {
- amount = Integer.parseInt(args[1]);
- } catch (NumberFormatException e) {
- localeManager.sendMessage(player, "invalid-amount");
+ this.localeManager.sendCommandMessage(player, "command-pay-self");
return;
}
if (amount <= 0) {
- localeManager.sendMessage(player, "invalid-amount");
+ this.localeManager.sendCommandMessage(player, "invalid-amount");
return;
}
- if (plugin.getAPI().pay(player.getUniqueId(), target.getFirst(), amount)) {
+ if (this.api.pay(player.getUniqueId(), target.getFirst(), amount)) {
// Send success message to sender
- localeManager.sendMessage(player, "command-pay-sent", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
- .add("currency", localeManager.getCurrencyName(amount))
+ this.localeManager.sendCommandMessage(player, "command-pay-sent", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
+ .add("currency", this.localeManager.getCurrencyName(amount))
.add("player", target.getSecond())
.build());
// Send success message to target
Player onlinePlayer = Bukkit.getPlayer(target.getFirst());
if (onlinePlayer != null) {
- localeManager.sendMessage(onlinePlayer, "command-pay-received", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
- .add("currency", localeManager.getCurrencyName(amount))
+ this.localeManager.sendCommandMessage(onlinePlayer, "command-pay-received", StringPlaceholders.builder("amount", BitsUtils.formatBits(amount))
+ .add("currency", this.localeManager.getCurrencyName(amount))
.add("player", player.getName())
.build());
}
} else {
- localeManager.sendMessage(player, "command-pay-lacking-funds", StringPlaceholders.of("currency", localeManager.getCurrencyName(0)));
+ this.localeManager.sendCommandMessage(player, "command-pay-lacking-funds", StringPlaceholders.of("currency", this.localeManager.getCurrencyName(0)));
}
});
}
@Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- if (!(sender instanceof Player))
- return Collections.emptyList();
-
- if (args.length == 1) {
- List completions = BitsUtils.getPlayerTabComplete(args[0]);
- completions.remove(sender.getName());
- return completions;
- } else if (args.length == 2) {
- return Collections.singletonList("");
- } else {
- return Collections.emptyList();
- }
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("pay")
+ .descriptionKey("command-pay-description")
+ .permission("coldbits.pay")
+ .arguments(ArgumentsDefinition.builder()
+ .required("target", new StringSuggestingArgumentHandler(BitsUtils::getPlayerTabComplete))
+ .required("amount", ArgumentHandlers.INTEGER)
+ .build())
+ .playerOnly()
+ .build();
}
}
diff --git a/src/main/java/dev/padrewin/coldbits/commands/ResetCommand.java b/src/main/java/dev/padrewin/coldbits/commands/ResetCommand.java
index 1e5eba4..ef880a9 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/ResetCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/ResetCommand.java
@@ -1,56 +1,61 @@
package dev.padrewin.coldbits.commands;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.colddev.utils.StringPlaceholders;
-import java.util.Collections;
-import java.util.List;
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
-import dev.padrewin.coldbits.manager.LocaleManager;
+import dev.padrewin.coldbits.commands.arguments.StringSuggestingArgumentHandler;
import dev.padrewin.coldbits.util.BitsUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
-public class ResetCommand extends BitsCommand {
+public class ResetCommand extends BaseBitsCommand {
- public ResetCommand() {
- super("reset", CommandManager.CommandAliases.RESET);
+ public ResetCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
- if (args.length < 1) {
- localeManager.sendMessage(sender, "command-reset-usage");
- return;
- }
-
- BitsUtils.getPlayerByName(args[0], player -> {
+ @ColdExecutable
+ public void execute(CommandContext context, String target) {
+ BitsUtils.getPlayerByName(target, player -> {
+ CommandSender sender = context.getSender();
if (player == null) {
- localeManager.sendMessage(sender, "unknown-player", StringPlaceholders.of("player", args[0]));
+ this.localeManager.sendCommandMessage(sender, "unknown-player", StringPlaceholders.of("player", target));
return;
}
- int oldBalance = plugin.getAPI().look(player.getFirst());
+ // Get old balance before reset (for logging purposes)
+ int oldBalance = this.api.look(player.getFirst());
- if (plugin.getAPI().reset(player.getFirst())) {
- int newBalance = plugin.getAPI().look(player.getFirst());
+ if (this.api.reset(player.getFirst())) {
+ // Get new balance after reset
+ int newBalance = this.api.look(player.getFirst());
- localeManager.sendMessage(sender, "command-reset-success", StringPlaceholders.builder("player", player.getSecond())
- .add("currency", localeManager.getCurrencyName(0))
+ // Send success message to command sender
+ this.localeManager.sendCommandMessage(sender, "command-reset-success", StringPlaceholders.builder("player", player.getSecond())
+ .add("currency", this.localeManager.getCurrencyName(0))
.build());
- localeManager.sendMessage(Bukkit.getConsoleSender(), "command-reset-log", StringPlaceholders.builder("player", player.getSecond())
+ // Log to console
+ this.localeManager.sendMessage(Bukkit.getConsoleSender(), "command-reset-log", StringPlaceholders.builder("player", player.getSecond())
.add("new_balance", BitsUtils.formatBits(newBalance))
- .add("currency", localeManager.getCurrencyName(newBalance))
+ .add("currency", this.localeManager.getCurrencyName(newBalance))
.build());
}
});
}
-
@Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- return args.length == 1 ? BitsUtils.getPlayerTabComplete(args[0]) : Collections.emptyList();
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("reset")
+ .descriptionKey("command-reset-description")
+ .permission("coldbits.reset")
+ .arguments(ArgumentsDefinition.builder()
+ .required("target", new StringSuggestingArgumentHandler(BitsUtils::getPlayerTabComplete))
+ .build())
+ .build();
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/dev/padrewin/coldbits/commands/SetCommand.java b/src/main/java/dev/padrewin/coldbits/commands/SetCommand.java
index 18ecc6a..2337186 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/SetCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/SetCommand.java
@@ -1,72 +1,73 @@
package dev.padrewin.coldbits.commands;
-import dev.padrewin.coldbits.ColdBits;
+import dev.padrewin.colddev.command.argument.ArgumentHandlers;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.colddev.utils.StringPlaceholders;
-import java.util.Collections;
-import java.util.List;
-import dev.padrewin.coldbits.manager.CommandManager;
-import dev.padrewin.coldbits.manager.LocaleManager;
+import dev.padrewin.coldbits.ColdBits;
+import dev.padrewin.coldbits.commands.arguments.StringSuggestingArgumentHandler;
import dev.padrewin.coldbits.util.BitsUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
-public class SetCommand extends BitsCommand {
+public class SetCommand extends BaseBitsCommand {
- public SetCommand() {
- super("set", CommandManager.CommandAliases.SET);
+ public SetCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
- if (args.length < 2) {
- localeManager.sendMessage(sender, "command-set-usage");
- return;
- }
-
- BitsUtils.getPlayerByName(args[0], player -> {
+ @ColdExecutable
+ public void execute(CommandContext context, String target, Integer amount, String silentFlag) {
+ BitsUtils.getPlayerByName(target, player -> {
+ CommandSender sender = context.getSender();
if (player == null) {
- localeManager.sendMessage(sender, "unknown-player", StringPlaceholders.of("player", args[0]));
+ this.localeManager.sendCommandMessage(sender, "unknown-player", StringPlaceholders.of("player", target));
return;
}
- int amount;
- try {
- amount = Integer.parseInt(args[1]);
- if (amount < 0) {
- localeManager.sendMessage(sender, "invalid-amount");
- return;
- }
- } catch (NumberFormatException e) {
- localeManager.sendMessage(sender, "invalid-amount");
+ if (amount < 0) {
+ this.localeManager.sendCommandMessage(sender, "invalid-amount");
return;
}
- if (plugin.getAPI().set(player.getFirst(), amount)) {
- int newBalance = plugin.getAPI().look(player.getFirst());
+ // Try to set the bits for the player
+ boolean success = this.api.set(player.getFirst(), amount);
- localeManager.sendMessage(sender, "command-set-success", StringPlaceholders.builder("player", player.getSecond())
- .add("currency", localeManager.getCurrencyName(amount))
- .add("amount", BitsUtils.formatBits(amount))
- .build());
+ if (success) {
+ // Get the new balance after setting
+ int newBalance = this.api.look(player.getFirst());
- localeManager.sendMessage(Bukkit.getConsoleSender(), "command-set-log", StringPlaceholders.builder("player", player.getSecond())
+ // Log to console regardless of silentFlag
+ this.localeManager.sendMessage(Bukkit.getConsoleSender(), "command-set-log", StringPlaceholders.builder("player", player.getSecond())
.add("new_balance", BitsUtils.formatBits(newBalance))
- .add("currency", localeManager.getCurrencyName(newBalance))
+ .add("currency", this.localeManager.getCurrencyName(newBalance))
.build());
+
+ // Notify sender only if not silent
+ if (silentFlag == null) {
+ this.localeManager.sendCommandMessage(sender, "command-set-success", StringPlaceholders.builder("player", player.getSecond())
+ .add("currency", this.localeManager.getCurrencyName(amount))
+ .add("amount", BitsUtils.formatBits(amount))
+ .build());
+ }
}
});
}
@Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- if (args.length == 1) {
- return BitsUtils.getPlayerTabComplete(args[0]);
- } else if (args.length == 2) {
- return Collections.singletonList("");
- } else {
- return Collections.emptyList();
- }
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("set")
+ .descriptionKey("command-set-description")
+ .permission("coldbits.set")
+ .arguments(ArgumentsDefinition.builder()
+ .required("target", new StringSuggestingArgumentHandler(BitsUtils::getPlayerTabComplete))
+ .required("amount", ArgumentHandlers.INTEGER)
+ .optional("-s", ArgumentHandlers.forValues(String.class, "-s"))
+ .build())
+ .build();
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/dev/padrewin/coldbits/commands/TakeCommand.java b/src/main/java/dev/padrewin/coldbits/commands/TakeCommand.java
index d0cc403..7e6e625 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/TakeCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/TakeCommand.java
@@ -1,79 +1,81 @@
package dev.padrewin.coldbits.commands;
+import dev.padrewin.colddev.command.argument.ArgumentHandlers;
+import dev.padrewin.colddev.command.framework.ArgumentsDefinition;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.colddev.utils.StringPlaceholders;
-import java.util.Collections;
-import java.util.List;
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
-import dev.padrewin.coldbits.manager.LocaleManager;
+import dev.padrewin.coldbits.commands.arguments.StringSuggestingArgumentHandler;
import dev.padrewin.coldbits.util.BitsUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
-public class TakeCommand extends BitsCommand {
+public class TakeCommand extends BaseBitsCommand {
- public TakeCommand() {
- super("take", CommandManager.CommandAliases.TAKE);
+ public TakeCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
- if (args.length < 2) {
- localeManager.sendMessage(sender, "command-take-usage");
- return;
- }
-
- BitsUtils.getPlayerByName(args[0], player -> {
+ @ColdExecutable
+ public void execute(CommandContext context, String target, Integer amount, String silentFlag) {
+ BitsUtils.getPlayerByName(target, player -> {
+ CommandSender sender = context.getSender();
if (player == null) {
- localeManager.sendMessage(sender, "unknown-player", StringPlaceholders.of("player", args[0]));
+ this.localeManager.sendCommandMessage(sender, "unknown-player", StringPlaceholders.of("player", target));
return;
}
- int amount;
- try {
- amount = Integer.parseInt(args[1]);
- if (amount <= 0) {
- localeManager.sendMessage(sender, "invalid-amount");
- return;
- }
- } catch (NumberFormatException e) {
- localeManager.sendMessage(sender, "invalid-amount");
+ if (amount <= 0) {
+ this.localeManager.sendCommandMessage(sender, "invalid-amount");
return;
}
- int oldBalance = plugin.getAPI().look(player.getFirst());
+ // Get the old balance before taking
+ int oldBalance = this.api.look(player.getFirst());
- if (plugin.getAPI().take(player.getFirst(), amount)) {
- int newBalance = plugin.getAPI().look(player.getFirst());
+ // Try to take bits from the player
+ boolean success = this.api.take(player.getFirst(), amount);
- localeManager.sendMessage(sender, "command-take-success", StringPlaceholders.builder("player", player.getSecond())
- .add("currency", localeManager.getCurrencyName(amount))
- .add("amount", BitsUtils.formatBits(amount))
- .build());
+ // Get the new balance after taking
+ int newBalance = this.api.look(player.getFirst());
- localeManager.sendMessage(Bukkit.getConsoleSender(), "command-take-log", StringPlaceholders.builder("player", player.getSecond())
+ if (success) {
+ // Log to console regardless of silentFlag
+ this.localeManager.sendMessage(Bukkit.getConsoleSender(), "command-take-log", StringPlaceholders.builder("player", player.getSecond())
.add("amount", BitsUtils.formatBits(amount))
.add("new_balance", BitsUtils.formatBits(newBalance))
- .add("currency", localeManager.getCurrencyName(newBalance))
+ .add("currency", this.localeManager.getCurrencyName(newBalance))
.build());
- } else {
- localeManager.sendMessage(sender, "command-take-not-enough", StringPlaceholders.builder("player", player.getSecond())
- .add("currency", localeManager.getCurrencyName(amount))
+
+ // Notify sender only if not silent
+ if (silentFlag == null) {
+ this.localeManager.sendCommandMessage(sender, "command-take-success", StringPlaceholders.builder("player", player.getSecond())
+ .add("currency", this.localeManager.getCurrencyName(amount))
+ .add("amount", BitsUtils.formatBits(amount))
+ .build());
+ }
+ } else if (silentFlag == null) {
+ this.localeManager.sendCommandMessage(sender, "command-take-not-enough", StringPlaceholders.builder("player", player.getSecond())
+ .add("currency", this.localeManager.getCurrencyName(amount))
.build());
}
});
}
@Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- if (args.length == 1) {
- return BitsUtils.getPlayerTabComplete(args[0]);
- } else if (args.length == 2) {
- return Collections.singletonList("");
- } else {
- return Collections.emptyList();
- }
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("take")
+ .descriptionKey("command-take-description")
+ .permission("coldbits.take")
+ .arguments(ArgumentsDefinition.builder()
+ .required("target", new StringSuggestingArgumentHandler(BitsUtils::getPlayerTabComplete))
+ .required("amount", ArgumentHandlers.INTEGER)
+ .optional("-s", ArgumentHandlers.forValues(String.class, "-s"))
+ .build())
+ .build();
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/dev/padrewin/coldbits/commands/VersionCommand.java b/src/main/java/dev/padrewin/coldbits/commands/VersionCommand.java
index b35093f..bb039b2 100644
--- a/src/main/java/dev/padrewin/coldbits/commands/VersionCommand.java
+++ b/src/main/java/dev/padrewin/coldbits/commands/VersionCommand.java
@@ -1,9 +1,9 @@
package dev.padrewin.coldbits.commands;
-import java.util.Collections;
-import java.util.List;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import dev.padrewin.colddev.command.framework.CommandInfo;
+import dev.padrewin.colddev.command.framework.annotation.ColdExecutable;
import dev.padrewin.coldbits.ColdBits;
-import dev.padrewin.coldbits.manager.CommandManager;
import dev.padrewin.coldbits.manager.LocaleManager;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ClickEvent;
@@ -12,54 +12,57 @@
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
-public class VersionCommand extends BitsCommand {
+public class VersionCommand extends BaseBitsCommand {
- public VersionCommand() {
- super("version", CommandManager.CommandAliases.VERSION);
+ public VersionCommand(ColdBits coldBits) {
+ super(coldBits);
}
- @Override
- public void execute(ColdBits plugin, CommandSender sender, String[] args) {
- sendInfo(plugin, sender);
- }
-
- @Override
- public List tabComplete(ColdBits plugin, CommandSender sender, String[] args) {
- return Collections.emptyList();
- }
-
- public static void sendInfo(ColdBits plugin, CommandSender sender) {
- LocaleManager localeManager = plugin.getManager(LocaleManager.class);
+ @ColdExecutable
+ public void execute(CommandContext context) {
+ CommandSender sender = context.getSender();
+ LocaleManager localeManager = this.coldPlugin.getManager(LocaleManager.class);
String baseColor = localeManager.getLocaleMessage("base-command-color");
- localeManager.sendCustomMessage(sender, baseColor + "");
- localeManager.sendCustomMessage(sender, baseColor + "Running ColdBits" + baseColor + " v" + plugin.getDescription().getVersion());
-
- List authors = plugin.getDescription().getAuthors();
- String firstAuthor = authors.size() > 0 ? authors.get(0) : "padrewin";
- localeManager.sendCustomMessage(sender, baseColor + "&7Developer: " + firstAuthor);
+ // Plugin name and version - using ColdBits colors
+ localeManager.sendCustomMessage(sender, baseColor + "Running ColdBits" + baseColor +
+ " v" + this.coldPlugin.getDescription().getVersion());
+
+ // Display authors
+ if (this.coldPlugin.getDescription().getAuthors().size() >= 2) {
+ localeManager.sendCustomMessage(sender, baseColor + "Developer(s): "
+ + this.coldPlugin.getDescription().getAuthors().get(0) + baseColor + " & "
+ + this.coldPlugin.getDescription().getAuthors().get(1));
+ } else if (!this.coldPlugin.getDescription().getAuthors().isEmpty()) {
+ localeManager.sendCustomMessage(sender, baseColor + "Developer(s): "
+ + this.coldPlugin.getDescription().getAuthors().get(0));
+ }
+ // Add GitHub link - custom feature from ColdBits
if (sender instanceof Player) {
Player player = (Player) sender;
-
TextComponent baseMessage = new TextComponent(baseColor + "GitHub: ");
TextComponent clickableText = new TextComponent(ChatColor.RED + "" + ChatColor.UNDERLINE + "click here");
clickableText.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/Cold-Development/ColdBits"));
baseMessage.addExtra(clickableText);
-
player.spigot().sendMessage(baseMessage);
-
} else if (sender instanceof ConsoleCommandSender) {
String ansiRed = "\u001B[31m";
String ansiReset = "\u001B[0m";
String ansiAqua = "\u001B[36m";
-
sender.sendMessage(ansiAqua + "GitHub: " + ansiRed + "https://github.com/Cold-Development/ColdBits" + ansiReset);
}
+ // Help message
localeManager.sendSimpleMessage(sender, "base-command-help");
- localeManager.sendCustomMessage(sender, baseColor + "");
}
+ @Override
+ protected CommandInfo createCommandInfo() {
+ return CommandInfo.builder("version")
+ .descriptionKey("command-version-description")
+ .permission("coldbits.version")
+ .build();
+ }
}
\ No newline at end of file
diff --git a/src/main/java/dev/padrewin/coldbits/commands/arguments/StringSuggestingArgumentHandler.java b/src/main/java/dev/padrewin/coldbits/commands/arguments/StringSuggestingArgumentHandler.java
new file mode 100644
index 0000000..8aa4e32
--- /dev/null
+++ b/src/main/java/dev/padrewin/coldbits/commands/arguments/StringSuggestingArgumentHandler.java
@@ -0,0 +1,27 @@
+package dev.padrewin.coldbits.commands.arguments;
+
+import dev.padrewin.colddev.command.argument.StringArgumentHandler;
+import dev.padrewin.colddev.command.framework.Argument;
+import dev.padrewin.colddev.command.framework.CommandContext;
+import java.util.Arrays;
+import java.util.List;
+import java.util.function.Function;
+
+public class StringSuggestingArgumentHandler extends StringArgumentHandler {
+
+ private final Function> suggestionsFunction;
+
+ public StringSuggestingArgumentHandler(String... suggestions) {
+ this(context -> Arrays.asList(suggestions));
+ }
+
+ public StringSuggestingArgumentHandler(Function> suggestionsFunction) {
+ this.suggestionsFunction = suggestionsFunction;
+ }
+
+ @Override
+ public List suggest(CommandContext context, Argument argument, String[] args) {
+ return this.suggestionsFunction.apply(context);
+ }
+
+}
diff --git a/src/main/java/dev/padrewin/coldbits/listeners/VotifierListener.java b/src/main/java/dev/padrewin/coldbits/listeners/VotifierListener.java
index a4aece8..f8eecd3 100644
--- a/src/main/java/dev/padrewin/coldbits/listeners/VotifierListener.java
+++ b/src/main/java/dev/padrewin/coldbits/listeners/VotifierListener.java
@@ -41,4 +41,4 @@ public void vote(VotifierEvent event) {
}
});
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/dev/padrewin/coldbits/manager/CommandManager.java b/src/main/java/dev/padrewin/coldbits/manager/CommandManager.java
index 420eee6..08ddbfb 100644
--- a/src/main/java/dev/padrewin/coldbits/manager/CommandManager.java
+++ b/src/main/java/dev/padrewin/coldbits/manager/CommandManager.java
@@ -1,91 +1,23 @@
package dev.padrewin.coldbits.manager;
-import com.google.common.collect.Lists;
-import dev.padrewin.coldbits.ColdBits;
import dev.padrewin.colddev.ColdPlugin;
-import dev.padrewin.colddev.config.CommentedFileConfiguration;
-import dev.padrewin.colddev.manager.Manager;
-import java.io.File;
+import dev.padrewin.colddev.command.framework.BaseColdCommand;
+import dev.padrewin.colddev.manager.AbstractCommandManager;
import java.util.Collections;
import java.util.List;
-import java.util.stream.Collectors;
-import dev.padrewin.coldbits.commands.Commander;
-import org.bukkit.command.PluginCommand;
-
-public class CommandManager extends Manager {
-
- public enum CommandAliases {
- ROOT {
- @Override
- public List get() {
- return Collections.emptyList();
- }
- },
- BROADCAST,
- EXPORT,
- GIVEALL,
- GIVE,
- HELP,
- IMPORT,
- IMPORTLEGACY,
- LEAD,
- LOOK,
- ME,
- PAY,
- RELOAD,
- RESET,
- SET,
- TAKE,
- VERSION;
-
- private List aliases;
-
- public List get() {
- return this.aliases;
- }
+import java.util.function.Function;
+import dev.padrewin.coldbits.ColdBits;
+import dev.padrewin.coldbits.commands.BaseCommand;
- private void set(List aliases) {
- this.aliases = aliases.stream().filter(x -> !x.trim().isEmpty()).collect(Collectors.toList());
- }
- }
+public class CommandManager extends AbstractCommandManager {
public CommandManager(ColdPlugin coldPlugin) {
super(coldPlugin);
}
@Override
- public void reload() {
- File file = new File(this.coldPlugin.getDataFolder(), "aliases.yml");
- CommentedFileConfiguration fileConfiguration = CommentedFileConfiguration.loadConfiguration(file);
-
- boolean changes = false;
- for (CommandAliases value : CommandAliases.values()) {
- if (value == CommandAliases.ROOT)
- continue;
-
- String key = value.name().toLowerCase();
- if (fileConfiguration.contains(key)) {
- value.set(fileConfiguration.getStringList(key));
- } else {
- changes = true;
- fileConfiguration.set(key, Lists.newArrayList(key));
- value.set(Collections.singletonList(key));
- }
- }
-
- if (changes)
- fileConfiguration.save(file);
-
- // Register commands
- Commander commander = new Commander((ColdBits) this.coldPlugin);
- PluginCommand command = this.coldPlugin.getCommand("bits");
- if (command != null)
- command.setExecutor(commander);
- }
-
- @Override
- public void disable() {
-
+ public List> getRootCommands() {
+ return Collections.singletonList(plugin -> new BaseCommand(ColdBits.getInstance()));
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/dev/padrewin/coldbits/manager/DataManager.java b/src/main/java/dev/padrewin/coldbits/manager/DataManager.java
index 70ec9f1..f9aa20b 100644
--- a/src/main/java/dev/padrewin/coldbits/manager/DataManager.java
+++ b/src/main/java/dev/padrewin/coldbits/manager/DataManager.java
@@ -308,8 +308,8 @@ public List getTopSortedBits(Integer limit) {
List players = new ArrayList<>();
this.databaseConnector.connect(connection -> {
String query = "SELECT t." + this.getUuidColumnName() + ", username, bits FROM " + this.getBitsTableName() + " t " +
- "LEFT JOIN " + this.getTablePrefix() + "username_cache c ON t.uuid = c.uuid " +
- "ORDER BY bits DESC" + (limit != null ? " LIMIT " + limit : "");
+ "LEFT JOIN " + this.getTablePrefix() + "username_cache c ON t.uuid = c.uuid " +
+ "ORDER BY bits DESC" + (limit != null ? " LIMIT " + limit : "");
try (Statement statement = connection.createStatement()) {
ResultSet result = statement.executeQuery(query);
while (result.next()) {
@@ -339,8 +339,8 @@ public Map getOnlineTopSortedPointPositions() {
this.databaseConnector.connect(connection -> {
String tableName = this.getBitsTableName();
String query = "SELECT t." + this.getUuidColumnName() + ", (SELECT COUNT(*) FROM " + tableName + " x WHERE x.bits >= t.bits) AS position " +
- "FROM " + tableName + " t " +
- "WHERE t.uuid IN (" + uuidList + ")";
+ "FROM " + tableName + " t " +
+ "WHERE t.uuid IN (" + uuidList + ")";
try (Statement statement = connection.createStatement()) {
ResultSet result = statement.executeQuery(query);
while (result.next()) {
@@ -353,6 +353,9 @@ public Map getOnlineTopSortedPointPositions() {
}
public void importData(SortedSet data, Map cachedUsernames) {
+ this.bitsCache.invalidateAll();
+ this.pendingTransactions.clear();
+
this.databaseConnector.connect(connection -> {
String purgeQuery = "DELETE FROM " + this.getBitsTableName();
try (Statement statement = connection.createStatement()) {
@@ -375,6 +378,9 @@ public void importData(SortedSet data, Map cachedUse
}
public boolean importLegacyTable(String tableName) {
+ this.bitsCache.invalidateAll();
+ this.pendingTransactions.clear();
+
AtomicBoolean value = new AtomicBoolean();
this.databaseConnector.connect(connection -> {
try {
@@ -384,8 +390,8 @@ public boolean importLegacyTable(String tableName) {
ResultSet result = statement.executeQuery(selectQuery);
while (result.next()) {
UUID uuid = UUID.fromString(result.getString(1));
- int pointValue = result.getInt(2);
- bits.put(uuid, pointValue);
+ int bitValue = result.getInt(2);
+ bits.put(uuid, bitValue);
}
}
diff --git a/src/main/java/dev/padrewin/coldbits/manager/LeaderboardManager.java b/src/main/java/dev/padrewin/coldbits/manager/LeaderboardManager.java
index 9bc5eb3..734a614 100644
--- a/src/main/java/dev/padrewin/coldbits/manager/LeaderboardManager.java
+++ b/src/main/java/dev/padrewin/coldbits/manager/LeaderboardManager.java
@@ -76,7 +76,7 @@ public void refresh() {
}
/**
- * @return the current bits leaderboard
+ * @return the current points leaderboard
*/
public List getLeaderboard() {
this.usedLeaderboardSinceLastRefresh = true;
@@ -99,4 +99,4 @@ public void onPlayerJoin(PlayerJoinEvent event) {
this.usedPositionsSinceLastRefresh = true;
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/dev/padrewin/coldbits/util/BitsUtils.java b/src/main/java/dev/padrewin/coldbits/util/BitsUtils.java
index 82644b8..4a62673 100644
--- a/src/main/java/dev/padrewin/coldbits/util/BitsUtils.java
+++ b/src/main/java/dev/padrewin/coldbits/util/BitsUtils.java
@@ -1,19 +1,21 @@
package dev.padrewin.coldbits.util;
-import dev.padrewin.coldbits.ColdBits;
import dev.padrewin.colddev.ColdPlugin;
+import dev.padrewin.colddev.command.framework.CommandContext;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
-import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.NavigableMap;
+import java.util.Objects;
import java.util.TreeMap;
import java.util.UUID;
import java.util.function.Consumer;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import dev.padrewin.coldbits.ColdBits;
import dev.padrewin.coldbits.manager.DataManager;
import dev.padrewin.coldbits.manager.LocaleManager;
import dev.padrewin.coldbits.models.Tuple;
@@ -21,7 +23,6 @@
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.metadata.MetadataValue;
-import org.bukkit.util.StringUtil;
public final class BitsUtils {
@@ -110,18 +111,20 @@ public static void getPlayerByName(String name, Consumer> ca
}
ColdBits plugin = ColdBits.getInstance();
+ DataManager dataManager = plugin.getManager(DataManager.class);
plugin.getScheduler().runTaskAsync(() -> {
- OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(name);
- if (offlinePlayer.getName() != null && offlinePlayer.hasPlayedBefore()) {
- Tuple tuple = new Tuple<>(offlinePlayer.getUniqueId(), offlinePlayer.getName());
+ UUID uuid = plugin.getManager(DataManager.class).lookupCachedUUID(name);
+ if (uuid != null) {
+ Tuple tuple = new Tuple<>(uuid, name);
plugin.getScheduler().runTask(() -> callback.accept(tuple));
return;
}
- UUID uuid = plugin.getManager(DataManager.class).lookupCachedUUID(name);
- if (uuid != null) {
- Tuple tuple = new Tuple<>(uuid, name);
+ OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(name);
+ if (offlinePlayer.getName() != null && offlinePlayer.hasPlayedBefore()) {
+ Tuple tuple = new Tuple<>(offlinePlayer.getUniqueId(), offlinePlayer.getName());
plugin.getScheduler().runTask(() -> callback.accept(tuple));
+ dataManager.updateCachedUsernames(Collections.singletonMap(tuple.getFirst(), tuple.getSecond()));
return;
}
@@ -153,19 +156,18 @@ public static Tuple getPlayerByName(String name) {
}
/**
- * Gets a list of player names to show in tab completions, vanished players are excluded.
- *
- * @param arg The argument for the name
- * @return a list of online players excluding the
+ * @return a list of online players excluding vanished players
*/
- public static List getPlayerTabComplete(String arg) {
- List players = Bukkit.getOnlinePlayers().stream()
- .filter(x -> x.getMetadata("vanished").stream().noneMatch(MetadataValue::asBoolean))
+ public static List getPlayerTabComplete(CommandContext context) {
+ return Bukkit.getOnlinePlayers().stream()
+ .filter(BitsUtils::isVisible)
+ .filter(x -> !Objects.equals(x, context.getSender()))
.map(Player::getName)
.collect(Collectors.toList());
- List completions = new ArrayList<>();
- StringUtil.copyPartialMatches(arg, players, completions);
- return completions;
+ }
+
+ public static boolean isVisible(Player player) {
+ return player.getMetadata("vanished").stream().noneMatch(MetadataValue::asBoolean);
}
}
diff --git a/src/main/java/org/black_ixx/playerpoints/PlayerPoints.java b/src/main/java/org/black_ixx/playerpoints/PlayerPoints.java
index 6bbdd8d..df19e2c 100644
--- a/src/main/java/org/black_ixx/playerpoints/PlayerPoints.java
+++ b/src/main/java/org/black_ixx/playerpoints/PlayerPoints.java
@@ -1,6 +1,8 @@
// In package org.black_ixx.playerpoints
package org.black_ixx.playerpoints;
+import dev.padrewin.coldbits.ColdBitsAPI;
+
public class PlayerPoints {
private static PlayerPoints instance;
@@ -15,7 +17,7 @@ public static PlayerPoints getInstance() {
return instance;
}
- public PlayerPointsAPI getAPI() {
+ public ColdBitsAPI getAPI() {
return dev.padrewin.coldbits.ColdBits.getInstance().getAPI();
}
}
diff --git a/src/main/resources/locale/en_US.yml b/src/main/resources/locale/en_US.yml
index 8570c2b..27fb851 100644
--- a/src/main/resources/locale/en_US.yml
+++ b/src/main/resources/locale/en_US.yml
@@ -18,12 +18,18 @@ command-take-log: "&7Took &c%amount% %currency% &7from &c%player%&7's balance. B
# Misc
no-permission: '&cYou don''t have permission for that!'
-no-console: '&cOnly players may execute this command.'
+only-player: '&cThis command can only be executed by a player.'
invalid-amount: '&cAmount must be a positive whole number.'
unknown-player: '&cPlayer could not be found: &b%player%'
unknown-command: '&cUnknown command: &b%input%'
-votifier-voted: '&7Thanks for voting on &c%service%&7! &c&b%amount% &7has been added to your balance.'
-leaderboard-empty-entry: This could be you!
+invalid-argument: '&cInvalid argument: %message%.'
+command-usage: '&7Usage: &c/%cmd% %args%'
+argument-handler-string: 'String cannot be empty'
+argument-handler-enum: '%enum% type [%input%] does not exist'
+argument-handler-enum-list: '%enum% type [%input%] does not exist. Valid types: %types%'
+argument-handler-value: 'Value [%input%] is not valid'
+votifier-voted: '&7Thanks for voting on %service%! &c%amount% &7has been added to your balance.'
+leaderboard-empty-entry: 'This could be you!'
command-cooldown: '&cPlease wait before using that command again.'
# Base Command Message
@@ -31,89 +37,78 @@ base-command-color: '&7'
base-command-help: '&7Use &c/bits help &7for command information.'
# Help Command
-command-help-description: '&8 - &c/bits help &7- Displays the help menu... You have arrived'
command-help-title: '&cAvailable Commands:'
+command-help-description: 'Displays the help menu... You have arrived'
+command-help-list-description: '&8 - &c/%cmd% %subcmd% %args% &7- %desc%'
+command-help-list-description-no-args: '&8 - &c/%cmd% %subcmd% &7- %desc%'
# Give Command
-command-give-description: '&8 - &c/bits give &7- Give a player bits &7(&asupport -s [SILENT]&7)'
-command-give-usage: '&7Usage: &c/bits give [-s]'
+command-give-description: 'Give a player bits'
command-give-success: '&c%player% &7was given &c%amount% &c%currency%&7.'
command-give-received: '&7You have received &c%amount% &c%currency%&7.'
# Give All Command
-command-giveall-description: '&8 - &c/bits giveall &7- Gives all online players bits &7(&asupport -s [SILENT]&7)'
-command-giveall-usage: '&7Usage: &c/bits giveall [*] [-s]'
+command-giveall-description: 'Gives all online players bits'
command-giveall-success: '&7Gave &c%amount% &c%currency% &7to all online players.'
# Take Command
-command-take-description: '&8 - &c/bits take &7- Take bits from a player'
-command-take-usage: '&7Usage: &c/bits take '
+command-take-description: 'Take bits from a player'
command-take-success: '&7Took &c%amount% &c%currency% from &c%player%&a&7.'
command-take-not-enough: '&c%player% &7does not have enough %currency% for that.'
# Look Command
-command-look-description: '&8 - &c/bits look &7- View a player''s bits'
-command-look-usage: '&7Usage: &c/bits look '
+command-look-description: 'View a player''s bits'
command-look-success: '&c%player% &7has &c%amount% &c%currency%&7.'
# Pay Command
-command-pay-description: '&8 - &c/bits pay &7- Pay a player'
-command-pay-usage: '&7Usage: &c/bits pay '
+command-pay-description: 'Pay a player'
command-pay-self: '&cYou cannot pay yourself!'
command-pay-sent: '&7You paid &c%player% %amount% &c%currency%&7.'
command-pay-received: '&7You were paid &c%amount% &c%currency% by &c%player%&7.'
command-pay-lacking-funds: '&cYou do not have enough %currency% for that.'
# Set Command
-command-set-description: '&8 - &c/bits set &7- Set a player''s bits'
-command-set-usage: '&7Usage: &c/bits set '
+command-set-description: 'Set a player''s bits'
command-set-success: '&7Set the %currency% of &c%player% &7to &c%amount%&7.'
# Reset Command
-command-reset-description: '&8 - &c/bits reset &7- Reset a player''s bits'
-command-reset-usage: '&7Usage: &c/bits reset '
+command-reset-description: 'Reset a player''s bits'
command-reset-success: '&7Reset the %currency% for &c%player%&7.'
# Me Command
-command-me-description: '&8 - &c/bits me &7- View your bits'
-command-me-usage: '&7Usage: &c/bits me'
+command-me-description: 'View your bits'
command-me-success: '&7You have &c%amount% &c%currency%&7.'
# Lead Command
-command-lead-description: '&8 - &c/bits lead &7- View the leaderboard'
-command-lead-usage: '&7Usage: &c/bits lead [next|prev|#]'
+command-lead-description: 'View the leaderboard'
command-lead-title: '&7Leaderboard &c(Page #%page%/%pages%)'
command-lead-entry: '&c%position%). &c%player% &7- &c%amount% %currency%'
+command-lead-usage: '&cInvalid leaderboard page.'
# Broadcast Command
-command-broadcast-description: '&8 - &c/bits broadcast &7- Broadcast a player''s bits'
-command-broadcast-usage: '&7Usage: &c/bits broadcast '
+command-broadcast-description: 'Broadcast a player''s bits'
command-broadcast-message: '&c%player% &7has &c%amount% &c%currency%&7.'
# Reload Command
-command-reload-description: '&8 - &c/bits reload &7- Reloads the plugin'
-command-reload-usage: '&7Usage: &c/bits reload'
+command-reload-description: 'Reloads the plugin'
command-reload-success: '&7Configuration and locale files were reloaded.'
# Export Command
-command-export-description: '&8 - &c/bits export &7- Exports the data to storage.yml'
-command-export-usage: '&7Usage: &c/bits export'
+command-export-description: 'Exports the data to storage.yml'
command-export-success: '&aSave data has been exported to storage.yml.'
command-export-warning: '&eWARNING: &cA storage.yml file already exists. &7If you would like to overwrite it, use &c/bits &cexport confirm&7.'
# Import Command
-command-import-description: '&8 - &c/bits import &7- Imports the data from storage.yml'
-command-import-usage: '&7Usage: &c/bits import'
+command-import-description: 'Imports the data from storage.yml'
command-import-success: '&aSave data has been imported from storage.yml.'
command-import-no-backup: '&cUnable to import, storage.yml does not exist. You can generate one with &a/bits export &cand use it to transfer data between database types.'
command-import-warning: '&eWARNING: &cThis operation will delete all data from the active database and replace it with the contents of storage.yml. &cThe currently active database type is &c&o&l%type%&c. &cIf you are absolutely sure about this, use &a/bits import confirm&c.'
# Import Legacy Command
-command-importlegacy-description: '&8 - &c/bits importlegacy &7- Import a legacy table'
-command-importlegacy-usage: '&7Usage: &c/bits importlegacy '
+command-importlegacy-description: 'Import a legacy table'
command-importlegacy-success: '&aSuccessfully imported legacy data from &4%table%&a.'
command-importlegacy-failure: '&cFailed to import legacy data from &4%table%&c. Does the table exist?'
command-importlegacy-only-mysql: '&cThis command is only available when you have MySQL enabled.'
# Version Command
-command-version-description: '&8 - &c/bits version &7- Display the version info for ColdBits'
+command-version-description: 'Display the version info for ColdBits'
diff --git a/src/main/resources/locale/fr_FR.yml b/src/main/resources/locale/fr_FR.yml
index 063d64c..db5fa32 100644
--- a/src/main/resources/locale/fr_FR.yml
+++ b/src/main/resources/locale/fr_FR.yml
@@ -2,118 +2,113 @@
prefix: '&8「ɻAA7C℟BBoA597D0lC5B6E4dE6D4F8BCEA5F7iB677F7t E48F6s&8」&7» '
# Currency
-currency-singular: Point
-currency-plural: bits
+currency-singular: Bit
+currency-plural: Bits
currency-separator: ','
currency-decimal: .
number-abbreviation-thousands: k
number-abbreviation-millions: m
-number-abbreviation-billions: b
+number-abbreviation-billions: md
# Console log
-command-give-log: "&7Ajouté &c%amount% %currency% &7au solde de &c%player%&7. Solde: &c%new_balance% %currency%"
-command-reset-log: "&7Réinitialisé le solde de &c%player%&7. Solde: &c%new_balance% %currency%"
-command-set-log: "&7Défini le solde de &c%player%&7. Solde: &c%new_balance% %currency%"
-command-take-log: "&7Retiré &c%amount% %currency% &7du solde de &c%player%&7. Solde: &c%new_balance% %currency%"
+command-give-log: "&7Ajout de &c%amount% %currency% &7au solde de &c%player%&7. Solde: &c%new_balance% %currency%"
+command-reset-log: "&7Réinitialisation du solde de &c%player%&7. Solde: &c%new_balance% %currency%"
+command-set-log: "&7Définition du solde de &c%player%&7. Solde: &c%new_balance% %currency%"
+command-take-log: "&7Retrait de &c%amount% %currency% &7du solde de &c%player%&7. Solde: &c%new_balance% %currency%"
# Misc
-no-permission: '&cVous n''avez pas la permission pour cela!'
-no-console: '&cSeuls les joueurs peuvent exécuter cette commande.'
+no-permission: '&cVous n''avez pas la permission pour cela !'
+only-player: '&cCette commande ne peut être exécutée que par un joueur.'
invalid-amount: '&cLe montant doit être un nombre entier positif.'
-unknown-player: '&cLe joueur n''a pas pu être trouvé: &b%player%'
-unknown-command: '&cCommande inconnue: &b%input%'
-votifier-voted: '&7Merci d''avoir voté sur &c%service%&7! &c&b%amount% &7a été ajouté à votre solde.'
-leaderboard-empty-entry: Cela pourrait être vous!
+unknown-player: '&cJoueur introuvable : &b%player%'
+unknown-command: '&cCommande inconnue : &b%input%'
+invalid-argument: '&cArgument invalide : %message%.'
+command-usage: '&7Utilisation : &c/%cmd% %args%'
+argument-handler-string: 'La chaîne ne peut pas être vide'
+argument-handler-enum: 'Le type %enum% [%input%] n''existe pas'
+argument-handler-enum-list: 'Le type %enum% [%input%] n''existe pas. Types valides : %types%'
+argument-handler-value: 'La valeur [%input%] n''est pas valide'
+votifier-voted: '&7Merci d''avoir voté sur %service% ! &c%amount% &7a été ajouté à votre solde.'
+leaderboard-empty-entry: 'Cela pourrait être vous !'
command-cooldown: '&cVeuillez patienter avant de réutiliser cette commande.'
# Base Command Message
base-command-color: '&7'
-base-command-help: '&7Utilisez &c/bits help &7pour des informations sur les commandes.'
+base-command-help: '&7Utilisez &c/bits help &7pour obtenir des informations sur les commandes.'
# Help Command
-command-help-description: '&8 - &c/bits help &7- Affiche le menu d''aide... Vous êtes arrivé'
-command-help-title: '&cCommandes disponibles:'
+command-help-title: '&cCommandes disponibles :'
+command-help-description: 'Affiche le menu d''aide... Vous êtes arrivé'
+command-help-list-description: '&8 - &c/%cmd% %subcmd% %args% &7- %desc%'
+command-help-list-description-no-args: '&8 - &c/%cmd% %subcmd% &7- %desc%'
# Give Command
-command-give-description: '&8 - &c/bits give &7- Donner des bits à un joueur &a(supporte aussi -s [SILENCIEUX])'
-command-give-usage: '&7Utilisation: &c/bits give [-s]'
-command-give-success: '&c%player% &7a reçu &c%amount% &c%currency%&7.'
+command-give-description: 'Donner des bits à un joueur'
+command-give-success: '&c%amount% &c%currency% &7ont été donnés à &c%player%&7.'
command-give-received: '&7Vous avez reçu &c%amount% &c%currency%&7.'
# Give All Command
-command-giveall-description: '&8 - &c/bits giveall &7- Donne des bits à tous les joueurs en ligne &a(supporte aussi -s [SILENCIEUX])'
-command-giveall-usage: '&7Utilisation: &c/bits giveall [*] [-s]'
-command-giveall-success: '&7Donné &c%amount% &c%currency% &7à tous les joueurs en ligne.'
+command-giveall-description: 'Donner des bits à tous les joueurs en ligne'
+command-giveall-success: '&7Don de &c%amount% &c%currency% &7à tous les joueurs en ligne.'
# Take Command
-command-take-description: '&8 - &c/bits take &7- Retirer des bits à un joueur'
-command-take-usage: '&7Utilisation: &c/bits take '
-command-take-success: '&7Retiré &c%amount% &c%currency% de &c%player%&7.'
+command-take-description: 'Prendre des bits à un joueur'
+command-take-success: '&7Retrait de &c%amount% &c%currency% &7à &c%player%&a&7.'
command-take-not-enough: '&c%player% &7n''a pas assez de %currency% pour cela.'
# Look Command
-command-look-description: '&8 - &c/bits look &7- Voir les bits d''un joueur'
-command-look-usage: '&7Utilisation: &c/bits look '
+command-look-description: 'Voir les bits d''un joueur'
command-look-success: '&c%player% &7a &c%amount% &c%currency%&7.'
# Pay Command
-command-pay-description: '&8 - &c/bits pay &7- Payer un joueur'
-command-pay-usage: '&7Utilisation: &c/bits pay '
-command-pay-self: '&cVous ne pouvez pas vous payer vous-même!'
+command-pay-description: 'Payer un joueur'
+command-pay-self: '&cVous ne pouvez pas vous payer vous-même !'
command-pay-sent: '&7Vous avez payé &c%player% %amount% &c%currency%&7.'
-command-pay-received: '&7Vous avez reçu &c%amount% &c%currency% de &c%player%&7.'
+command-pay-received: '&7Vous avez reçu &c%amount% &c%currency% &7de &c%player%&7.'
command-pay-lacking-funds: '&cVous n''avez pas assez de %currency% pour cela.'
# Set Command
-command-set-description: '&8 - &c/bits set &7- Définir les bits d''un joueur'
-command-set-usage: '&7Utilisation: &c/bits set '
-command-set-success: '&7Les bits de &c%player% &7ont été définis à &c%amount%&7.'
+command-set-description: 'Définir les bits d''un joueur'
+command-set-success: '&7Les %currency% de &c%player% &7ont été définis à &c%amount%&7.'
# Reset Command
-command-reset-description: '&8 - &c/bits reset &7- Réinitialiser les bits d''un joueur'
-command-reset-usage: '&7Utilisation: &c/bits reset '
-command-reset-success: '&7Les bits de &c%player% &7ont été réinitialisés.'
+command-reset-description: 'Réinitialiser les bits d''un joueur'
+command-reset-success: '&7Les %currency% de &c%player% &7ont été réinitialisés.'
# Me Command
-command-me-description: '&8 - &c/bits me &7- Voir vos bits'
-command-me-usage: '&7Utilisation: &c/bits me'
+command-me-description: 'Voir vos bits'
command-me-success: '&7Vous avez &c%amount% &c%currency%&7.'
# Lead Command
-command-lead-description: '&8 - &c/bits lead &7- Voir le classement'
-command-lead-usage: '&7Utilisation: &c/bits lead [suivant|précédent|#]'
+command-lead-description: 'Voir le classement'
command-lead-title: '&7Classement &c(Page #%page%/%pages%)'
command-lead-entry: '&c%position%). &c%player% &7- &c%amount% %currency%'
+command-lead-usage: '&cPage de classement invalide.'
# Broadcast Command
-command-broadcast-description: '&8 - &c/bits broadcast &7- Annoncer les bits d''un joueur'
-command-broadcast-usage: '&7Utilisation: &c/bits broadcast '
+command-broadcast-description: 'Diffuser les bits d''un joueur'
command-broadcast-message: '&c%player% &7a &c%amount% &c%currency%&7.'
# Reload Command
-command-reload-description: '&8 - &c/bits reload &7- Recharge le plugin'
-command-reload-usage: '&7Utilisation: &c/bits reload'
+command-reload-description: 'Recharger le plugin'
command-reload-success: '&7Les fichiers de configuration et de langue ont été rechargés.'
# Export Command
-command-export-description: '&8 - &c/bits export &7- Exporte les données dans storage.yml'
-command-export-usage: '&7Utilisation: &c/bits export'
+command-export-description: 'Exporter les données vers storage.yml'
command-export-success: '&aLes données ont été exportées vers storage.yml.'
-command-export-warning: '&cAttention: Un fichier storage.yml existe déjà. Si vous souhaitez l''écraser, utilisez &d/bits &cexport confirm.'
+command-export-warning: '&eATTENTION : &cUn fichier storage.yml existe déjà. &7Si vous souhaitez l''écraser, utilisez &c/bits &cexport confirm&7.'
# Import Command
-command-import-description: '&8 - &c/bits import &7- Importe les données depuis storage.yml'
-command-import-usage: '&7Utilisation: &c/bits import'
+command-import-description: 'Importer les données depuis storage.yml'
command-import-success: '&aLes données ont été importées depuis storage.yml.'
-command-import-no-backup: '&cImpossible d''importer, storage.yml n''existe pas. Vous pouvez en générer un avec &d/bits export &cet l''utiliser pour transférer des données entre types de bases de données.'
-command-import-warning: '&cAttention: Cette opération supprimera toutes les données de la base de données active et les remplacera par le contenu de storage.yml. &cLe type de base de données actuellement actif est &b&o&l%type%&c. &cSi vous en êtes absolument certain, utilisez &b/bits import confirm&c.'
+command-import-no-backup: '&cImpossible d''importer, storage.yml n''existe pas. Vous pouvez en générer un avec &a/bits export &cet l''utiliser pour transférer des données entre types de bases de données.'
+command-import-warning: '&eATTENTION : &cCette opération supprimera toutes les données de la base de données active et les remplacera par le contenu de storage.yml. &cLe type de base de données actuellement actif est &c&o&l%type%&c. &cSi vous êtes absolument sûr de cela, utilisez &a/bits import confirm&c.'
# Import Legacy Command
-command-importlegacy-description: '&8 - &c/bits importlegacy &7- Importer une table héritée'
-command-importlegacy-usage: '&7Utilisation: &c/bits importlegacy '
-command-importlegacy-success: '&aDonnées héritées de &d%table%&a importées avec succès.'
-command-importlegacy-failure: '&cÉchec de l''importation des données héritées de &d%table%&c. La table existe-t-elle?'
-command-importlegacy-only-mysql: '&cCette commande est uniquement disponible lorsque MySQL est activé.'
+command-importlegacy-description: 'Importer une table héritée'
+command-importlegacy-success: '&aImportation réussie des données héritées de &4%table%&a.'
+command-importlegacy-failure: '&cÉchec de l''importation des données héritées de &4%table%&c. La table existe-t-elle ?'
+command-importlegacy-only-mysql: '&cCette commande n''est disponible que lorsque MySQL est activé.'
# Version Command
-command-version-description: '&8 - &c/bits version &7- Affiche les informations de version pour ColdBits'
+command-version-description: 'Afficher les informations de version de ColdBits'
diff --git a/src/main/resources/locale/gr_GR.yml b/src/main/resources/locale/gr_GR.yml
index a6be406..3e193e5 100644
--- a/src/main/resources/locale/gr_GR.yml
+++ b/src/main/resources/locale/gr_GR.yml
@@ -2,118 +2,113 @@
prefix: '&8「ɻAA7C℟BBoA597D0lC5B6E4dE6D4F8BCEA5F7iB677F7t E48F6s&8」&7» '
# Currency
-currency-singular: Πόντος
-currency-plural: Πόντοι
+currency-singular: Bit
+currency-plural: Bits
currency-separator: ','
currency-decimal: .
number-abbreviation-thousands: χιλ
-number-abbreviation-millions: εκατ
-number-abbreviation-billions: δισ
+number-abbreviation-millions: εκ
+number-abbreviation-billions: δις
# Console log
-command-give-log: "&7Πρόσθεσε &c%amount% %currency% &7στον λογαριασμό του &c%player%&7. Υπόλοιπο: &c%new_balance% %currency%"
-command-reset-log: "&7Επαναφορά του λογαριασμού του &c%player%&7. Υπόλοιπο: &c%new_balance% %currency%"
-command-set-log: "&7Ορίστηκε ο λογαριασμός του &c%player%&7. Υπόλοιπο: &c%new_balance% %currency%"
-command-take-log: "&7Αφαίρεση &c%amount% %currency% &7από τον λογαριασμό του &c%player%&7. Υπόλοιπο: &c%new_balance% %currency%"
+command-give-log: "&7Προστέθηκαν &c%amount% %currency% &7στο υπόλοιπο του &c%player%&7. Υπόλοιπο: &c%new_balance% %currency%"
+command-reset-log: "&7Επαναφορά του υπολοίπου του &c%player%&7. Υπόλοιπο: &c%new_balance% %currency%"
+command-set-log: "&7Ορίστηκε το υπόλοιπο του &c%player%&7. Υπόλοιπο: &c%new_balance% %currency%"
+command-take-log: "&7Αφαιρέθηκαν &c%amount% %currency% &7από το υπόλοιπο του &c%player%&7. Υπόλοιπο: &c%new_balance% %currency%"
# Misc
no-permission: '&cΔεν έχετε άδεια για αυτό!'
-no-console: '&cΜόνο οι παίκτες μπορούν να εκτελέσουν αυτήν την εντολή.'
+only-player: '&cΑυτή η εντολή μπορεί να εκτελεστεί μόνο από παίκτη.'
invalid-amount: '&cΤο ποσό πρέπει να είναι θετικός ακέραιος αριθμός.'
unknown-player: '&cΟ παίκτης δεν βρέθηκε: &b%player%'
unknown-command: '&cΆγνωστη εντολή: &b%input%'
-votifier-voted: '&7Ευχαριστούμε που ψηφίσατε στο &c%service%&7! &c&b%amount% &7προστέθηκαν στο υπόλοιπό σας.'
-leaderboard-empty-entry: Αυτό θα μπορούσες να είσαι εσύ!
-command-cooldown: '&cΠαρακαλώ περιμένετε πριν χρησιμοποιήσετε ξανά αυτή την εντολή.'
+invalid-argument: '&cΜη έγκυρο όρισμα: %message%.'
+command-usage: '&7Χρήση: &c/%cmd% %args%'
+argument-handler-string: 'Η συμβολοσειρά δεν μπορεί να είναι κενή'
+argument-handler-enum: 'Ο τύπος %enum% [%input%] δεν υπάρχει'
+argument-handler-enum-list: 'Ο τύπος %enum% [%input%] δεν υπάρχει. Έγκυροι τύποι: %types%'
+argument-handler-value: 'Η τιμή [%input%] δεν είναι έγκυρη'
+votifier-voted: '&7Ευχαριστούμε που ψηφίσατε στο %service%! &c%amount% &7προστέθηκαν στο υπόλοιπό σας.'
+leaderboard-empty-entry: 'Αυτό θα μπορούσατε να είστε εσείς!'
+command-cooldown: '&cΠαρακαλώ περιμένετε πριν χρησιμοποιήσετε ξανά αυτήν την εντολή.'
# Base Command Message
base-command-color: '&7'
base-command-help: '&7Χρησιμοποιήστε &c/bits help &7για πληροφορίες εντολών.'
# Help Command
-command-help-description: '&8 - &c/bits help &7- Εμφανίζει το μενού βοήθειας... Έφτασες'
command-help-title: '&cΔιαθέσιμες Εντολές:'
+command-help-description: 'Εμφανίζει το μενού βοήθειας... Έχετε φτάσει'
+command-help-list-description: '&8 - &c/%cmd% %subcmd% %args% &7- %desc%'
+command-help-list-description-no-args: '&8 - &c/%cmd% %subcmd% &7- %desc%'
# Give Command
-command-give-description: '&8 - &c/bits give &7- Δώστε πόντους σε έναν παίκτη &a(επίσης υποστηρίζει -s [ΣΙΩΠΗΛΑ])'
-command-give-usage: '&7Χρήση: &c/bits give <παίκτης> <ποσό> [-s]'
-command-give-success: '&c%player% &7έλαβε &c%amount% &c%currency%&7.'
+command-give-description: 'Δώστε bits σε έναν παίκτη'
+command-give-success: '&7Δόθηκαν &c%amount% &c%currency% &7στον &c%player%&7.'
command-give-received: '&7Λάβατε &c%amount% &c%currency%&7.'
# Give All Command
-command-giveall-description: '&8 - &c/bits giveall &7- Δίνει πόντους σε όλους τους παίκτες online &a(επίσης υποστηρίζει -s [ΣΙΩΠΗΛΑ])'
-command-giveall-usage: '&7Χρήση: &c/bits giveall <ποσό> [*] [-s]'
-command-giveall-success: '&7Δόθηκαν &c%amount% &c%currency% &7σε όλους τους παίκτες online.'
+command-giveall-description: 'Δώστε bits σε όλους τους συνδεδεμένους παίκτες'
+command-giveall-success: '&7Δόθηκαν &c%amount% &c%currency% &7σε όλους τους συνδεδεμένους παίκτες.'
# Take Command
-command-take-description: '&8 - &c/bits take &7- Αφαιρέστε πόντους από έναν παίκτη'
-command-take-usage: '&7Χρήση: &c/bits take <παίκτης> <ποσό>'
-command-take-success: '&7Αφαιρέθηκαν &c%amount% &c%currency% από &c%player%&7.'
-command-take-not-enough: '&c%player% &7δεν έχει αρκετούς %currency% για αυτό.'
+command-take-description: 'Πάρτε bits από έναν παίκτη'
+command-take-success: '&7Αφαιρέθηκαν &c%amount% &c%currency% &7από τον &c%player%&a&7.'
+command-take-not-enough: '&cΟ %player% &7δεν έχει αρκετά %currency% για αυτό.'
# Look Command
-command-look-description: '&8 - &c/bits look &7- Δείτε τους πόντους ενός παίκτη'
-command-look-usage: '&7Χρήση: &c/bits look <παίκτης>'
-command-look-success: '&c%player% &7έχει &c%amount% &c%currency%&7.'
+command-look-description: 'Δείτε τα bits ενός παίκτη'
+command-look-success: '&cΟ %player% &7έχει &c%amount% &c%currency%&7.'
# Pay Command
-command-pay-description: '&8 - &c/bits pay &7- Πληρώστε έναν παίκτη'
-command-pay-usage: '&7Χρήση: &c/bits pay <παίκτης> <ποσό>'
+command-pay-description: 'Πληρώστε έναν παίκτη'
command-pay-self: '&cΔεν μπορείτε να πληρώσετε τον εαυτό σας!'
-command-pay-sent: '&7Πληρώσατε &c%player% %amount% &c%currency%&7.'
-command-pay-received: '&7Πληρωθήκατε &c%amount% &c%currency% από &c%player%&7.'
-command-pay-lacking-funds: '&cΔεν έχετε αρκετούς %currency% για αυτό.'
+command-pay-sent: '&7Πληρώσατε τον &c%player% με %amount% &c%currency%&7.'
+command-pay-received: '&7Σας πλήρωσε ο &c%player% &7με &c%amount% &c%currency%&7.'
+command-pay-lacking-funds: '&cΔεν έχετε αρκετά %currency% για αυτό.'
# Set Command
-command-set-description: '&8 - &c/bits set &7- Ορίστε τους πόντους ενός παίκτη'
-command-set-usage: '&7Χρήση: &c/bits set <παίκτης> <ποσό>'
-command-set-success: '&7Οι πόντοι του &c%player% &7ορίστηκαν σε &c%amount%&7.'
+command-set-description: 'Ορίστε τα bits ενός παίκτη'
+command-set-success: '&7Τα %currency% του &c%player% &7ορίστηκαν σε &c%amount%&7.'
# Reset Command
-command-reset-description: '&8 - &c/bits reset &7- Επαναφορά των πόντων ενός παίκτη'
-command-reset-usage: '&7Χρήση: &c/bits reset <παίκτης>'
-command-reset-success: '&7Οι πόντοι του &c%player% &7επαναφέρθηκαν.'
+command-reset-description: 'Επαναφέρετε τα bits ενός παίκτη'
+command-reset-success: '&7Έγινε επαναφορά των %currency% για τον &c%player%&7.'
# Me Command
-command-me-description: '&8 - &c/bits me &7- Δείτε τους πόντους σας'
-command-me-usage: '&7Χρήση: &c/bits me'
+command-me-description: 'Δείτε τα bits σας'
command-me-success: '&7Έχετε &c%amount% &c%currency%&7.'
# Lead Command
-command-lead-description: '&8 - &c/bits lead &7- Δείτε τον πίνακα κατάταξης'
-command-lead-usage: '&7Χρήση: &c/bits lead [επόμενη|προηγούμενη|#]'
-command-lead-title: '&7Πίνακας Κατάταξης &c(Σελίδα #%page%/%pages%)'
+command-lead-description: 'Δείτε την κατάταξη'
+command-lead-title: '&7Κατάταξη &c(Σελίδα #%page%/%pages%)'
command-lead-entry: '&c%position%). &c%player% &7- &c%amount% %currency%'
+command-lead-usage: '&cΜη έγκυρη σελίδα κατάταξης.'
# Broadcast Command
-command-broadcast-description: '&8 - &c/bits broadcast &7- Ανακοινώστε τους πόντους ενός παίκτη'
-command-broadcast-usage: '&7Χρήση: &c/bits broadcast <παίκτης>'
-command-broadcast-message: '&c%player% &7έχει &c%amount% &c%currency%&7.'
+command-broadcast-description: 'Μεταδώστε τα bits ενός παίκτη'
+command-broadcast-message: '&cΟ %player% &7έχει &c%amount% &c%currency%&7.'
# Reload Command
-command-reload-description: '&8 - &c/bits reload &7- Επαναφορτώνει το plugin'
-command-reload-usage: '&7Χρήση: &c/bits reload'
+command-reload-description: 'Επαναφορτώνει το plugin'
command-reload-success: '&7Τα αρχεία ρυθμίσεων και γλώσσας επαναφορτώθηκαν.'
# Export Command
-command-export-description: '&8 - &c/bits export &7- Εξάγει τα δεδομένα στο αρχείο storage.yml'
-command-export-usage: '&7Χρήση: &c/bits export'
-command-export-success: '&aΤα δεδομένα εξάχθηκαν στο αρχείο storage.yml.'
-command-export-warning: '&cΠροειδοποίηση: Το αρχείο storage.yml υπάρχει ήδη. Εάν θέλετε να το αντικαταστήσετε, χρησιμοποιήστε &d/bits &cexport confirm.'
+command-export-description: 'Εξάγει τα δεδομένα στο storage.yml'
+command-export-success: '&aΤα δεδομένα εξήχθησαν στο storage.yml.'
+command-export-warning: '&eΠΡΟΕΙΔΟΠΟΙΗΣΗ: &cΥπάρχει ήδη ένα αρχείο storage.yml. &7Αν θέλετε να το αντικαταστήσετε, χρησιμοποιήστε &c/bits &cexport confirm&7.'
# Import Command
-command-import-description: '&8 - &c/bits import &7- Εισάγει τα δεδομένα από το αρχείο storage.yml'
-command-import-usage: '&7Χρήση: &c/bits import'
-command-import-success: '&aΤα δεδομένα εισήχθησαν από το αρχείο storage.yml.'
-command-import-no-backup: '&cΑδύνατη η εισαγωγή, το αρχείο storage.yml δεν υπάρχει. Μπορείτε να δημιουργήσετε ένα με &d/bits export &cκαι να το χρησιμοποιήσετε για μεταφορά δεδομένων μεταξύ τύπων βάσης δεδομένων.'
-command-import-warning: '&cΠροειδοποίηση: Αυτή η ενέργεια θα διαγράψει όλα τα δεδομένα από την ενεργή βάση δεδομένων και θα τα αντικαταστήσει με τα περιεχόμενα του αρχείου storage.yml. &cΟ ενεργός τύπος βάσης δεδομένων είναι &b&o&l%type%&c. &cΕάν είστε απόλυτα σίγουροι για αυτό, χρησιμοποιήστε &b/bits import confirm&c.'
+command-import-description: 'Εισάγει τα δεδομένα από το storage.yml'
+command-import-success: '&aΤα δεδομένα εισήχθησαν από το storage.yml.'
+command-import-no-backup: '&cΑδύνατη η εισαγωγή, το storage.yml δεν υπάρχει. Μπορείτε να δημιουργήσετε ένα με &a/bits export &cκαι να το χρησιμοποιήσετε για να μεταφέρετε δεδομένα μεταξύ τύπων βάσεων δεδομένων.'
+command-import-warning: '&eΠΡΟΕΙΔΟΠΟΙΗΣΗ: &cΑυτή η λειτουργία θα διαγράψει όλα τα δεδομένα από την ενεργή βάση δεδομένων και θα τα αντικαταστήσει με τα περιεχόμενα του storage.yml. &cΟ τρέχων ενεργός τύπος βάσης δεδομένων είναι &c&o&l%type%&c. &cΑν είστε απόλυτα σίγουροι για αυτό, χρησιμοποιήστε &a/bits import confirm&c.'
# Import Legacy Command
-command-importlegacy-description: '&8 - &c/bits importlegacy &7- Εισαγωγή παλιάς βάσης δεδομένων'
-command-importlegacy-usage: '&7Χρήση: &c/bits importlegacy <βάση>'
-command-importlegacy-success: '&aΤα δεδομένα από την παλιά βάση &d%table%&a εισήχθησαν με επιτυχία.'
-command-importlegacy-failure: '&cΗ εισαγωγή των δεδομένων από την παλιά βάση &d%table% &cαπέτυχε. Υπάρχει η βάση;'
-command-importlegacy-only-mysql: '&cΑυτή η εντολή είναι διαθέσιμη μόνο όταν έχετε ενεργοποιήσει το MySQL.'
+command-importlegacy-description: 'Εισαγωγή παλαιού πίνακα'
+command-importlegacy-success: '&aΕπιτυχής εισαγωγή παλαιών δεδομένων από &4%table%&a.'
+command-importlegacy-failure: '&cΑποτυχία εισαγωγής παλαιών δεδομένων από &4%table%&c. Υπάρχει ο πίνακας;'
+command-importlegacy-only-mysql: '&cΑυτή η εντολή είναι διαθέσιμη μόνο όταν έχετε ενεργοποιήσει τη MySQL.'
# Version Command
-command-version-description: '&8 - &c/bits version &7- Εμφανίζει τις πληροφορίες έκδοσης του ColdBits'
+command-version-description: 'Εμφανίζει τις πληροφορίες έκδοσης του ColdBits'
diff --git a/src/main/resources/locale/hu_HU.yml b/src/main/resources/locale/hu_HU.yml
index 24ba3d7..ed1d649 100644
--- a/src/main/resources/locale/hu_HU.yml
+++ b/src/main/resources/locale/hu_HU.yml
@@ -2,118 +2,113 @@
prefix: '&8「ɻAA7C℟BBoA597D0lC5B6E4dE6D4F8BCEA5F7iB677F7t E48F6s&8」&7» '
# Currency
-currency-singular: Pont
-currency-plural: Pontok
+currency-singular: Bit
+currency-plural: Bit
currency-separator: ','
currency-decimal: .
-number-abbreviation-thousands: ezer
+number-abbreviation-thousands: e
number-abbreviation-millions: m
number-abbreviation-billions: mrd
# Console log
-command-give-log: "&7Hozzáadva &c%amount% %currency% &7a(z) &c%player%&7 egyenlegéhez. Egyenleg: &c%new_balance% %currency%"
+command-give-log: "&7Hozzáadva &c%amount% %currency% &7játékos &c%player%&7 egyenlegéhez. Egyenleg: &c%new_balance% %currency%"
command-reset-log: "&7Visszaállítva &c%player%&7 egyenlege. Egyenleg: &c%new_balance% %currency%"
command-set-log: "&7Beállítva &c%player%&7 egyenlege. Egyenleg: &c%new_balance% %currency%"
-command-take-log: "&7Levélve &c%amount% %currency% &7a(z) &c%player%&7 egyenlegéből. Egyenleg: &c%new_balance% %currency%"
+command-take-log: "&7Levonva &c%amount% %currency% &7játékos &c%player%&7 egyenlegéből. Egyenleg: &c%new_balance% %currency%"
# Misc
no-permission: '&cNincs jogosultságod ehhez!'
-no-console: '&cCsak játékosok hajthatják végre ezt a parancsot.'
+only-player: '&cEzt a parancsot csak játékos hajthatja végre.'
invalid-amount: '&cAz összegnek pozitív egész számnak kell lennie.'
unknown-player: '&cA játékos nem található: &b%player%'
unknown-command: '&cIsmeretlen parancs: &b%input%'
-votifier-voted: '&7Köszönjük a szavazatot a &c%service%&7 oldalán! &c&b%amount% &7került hozzáadásra az egyenlegedhez.'
-leaderboard-empty-entry: Ez lehetnél te is!
-command-cooldown: '&cKérlek várj mielőtt újra használod ezt a parancsot.'
+invalid-argument: '&cÉrvénytelen argumentum: %message%.'
+command-usage: '&7Használat: &c/%cmd% %args%'
+argument-handler-string: 'A szöveg nem lehet üres'
+argument-handler-enum: '%enum% típus [%input%] nem létezik'
+argument-handler-enum-list: '%enum% típus [%input%] nem létezik. Érvényes típusok: %types%'
+argument-handler-value: 'Az érték [%input%] érvénytelen'
+votifier-voted: '&7Köszönjük, hogy szavaztál a %service% oldalon! &c%amount% &7hozzáadva az egyenlegedhez.'
+leaderboard-empty-entry: 'Ez lehetnél te!'
+command-cooldown: '&cKérlek várj, mielőtt újra használnád ezt a parancsot.'
# Base Command Message
base-command-color: '&7'
-base-command-help: '&7Használd a &c/bits help &7parancsot a parancsok megtekintéséhez.'
+base-command-help: '&7Használd a &c/bits help &7parancsot információkért.'
# Help Command
-command-help-description: '&8 - &c/bits help &7- Megjeleníti a súgó menüt... Megérkeztél'
command-help-title: '&cElérhető Parancsok:'
+command-help-description: 'Megjeleníti a súgó menüt... Megérkeztél'
+command-help-list-description: '&8 - &c/%cmd% %subcmd% %args% &7- %desc%'
+command-help-list-description-no-args: '&8 - &c/%cmd% %subcmd% &7- %desc%'
# Give Command
-command-give-description: '&8 - &c/bits give &7- Pontokat ad egy játékosnak &a(támogatja a -s [CSENDBEN] kapcsolót is)'
-command-give-usage: '&7Használat: &c/bits give <összeg> [-s]'
-command-give-success: '&c%player% &7kapott &c%amount% &c%currency%&7.'
-command-give-received: '&7Kaptál &c%amount% &c%currency%&7.'
+command-give-description: 'Bit adása egy játékosnak'
+command-give-success: '&c%player% &7játékos kapott &c%amount% &c%currency%&7-et.'
+command-give-received: '&7Kaptál &c%amount% &c%currency%&7-et.'
# Give All Command
-command-giveall-description: '&8 - &c/bits giveall &7- Minden online játékosnak ad pontokat &a(támogatja a -s [CSENDBEN] kapcsolót is)'
-command-giveall-usage: '&7Használat: &c/bits giveall <összeg> [*] [-s]'
-command-giveall-success: '&7Adtál &c%amount% &c%currency% &7minden online játékosnak.'
+command-giveall-description: 'Bit adása minden online játékosnak'
+command-giveall-success: '&7Adva &c%amount% &c%currency% &7minden online játékosnak.'
# Take Command
-command-take-description: '&8 - &c/bits take &7- Pontokat vesz el egy játékostól'
-command-take-usage: '&7Használat: &c/bits take <összeg>'
-command-take-success: '&7Elvettél &c%amount% &c%currency% &c%player%&7-tól.'
-command-take-not-enough: '&c%player% &7nem rendelkezik elegendő %currency%-al.'
+command-take-description: 'Bit elvétele egy játékostól'
+command-take-success: '&7Elvéve &c%amount% &c%currency% &7játékostól &c%player%&a&7.'
+command-take-not-enough: '&c%player% &7játékosnak nincs elég %currency% ehhez.'
# Look Command
-command-look-description: '&8 - &c/bits look &7- Megnézi egy játékos pontjait'
-command-look-usage: '&7Használat: &c/bits look '
-command-look-success: '&c%player% &7rendelkezik &c%amount% &c%currency%-al.'
+command-look-description: 'Játékos bitjeinek megtekintése'
+command-look-success: '&c%player% &7játékosnak &c%amount% &c%currency%&7 van.'
# Pay Command
-command-pay-description: '&8 - &c/bits pay &7- Fizess egy játékosnak'
-command-pay-usage: '&7Használat: &c/bits pay <összeg>'
-command-pay-self: '&cNem fizethetsz magadnak!'
-command-pay-sent: '&7Fizettél &c%player% %amount% &c%currency%-al.'
-command-pay-received: '&7Fizettek neked &c%amount% &c%currency%-t &c%player% által.'
-command-pay-lacking-funds: '&cNincs elegendő %currency%-od ehhez.'
+command-pay-description: 'Bit fizetése egy játékosnak'
+command-pay-self: '&cNem fizethetsz saját magadnak!'
+command-pay-sent: '&7Fizettél &c%player% játékosnak %amount% &c%currency%&7-et.'
+command-pay-received: '&7Kaptál &c%amount% &c%currency%&7-et &c%player%&7 játékostól.'
+command-pay-lacking-funds: '&cNincs elég %currency% ehhez.'
# Set Command
-command-set-description: '&8 - &c/bits set &7- Beállítja egy játékos pontjait'
-command-set-usage: '&7Használat: &c/bits set <összeg>'
-command-set-success: '&7A &c%player% &7pontjai be lettek állítva &c%amount%-ra&7.'
+command-set-description: 'Játékos bitjeinek beállítása'
+command-set-success: '&7Beállítva &c%player% &7játékos %currency% értéke &c%amount%&7-re.'
# Reset Command
-command-reset-description: '&8 - &c/bits reset &7- Visszaállítja egy játékos pontjait'
-command-reset-usage: '&7Használat: &c/bits reset '
-command-reset-success: '&7A &c%player% &7pontjai vissza lettek állítva.'
+command-reset-description: 'Játékos bitjeinek visszaállítása'
+command-reset-success: '&7Visszaállítva &c%player%&7 játékos %currency% értéke.'
# Me Command
-command-me-description: '&8 - &c/bits me &7- Megnézi a saját pontjaidat'
-command-me-usage: '&7Használat: &c/bits me'
-command-me-success: '&7Neked van &c%amount% &c%currency%-od&7.'
+command-me-description: 'Saját bitjeid megtekintése'
+command-me-success: '&7Neked &c%amount% &c%currency%&7 van.'
# Lead Command
-command-lead-description: '&8 - &c/bits lead &7- Megnézi a ranglistát'
-command-lead-usage: '&7Használat: &c/bits lead [következő|előző|#]'
+command-lead-description: 'Ranglista megtekintése'
command-lead-title: '&7Ranglista &c(Oldal #%page%/%pages%)'
command-lead-entry: '&c%position%). &c%player% &7- &c%amount% %currency%'
+command-lead-usage: '&cÉrvénytelen ranglista oldal.'
# Broadcast Command
-command-broadcast-description: '&8 - &c/bits broadcast &7- Egy játékos pontjainak kihirdetése'
-command-broadcast-usage: '&7Használat: &c/bits broadcast '
-command-broadcast-message: '&c%player% &7rendelkezik &c%amount% &c%currency%-al.'
+command-broadcast-description: 'Játékos bitjeinek közvetítése'
+command-broadcast-message: '&c%player% &7játékosnak &c%amount% &c%currency%&7 van.'
# Reload Command
-command-reload-description: '&8 - &c/bits reload &7- Újratölti a plugint'
-command-reload-usage: '&7Használat: &c/bits reload'
+command-reload-description: 'Plugin újratöltése'
command-reload-success: '&7A konfigurációs és nyelvi fájlok újratöltve.'
# Export Command
-command-export-description: '&8 - &c/bits export &7- Az adatokat exportálja a storage.yml fájlba'
-command-export-usage: '&7Használat: &c/bits export'
+command-export-description: 'Adatok exportálása a storage.yml fájlba'
command-export-success: '&aAz adatok exportálva a storage.yml fájlba.'
-command-export-warning: '&cFigyelem: A storage.yml fájl már létezik. Ha felül szeretnéd írni, használd a &d/bits &cexport confirm parancsot.'
+command-export-warning: '&eFIGYELEM: &cA storage.yml fájl már létezik. &7Ha felül szeretnéd írni, használd a &c/bits &cexport confirm&7 parancsot.'
# Import Command
-command-import-description: '&8 - &c/bits import &7- Az adatokat importálja a storage.yml fájlból'
-command-import-usage: '&7Használat: &c/bits import'
+command-import-description: 'Adatok importálása a storage.yml fájlból'
command-import-success: '&aAz adatok importálva a storage.yml fájlból.'
-command-import-no-backup: '&cNem sikerült importálni, a storage.yml fájl nem létezik. Generálhatsz egyet a &d/bits export &cparanccsal, és használhatod az adatok átvitelére az adatbázistípusok között.'
-command-import-warning: '&cFigyelem: Ez a művelet törli az összes adatot az aktív adatbázisból, és felváltja a storage.yml tartalmával. &cAz aktuálisan aktív adatbázis típusa &b&o&l%type%&c. &cHa biztos vagy ebben, használd a &b/bits import confirm parancsot.'
+command-import-no-backup: '&cNem lehet importálni, a storage.yml nem létezik. Létrehozhatsz egyet a &a/bits export &cparanccsal, és használhatod adatok átvitelére különböző adatbázis típusok között.'
+command-import-warning: '&eFIGYELEM: &cEz a művelet törölni fog minden adatot az aktív adatbázisból, és lecseréli a storage.yml tartalmával. &cAz aktuálisan aktív adatbázis típus: &c&o&l%type%&c. &cHa teljesen biztos vagy ebben, használd a &a/bits import confirm&c parancsot.'
# Import Legacy Command
-command-importlegacy-description: '&8 - &c/bits importlegacy &7- Régi táblázat importálása'
-command-importlegacy-usage: '&7Használat: &c/bits importlegacy '
-command-importlegacy-success: '&aA régi adatok sikeresen importálva a &d%table% táblából.'
-command-importlegacy-failure: '&cNem sikerült importálni a régi adatokat a &d%table% táblából. Létezik a táblázat?'
+command-importlegacy-description: 'Örökölt tábla importálása'
+command-importlegacy-success: '&aSikeresen importálva az örökölt adatok innen: &4%table%&a.'
+command-importlegacy-failure: '&cNem sikerült importálni az örökölt adatokat innen: &4%table%&c. Létezik a tábla?'
command-importlegacy-only-mysql: '&cEz a parancs csak akkor érhető el, ha a MySQL engedélyezve van.'
# Version Command
-command-version-description: '&8 - &c/bits version &7- Megjeleníti a ColdBits verzió adatait'
+command-version-description: 'ColdBits verzió információk megjelenítése'
diff --git a/src/main/resources/locale/id_ID.yml b/src/main/resources/locale/id_ID.yml
index 73a58ef..73086fa 100644
--- a/src/main/resources/locale/id_ID.yml
+++ b/src/main/resources/locale/id_ID.yml
@@ -2,8 +2,8 @@
prefix: '&8「ɻAA7C℟BBoA597D0lC5B6E4dE6D4F8BCEA5F7iB677F7t E48F6s&8」&7» '
# Currency
-currency-singular: Poin
-currency-plural: Poin
+currency-singular: Bit
+currency-plural: Bit
currency-separator: ','
currency-decimal: .
number-abbreviation-thousands: rb
@@ -11,109 +11,104 @@ number-abbreviation-millions: jt
number-abbreviation-billions: m
# Console log
-command-give-log: "&7Ditambahkan &c%amount% %currency% &7ke saldo &c%player%&7. Saldo: &c%new_balance% %currency%"
-command-reset-log: "&7Direset saldo &c%player%&7. Saldo: &c%new_balance% %currency%"
-command-set-log: "&7Ditetapkan saldo &c%player%&7. Saldo: &c%new_balance% %currency%"
-command-take-log: "&7Diambil &c%amount% %currency% &7dari saldo &c%player%&7. Saldo: &c%new_balance% %currency%"
+command-give-log: "&7Menambahkan &c%amount% %currency% &7ke saldo &c%player%&7. Saldo: &c%new_balance% %currency%"
+command-reset-log: "&7Mereset saldo &c%player%&7. Saldo: &c%new_balance% %currency%"
+command-set-log: "&7Menetapkan saldo &c%player%&7. Saldo: &c%new_balance% %currency%"
+command-take-log: "&7Mengambil &c%amount% %currency% &7dari saldo &c%player%&7. Saldo: &c%new_balance% %currency%"
# Misc
-no-permission: '&cKamu tidak memiliki izin untuk melakukan itu!'
-no-console: '&cHanya pemain yang dapat menjalankan perintah ini.'
-invalid-amount: '&cJumlah harus berupa angka bulat positif.'
-unknown-player: '&cPemain tidak dapat ditemukan: &b%player%'
+no-permission: '&cAnda tidak memiliki izin untuk itu!'
+only-player: '&cPerintah ini hanya dapat dijalankan oleh pemain.'
+invalid-amount: '&cJumlah harus berupa bilangan bulat positif.'
+unknown-player: '&cPemain tidak ditemukan: &b%player%'
unknown-command: '&cPerintah tidak dikenal: &b%input%'
-votifier-voted: '&7Terima kasih telah memberikan suara di &c%service%&7! &c&b%amount% &7telah ditambahkan ke saldo kamu.'
-leaderboard-empty-entry: Ini bisa jadi kamu!
-command-cooldown: '&cTolong tunggu sebelum menggunakan perintah ini lagi.'
+invalid-argument: '&cArgumen tidak valid: %message%.'
+command-usage: '&7Penggunaan: &c/%cmd% %args%'
+argument-handler-string: 'String tidak boleh kosong'
+argument-handler-enum: 'Tipe %enum% [%input%] tidak ada'
+argument-handler-enum-list: 'Tipe %enum% [%input%] tidak ada. Tipe yang valid: %types%'
+argument-handler-value: 'Nilai [%input%] tidak valid'
+votifier-voted: '&7Terima kasih telah memilih di %service%! &c%amount% &7telah ditambahkan ke saldo Anda.'
+leaderboard-empty-entry: 'Ini bisa jadi Anda!'
+command-cooldown: '&cHarap tunggu sebelum menggunakan perintah itu lagi.'
# Base Command Message
base-command-color: '&7'
base-command-help: '&7Gunakan &c/bits help &7untuk informasi perintah.'
# Help Command
-command-help-description: '&8 - &c/bits help &7- Menampilkan menu bantuan... Kamu telah sampai'
command-help-title: '&cPerintah Tersedia:'
+command-help-description: 'Menampilkan menu bantuan... Anda telah tiba'
+command-help-list-description: '&8 - &c/%cmd% %subcmd% %args% &7- %desc%'
+command-help-list-description-no-args: '&8 - &c/%cmd% %subcmd% &7- %desc%'
# Give Command
-command-give-description: '&8 - &c/bits give &7- Berikan poin kepada pemain &a(juga mendukung -s [DIAM])'
-command-give-usage: '&7Penggunaan: &c/bits give [-s]'
+command-give-description: 'Berikan bit ke pemain'
command-give-success: '&c%player% &7telah diberi &c%amount% &c%currency%&7.'
-command-give-received: '&7Kamu telah menerima &c%amount% &c%currency%&7.'
+command-give-received: '&7Anda telah menerima &c%amount% &c%currency%&7.'
# Give All Command
-command-giveall-description: '&8 - &c/bits giveall &7- Memberi semua pemain online poin &a(juga mendukung -s [DIAM])'
-command-giveall-usage: '&7Penggunaan: &c/bits giveall [*] [-s]'
-command-giveall-success: '&7Memberikan &c%amount% &c%currency% &7kepada semua pemain online.'
+command-giveall-description: 'Berikan bit ke semua pemain online'
+command-giveall-success: '&7Memberikan &c%amount% &c%currency% &7ke semua pemain online.'
# Take Command
-command-take-description: '&8 - &c/bits take &7- Mengambil poin dari pemain'
-command-take-usage: '&7Penggunaan: &c/bits take '
-command-take-success: '&7Mengambil &c%amount% &c%currency% dari &c%player%&7.'
+command-take-description: 'Ambil bit dari pemain'
+command-take-success: '&7Mengambil &c%amount% &c%currency% &7dari &c%player%&a&7.'
command-take-not-enough: '&c%player% &7tidak memiliki cukup %currency% untuk itu.'
# Look Command
-command-look-description: '&8 - &c/bits look &7- Lihat poin pemain'
-command-look-usage: '&7Penggunaan: &c/bits look '
+command-look-description: 'Lihat bit pemain'
command-look-success: '&c%player% &7memiliki &c%amount% &c%currency%&7.'
# Pay Command
-command-pay-description: '&8 - &c/bits pay &7- Bayar pemain'
-command-pay-usage: '&7Penggunaan: &c/bits pay '
-command-pay-self: '&cKamu tidak dapat membayar diri sendiri!'
-command-pay-sent: '&7Kamu telah membayar &c%player% %amount% &c%currency%&7.'
-command-pay-received: '&7Kamu telah dibayar &c%amount% &c%currency% oleh &c%player%&7.'
-command-pay-lacking-funds: '&cKamu tidak memiliki cukup %currency% untuk itu.'
+command-pay-description: 'Bayar pemain'
+command-pay-self: '&cAnda tidak dapat membayar diri sendiri!'
+command-pay-sent: '&7Anda membayar &c%player% %amount% &c%currency%&7.'
+command-pay-received: '&7Anda dibayar &c%amount% &c%currency% &7oleh &c%player%&7.'
+command-pay-lacking-funds: '&cAnda tidak memiliki cukup %currency% untuk itu.'
# Set Command
-command-set-description: '&8 - &c/bits set &7- Menetapkan poin seorang pemain'
-command-set-usage: '&7Penggunaan: &c/bits set '
-command-set-success: '&7Menetapkan poin &c%player% &7menjadi &c%amount%&7.'
+command-set-description: 'Tetapkan bit pemain'
+command-set-success: '&7Menetapkan %currency% dari &c%player% &7menjadi &c%amount%&7.'
# Reset Command
-command-reset-description: '&8 - &c/bits reset &7- Mengatur ulang poin pemain'
-command-reset-usage: '&7Penggunaan: &c/bits reset '
-command-reset-success: '&7Mengatur ulang poin untuk &c%player%&7.'
+command-reset-description: 'Reset bit pemain'
+command-reset-success: '&7Reset %currency% untuk &c%player%&7.'
# Me Command
-command-me-description: '&8 - &c/bits me &7- Lihat poinmu'
-command-me-usage: '&7Penggunaan: &c/bits me'
-command-me-success: '&7Kamu memiliki &c%amount% &c%currency%&7.'
+command-me-description: 'Lihat bit Anda'
+command-me-success: '&7Anda memiliki &c%amount% &c%currency%&7.'
# Lead Command
-command-lead-description: '&8 - &c/bits lead &7- Lihat papan peringkat'
-command-lead-usage: '&7Penggunaan: &c/bits lead [next|prev|#]'
+command-lead-description: 'Lihat papan peringkat'
command-lead-title: '&7Papan Peringkat &c(Halaman #%page%/%pages%)'
command-lead-entry: '&c%position%). &c%player% &7- &c%amount% %currency%'
+command-lead-usage: '&cHalaman papan peringkat tidak valid.'
# Broadcast Command
-command-broadcast-description: '&8 - &c/bits broadcast &7- Umumkan poin seorang pemain'
-command-broadcast-usage: '&7Penggunaan: &c/bits broadcast '
+command-broadcast-description: 'Siarkan bit pemain'
command-broadcast-message: '&c%player% &7memiliki &c%amount% &c%currency%&7.'
# Reload Command
-command-reload-description: '&8 - &c/bits reload &7- Memuat ulang plugin'
-command-reload-usage: '&7Penggunaan: &c/bits reload'
-command-reload-success: '&7Konfigurasi dan file bahasa telah dimuat ulang.'
+command-reload-description: 'Muat ulang plugin'
+command-reload-success: '&7File konfigurasi dan locale telah dimuat ulang.'
# Export Command
-command-export-description: '&8 - &c/bits export &7- Mengekspor data ke storage.yml'
-command-export-usage: '&7Penggunaan: &c/bits export'
+command-export-description: 'Ekspor data ke storage.yml'
command-export-success: '&aData telah diekspor ke storage.yml.'
-command-export-warning: '&cPeringatan: File storage.yml sudah ada. Jika kamu ingin menimpanya, gunakan &d/bits &cexport confirm.'
+command-export-warning: '&ePERINGATAN: &cFile storage.yml sudah ada. &7Jika Anda ingin menimpanya, gunakan &c/bits &cexport confirm&7.'
# Import Command
-command-import-description: '&8 - &c/bits import &7- Mengimpor data dari storage.yml'
-command-import-usage: '&7Penggunaan: &c/bits import'
+command-import-description: 'Impor data dari storage.yml'
command-import-success: '&aData telah diimpor dari storage.yml.'
-command-import-no-backup: '&cTidak dapat mengimpor, storage.yml tidak ada. Kamu dapat menghasilkan satu dengan &d/bits export &cdan menggunakannya untuk mentransfer data antar jenis basis data.'
-command-import-warning: '&cPeringatan: Operasi ini akan menghapus semua data dari basis data aktif dan menggantinya dengan isi dari storage.yml. &cJenis basis data aktif saat ini adalah &b&o&l%type%&c. &cJika kamu benar-benar yakin, gunakan &b/bits import confirm&c.'
+command-import-no-backup: '&cTidak dapat mengimpor, storage.yml tidak ada. Anda dapat membuat satu dengan &a/bits export &cdan menggunakannya untuk mentransfer data antar tipe database.'
+command-import-warning: '&ePERINGATAN: &cOperasi ini akan menghapus semua data dari database aktif dan menggantinya dengan konten storage.yml. &cTipe database yang saat ini aktif adalah &c&o&l%type%&c. &cJika Anda benar-benar yakin tentang ini, gunakan &a/bits import confirm&c.'
# Import Legacy Command
-command-importlegacy-description: '&8 - &c/bits importlegacy &7- Mengimpor tabel lama'
-command-importlegacy-usage: '&7Penggunaan: &c/bits importlegacy '
-command-importlegacy-success: '&aBerhasil mengimpor data lama dari &d%table%&a.'
-command-importlegacy-failure: '&cGagal mengimpor data lama dari &d%table%&c. Apakah tabelnya ada?'
-command-importlegacy-only-mysql: '&cPerintah ini hanya tersedia jika MySQL diaktifkan.'
+command-importlegacy-description: 'Impor tabel lama'
+command-importlegacy-success: '&aBerhasil mengimpor data lama dari &4%table%&a.'
+command-importlegacy-failure: '&cGagal mengimpor data lama dari &4%table%&c. Apakah tabel itu ada?'
+command-importlegacy-only-mysql: '&cPerintah ini hanya tersedia saat Anda mengaktifkan MySQL.'
# Version Command
-command-version-description: '&8 - &c/bits version &7- Menampilkan informasi versi untuk ColdBits'
+command-version-description: 'Tampilkan info versi ColdBits'
diff --git a/src/main/resources/locale/ja_JP.yml b/src/main/resources/locale/ja_JP.yml
index 6d77e98..cbb83b5 100644
--- a/src/main/resources/locale/ja_JP.yml
+++ b/src/main/resources/locale/ja_JP.yml
@@ -2,8 +2,8 @@
prefix: '&8「ɻAA7C℟BBoA597D0lC5B6E4dE6D4F8BCEA5F7iB677F7t E48F6s&8」&7» '
# Currency
-currency-singular: ポイント
-currency-plural: ポイント
+currency-singular: ビット
+currency-plural: ビット
currency-separator: ','
currency-decimal: .
number-abbreviation-thousands: 千
@@ -11,109 +11,104 @@ number-abbreviation-millions: 百万
number-abbreviation-billions: 十億
# Console log
-command-give-log: "&7&c%amount% %currency% &7を &c%player%&7の残高に追加しました。残高: &c%new_balance% %currency%"
-command-reset-log: "&7&c%player%&7の残高をリセットしました。残高: &c%new_balance% %currency%"
-command-set-log: "&7&c%player%&7の残高を設定しました。残高: &c%new_balance% %currency%"
-command-take-log: "&7&c%amount% %currency% &7を &c%player%&7の残高から取りました。残高: &c%new_balance% %currency%"
+command-give-log: "&7&c%player%&7の残高に&c%amount% %currency%&7を追加しました。残高:&c%new_balance% %currency%"
+command-reset-log: "&7&c%player%&7の残高をリセットしました。残高:&c%new_balance% %currency%"
+command-set-log: "&7&c%player%&7の残高を設定しました。残高:&c%new_balance% %currency%"
+command-take-log: "&7&c%player%&7の残高から&c%amount% %currency%&7を取りました。残高:&c%new_balance% %currency%"
# Misc
-no-permission: '&cその操作を行う権限がありません!'
-no-console: '&cこのコマンドはプレイヤーのみが実行できます。'
+no-permission: '&cこの操作を行う権限がありません!'
+only-player: '&cこのコマンドはプレイヤーのみが実行できます。'
invalid-amount: '&c金額は正の整数でなければなりません。'
-unknown-player: '&cプレイヤーが見つかりませんでした: &b%player%'
-unknown-command: '&c不明なコマンド: &b%input%'
-votifier-voted: '&7&c%service%&7に投票していただきありがとうございます! &c&b%amount% &7が残高に追加されました。'
-leaderboard-empty-entry: ここにあなたが入るかも!
-command-cooldown: '&cコマンドの再使用までお待ちください。'
+unknown-player: '&cプレイヤーが見つかりませんでした:&b%player%'
+unknown-command: '&c不明なコマンド:&b%input%'
+invalid-argument: '&c無効な引数:%message%。'
+command-usage: '&7使用法:&c/%cmd% %args%'
+argument-handler-string: '文字列は空にできません'
+argument-handler-enum: '%enum%タイプ[%input%]は存在しません'
+argument-handler-enum-list: '%enum%タイプ[%input%]は存在しません。有効なタイプ:%types%'
+argument-handler-value: '値[%input%]は無効です'
+votifier-voted: '&7%service%での投票ありがとうございます!&c%amount%&7があなたの残高に追加されました。'
+leaderboard-empty-entry: 'ここにあなたの名前が!'
+command-cooldown: '&cそのコマンドを再度使用する前にお待ちください。'
# Base Command Message
base-command-color: '&7'
-base-command-help: '&7コマンド情報は &c/bits help &7を使用してください。'
+base-command-help: '&7コマンド情報には&c/bits help&7を使用してください。'
# Help Command
-command-help-description: '&8 - &c/bits help &7- ヘルプメニューを表示します... 到着しました'
command-help-title: '&c利用可能なコマンド:'
+command-help-description: 'ヘルプメニューを表示します...到着しました'
+command-help-list-description: '&8 - &c/%cmd% %subcmd% %args% &7- %desc%'
+command-help-list-description-no-args: '&8 - &c/%cmd% %subcmd% &7- %desc%'
# Give Command
-command-give-description: '&8 - &c/bits give &7- プレイヤーにポイントを与えます &a(-s [静かに] をサポート)'
-command-give-usage: '&7使用方法: &c/bits give <プレイヤー> <金額> [-s]'
-command-give-success: '&c%player% &7に &c%amount% &c%currency%&7 を与えました。'
-command-give-received: '&7あなたは &c%amount% &c%currency%&7 を受け取りました。'
+command-give-description: 'プレイヤーにビットを与える'
+command-give-success: '&c%player%&7に&c%amount% &c%currency%&7を与えました。'
+command-give-received: '&7あなたは&c%amount% &c%currency%&7を受け取りました。'
# Give All Command
-command-giveall-description: '&8 - &c/bits giveall &7- オンラインの全プレイヤーにポイントを与えます &a(-s [静かに] をサポート)'
-command-giveall-usage: '&7使用方法: &c/bits giveall <金額> [*] [-s]'
-command-giveall-success: '&7オンラインの全プレイヤーに &c%amount% &c%currency% &7を与えました。'
+command-giveall-description: 'オンラインの全プレイヤーにビットを与える'
+command-giveall-success: '&7オンラインの全プレイヤーに&c%amount% &c%currency%&7を与えました。'
# Take Command
-command-take-description: '&8 - &c/bits take &7- プレイヤーからポイントを取り上げます'
-command-take-usage: '&7使用方法: &c/bits take <プレイヤー> <金額>'
-command-take-success: '&7&c%player% から &c%amount% &c%currency%&7 を取り上げました。'
-command-take-not-enough: '&c%player% &7は十分な %currency% を持っていません。'
+command-take-description: 'プレイヤーからビットを取る'
+command-take-success: '&c%player%&7から&c%amount% &c%currency%&7を取りました。'
+command-take-not-enough: '&c%player%&7はそのために十分な%currency%を持っていません。'
# Look Command
-command-look-description: '&8 - &c/bits look &7- プレイヤーのポイントを確認します'
-command-look-usage: '&7使用方法: &c/bits look <プレイヤー>'
-command-look-success: '&c%player% &7は &c%amount% &c%currency%&7 を持っています。'
+command-look-description: 'プレイヤーのビットを見る'
+command-look-success: '&c%player%&7は&c%amount% &c%currency%&7を持っています。'
# Pay Command
-command-pay-description: '&8 - &c/bits pay &7- プレイヤーに支払います'
-command-pay-usage: '&7使用方法: &c/bits pay <プレイヤー> <金額>'
-command-pay-self: '&c自分に支払うことはできません!'
-command-pay-sent: '&7あなたは &c%player% に %amount% &c%currency%&7 を支払いました。'
-command-pay-received: '&7あなたは &c%player% から &c%amount% &c%currency% を受け取りました。'
-command-pay-lacking-funds: '&cそのための十分な %currency% がありません。'
+command-pay-description: 'プレイヤーに支払う'
+command-pay-self: '&c自分自身に支払うことはできません!'
+command-pay-sent: '&7あなたは&c%player%に%amount% &c%currency%&7を支払いました。'
+command-pay-received: '&7あなたは&c%player%&7から&c%amount% &c%currency%&7を支払われました。'
+command-pay-lacking-funds: '&cそのために十分な%currency%がありません。'
# Set Command
-command-set-description: '&8 - &c/bits set &7- プレイヤーのポイントを設定します'
-command-set-usage: '&7使用方法: &c/bits set <プレイヤー> <金額>'
-command-set-success: '&7&c%player% のポイントを &c%amount%&7 に設定しました。'
+command-set-description: 'プレイヤーのビットを設定する'
+command-set-success: '&c%player%&7の%currency%を&c%amount%&7に設定しました。'
# Reset Command
-command-reset-description: '&8 - &c/bits reset &7- プレイヤーのポイントをリセットします'
-command-reset-usage: '&7使用方法: &c/bits reset <プレイヤー>'
-command-reset-success: '&7&c%player% の %currency% をリセットしました。'
+command-reset-description: 'プレイヤーのビットをリセットする'
+command-reset-success: '&c%player%&7の%currency%をリセットしました。'
# Me Command
-command-me-description: '&8 - &c/bits me &7- 自分のポイントを確認します'
-command-me-usage: '&7使用方法: &c/bits me'
-command-me-success: '&7あなたは &c%amount% &c%currency%&7 を持っています。'
+command-me-description: '自分のビットを見る'
+command-me-success: '&7あなたは&c%amount% &c%currency%&7を持っています。'
# Lead Command
-command-lead-description: '&8 - &c/bits lead &7- ランキングを表示します'
-command-lead-usage: '&7使用方法: &c/bits lead [次|前|#]'
-command-lead-title: '&7ランキング &c(ページ #%page%/%pages%)'
-command-lead-entry: '&c%position%). &c%player% &7- &c%amount% %currency%'
+command-lead-description: 'リーダーボードを見る'
+command-lead-title: '&7リーダーボード&c(ページ#%page%/%pages%)'
+command-lead-entry: '&c%position%). &c%player% &7- &c%amount% %currency%'
+command-lead-usage: '&c無効なリーダーボードページです。'
# Broadcast Command
-command-broadcast-description: '&8 - &c/bits broadcast &7- プレイヤーのポイントを放送します'
-command-broadcast-usage: '&7使用方法: &c/bits broadcast <プレイヤー>'
-command-broadcast-message: '&c%player% &7は &c%amount% &c%currency%&7 を持っています。'
+command-broadcast-description: 'プレイヤーのビットを放送する'
+command-broadcast-message: '&c%player%&7は&c%amount% &c%currency%&7を持っています。'
# Reload Command
-command-reload-description: '&8 - &c/bits reload &7- プラグインをリロードします'
-command-reload-usage: '&7使用方法: &c/bits reload'
-command-reload-success: '&7設定ファイルとロケールファイルをリロードしました。'
+command-reload-description: 'プラグインをリロードする'
+command-reload-success: '&7設定とロケールファイルがリロードされました。'
# Export Command
-command-export-description: '&8 - &c/bits export &7- データを storage.yml にエクスポートします'
-command-export-usage: '&7使用方法: &c/bits export'
-command-export-success: '&aデータが storage.yml にエクスポートされました。'
-command-export-warning: '&c注意: storage.yml ファイルは既に存在します。上書きするには &d/bits &cexport confirm を使用してください。'
+command-export-description: 'データをstorage.ymlにエクスポートする'
+command-export-success: '&aデータがstorage.ymlにエクスポートされました。'
+command-export-warning: '&e警告:&cstorage.ymlファイルが既に存在します。&7上書きしたい場合は&c/bits &cexport confirm&7を使用してください。'
# Import Command
-command-import-description: '&8 - &c/bits import &7- storage.yml からデータをインポートします'
-command-import-usage: '&7使用方法: &c/bits import'
-command-import-success: '&aデータが storage.yml からインポートされました。'
-command-import-no-backup: '&cインポートできません。storage.yml が存在しません。 &d/bits export &cを使用して生成し、それを使ってデータベース間のデータを転送できます。'
-command-import-warning: '&c注意: この操作は、アクティブなデータベースのすべてのデータを削除し、storage.yml の内容に置き換えます。 &c現在アクティブなデータベースの種類は &b&o&l%type%&c です。 &cこれが確実な場合、&b/bits import confirm&c を使用してください。'
+command-import-description: 'storage.ymlからデータをインポートする'
+command-import-success: '&astorage.ymlからデータがインポートされました。'
+command-import-no-backup: '&cインポートできません、storage.ymlが存在しません。&a/bits export&cで生成し、データベースタイプ間でデータを転送するために使用できます。'
+command-import-warning: '&e警告:&cこの操作は、アクティブなデータベースからすべてのデータを削除し、storage.ymlの内容に置き換えます。&c現在アクティブなデータベースタイプは&c&o&l%type%&cです。&cこれについて絶対に確信がある場合は、&a/bits import confirm&cを使用してください。'
# Import Legacy Command
-command-importlegacy-description: '&8 - &c/bits importlegacy &7- レガシーテーブルをインポートします'
-command-importlegacy-usage: '&7使用方法: &c/bits importlegacy <テーブル>'
-command-importlegacy-success: '&aレガシーデータが &d%table%&a から正常にインポートされました。'
-command-importlegacy-failure: '&c&d%table%&c からレガシーデータをインポートできませんでした。テーブルは存在しますか?'
-command-importlegacy-only-mysql: '&cこのコマンドは、MySQL が有効な場合のみ利用可能です。'
+command-importlegacy-description: 'レガシーテーブルをインポートする'
+command-importlegacy-success: '&a&4%table%&aからレガシーデータのインポートに成功しました。'
+command-importlegacy-failure: '&c&4%table%&cからレガシーデータのインポートに失敗しました。テーブルは存在しますか?'
+command-importlegacy-only-mysql: '&cこのコマンドはMySQLが有効になっている場合にのみ使用できます。'
# Version Command
-command-version-description: '&8 - &c/bits version &7- ColdBits のバージョン情報を表示します'
+command-version-description: 'ColdBitsのバージョン情報を表示する'
diff --git a/src/main/resources/locale/pt_PT.yml b/src/main/resources/locale/pt_PT.yml
index 28fbfa1..b8c35cb 100644
--- a/src/main/resources/locale/pt_PT.yml
+++ b/src/main/resources/locale/pt_PT.yml
@@ -2,118 +2,113 @@
prefix: '&8「ɻAA7C℟BBoA597D0lC5B6E4dE6D4F8BCEA5F7iB677F7t E48F6s&8」&7» '
# Currency
-currency-singular: Ponto
-currency-plural: Pontos
+currency-singular: Bit
+currency-plural: Bits
currency-separator: ','
currency-decimal: .
-number-abbreviation-thousands: k
-number-abbreviation-millions: m
-number-abbreviation-billions: b
+number-abbreviation-thousands: mil
+number-abbreviation-millions: M
+number-abbreviation-billions: MM
# Console log
command-give-log: "&7Adicionado &c%amount% %currency% &7ao saldo de &c%player%&7. Saldo: &c%new_balance% %currency%"
-command-reset-log: "&7Resetado o saldo de &c%player%&7. Saldo: &c%new_balance% %currency%"
+command-reset-log: "&7Reiniciado o saldo de &c%player%&7. Saldo: &c%new_balance% %currency%"
command-set-log: "&7Definido o saldo de &c%player%&7. Saldo: &c%new_balance% %currency%"
command-take-log: "&7Retirado &c%amount% %currency% &7do saldo de &c%player%&7. Saldo: &c%new_balance% %currency%"
# Misc
-no-permission: '&cVocê não tem permissão para isso!'
-no-console: '&cApenas jogadores podem executar este comando.'
-invalid-amount: '&cO valor deve ser um número inteiro positivo.'
+no-permission: '&cNão tens permissão para isso!'
+only-player: '&cEste comando só pode ser executado por um jogador.'
+invalid-amount: '&cA quantidade deve ser um número inteiro positivo.'
unknown-player: '&cJogador não encontrado: &b%player%'
unknown-command: '&cComando desconhecido: &b%input%'
-votifier-voted: '&7Obrigado por votar em &c%service%&7! &c&b%amount% &7foram adicionados ao seu saldo.'
-leaderboard-empty-entry: Isto pode ser você!
-command-cooldown: '&cPor favor, aguarde antes de usar este comando novamente.'
+invalid-argument: '&cArgumento inválido: %message%.'
+command-usage: '&7Uso: &c/%cmd% %args%'
+argument-handler-string: 'A string não pode estar vazia'
+argument-handler-enum: 'O tipo %enum% [%input%] não existe'
+argument-handler-enum-list: 'O tipo %enum% [%input%] não existe. Tipos válidos: %types%'
+argument-handler-value: 'O valor [%input%] não é válido'
+votifier-voted: '&7Obrigado por votar em %service%! &c%amount% &7foi adicionado ao teu saldo.'
+leaderboard-empty-entry: 'Isto poderia ser tu!'
+command-cooldown: '&cPor favor, espera antes de usar esse comando novamente.'
# Base Command Message
base-command-color: '&7'
-base-command-help: '&7Use &c/bits help &7para informações sobre os comandos.'
+base-command-help: '&7Usa &c/bits help &7para informações de comandos.'
# Help Command
-command-help-description: '&8 - &c/bits help &7- Exibe o menu de ajuda... Você chegou'
command-help-title: '&cComandos Disponíveis:'
+command-help-description: 'Mostra o menu de ajuda... Chegaste'
+command-help-list-description: '&8 - &c/%cmd% %subcmd% %args% &7- %desc%'
+command-help-list-description-no-args: '&8 - &c/%cmd% %subcmd% &7- %desc%'
# Give Command
-command-give-description: '&8 - &c/bits give &7- Dar pontos a um jogador &a(também suporta -s [SILENCIOSO])'
-command-give-usage: '&7Uso: &c/bits give [-s]'
+command-give-description: 'Dar bits a um jogador'
command-give-success: '&c%player% &7recebeu &c%amount% &c%currency%&7.'
-command-give-received: '&7Você recebeu &c%amount% &c%currency%&7.'
+command-give-received: '&7Recebeste &c%amount% &c%currency%&7.'
# Give All Command
-command-giveall-description: '&8 - &c/bits giveall &7- Dá pontos a todos os jogadores online &a(também suporta -s [SILENCIOSO])'
-command-giveall-usage: '&7Uso: &c/bits giveall [*] [-s]'
+command-giveall-description: 'Dar bits a todos os jogadores online'
command-giveall-success: '&7Dado &c%amount% &c%currency% &7a todos os jogadores online.'
# Take Command
-command-take-description: '&8 - &c/bits take &7- Tirar pontos de um jogador'
-command-take-usage: '&7Uso: &c/bits take '
-command-take-success: '&7Tirou &c%amount% &c%currency% de &c%player%&7.'
-command-take-not-enough: '&c%player% &7não tem %currency% suficiente para isso.'
+command-take-description: 'Tirar bits de um jogador'
+command-take-success: '&7Retirado &c%amount% &c%currency% &7de &c%player%&a&7.'
+command-take-not-enough: '&c%player% &7não tem %currency% suficientes para isso.'
# Look Command
-command-look-description: '&8 - &c/bits look &7- Ver os pontos de um jogador'
-command-look-usage: '&7Uso: &c/bits look '
+command-look-description: 'Ver os bits de um jogador'
command-look-success: '&c%player% &7tem &c%amount% &c%currency%&7.'
# Pay Command
-command-pay-description: '&8 - &c/bits pay &7- Pagar a um jogador'
-command-pay-usage: '&7Uso: &c/bits pay '
-command-pay-self: '&cVocê não pode pagar a si mesmo!'
-command-pay-sent: '&7Você pagou &c%player% %amount% &c%currency%&7.'
-command-pay-received: '&7Você recebeu &c%amount% &c%currency% de &c%player%&7.'
-command-pay-lacking-funds: '&cVocê não tem %currency% suficiente para isso.'
+command-pay-description: 'Pagar a um jogador'
+command-pay-self: '&cNão podes pagar a ti mesmo!'
+command-pay-sent: '&7Pagaste a &c%player% %amount% &c%currency%&7.'
+command-pay-received: '&7Recebeste &c%amount% &c%currency% &7de &c%player%&7.'
+command-pay-lacking-funds: '&cNão tens %currency% suficientes para isso.'
# Set Command
-command-set-description: '&8 - &c/bits set &7- Definir os pontos de um jogador'
-command-set-usage: '&7Uso: &c/bits set '
-command-set-success: '&7Pontos de &c%player% &7definidos para &c%amount%&7.'
+command-set-description: 'Definir os bits de um jogador'
+command-set-success: '&7Definido os %currency% de &c%player% &7para &c%amount%&7.'
# Reset Command
-command-reset-description: '&8 - &c/bits reset &7- Reiniciar os pontos de um jogador'
-command-reset-usage: '&7Uso: &c/bits reset '
-command-reset-success: '&7Pontos de &c%player% &7foram reiniciados.'
+command-reset-description: 'Reiniciar os bits de um jogador'
+command-reset-success: '&7Reiniciado os %currency% de &c%player%&7.'
# Me Command
-command-me-description: '&8 - &c/bits me &7- Ver seus pontos'
-command-me-usage: '&7Uso: &c/bits me'
-command-me-success: '&7Você tem &c%amount% &c%currency%&7.'
+command-me-description: 'Ver os teus bits'
+command-me-success: '&7Tens &c%amount% &c%currency%&7.'
# Lead Command
-command-lead-description: '&8 - &c/bits lead &7- Ver o leaderboard'
-command-lead-usage: '&7Uso: &c/bits lead [next|prev|#]'
-command-lead-title: '&7Leaderboard &c(Página #%page%/%pages%)'
+command-lead-description: 'Ver a tabela de classificação'
+command-lead-title: '&7Tabela de Classificação &c(Página #%page%/%pages%)'
command-lead-entry: '&c%position%). &c%player% &7- &c%amount% %currency%'
+command-lead-usage: '&cPágina da tabela de classificação inválida.'
# Broadcast Command
-command-broadcast-description: '&8 - &c/bits broadcast &7- Anunciar os pontos de um jogador'
-command-broadcast-usage: '&7Uso: &c/bits broadcast '
+command-broadcast-description: 'Transmitir os bits de um jogador'
command-broadcast-message: '&c%player% &7tem &c%amount% &c%currency%&7.'
# Reload Command
-command-reload-description: '&8 - &c/bits reload &7- Recarrega o plugin'
-command-reload-usage: '&7Uso: &c/bits reload'
-command-reload-success: '&7Ficheiros de configuração e de idioma foram recarregados.'
+command-reload-description: 'Recarregar o plugin'
+command-reload-success: '&7Os ficheiros de configuração e de idioma foram recarregados.'
# Export Command
-command-export-description: '&8 - &c/bits export &7- Exporta os dados para storage.yml'
-command-export-usage: '&7Uso: &c/bits export'
-command-export-success: '&aDados salvos foram exportados para storage.yml.'
-command-export-warning: '&cAviso: Um ficheiro storage.yml já existe. Se deseja sobrescrevê-lo, utilize &d/bits &cexport confirm.'
+command-export-description: 'Exportar os dados para storage.yml'
+command-export-success: '&aOs dados foram exportados para storage.yml.'
+command-export-warning: '&eAVISO: &cJá existe um ficheiro storage.yml. &7Se quiseres substitui-lo, usa &c/bits &cexport confirm&7.'
# Import Command
-command-import-description: '&8 - &c/bits import &7- Importa os dados de storage.yml'
-command-import-usage: '&7Uso: &c/bits import'
-command-import-success: '&aDados salvos foram importados de storage.yml.'
-command-import-no-backup: '&cNão foi possível importar, storage.yml não existe. Pode gerar um com &d/bits export &ce usar para transferir dados entre tipos de base de dados.'
-command-import-warning: '&cAviso: Esta operação irá apagar todos os dados da base de dados ativa e substituí-los com o conteúdo de storage.yml. &cO tipo de base de dados atualmente ativo é &b&o&l%type%&c. &cSe tiver a certeza, utilize &b/bits import confirm&c.'
+command-import-description: 'Importar os dados de storage.yml'
+command-import-success: '&aOs dados foram importados de storage.yml.'
+command-import-no-backup: '&cNão é possível importar, storage.yml não existe. Podes gerar um com &a/bits export &ce usá-lo para transferir dados entre tipos de base de dados.'
+command-import-warning: '&eAVISO: &cEsta operação irá apagar todos os dados da base de dados ativa e substituí-los pelo conteúdo de storage.yml. &cO tipo de base de dados atualmente ativo é &c&o&l%type%&c. &cSe tens a certeza absoluta disto, usa &a/bits import confirm&c.'
# Import Legacy Command
-command-importlegacy-description: '&8 - &c/bits importlegacy &7- Importar uma tabela legada'
-command-importlegacy-usage: '&7Uso: &c/bits importlegacy '
-command-importlegacy-success: '&aDados legados de &d%table%&a importados com sucesso.'
-command-importlegacy-failure: '&cFalha ao importar dados legados de &d%table%&c. A tabela existe?'
-command-importlegacy-only-mysql: '&cEste comando está disponível apenas quando o MySQL está ativado.'
+command-importlegacy-description: 'Importar uma tabela legacy'
+command-importlegacy-success: '&aImportação bem-sucedida de dados legacy de &4%table%&a.'
+command-importlegacy-failure: '&cFalha ao importar dados legacy de &4%table%&c. A tabela existe?'
+command-importlegacy-only-mysql: '&cEste comando só está disponível quando tens o MySQL ativado.'
# Version Command
-command-version-description: '&8 - &c/bits version &7- Exibe as informações de versão do ColdBits'
+command-version-description: 'Mostrar as informações de versão do ColdBits'
diff --git a/src/main/resources/locale/vi_VN.yml b/src/main/resources/locale/vi_VN.yml
index cc49bbb..96cf72d 100644
--- a/src/main/resources/locale/vi_VN.yml
+++ b/src/main/resources/locale/vi_VN.yml
@@ -2,118 +2,113 @@
prefix: '&8「ɻAA7C℟BBoA597D0lC5B6E4dE6D4F8BCEA5F7iB677F7t E48F6s&8」&7» '
# Currency
-currency-singular: Điểm
-currency-plural: Điểm
+currency-singular: Bit
+currency-plural: Bit
currency-separator: ','
currency-decimal: .
-number-abbreviation-thousands: k
-number-abbreviation-millions: triệu
-number-abbreviation-billions: tỷ
+number-abbreviation-thousands: N
+number-abbreviation-millions: Tr
+number-abbreviation-billions: T
# Console log
command-give-log: "&7Đã thêm &c%amount% %currency% &7vào số dư của &c%player%&7. Số dư: &c%new_balance% %currency%"
-command-reset-log: "&7Đặt lại số dư của &c%player%&7. Số dư: &c%new_balance% %currency%"
+command-reset-log: "&7Đã đặt lại số dư của &c%player%&7. Số dư: &c%new_balance% %currency%"
command-set-log: "&7Đã đặt số dư của &c%player%&7. Số dư: &c%new_balance% %currency%"
command-take-log: "&7Đã lấy &c%amount% %currency% &7từ số dư của &c%player%&7. Số dư: &c%new_balance% %currency%"
# Misc
-no-permission: '&cBạn không có quyền để làm điều đó!'
-no-console: '&cChỉ người chơi mới có thể thực hiện lệnh này.'
-invalid-amount: '&cSố tiền phải là số nguyên dương.'
-unknown-player: '&cKhông thể tìm thấy người chơi: &b%player%'
-unknown-command: '&cLệnh không tồn tại: &b%input%'
-votifier-voted: '&7Cảm ơn bạn đã bình chọn trên &c%service%&7! &c&b%amount% &7đã được thêm vào số dư của bạn.'
-leaderboard-empty-entry: Đây có thể là bạn!
-command-cooldown: '&cVui lòng chờ trước khi sử dụng lệnh này lần nữa.'
+no-permission: '&cBạn không có quyền cho việc đó!'
+only-player: '&cLệnh này chỉ có thể được thực hiện bởi người chơi.'
+invalid-amount: '&cSố lượng phải là một số nguyên dương.'
+unknown-player: '&cKhông tìm thấy người chơi: &b%player%'
+unknown-command: '&cLệnh không xác định: &b%input%'
+invalid-argument: '&cĐối số không hợp lệ: %message%.'
+command-usage: '&7Cách sử dụng: &c/%cmd% %args%'
+argument-handler-string: 'Chuỗi không thể trống'
+argument-handler-enum: 'Loại %enum% [%input%] không tồn tại'
+argument-handler-enum-list: 'Loại %enum% [%input%] không tồn tại. Các loại hợp lệ: %types%'
+argument-handler-value: 'Giá trị [%input%] không hợp lệ'
+votifier-voted: '&7Cảm ơn bạn đã bình chọn trên %service%! &c%amount% &7đã được thêm vào số dư của bạn.'
+leaderboard-empty-entry: 'Đây có thể là bạn!'
+command-cooldown: '&cVui lòng đợi trước khi sử dụng lệnh đó lần nữa.'
# Base Command Message
base-command-color: '&7'
-base-command-help: '&7Sử dụng &c/bits help &7để biết thông tin về các lệnh.'
+base-command-help: '&7Sử dụng &c/bits help &7để biết thông tin lệnh.'
# Help Command
-command-help-description: '&8 - &c/bits help &7- Hiển thị menu trợ giúp... Bạn đã đến đây'
command-help-title: '&cCác Lệnh Có Sẵn:'
+command-help-description: 'Hiển thị menu trợ giúp... Bạn đã đến'
+command-help-list-description: '&8 - &c/%cmd% %subcmd% %args% &7- %desc%'
+command-help-list-description-no-args: '&8 - &c/%cmd% %subcmd% &7- %desc%'
# Give Command
-command-give-description: '&8 - &c/bits give &7- Cấp điểm cho một người chơi &a(cũng hỗ trợ -s [IM LẶNG])'
-command-give-usage: '&7Sử dụng: &c/bits give [-s]'
-command-give-success: '&c%player% &7đã nhận được &c%amount% &c%currency%&7.'
+command-give-description: 'Cho một người chơi một số bit'
+command-give-success: '&c%player% &7đã được cho &c%amount% &c%currency%&7.'
command-give-received: '&7Bạn đã nhận được &c%amount% &c%currency%&7.'
# Give All Command
-command-giveall-description: '&8 - &c/bits giveall &7- Cấp điểm cho tất cả người chơi đang online &a(cũng hỗ trợ -s [IM LẶNG])'
-command-giveall-usage: '&7Sử dụng: &c/bits giveall [*] [-s]'
-command-giveall-success: '&7Đã cấp &c%amount% &c%currency% &7cho tất cả người chơi đang online.'
+command-giveall-description: 'Cho tất cả người chơi trực tuyến một số bit'
+command-giveall-success: '&7Đã cho &c%amount% &c%currency% &7cho tất cả người chơi trực tuyến.'
# Take Command
-command-take-description: '&8 - &c/bits take &7- Lấy điểm từ một người chơi'
-command-take-usage: '&7Sử dụng: &c/bits take '
-command-take-success: '&7Đã lấy &c%amount% &c%currency% từ &c%player%&7.'
+command-take-description: 'Lấy bit từ một người chơi'
+command-take-success: '&7Đã lấy &c%amount% &c%currency% &7từ &c%player%&a&7.'
command-take-not-enough: '&c%player% &7không có đủ %currency% cho việc đó.'
# Look Command
-command-look-description: '&8 - &c/bits look &7- Xem điểm của một người chơi'
-command-look-usage: '&7Sử dụng: &c/bits look '
+command-look-description: 'Xem bit của một người chơi'
command-look-success: '&c%player% &7có &c%amount% &c%currency%&7.'
# Pay Command
-command-pay-description: '&8 - &c/bits pay &7- Thanh toán cho một người chơi'
-command-pay-usage: '&7Sử dụng: &c/bits pay '
-command-pay-self: '&cBạn không thể tự trả cho mình!'
+command-pay-description: 'Trả tiền cho một người chơi'
+command-pay-self: '&cBạn không thể tự trả tiền cho mình!'
command-pay-sent: '&7Bạn đã trả &c%player% %amount% &c%currency%&7.'
-command-pay-received: '&7Bạn đã nhận được &c%amount% &c%currency% từ &c%player%&7.'
+command-pay-received: '&7Bạn đã được trả &c%amount% &c%currency% &7bởi &c%player%&7.'
command-pay-lacking-funds: '&cBạn không có đủ %currency% cho việc đó.'
# Set Command
-command-set-description: '&8 - &c/bits set &7- Đặt điểm cho một người chơi'
-command-set-usage: '&7Sử dụng: &c/bits set '
-command-set-success: '&7Điểm của &c%player% &7đã được đặt thành &c%amount%&7.'
+command-set-description: 'Đặt bit của một người chơi'
+command-set-success: '&7Đã đặt %currency% của &c%player% &7thành &c%amount%&7.'
# Reset Command
-command-reset-description: '&8 - &c/bits reset &7- Đặt lại điểm của một người chơi'
-command-reset-usage: '&7Sử dụng: &c/bits reset '
-command-reset-success: '&7Điểm của &c%player% &7đã được đặt lại.'
+command-reset-description: 'Đặt lại bit của một người chơi'
+command-reset-success: '&7Đã đặt lại %currency% cho &c%player%&7.'
# Me Command
-command-me-description: '&8 - &c/bits me &7- Xem điểm của bạn'
-command-me-usage: '&7Sử dụng: &c/bits me'
+command-me-description: 'Xem bit của bạn'
command-me-success: '&7Bạn có &c%amount% &c%currency%&7.'
# Lead Command
-command-lead-description: '&8 - &c/bits lead &7- Xem bảng xếp hạng'
-command-lead-usage: '&7Sử dụng: &c/bits lead [next|prev|#]'
-command-lead-title: '&7Bảng Xếp Hạng &c(Trang #%page%/%pages%)'
+command-lead-description: 'Xem bảng xếp hạng'
+command-lead-title: '&7Bảng xếp hạng &c(Trang #%page%/%pages%)'
command-lead-entry: '&c%position%). &c%player% &7- &c%amount% %currency%'
+command-lead-usage: '&cTrang bảng xếp hạng không hợp lệ.'
# Broadcast Command
-command-broadcast-description: '&8 - &c/bits broadcast &7- Phát sóng điểm của một người chơi'
-command-broadcast-usage: '&7Sử dụng: &c/bits broadcast '
+command-broadcast-description: 'Phát sóng bit của một người chơi'
command-broadcast-message: '&c%player% &7có &c%amount% &c%currency%&7.'
# Reload Command
-command-reload-description: '&8 - &c/bits reload &7- Tải lại plugin'
-command-reload-usage: '&7Sử dụng: &c/bits reload'
-command-reload-success: '&7Các tệp cấu hình và ngôn ngữ đã được tải lại.'
+command-reload-description: 'Tải lại plugin'
+command-reload-success: '&7Các tập tin cấu hình và ngôn ngữ đã được tải lại.'
# Export Command
-command-export-description: '&8 - &c/bits export &7- Xuất dữ liệu vào storage.yml'
-command-export-usage: '&7Sử dụng: &c/bits export'
-command-export-success: '&aDữ liệu đã được xuất vào storage.yml.'
-command-export-warning: '&cLưu ý: Tệp storage.yml đã tồn tại. Nếu muốn ghi đè, hãy sử dụng &d/bits &cexport confirm.'
+command-export-description: 'Xuất dữ liệu sang storage.yml'
+command-export-success: '&aDữ liệu đã được xuất sang storage.yml.'
+command-export-warning: '&eCẢNH BÁO: &cTệp storage.yml đã tồn tại. &7Nếu bạn muốn ghi đè lên nó, hãy sử dụng &c/bits &cexport confirm&7.'
# Import Command
-command-import-description: '&8 - &c/bits import &7- Nhập dữ liệu từ storage.yml'
-command-import-usage: '&7Sử dụng: &c/bits import'
+command-import-description: 'Nhập dữ liệu từ storage.yml'
command-import-success: '&aDữ liệu đã được nhập từ storage.yml.'
-command-import-no-backup: '&cKhông thể nhập, storage.yml không tồn tại. Bạn có thể tạo một tệp với &d/bits export &cvà sử dụng nó để chuyển dữ liệu giữa các loại cơ sở dữ liệu.'
-command-import-warning: '&cLưu ý: Thao tác này sẽ xóa tất cả dữ liệu từ cơ sở dữ liệu hiện tại và thay thế bằng nội dung của storage.yml. &cLoại cơ sở dữ liệu hiện tại là &b&o&l%type%&c. &cNếu bạn chắc chắn, hãy sử dụng &b/bits import confirm&c.'
+command-import-no-backup: '&cKhông thể nhập, storage.yml không tồn tại. Bạn có thể tạo ra một tệp với &a/bits export &cvà sử dụng nó để chuyển dữ liệu giữa các loại cơ sở dữ liệu.'
+command-import-warning: '&eCẢNH BÁO: &cThao tác này sẽ xóa tất cả dữ liệu từ cơ sở dữ liệu đang hoạt động và thay thế bằng nội dung của storage.yml. &cLoại cơ sở dữ liệu hiện đang hoạt động là &c&o&l%type%&c. &cNếu bạn hoàn toàn chắc chắn về điều này, hãy sử dụng &a/bits import confirm&c.'
# Import Legacy Command
-command-importlegacy-description: '&8 - &c/bits importlegacy &7- Nhập bảng cũ'
-command-importlegacy-usage: '&7Sử dụng: &c/bits importlegacy '
-command-importlegacy-success: '&aĐã nhập dữ liệu cũ từ &d%table%&a thành công.'
-command-importlegacy-failure: '&cKhông thể nhập dữ liệu cũ từ &d%table%&c. Bảng có tồn tại không?'
-command-importlegacy-only-mysql: '&cLệnh này chỉ khả dụng khi MySQL được kích hoạt.'
+command-importlegacy-description: 'Nhập bảng legacy'
+command-importlegacy-success: '&aNhập dữ liệu legacy từ &4%table%&a thành công.'
+command-importlegacy-failure: '&cKhông thể nhập dữ liệu legacy từ &4%table%&c. Bảng này có tồn tại không?'
+command-importlegacy-only-mysql: '&cLệnh này chỉ khả dụng khi bạn đã kích hoạt MySQL.'
# Version Command
-command-version-description: '&8 - &c/bits version &7- Hiển thị thông tin phiên bản cho ColdBits'
+command-version-description: 'Hiển thị thông tin phiên bản của ColdBits'
diff --git a/src/main/resources/locale/zh_CN.yml b/src/main/resources/locale/zh_CN.yml
index a07c4d4..f3edb4b 100644
--- a/src/main/resources/locale/zh_CN.yml
+++ b/src/main/resources/locale/zh_CN.yml
@@ -2,118 +2,113 @@
prefix: '&8「ɻAA7C℟BBoA597D0lC5B6E4dE6D4F8BCEA5F7iB677F7t E48F6s&8」&7» '
# Currency
-currency-singular: 点
-currency-plural: 点
+currency-singular: 比特
+currency-plural: 比特
currency-separator: ','
currency-decimal: .
number-abbreviation-thousands: 千
number-abbreviation-millions: 百万
-number-abbreviation-billions: 十亿
+number-abbreviation-billions: 亿
# Console log
-command-give-log: "&7已将 &c%amount% %currency% &7添加到 &c%player%&7 的余额中。余额: &c%new_balance% %currency%"
-command-reset-log: "&7已重置 &c%player%&7 的余额。余额: &c%new_balance% %currency%"
-command-set-log: "&7已设置 &c%player%&7 的余额。余额: &c%new_balance% %currency%"
-command-take-log: "&7已从 &c%player%&7 的余额中取出 &c%amount% %currency%。余额: &c%new_balance% %currency%"
+command-give-log: "&7已添加 &c%amount% %currency% &7到 &c%player%&7 的余额。余额:&c%new_balance% %currency%"
+command-reset-log: "&7已重置 &c%player%&7 的余额。余额:&c%new_balance% %currency%"
+command-set-log: "&7已设置 &c%player%&7 的余额。余额:&c%new_balance% %currency%"
+command-take-log: "&7已从 &c%player%&7 的余额中扣除 &c%amount% %currency%&7。余额:&c%new_balance% %currency%"
# Misc
no-permission: '&c你没有权限执行此操作!'
-no-console: '&c只有玩家才能执行此命令。'
+only-player: '&c此命令只能由玩家执行。'
invalid-amount: '&c数量必须是正整数。'
-unknown-player: '&c找不到玩家: &b%player%'
-unknown-command: '&c未知命令: &b%input%'
-votifier-voted: '&7感谢你在 &c%service%&7 上投票! &c&b%amount% &7已添加到你的余额。'
-leaderboard-empty-entry: 这可能是你!
-command-cooldown: '&c请稍等再使用此命令。'
+unknown-player: '&c找不到玩家:&b%player%'
+unknown-command: '&c未知命令:&b%input%'
+invalid-argument: '&c无效参数:%message%。'
+command-usage: '&7用法:&c/%cmd% %args%'
+argument-handler-string: '字符串不能为空'
+argument-handler-enum: '%enum%类型[%input%]不存在'
+argument-handler-enum-list: '%enum%类型[%input%]不存在。有效类型:%types%'
+argument-handler-value: '值[%input%]无效'
+votifier-voted: '&7感谢你在%service%上投票!&c%amount% &7已添加到你的余额。'
+leaderboard-empty-entry: '这可能是你!'
+command-cooldown: '&c请稍等再使用该命令。'
# Base Command Message
base-command-color: '&7'
base-command-help: '&7使用 &c/bits help &7获取命令信息。'
# Help Command
-command-help-description: '&8 - &c/bits help &7- 显示帮助菜单... 你已经到了'
-command-help-title: '&c可用命令:'
+command-help-title: '&c可用命令:'
+command-help-description: '显示帮助菜单...你已到达'
+command-help-list-description: '&8 - &c/%cmd% %subcmd% %args% &7- %desc%'
+command-help-list-description-no-args: '&8 - &c/%cmd% %subcmd% &7- %desc%'
# Give Command
-command-give-description: '&8 - &c/bits give &7- 给某个玩家点数 &a(支持 -s [静默模式])'
-command-give-usage: '&7用法: &c/bits give <玩家> <数量> [-s]'
-command-give-success: '&c%player% &7已收到 &c%amount% &c%currency%&7。'
-command-give-received: '&7你已收到 &c%amount% &c%currency%&7。'
+command-give-description: '给玩家比特'
+command-give-success: '&c%player% &7获得了 &c%amount% &c%currency%&7。'
+command-give-received: '&7你获得了 &c%amount% &c%currency%&7。'
# Give All Command
-command-giveall-description: '&8 - &c/bits giveall &7- 给所有在线玩家点数 &a(支持 -s [静默模式])'
-command-giveall-usage: '&7用法: &c/bits giveall <数量> [*] [-s]'
-command-giveall-success: '&7已给所有在线玩家 &c%amount% &c%currency%&7。'
+command-giveall-description: '给所有在线玩家比特'
+command-giveall-success: '&7给所有在线玩家 &c%amount% &c%currency%&7。'
# Take Command
-command-take-description: '&8 - &c/bits take &7- 从玩家那里取走点数'
-command-take-usage: '&7用法: &c/bits take <玩家> <数量>'
-command-take-success: '&7已从 &c%player% &7取走 &c%amount% &c%currency%&7。'
-command-take-not-enough: '&c%player% &7没有足够的 %currency% 。'
+command-take-description: '从玩家处扣除比特'
+command-take-success: '&7从 &c%player%&7 处扣除了 &c%amount% &c%currency%&a&7。'
+command-take-not-enough: '&c%player% &7没有足够的%currency%。'
# Look Command
-command-look-description: '&8 - &c/bits look &7- 查看某个玩家的点数'
-command-look-usage: '&7用法: &c/bits look <玩家>'
+command-look-description: '查看玩家的比特'
command-look-success: '&c%player% &7拥有 &c%amount% &c%currency%&7。'
# Pay Command
-command-pay-description: '&8 - &c/bits pay &7- 向某个玩家支付点数'
-command-pay-usage: '&7用法: &c/bits pay <玩家> <数量>'
-command-pay-self: '&c你不能给自己支付点数!'
-command-pay-sent: '&7你已支付 &c%amount% &c%currency% 给 &c%player%&7。'
-command-pay-received: '&7你已收到 &c%amount% &c%currency% 来自 &c%player%&7。'
-command-pay-lacking-funds: '&c你没有足够的 %currency% 来进行此操作。'
+command-pay-description: '支付给玩家'
+command-pay-self: '&c你不能支付给自己!'
+command-pay-sent: '&7你向 &c%player% 支付了 %amount% &c%currency%&7。'
+command-pay-received: '&7你收到了来自 &c%player%&7 的 &c%amount% &c%currency%&7。'
+command-pay-lacking-funds: '&c你没有足够的%currency%。'
# Set Command
-command-set-description: '&8 - &c/bits set &7- 设置某个玩家的点数'
-command-set-usage: '&7用法: &c/bits set <玩家> <数量>'
-command-set-success: '&7已将 &c%player% 的点数设置为 &c%amount%&7。'
+command-set-description: '设置玩家的比特'
+command-set-success: '&7将 &c%player% &7的%currency%设置为 &c%amount%&7。'
# Reset Command
-command-reset-description: '&8 - &c/bits reset &7- 重置某个玩家的点数'
-command-reset-usage: '&7用法: &c/bits reset <玩家>'
-command-reset-success: '&7已重置 &c%player% 的 %currency%&7。'
+command-reset-description: '重置玩家的比特'
+command-reset-success: '&7已重置 &c%player%&7 的%currency%。'
# Me Command
-command-me-description: '&8 - &c/bits me &7- 查看你的点数'
-command-me-usage: '&7用法: &c/bits me'
+command-me-description: '查看你的比特'
command-me-success: '&7你拥有 &c%amount% &c%currency%&7。'
# Lead Command
-command-lead-description: '&8 - &c/bits lead &7- 查看排行榜'
-command-lead-usage: '&7用法: &c/bits lead [next|prev|#]'
-command-lead-title: '&7排行榜 &c(页 #%page%/%pages%)'
+command-lead-description: '查看排行榜'
+command-lead-title: '&7排行榜 &c(第 #%page%/%pages% 页)'
command-lead-entry: '&c%position%). &c%player% &7- &c%amount% %currency%'
+command-lead-usage: '&c无效的排行榜页面。'
# Broadcast Command
-command-broadcast-description: '&8 - &c/bits broadcast &7- 广播某个玩家的点数'
-command-broadcast-usage: '&7用法: &c/bits broadcast <玩家>'
+command-broadcast-description: '广播玩家的比特'
command-broadcast-message: '&c%player% &7拥有 &c%amount% &c%currency%&7。'
# Reload Command
-command-reload-description: '&8 - &c/bits reload &7- 重新加载插件'
-command-reload-usage: '&7用法: &c/bits reload'
-command-reload-success: '&7配置文件和语言文件已重新加载。'
+command-reload-description: '重新加载插件'
+command-reload-success: '&7配置和语言文件已重新加载。'
# Export Command
-command-export-description: '&8 - &c/bits export &7- 将数据导出到 storage.yml'
-command-export-usage: '&7用法: &c/bits export'
+command-export-description: '导出数据到 storage.yml'
command-export-success: '&a数据已导出到 storage.yml。'
-command-export-warning: '&c注意: storage.yml 文件已存在。如果你想覆盖它,请使用 &d/bits &cexport confirm。'
+command-export-warning: '&e警告:&cstorage.yml 文件已存在。 &7如果你想覆盖它,请使用 &c/bits &cexport confirm&7。'
# Import Command
-command-import-description: '&8 - &c/bits import &7- 从 storage.yml 导入数据'
-command-import-usage: '&7用法: &c/bits import'
-command-import-success: '&a数据已从 storage.yml 导入。'
-command-import-no-backup: '&c无法导入,storage.yml 文件不存在。你可以使用 &d/bits export &c生成一个文件,并将其用于在数据库类型之间传输数据。'
-command-import-warning: '&c注意: 此操作将删除当前数据库中的所有数据,并将其替换为 storage.yml 的内容。 &c当前激活的数据库类型是 &b&o&l%type%&c。 &c如果你确定,请使用 &b/bits import confirm&c。'
+command-import-description: '从 storage.yml 导入数据'
+command-import-success: '&a已从 storage.yml 导入数据。'
+command-import-no-backup: '&c无法导入,storage.yml 不存在。你可以使用 &a/bits export &c生成一个,用于在数据库类型之间传输数据。'
+command-import-warning: '&e警告:&c此操作将删除活动数据库中的所有数据,并用 storage.yml 的内容替换它。&c当前活动的数据库类型是 &c&o&l%type%&c。&c如果你对此绝对确定,请使用 &a/bits import confirm&c。'
# Import Legacy Command
-command-importlegacy-description: '&8 - &c/bits importlegacy &7- 导入旧表'
-command-importlegacy-usage: '&7用法: &c/bits importlegacy <表>'
-command-importlegacy-success: '&a已成功从 &d%table%&a 导入旧数据。'
-command-importlegacy-failure: '&c从 &d%table%&c 导入旧数据失败。表是否存在?'
+command-importlegacy-description: '导入旧表'
+command-importlegacy-success: '&a成功从 &4%table%&a 导入旧数据。'
+command-importlegacy-failure: '&c从 &4%table%&c 导入旧数据失败。该表是否存在?'
command-importlegacy-only-mysql: '&c此命令仅在启用 MySQL 时可用。'
# Version Command
-command-version-description: '&8 - &c/bits version &7- 显示 ColdBits 的版本信息'
+command-version-description: '显示 ColdBits 的版本信息'
diff --git a/src/main/resources/locale/zh_TW.yml b/src/main/resources/locale/zh_TW.yml
index 1957228..3c52428 100644
--- a/src/main/resources/locale/zh_TW.yml
+++ b/src/main/resources/locale/zh_TW.yml
@@ -2,118 +2,113 @@
prefix: '&8「ɻAA7C℟BBoA597D0lC5B6E4dE6D4F8BCEA5F7iB677F7t E48F6s&8」&7» '
# Currency
-currency-singular: 點
-currency-plural: 點
+currency-singular: 比特
+currency-plural: 比特
currency-separator: ','
currency-decimal: .
number-abbreviation-thousands: 千
number-abbreviation-millions: 百萬
-number-abbreviation-billions: 十億
+number-abbreviation-billions: 億
# Console log
-command-give-log: "&7已將 &c%amount% %currency% &7添加到 &c%player%&7 的餘額中。餘額: &c%new_balance% %currency%"
-command-reset-log: "&7已重置 &c%player%&7 的餘額。餘額: &c%new_balance% %currency%"
-command-set-log: "&7已設定 &c%player%&7 的餘額。餘額: &c%new_balance% %currency%"
-command-take-log: "&7已從 &c%player%&7 的餘額中取出 &c%amount% %currency%。餘額: &c%new_balance% %currency%"
+command-give-log: "&7已添加 &c%amount% %currency% &7到 &c%player%&7 的餘額。餘額:&c%new_balance% %currency%"
+command-reset-log: "&7已重置 &c%player%&7 的餘額。餘額:&c%new_balance% %currency%"
+command-set-log: "&7已設置 &c%player%&7 的餘額。餘額:&c%new_balance% %currency%"
+command-take-log: "&7已從 &c%player%&7 的餘額中扣除 &c%amount% %currency%&7。餘額:&c%new_balance% %currency%"
# Misc
no-permission: '&c你沒有權限執行此操作!'
-no-console: '&c只有玩家才能執行此命令。'
+only-player: '&c此命令只能由玩家執行。'
invalid-amount: '&c數量必須是正整數。'
-unknown-player: '&c找不到玩家: &b%player%'
-unknown-command: '&c未知的命令: &b%input%'
-votifier-voted: '&7感謝你在 &c%service%&7 上投票! &c&b%amount% &7已加入到你的餘額中。'
-leaderboard-empty-entry: 這可能是你!
-command-cooldown: '&c請稍候再使用此命令。'
+unknown-player: '&c找不到玩家:&b%player%'
+unknown-command: '&c未知命令:&b%input%'
+invalid-argument: '&c無效參數:%message%。'
+command-usage: '&7用法:&c/%cmd% %args%'
+argument-handler-string: '字串不能為空'
+argument-handler-enum: '%enum%類型[%input%]不存在'
+argument-handler-enum-list: '%enum%類型[%input%]不存在。有效類型:%types%'
+argument-handler-value: '值[%input%]無效'
+votifier-voted: '&7感謝你在%service%上投票!&c%amount% &7已添加到你的餘額。'
+leaderboard-empty-entry: '這可能是你!'
+command-cooldown: '&c請稍等再使用該命令。'
# Base Command Message
base-command-color: '&7'
-base-command-help: '&7使用 &c/bits help &7來獲取命令資訊。'
+base-command-help: '&7使用 &c/bits help &7獲取命令資訊。'
# Help Command
-command-help-description: '&8 - &c/bits help &7- 顯示幫助選單... 你已到達'
-command-help-title: '&c可用的命令:'
+command-help-title: '&c可用命令:'
+command-help-description: '顯示幫助選單...你已到達'
+command-help-list-description: '&8 - &c/%cmd% %subcmd% %args% &7- %desc%'
+command-help-list-description-no-args: '&8 - &c/%cmd% %subcmd% &7- %desc%'
# Give Command
-command-give-description: '&8 - &c/bits give &7- 給予玩家點數 &a(亦支援 -s [靜默])'
-command-give-usage: '&7用法: &c/bits give <玩家> <數量> [-s]'
-command-give-success: '&c%player% &7已獲得 &c%amount% &c%currency%&7。'
-command-give-received: '&7你已獲得 &c%amount% &c%currency%&7。'
+command-give-description: '給玩家比特'
+command-give-success: '&c%player% &7獲得了 &c%amount% &c%currency%&7。'
+command-give-received: '&7你獲得了 &c%amount% &c%currency%&7。'
# Give All Command
-command-giveall-description: '&8 - &c/bits giveall &7- 給予所有在線玩家點數 &a(亦支援 -s [靜默])'
-command-giveall-usage: '&7用法: &c/bits giveall <數量> [*] [-s]'
-command-giveall-success: '&7已給予所有在線玩家 &c%amount% &c%currency%&7。'
+command-giveall-description: '給所有線上玩家比特'
+command-giveall-success: '&7給所有線上玩家 &c%amount% &c%currency%&7。'
# Take Command
-command-take-description: '&8 - &c/bits take &7- 從玩家那裡扣除點數'
-command-take-usage: '&7用法: &c/bits take <玩家> <數量>'
-command-take-success: '&7已從 &c%player% &7扣除 &c%amount% &c%currency%&7。'
-command-take-not-enough: '&c%player% &7沒有足夠的 %currency%。'
+command-take-description: '從玩家處扣除比特'
+command-take-success: '&7從 &c%player%&7 處扣除了 &c%amount% &c%currency%&a&7。'
+command-take-not-enough: '&c%player% &7沒有足夠的%currency%。'
# Look Command
-command-look-description: '&8 - &c/bits look &7- 查看玩家的點數'
-command-look-usage: '&7用法: &c/bits look <玩家>'
+command-look-description: '查看玩家的比特'
command-look-success: '&c%player% &7擁有 &c%amount% &c%currency%&7。'
# Pay Command
-command-pay-description: '&8 - &c/bits pay &7- 給予玩家點數'
-command-pay-usage: '&7用法: &c/bits pay <玩家> <數量>'
-command-pay-self: '&c你不能給自己支付!'
-command-pay-sent: '&7你已給予 &c%player% %amount% &c%currency%&7。'
-command-pay-received: '&7你已從 &c%player% &7收到 &c%amount% &c%currency%&7。'
-command-pay-lacking-funds: '&c你沒有足夠的 %currency%。'
+command-pay-description: '支付給玩家'
+command-pay-self: '&c你不能支付給自己!'
+command-pay-sent: '&7你向 &c%player% 支付了 %amount% &c%currency%&7。'
+command-pay-received: '&7你收到了來自 &c%player%&7 的 &c%amount% &c%currency%&7。'
+command-pay-lacking-funds: '&c你沒有足夠的%currency%。'
# Set Command
-command-set-description: '&8 - &c/bits set &7- 設定玩家的點數'
-command-set-usage: '&7用法: &c/bits set <玩家> <數量>'
-command-set-success: '&7已將 &c%player% &7的點數設定為 &c%amount%&7。'
+command-set-description: '設置玩家的比特'
+command-set-success: '&7將 &c%player% &7的%currency%設置為 &c%amount%&7。'
# Reset Command
-command-reset-description: '&8 - &c/bits reset &7- 重置玩家的點數'
-command-reset-usage: '&7用法: &c/bits reset <玩家>'
-command-reset-success: '&7已重置 &c%player% &7的 %currency%。'
+command-reset-description: '重置玩家的比特'
+command-reset-success: '&7已重置 &c%player%&7 的%currency%。'
# Me Command
-command-me-description: '&8 - &c/bits me &7- 查看你的點數'
-command-me-usage: '&7用法: &c/bits me'
+command-me-description: '查看你的比特'
command-me-success: '&7你擁有 &c%amount% &c%currency%&7。'
# Lead Command
-command-lead-description: '&8 - &c/bits lead &7- 查看排行榜'
-command-lead-usage: '&7用法: &c/bits lead [next|prev|#]'
-command-lead-title: '&7排行榜 &c(頁數 #%page%/%pages%)'
+command-lead-description: '查看排行榜'
+command-lead-title: '&7排行榜 &c(第 #%page%/%pages% 頁)'
command-lead-entry: '&c%position%). &c%player% &7- &c%amount% %currency%'
+command-lead-usage: '&c無效的排行榜頁面。'
# Broadcast Command
-command-broadcast-description: '&8 - &c/bits broadcast &7- 廣播玩家的點數'
-command-broadcast-usage: '&7用法: &c/bits broadcast <玩家>'
+command-broadcast-description: '廣播玩家的比特'
command-broadcast-message: '&c%player% &7擁有 &c%amount% &c%currency%&7。'
# Reload Command
-command-reload-description: '&8 - &c/bits reload &7- 重新載入插件'
-command-reload-usage: '&7用法: &c/bits reload'
-command-reload-success: '&7設定檔和語言檔已重新載入。'
+command-reload-description: '重新載入插件'
+command-reload-success: '&7配置和語言檔案已重新載入。'
# Export Command
-command-export-description: '&8 - &c/bits export &7- 將資料匯出到 storage.yml'
-command-export-usage: '&7用法: &c/bits export'
-command-export-success: '&a資料已匯出到 storage.yml。'
-command-export-warning: '&c注意: storage.yml 檔案已存在。如需覆蓋,請使用 &d/bits &cexport confirm。'
+command-export-description: '導出數據到 storage.yml'
+command-export-success: '&a數據已導出到 storage.yml。'
+command-export-warning: '&e警告:&cstorage.yml 檔案已存在。 &7如果你想覆蓋它,請使用 &c/bits &cexport confirm&7。'
# Import Command
-command-import-description: '&8 - &c/bits import &7- 從 storage.yml 匯入資料'
-command-import-usage: '&7用法: &c/bits import'
-command-import-success: '&a資料已從 storage.yml 匯入。'
-command-import-no-backup: '&c無法匯入,storage.yml 不存在。你可以使用 &d/bits export &c生成一個檔案,並用於在資料庫類型之間轉移資料。'
-command-import-warning: '&c注意: 此操作將刪除當前資料庫中的所有資料,並用 storage.yml 的內容取代。 &c當前啟用的資料庫類型為 &b&o&l%type%&c。 &c如果你確定,請使用 &b/bits import confirm&c。'
+command-import-description: '從 storage.yml 導入數據'
+command-import-success: '&a已從 storage.yml 導入數據。'
+command-import-no-backup: '&c無法導入,storage.yml 不存在。你可以使用 &a/bits export &c生成一個,用於在數據庫類型之間傳輸數據。'
+command-import-warning: '&e警告:&c此操作將刪除活動數據庫中的所有數據,並用 storage.yml 的內容替換它。&c當前活動的數據庫類型是 &c&o&l%type%&c。&c如果你對此絕對確定,請使用 &a/bits import confirm&c。'
# Import Legacy Command
-command-importlegacy-description: '&8 - &c/bits importlegacy &7- 匯入舊表格'
-command-importlegacy-usage: '&7用法: &c/bits importlegacy <表格>'
-command-importlegacy-success: '&a已成功從 &d%table%&a 匯入舊資料。'
-command-importlegacy-failure: '&c無法從 &d%table%&c 匯入舊資料。表格是否存在?'
+command-importlegacy-description: '導入舊表'
+command-importlegacy-success: '&a成功從 &4%table%&a 導入舊數據。'
+command-importlegacy-failure: '&c從 &4%table%&c 導入舊數據失敗。該表是否存在?'
command-importlegacy-only-mysql: '&c此命令僅在啟用 MySQL 時可用。'
# Version Command
-command-version-description: '&8 - &c/bits version &7- 顯示 ColdBits 的版本資訊'
+command-version-description: '顯示 ColdBits 的版本信息'
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 80d760c..31d06ac 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,24 +1,20 @@
name: ColdBits
version: '@version@'
authors: [padrewin]
-website: 'https://github.com/Cold-Development/ColdBits'
-description: An economy and currency system based on premium currency
+website: 'https://github.com/Cold-Development/ColdBits/'
+description: A point based currency system
main: dev.padrewin.coldbits.ColdBits
api-version: '1.13'
load: STARTUP
-softdepend: [Vault, Votifier, PlaceholderAPI, nightcore]
+softdepend: [Vault, Treasury, Votifier, PlaceholderAPI, TokenManager, GamePoints, NexEngine]
loadbefore: [mcMMO]
folia-supported: true
libraries:
- - 'com.mysql:mysql-connector-j:9.0.0'
+ - 'com.mysql:mysql-connector-j:9.1.0'
- 'org.xerial:sqlite-jdbc:3.46.0.0'
-commands:
- bits:
- aliases: [bits, cbits, coldbits, cb, bit, coldbit, cbit]
- description: Root command for ColdBits
permissions:
coldbits.*:
- description: Gives access to all ColdBits commands
+ description: Gives access to all coldbits commands
children:
coldbits.give: true
coldbits.giveall: true
@@ -36,6 +32,9 @@ permissions:
coldbits.convert: true
coldbits.importlegacy: true
coldbits.version: true
+ coldbits.basecommand:
+ description: Gives access to the base command
+ default: true
coldbits.give:
description: Gives access to the give command
default: op