Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Кликабельный текст какой-то страшный

Dulcha

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
iygiuyg
Попытался я значит реализовать комманду на список имеющихся варпов. И всё хорошо но осталось добавить кликабельный текст типо следующей страницы и предыдущей.
Пытаюсь

private void sendWarpsMessage(CommandSender sender, List<String> warps, int page) {
int start = (page - 1) * 15;
int end = Math.min(start + 15, warps.size());
String message = ChatColor.GOLD + "Page " + page + ChatColor.WHITE + ":\n";
for (int i = start; i < end; i++) {
message += (i + 1) + ". " + warps.get(i) + ChatColor.GRAY + " (" + (warpConfig.contains(warps.get(i)) ? warpConfig.getString(warps.get(i) + ".Creator") : "CONSOLE") + ")\n";
}
if (page > 1) {
TextComponent previousPage = new TextComponent("<<");
previousPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/warps " + (page - 1)));
previousPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText("Go to previous page")));
message += "\n" + previousPage;
} else {
TextComponent previousPage = new TextComponent("<<");
previousPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/warps " + (page + 1)));
previousPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText("This is the first page")));
message += "\n" + previousPage;
}
sender.sendMessage(message);
}
private List<String> getWarps() {
List<String> warps = new ArrayList<>();
warps.addAll(systemWarpConfig.getConfigurationSection("").getKeys(false));
warps.addAll(warpConfig.getConfigurationSection("").getKeys(false));
return warps;
}


if (cmd.getName().equalsIgnoreCase("warps")) {
if (args.length > 0 && args[0].matches("\\d+")) {
int page = Integer.parseInt(args[0]);
List<String> warps = getWarps();
int pages = (int) Math.ceil(warps.size() / 15D);
if (page > 0 && page <= pages) {
sendWarpsMessage(sender, warps, page);
} else {
sender.sendMessage(ChatColor.RED + "Invalid page number. Please enter a number between 1 and " + pages + ".");
}
} else {
List<String> warps = getWarps();
int pages = (int) Math.ceil(warps.size() / 15D);
if (pages > 0) {
sendWarpsMessage(sender, warps, 1);
} else {
sender.sendMessage(ChatColor.RED + "No warps found.");
}
}
return true;
В итоге почему-то выводит очень странный текст


> warps
[23:07:48 INFO]: Page 1:
1. gg (nickname)

TextComponent{text=<<, BaseComponent(color=, font=null, bold=null, italic=null, underlined=null, strikethrough=null, obfuscated=null, insertion=null, extra=null, clickEvent=ClickEvent(action=RUN_COMMAND, value=/warps 2), hoverEvent=HoverEvent(action=SHOW_TEXT, contents=[Text(value=[Lnet.md_5.bungee.api.chat.BaseComponent;@1d5bfe7d)], legacy=true))}
Причём не только если использовать в консоли но и у игрока. В чём прикол я так и не понял.
 
sender.sendMessage(message) -> sender.spigot().sendMessage(message)
Уместным советом тут будет мигрировать на Adventure + MiniMessage, если возможно.
Информация о нативной поддержке Adventure в ядрах: https://docs.advntr.dev/platform/native.html
 
Сто лет как придумали kyori Adventure API, люди до сих пор используют компоненты банжи..
Поэтому согласен с комментатором выше, мигрируй на adventure
 

Поделиться этой страницей

Назад
Верх