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

Помогите Не работает Hex

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

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

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

    Баллы:
    66
    Нужно чтобы в stream.msg можно было добавить hex цвета, но вместо этого в чате появляется каша из обычных майнкрафт цветов.

    Код:
    for (String stream : config.getStringList("stream.msg")) {
                for (Player all : Bukkit.getOnlinePlayers()) {
                    TextComponent button = new TextComponent(ColorUtil.color(stream.replace("*player*", me.getName()).replace("*channel_name*", strings[0])));
                            button.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, (new ComponentBuilder("&7Нажмите чтобы перейти".replace("&", "§"))).create()));
                    button.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, strings[1]));
                    Location loc = all.getLocation();
                    all.spigot().sendMessage(button);
                    all.sendTitle(ColorUtil.color(config.getString("stream.up-title")).replace("*player*", me.getName()), ColorUtil.color(config.getString("stream.down-title")));
                    if (config.getBoolean("stream.sound"))
                        all.playSound(loc, Sound.BLOCK_BEACON_ACTIVATE, 1.0F, 1.0F);
                }
            }
     
  2. FeniksDEV

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

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
    Давно придумали и приняли за стандарт Adventure и MiniMessage, рекомендуется к ознакомлению, чтобы не изобретать велосипед из раза в раз.
     
  3. Автор темы
    QuodLitee

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

    Баллы:
    66
    MiniMessages только с 1.18.2 версии, я пишу плагин на 1.16.5. Я изменил код на Adventure, но ошибка та же

    Код:
    for (String stream : config.getStringList("stream.msg")) {
                for (Player all : Bukkit.getOnlinePlayers()) {
                    String replacedStream = ColorUtil.color(stream
                            .replace("*player*", me.getName())
                            .replace("*channel_name*", strings[0]));
                    all.sendMessage(Component
                            .text(replacedStream)
                            .clickEvent(net.kyori.adventure.text.event.ClickEvent.openUrl(strings[1]))
                            .hoverEvent(net.kyori.adventure.text.event.HoverEvent.showText(Component.text("§7Нажмите чтобы перейти"))));
                    Location loc = all.getLocation();
                    all.sendTitle(ColorUtil.color(config.getString("stream.up-title")).replace("player", me.getName()), ColorUtil.color(config.getString("stream.down-title")));
                    if (config.getBoolean("stream.sound"))
                        all.playSound(loc, Sound.BLOCK_BEACON_ACTIVATE, 1.0F, 1.0F);
                }
            }
    в конфиге какой бы тип hex не был указан, в чате он отображается так:
    upload_2024-3-20_18-34-14.png
     
  4. FeniksDEV

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

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
    Нативная поддержка Adventure присутствует в Paper с версии 1.16.5 (а именно с билда 473). Даже если нативной поддержки в ядре нет, то его можно подключить к проекту как зависимость и использовать, следуя документации.
    Так форматируется то он ровно теми же методами, что и в предыдущем варианте. Код с использованием Adventure бы выглядел совершенно иначе и чище (код написан на коленке и подходит для случая, когда ядро имеет нативную поддержку):
    Код:
    private static final MiniMessage MM = MiniMessage.miniMessage();
    
    final Audience players = Audience.audience(Bukkit.getOnlinePlayers());
    for (String stream : config.getStringList("stream.msg")) {
      players.sendMessage(MM.deserialize(
        stream,
        Placeholder.unparsed("player", me.getName()),
        Placeholder.unparsed("channel_name", strings[0])
      ));
    
      final Title title = Title.title(
        MM.deserialize(config.getString("stream.up-title"), Placeholder.unparsed("player", me.getName())),
        MM.deserialize(config.getString("stream.down-title"))
      );
      players.showTitle(title);
    
      if (config.getBoolean("stream.sound"))
        players.playSound(Sound.sound(Key.key("block.beacon.activate"), Sound.Source.MASTER, 1, 1));
    }
    Все остальные штуки по типу HoverEvent и ClickEvent можно указывать прямо в сообщении, следуя документации MiniMessage.
     
    Последнее редактирование: 20 мар 2024
  5. Автор темы
    QuodLitee

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

    Баллы:
    66
    Всегда когда пытаюсь использовать minimessage в консоли появляется это:
    Код:
    [00:51:40 ERROR]: Error occurred while enabling xgmfYoutube v1.0-SNAPSHOT (Is it up to date?)
    java.lang.NoClassDefFoundError: net/kyori/adventure/text/minimessage/tag/resolver/TagResolver
            at ru.xgmfyoutube.XgmfYoutube.onEnable(XgmfYoutube.java:26) ~[?:?]
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.5.jar:git-Paper-794]
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[patched_1.16.5.jar:git-Paper-794]
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) ~[patched_1.16.5.jar:git-Paper-794]
            at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:518) ~[patched_1.16.5.jar:git-Paper-794]
            at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:432) ~[patched_1.16.5.jar:git-Paper-794]
            at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:599) ~[patched_1.16.5.jar:git-Paper-794]
            at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:298) ~[patched_1.16.5.jar:git-Paper-794]
            at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1074) ~[patched_1.16.5.jar:git-Paper-794]
            at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-794]
            at java.lang.Thread.run(Thread.java:842) [?:?]
    Caused by: java.lang.ClassNotFoundException: net.kyori.adventure.text.minimessage.tag.resolver.TagResolver
            at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:155) ~[patched_1.16.5.jar:git-Paper-794]
            at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:114) ~[patched_1.16.5.jar:git-Paper-794]
            at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
            ... 11 more
    [00:51:40 INFO]: [xgmfYoutube] Disabling xgmfYoutube v1.0-SNAPSHOT
     
  6. FeniksDEV

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

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
    При компиляции нужно шейдить зависимости в .jar.
    Если используется Maven, то у соответствующих зависимостей нужно указать <scope>compile</scope> и, крайне желательно, сделать relocation этих зависимостей – информацию об этом можно найти в интернете.
     

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