v1.5.0: Добавлены кастомные команды, алиасы, цвета чата, многоядерная сборка
- Система кастомных команд с алиасами (custom-commands.yml) - Команда /chatcolor для установки цвета сообщений - Исправлена ошибка с legacy кодами в PM - Настройки объявлений (title, actionbar) - Автообновление конфигов - Отображение префикса над игроком - Многоядерная сборка Gradle - Добавлены алиасы для команд (русские и английские) - Права на использование цветовых кодов
This commit is contained in:
parent
dfc1c901ab
commit
f52bd29e7d
17 changed files with 808 additions and 33 deletions
|
|
@ -43,16 +43,24 @@ public class AnnounceCommand implements CommandExecutor {
|
|||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
player.sendMessage(formatted);
|
||||
|
||||
// ActionBar
|
||||
player.sendActionBar(formatted);
|
||||
// ActionBar (если включен)
|
||||
if (plugin.getConfigManager().isAnnouncementActionBarEnabled()) {
|
||||
player.sendActionBar(formatted);
|
||||
}
|
||||
|
||||
// Title
|
||||
Title title = Title.title(
|
||||
ChatFormatter.parse("<gold>ОБЪЯВЛЕНИЕ</gold>"),
|
||||
ChatFormatter.parse(message),
|
||||
Title.Times.times(Duration.ofMillis(500), Duration.ofSeconds(3), Duration.ofMillis(500))
|
||||
);
|
||||
player.showTitle(title);
|
||||
// Title (если включен)
|
||||
if (plugin.getConfigManager().isAnnouncementTitleEnabled()) {
|
||||
Title title = Title.title(
|
||||
ChatFormatter.parse(plugin.getConfigManager().getAnnouncementTitleHeader()),
|
||||
ChatFormatter.parse(message),
|
||||
Title.Times.times(
|
||||
Duration.ofMillis(500),
|
||||
Duration.ofSeconds(plugin.getConfigManager().getAnnouncementTitleDuration()),
|
||||
Duration.ofMillis(500)
|
||||
)
|
||||
);
|
||||
player.showTitle(title);
|
||||
}
|
||||
}
|
||||
|
||||
plugin.getLogger().info("[ANNOUNCE] " + sender.getName() + ": " + ChatFormatter.stripTags(message));
|
||||
|
|
|
|||
86
src/main/java/com/loki/lochat/commands/ChatColorCommand.java
Normal file
86
src/main/java/com/loki/lochat/commands/ChatColorCommand.java
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
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;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class ChatColorCommand implements CommandExecutor, TabCompleter {
|
||||
|
||||
private final LoChat plugin;
|
||||
|
||||
public ChatColorCommand(LoChat plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
sender.sendMessage("Только для игроков!");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!player.hasPermission("lochat.chatcolor")) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getNoPermission()));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length == 0) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getInvalidUsage("/chatcolor <цвет>")));
|
||||
player.sendMessage(ChatFormatter.parse("<gray>Доступные цвета: <red>red</red>, <blue>blue</blue>, <green>green</green>, <yellow>yellow</yellow>, <gold>gold</gold>, <aqua>aqua</aqua>, <light_purple>light_purple</light_purple>, <white>white</white>, <gray>gray</gray>, <dark_gray>dark_gray</dark_gray>"));
|
||||
return true;
|
||||
}
|
||||
|
||||
String color = args[0].toLowerCase();
|
||||
|
||||
// Проверяем валидность цвета
|
||||
if (!isValidColor(color)) {
|
||||
player.sendMessage(ChatFormatter.parse("<red>Неверный цвет! Используйте один из доступных цветов.</red>"));
|
||||
return true;
|
||||
}
|
||||
|
||||
// Сохраняем цвет чата игрока
|
||||
plugin.getChatColorManager().setChatColor(player.getUniqueId(), color);
|
||||
player.sendMessage(ChatFormatter.parse("<green>Цвет чата установлен на <" + color + ">" + color + "</color>!"));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean isValidColor(String color) {
|
||||
List<String> validColors = Arrays.asList(
|
||||
"red", "blue", "green", "yellow", "gold", "aqua",
|
||||
"light_purple", "white", "gray", "dark_gray", "black",
|
||||
"dark_red", "dark_green", "dark_blue", "dark_aqua", "dark_purple"
|
||||
);
|
||||
return validColors.contains(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
|
||||
if (args.length == 1) {
|
||||
List<String> colors = Arrays.asList(
|
||||
"red", "blue", "green", "yellow", "gold", "aqua",
|
||||
"light_purple", "white", "gray", "dark_gray"
|
||||
);
|
||||
List<String> completions = new ArrayList<>();
|
||||
String input = args[0].toLowerCase();
|
||||
|
||||
for (String color : colors) {
|
||||
if (color.startsWith(input)) {
|
||||
completions.add(color);
|
||||
}
|
||||
}
|
||||
return completions;
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
38
src/main/java/com/loki/lochat/commands/CustomCommand.java
Normal file
38
src/main/java/com/loki/lochat/commands/CustomCommand.java
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
package com.loki.lochat.commands;
|
||||
|
||||
import com.loki.lochat.managers.CustomCommandManager;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class CustomCommand extends Command {
|
||||
|
||||
private final CustomCommandManager manager;
|
||||
|
||||
public CustomCommand(String name, CustomCommandManager manager) {
|
||||
super(name);
|
||||
this.manager = manager;
|
||||
this.setDescription("Кастомная команда LoChat");
|
||||
this.setUsage("/" + name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
sender.sendMessage("Только для игроков!");
|
||||
return true;
|
||||
}
|
||||
|
||||
return manager.executeCustomCommand(commandLabel, player, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException {
|
||||
// Базовое автодополнение - можно расширить при необходимости
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
|
@ -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<>();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue