1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Dulcha, 14 апр 2024.

  1. Автор темы
    Dulcha

    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))}
    Причём не только если использовать в консоли но и у игрока. В чём прикол я так и не понял.
     
  2. FeniksDEV

    FeniksDEV Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
    sender.sendMessage(message) -> sender.spigot().sendMessage(message)
    Уместным советом тут будет мигрировать на Adventure + MiniMessage, если возможно.
    Информация о нативной поддержке Adventure в ядрах: https://docs.advntr.dev/platform/native.html
     
  3. OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Сто лет как придумали kyori Adventure API, люди до сих пор используют компоненты банжи..
    Поэтому согласен с комментатором выше, мигрируй на adventure
     

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