v1.5.0: Добавлены кастомные команды, алиасы, цвета чата, многоядерная сборка

- Система кастомных команд с алиасами (custom-commands.yml)
- Команда /chatcolor для установки цвета сообщений
- Исправлена ошибка с legacy кодами в PM
- Настройки объявлений (title, actionbar)
- Автообновление конфигов
- Отображение префикса над игроком
- Многоядерная сборка Gradle
- Добавлены алиасы для команд (русские и английские)
- Права на использование цветовых кодов
This commit is contained in:
loki5512344 2025-12-30 12:29:39 +01:00
parent dfc1c901ab
commit f52bd29e7d
17 changed files with 808 additions and 33 deletions

View file

@ -1,6 +1,7 @@
package com.loki.lochat.commands;
import com.loki.lochat.LoChat;
import com.loki.lochat.utils.ChatFormatter;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@ -8,6 +9,7 @@ import org.bukkit.command.TabCompleter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
public class LoChatCommand implements CommandExecutor, TabCompleter {
@ -21,35 +23,75 @@ public class LoChatCommand implements CommandExecutor, TabCompleter {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String label, @NotNull String[] args) {
if (!sender.hasPermission("lochat.admin")) {
sender.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getNoPermission()));
return true;
}
if (args.length == 0) {
sender.sendMessage("§e=== LoChat v" + plugin.getDescription().getVersion() + " ===");
sender.sendMessage("§e/lochat reload §7— перезагрузить конфиги");
sender.sendMessage(ChatFormatter.parse("<gold>LoChat v" + plugin.getDescription().getVersion() + "</gold>"));
sender.sendMessage(ChatFormatter.parse("<gray>Команды:</gray>"));
sender.sendMessage(ChatFormatter.parse("<yellow>/lochat reload</yellow> - Перезагрузить конфиги"));
sender.sendMessage(ChatFormatter.parse("<yellow>/lochat commands</yellow> - Список кастомных команд"));
sender.sendMessage(ChatFormatter.parse("<yellow>/lochat commands reload</yellow> - Перезагрузить кастомные команды"));
return true;
}
if (args[0].equalsIgnoreCase("reload")) {
if (!sender.hasPermission("lochat.admin")) {
sender.sendMessage(plugin.getMessageConfig().get("errors.no-permission"));
return true;
switch (args[0].toLowerCase()) {
case "reload" -> {
plugin.reload();
sender.sendMessage(ChatFormatter.parse("<green>Конфигурация перезагружена!</green>"));
}
plugin.reload();
sender.sendMessage("§aLoChat перезагружен!");
return true;
case "commands" -> {
if (args.length > 1 && args[1].equalsIgnoreCase("reload")) {
plugin.getCustomCommandManager().reload();
sender.sendMessage(ChatFormatter.parse("<green>Кастомные команды перезагружены!</green>"));
} else {
var commands = plugin.getCustomCommandManager().getCommands();
sender.sendMessage(ChatFormatter.parse("<gold>Кастомные команды (" + commands.size() + "):</gold>"));
for (var cmd : commands.values()) {
sender.sendMessage(ChatFormatter.parse("<yellow>/" + cmd.name + "</yellow> <gray>(" + cmd.type + ")</gray>"));
if (!cmd.aliases.isEmpty()) {
sender.sendMessage(ChatFormatter.parse("<gray> Алиасы: " + String.join(", ", cmd.aliases) + "</gray>"));
}
}
}
}
default -> sender.sendMessage(ChatFormatter.parse("<red>Неизвестная команда. Используйте /lochat для помощи.</red>"));
}
sender.sendMessage("§cНеизвестная команда. Используй /lochat reload");
return true;
}
@Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String alias, @NotNull String[] args) {
if (args.length == 1 && sender.hasPermission("lochat.admin")) {
return List.of("reload").stream()
.filter(s -> s.startsWith(args[0].toLowerCase()))
.toList();
if (!sender.hasPermission("lochat.admin")) {
return new ArrayList<>();
}
return List.of();
if (args.length == 1) {
List<String> completions = new ArrayList<>();
String input = args[0].toLowerCase();
for (String cmd : List.of("reload", "commands")) {
if (cmd.startsWith(input)) {
completions.add(cmd);
}
}
return completions;
}
if (args.length == 2 && args[0].equalsIgnoreCase("commands")) {
List<String> completions = new ArrayList<>();
String input = args[1].toLowerCase();
if ("reload".startsWith(input)) {
completions.add("reload");
}
return completions;
}
return new ArrayList<>();
}
}