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

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

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);
            }
        }
 
Давно придумали и приняли за стандарт Adventure и MiniMessage, рекомендуется к ознакомлению, чтобы не изобретать велосипед из раза в раз.
 
Давно придумали и приняли за стандарт Adventure и MiniMessage, рекомендуется к ознакомлению, чтобы не изобретать велосипед из раза в раз.
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
 
MiniMessages только с 1.18.2 версии, я пишу плагин на 1.16.5
Нативная поддержка Adventure присутствует в Paper с версии 1.16.5 (а именно с билда 473). Даже если нативной поддержки в ядре нет, то его можно подключить к проекту как зависимость и использовать, следуя документации.
в конфиге какой бы тип hex не был указан, в чате он отображается так:
Так форматируется то он ровно теми же методами, что и в предыдущем варианте. Код с использованием 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.
 
Последнее редактирование:
Нативная поддержка 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.
Всегда когда пытаюсь использовать 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
 
Всегда когда пытаюсь использовать minimessage в консоли появляется это:
При компиляции нужно шейдить зависимости в .jar.
Если используется Maven, то у соответствующих зависимостей нужно указать <scope>compile</scope> и, крайне желательно, сделать relocation этих зависимостей – информацию об этом можно найти в интернете.
 

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

Назад
Верх