link1107 / DonationExecutor

Плагин для ру-стримеров, генерирующий события на сервере Minecraft (Spigot/Paper) на основании донатов с "Donation Alerts"
GNU Affero General Public License v3.0
218 stars 22 forks source link

Использование Chat Component API #42

Open TheDearbear opened 2 years ago

TheDearbear commented 2 years ago

Во многих выводимых игроку сообщениях лучше использовать Chat Component API из Spigot/BungeeCord. Там проще стилизировать текст и можно добавлять эвенты (при нажатии на определённое слово или по наведению показывать подсказку) Например можно заменить "для отображения кастомных скинов плагина на вашем\nклиенте игры должен быть установлен мод §bOptiFine.\n \n§fЕсли у вас не установлен данный мод, скачать его вы\nможете по ссылке: §b§nhttps://optifine.net/downloads\n\n§7§oДанное оповещение можно отключить в файле настроек\nплагина в папке сервера /plugins/DonationExecutor/\n \n" на

new ComponentBuilder("Для отображения кастомных скинов плагина на вашем клиенте игры должен быть установлен мод ")
    .append("OptiFine").color(ChatColor.AQUA).underlined(true)
    .event(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://optifine.net/downloads"))
    .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Перейти на сайт OptiFine"))
    .append(".\n\n")
    .append("Данное оповещение можно отключить в ").color(ChatColor.GRAY)
    .append("файле настроек плагина").color(ChatColor.AQUA)
    .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Файл config.yml в папке сервера /plugins/DonationExecutor/"))
    .append("\n\n");

В моём примере при наведении на OptiFine появится текст-подсказка Перейти на сайт OptiFine, а при нажатии майнкрафт попытается открыть сайт оптифайна. При наведении на файле настроек плагина появится текст-подсказка Файл config.yml в папке сервера /plugins/DonationExecutor/

Для отправки этой лабуды игроку можно использовать код приведённый ниже, использованная функция

import org.bukkit.entity.Player;
import net.md_5.bungee.api.chat.ComponentBuilder;

ComponentBuilder builder = new ComponentBuilder("asdasdasdasd");
Player player = /* Псевдопеременная */;
player.spigot().sendMessage(builder.create());

Jar файл сервера Spigot по умолчанию должен иметь в себе BungeeCord Chat API. Про Paper незнаю.

andreypfau commented 2 years ago

Chat Component API устарел, сейчас вместо него активно используется Adventure