feat(chunkloader): add /chunkloader limite command and tab completion
This commit is contained in:
@@ -1822,6 +1822,7 @@ final class CanalhandiaCommand implements CommandExecutor, TabCompleter {
|
|||||||
case "info", "chunk" -> chunkloaderInfo(sender);
|
case "info", "chunk" -> chunkloaderInfo(sender);
|
||||||
case "remover", "remove", "del" -> chunkloaderRemove(sender, rest);
|
case "remover", "remove", "del" -> chunkloaderRemove(sender, rest);
|
||||||
case "receita", "craft" -> chunkloaderRecipe(sender);
|
case "receita", "craft" -> chunkloaderRecipe(sender);
|
||||||
|
case "limite", "limit" -> chunkloaderLimit(sender, rest);
|
||||||
case "admin" -> chunkloaderAdmin(sender, rest);
|
case "admin" -> chunkloaderAdmin(sender, rest);
|
||||||
case "dar", "give" -> {
|
case "dar", "give" -> {
|
||||||
if (admin(sender)) {
|
if (admin(sender)) {
|
||||||
@@ -2040,6 +2041,68 @@ final class CanalhandiaCommand implements CommandExecutor, TabCompleter {
|
|||||||
Msg.ok(target, "Você recebeu " + amount + "x Âncora de Chunk!");
|
Msg.ok(target, "Você recebeu " + amount + "x Âncora de Chunk!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void chunkloaderLimit(CommandSender sender, String[] args) {
|
||||||
|
if (args.length == 0) {
|
||||||
|
int defaultLimit = plugin.settings().chunkLoaderDefaultLimit();
|
||||||
|
Msg.header(sender, "Limite de Âncoras de Chunk");
|
||||||
|
sender.sendMessage(Component.text(" Limite padrão global: ", NamedTextColor.GRAY)
|
||||||
|
.append(Component.text(defaultLimit, NamedTextColor.YELLOW)));
|
||||||
|
if (sender instanceof Player player) {
|
||||||
|
int myLimit = ChunkLoaders.playerLimit(player, defaultLimit);
|
||||||
|
String myLimitStr = myLimit == Integer.MAX_VALUE ? "ilimitado" : String.valueOf(myLimit);
|
||||||
|
int current = plugin.chunkLoaders().byOwner(player.getUniqueId().toString()).size();
|
||||||
|
sender.sendMessage(Component.text(" Seu limite atual: ", NamedTextColor.GRAY)
|
||||||
|
.append(Component.text(current + "/" + myLimitStr, NamedTextColor.AQUA)));
|
||||||
|
}
|
||||||
|
if (admin(sender)) {
|
||||||
|
sender.sendMessage(Component.text(" Alterar padrão global: ", NamedTextColor.GRAY)
|
||||||
|
.append(Component.text("/chunkloader limite padrao <quantidade>", NamedTextColor.YELLOW)));
|
||||||
|
sender.sendMessage(Component.text(" Definir por jogador (LuckPerms): ", NamedTextColor.GRAY)
|
||||||
|
.append(Component.text("/chunkloader limite <jogador> <quantidade>", NamedTextColor.YELLOW)));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!admin(sender)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args[0].equalsIgnoreCase("padrao") || args[0].equalsIgnoreCase("default")) {
|
||||||
|
if (args.length < 2) {
|
||||||
|
Msg.error(sender, "Uso: /chunkloader limite padrao <quantidade>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
int newLimit = Math.max(0, Integer.parseInt(args[1]));
|
||||||
|
plugin.settings().chunkLoaderDefaultLimit(newLimit);
|
||||||
|
Msg.ok(sender, "Limite padrão global de Âncoras alterado para " + newLimit + ".");
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
Msg.error(sender, "Quantidade inválida: " + args[1]);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player target = Bukkit.getPlayerExact(args[0]);
|
||||||
|
if (target == null) {
|
||||||
|
Msg.error(sender, "Jogador '" + args[0] + "' não encontrado online.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (args.length < 2) {
|
||||||
|
int targetLimit = ChunkLoaders.playerLimit(target, plugin.settings().chunkLoaderDefaultLimit());
|
||||||
|
String str = targetLimit == Integer.MAX_VALUE ? "ilimitado" : String.valueOf(targetLimit);
|
||||||
|
int current = plugin.chunkLoaders().byOwner(target.getUniqueId().toString()).size();
|
||||||
|
Msg.ok(sender, "Limite de " + target.getName() + ": " + current + "/" + str + " âncoras ativas.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
int newLimit = Math.max(0, Integer.parseInt(args[1]));
|
||||||
|
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "lp user " + target.getName() + " permission set canalhandia.chunkloader.limite." + newLimit);
|
||||||
|
Msg.ok(sender, "Limite de " + target.getName() + " definido para " + newLimit + " âncoras.");
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
Msg.error(sender, "Quantidade inválida: " + args[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean chunkloaderHelp(CommandSender sender) {
|
private boolean chunkloaderHelp(CommandSender sender) {
|
||||||
Msg.header(sender, "Âncoras de Chunk");
|
Msg.header(sender, "Âncoras de Chunk");
|
||||||
sender.sendMessage(Component.text(" /chunkloader info", NamedTextColor.AQUA)
|
sender.sendMessage(Component.text(" /chunkloader info", NamedTextColor.AQUA)
|
||||||
@@ -2050,6 +2113,8 @@ final class CanalhandiaCommand implements CommandExecutor, TabCompleter {
|
|||||||
.append(Component.text(" — Desativa e recolhe uma de suas âncoras", NamedTextColor.GRAY)));
|
.append(Component.text(" — Desativa e recolhe uma de suas âncoras", NamedTextColor.GRAY)));
|
||||||
sender.sendMessage(Component.text(" /chunkloader receita", NamedTextColor.AQUA)
|
sender.sendMessage(Component.text(" /chunkloader receita", NamedTextColor.AQUA)
|
||||||
.append(Component.text(" — Mostra a receita de criação do bloco", NamedTextColor.GRAY)));
|
.append(Component.text(" — Mostra a receita de criação do bloco", NamedTextColor.GRAY)));
|
||||||
|
sender.sendMessage(Component.text(" /chunkloader limite", NamedTextColor.AQUA)
|
||||||
|
.append(Component.text(" — Mostra ou configura os limites de âncoras", NamedTextColor.GRAY)));
|
||||||
if (sender.hasPermission(ADMIN) || sender.hasPermission("canalhandia.chunkloader.admin")) {
|
if (sender.hasPermission(ADMIN) || sender.hasPermission("canalhandia.chunkloader.admin")) {
|
||||||
sender.sendMessage(Component.text(" /chunkloader admin", NamedTextColor.YELLOW)
|
sender.sendMessage(Component.text(" /chunkloader admin", NamedTextColor.YELLOW)
|
||||||
.append(Component.text(" — Comandos de administração", NamedTextColor.GRAY)));
|
.append(Component.text(" — Comandos de administração", NamedTextColor.GRAY)));
|
||||||
@@ -2219,7 +2284,7 @@ final class CanalhandiaCommand implements CommandExecutor, TabCompleter {
|
|||||||
}
|
}
|
||||||
if (name.equals("chunkloader") || name.equals("ancora") || name.equals("ancoras")) {
|
if (name.equals("chunkloader") || name.equals("ancora") || name.equals("ancoras")) {
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
List<String> options = new ArrayList<>(List.of("info", "listar", "remover", "receita"));
|
List<String> options = new ArrayList<>(List.of("info", "listar", "remover", "receita", "limite"));
|
||||||
if (sender.hasPermission(ADMIN) || sender.hasPermission("canalhandia.chunkloader.admin")) {
|
if (sender.hasPermission(ADMIN) || sender.hasPermission("canalhandia.chunkloader.admin")) {
|
||||||
options.addAll(List.of("admin", "dar"));
|
options.addAll(List.of("admin", "dar"));
|
||||||
}
|
}
|
||||||
@@ -2234,6 +2299,11 @@ final class CanalhandiaCommand implements CommandExecutor, TabCompleter {
|
|||||||
return filter(ids, args[1]);
|
return filter(ids, args[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (args.length == 2 && args[0].equalsIgnoreCase("limite")) {
|
||||||
|
List<String> opts = new ArrayList<>(List.of("padrao"));
|
||||||
|
opts.addAll(onlineNames());
|
||||||
|
return filter(opts, args[1]);
|
||||||
|
}
|
||||||
if (args.length == 2 && args[0].equalsIgnoreCase("admin")) {
|
if (args.length == 2 && args[0].equalsIgnoreCase("admin")) {
|
||||||
return filter(List.of("listar", "remover", "dar"), args[1]);
|
return filter(List.of("listar", "remover", "dar"), args[1]);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user