refactor: generator minigame system (gui + text), fix color codes, holograms, messages, & config

This commit is contained in:
loki5512344 2026-06-14 16:04:25 +02:00
parent 957ab4a5a2
commit 7c7562a8d4
48 changed files with 1628 additions and 733 deletions

View file

@ -1,10 +1,6 @@
package dev.loki.command;
import dev.loki.config.LocationsConfig;
import dev.loki.mdbd;
import dev.loki.util.TextUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
@ -27,13 +23,15 @@ public class DBDAdminCommand implements TabExecutor {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String label, @NotNull String[] args) {
var messages = plugin.getConfigManager().getMessages();
if (!sender.hasPermission("mdbd.admin")) {
sender.sendMessage(Component.text("Нет прав!", NamedTextColor.RED));
sender.sendMessage(messages.get("cmd.no-permission"));
return true;
}
if (!(sender instanceof Player player)) {
sender.sendMessage(Component.text("Только игроки!", NamedTextColor.RED));
sender.sendMessage(messages.get("cmd.players-only"));
return true;
}
@ -64,14 +62,14 @@ public class DBDAdminCommand implements TabExecutor {
case "killer-spawn", "killerspawn" -> listType(player, "Спавн киллера", locations.getKillerSpawns());
case "survivor-spawn", "survivorspawn" -> listType(player, "Спавн выживших", locations.getSurvivorSpawns());
default -> {
player.sendMessage(TextUtil.color("<#FF0000>Неизвестный тип: " + args[1]));
player.sendMessage(plugin.getConfigManager().getMessages().get("dbdadmin.unknown-type", args[1]));
yield true;
}
};
}
// Показать всё
player.sendMessage(TextUtil.color("<#FF6B00>=== Все установленные объекты ==="));
player.sendMessage(plugin.getConfigManager().getMessages().get("dbdadmin-list.header"));
listType(player, "Генераторы", locations.getGenerators());
listType(player, "Крюки", locations.getHooks());
@ -83,24 +81,24 @@ public class DBDAdminCommand implements TabExecutor {
}
private boolean listType(Player player, String label, List<Location> locations) {
var messages = plugin.getConfigManager().getMessages();
if (locations.isEmpty()) {
player.sendMessage(TextUtil.color("<#808000>" + label + ": нет"));
player.sendMessage(messages.get("dbdadmin-list.none", label));
return true;
}
player.sendMessage(TextUtil.color("<#FFD700>" + label + " (" + locations.size() + "):"));
player.sendMessage(messages.get("dbdadmin-list.count", label, locations.size()));
for (int i = 0; i < locations.size(); i++) {
Location loc = locations.get(i);
player.sendMessage(TextUtil.color(String.format(
"<#00CED1> #%d %s [%.1f, %.1f, %.1f]",
player.sendMessage(messages.get("dbdadmin-list.entry",
i + 1, loc.getWorld().getName(), loc.getX(), loc.getY(), loc.getZ()
)));
));
}
return true;
}
private boolean handleWorld(Player player, String[] args) {
if (args.length < 2) {
player.sendMessage(TextUtil.color("<#FF0000>Использование: /dbdadmin world <game|название мира>"));
player.sendMessage(plugin.getConfigManager().getMessages().get("dbdadmin-list.world-usage"));
return true;
}
@ -110,27 +108,28 @@ public class DBDAdminCommand implements TabExecutor {
if (worldArg.equals("game")) {
target = plugin.getLobbyManager().getGameWorld();
if (target == null) {
player.sendMessage(TextUtil.color("<#FF0000>Мир game не загружен!"));
player.sendMessage(plugin.getConfigManager().getMessages().get("dbdadmin-list.world-not-found"));
return true;
}
} else {
target = org.bukkit.Bukkit.getWorld(args[1]);
if (target == null) {
player.sendMessage(TextUtil.color("<#FF0000>Мир не найден: " + args[1]));
player.sendMessage(plugin.getConfigManager().getMessages().get("dbdadmin-list.world-not-exist", args[1]));
return true;
}
}
player.teleport(target.getSpawnLocation());
player.sendMessage(TextUtil.color("<#00FF00>Телепортирован в мир: <#FFD700>" + target.getName()));
player.sendMessage(plugin.getConfigManager().getMessages().get("dbdadmin-list.world-teleport", target.getName()));
return true;
}
private void sendUsage(CommandSender sender) {
sender.sendMessage(TextUtil.color("<#FF6B00>=== DBD Admin ==="));
sender.sendMessage(TextUtil.color("<#FFD700>/dbdadmin list — Список всех объектов"));
sender.sendMessage(TextUtil.color("<#FFD700>/dbdadmin list <тип> — Список по типу"));
sender.sendMessage(TextUtil.color("<#FFD700>/dbdadmin world <game|мир> — Телепорт в мир"));
var messages = plugin.getConfigManager().getMessages();
sender.sendMessage(messages.get("usage.admin-list-header"));
sender.sendMessage(messages.get("usage.admin-list-list"));
sender.sendMessage(messages.get("usage.admin-list-type"));
sender.sendMessage(messages.get("usage.admin-world"));
}
@Override