MiniMessage уже давно стал чуть ли не стандартом форматирования текста. И не удивительно: удобночитаемый формат с кучей фишек - что ещё нужно для счастья? Но поскольку очень много игроков и серверов (а в следствие ещё и разработчиков) сидят на старых версиях типа 1.16.5. И поэтому у некоторых возникают трудности с его подключением. Настало время исправить эту ситуацию и сгородить свой костылесипед!
По факту это будет почти пересказ
1. Настраиваем файл сборки (build.gradle или build.gradle.kts) - подключаем Gradle Shadow Plugin если такового нет, библиотеки и настраиваем шейдинг библиотек.
ВАЖНО: проверяйте последние версии библиотек самостоятельно!
Подключаем сам плагин:
И библиотеки:
Настраиваем Gradle Shade Plugin:
2. Добавляем в Main-класс объект BukkitAudiences
3. Теперь создадим класс, например, для слушателя события входа и попробуем отправить игроку сообщение в MiniMessage
И подключим слушатель JoinListener в Main-классе:
4. Собираем наш плагин кнопкой сборки в IDE или командой
Готово!
Теперь возвращаемся к нашему Spigot версии 1.8.8, закидываем плагин в папку plugins и запускаем сервер. После чего заходим на него и видим следующий результат:
Наш плагин отлично функционирует, вставляет свои плейсхолдеры и форматирует текст! Градиент на 1.8, к сожалению, не отображается во всей своей красе - поддержку шестнадцатиричных цветов добавили только в 1.16.
Вот так с помощью нехитрых приспособлений буханку белого (или чёрного) хлеба можно превратить в троллейбус... но зачем?!
А я надеюсь что теперь никто не скажет что MiniMessage это сложно и приглянется к данному прекрасному формату
Вам необходимо зарегистрироваться для просмотра изображений-вложений
По факту это будет почти пересказ
Авторизуйтесь для просмотра ссылок.
, которую почему-то далеко не все смогли прочитать. И так, начнём с теоретического описания задачи.Дано:
Сервер на Spigot 1.8.8
Сборщик Gradle (чтобы зашейдить библиотеку в JAR файл с помощью Gradle Shadow Plugin; для ценителей Maven имеется аналогичный Maven Shade Plugin)
Сборщик Gradle (чтобы зашейдить библиотеку в JAR файл с помощью Gradle Shadow Plugin; для ценителей Maven имеется аналогичный Maven Shade Plugin)
А теперь приступим:
1. Настраиваем файл сборки (build.gradle или build.gradle.kts) - подключаем Gradle Shadow Plugin если такового нет, библиотеки и настраиваем шейдинг библиотек.
ВАЖНО: проверяйте последние версии библиотек самостоятельно!
Подключаем сам плагин:
Код:
plugins {
id 'java'
id 'com.gradleup.shadow' version '8.3.9'
}
И библиотеки:
Код:
repositories {
mavenCentral()
maven {
name = "spigotmc-repo"
url = "https://hub.spigotmc.org/nexus/content/repositories/snapshots/"
}
maven {
name = "sonatype"
url = "https://oss.sonatype.org/content/groups/public/"
}
}
dependencies {
compileOnly "org.spigotmc:spigot-api:1.8.8-R0.1-SNAPSHOT"
implementation "net.kyori:adventure-text-minimessage:4.24.0"
implementation "net.kyori:adventure-platform-bukkit:4.4.1"
}
Настраиваем Gradle Shade Plugin:
Код:
shadowJar {
archiveClassifier.set('')
mergeServiceFiles()
configurations = [project.configurations.runtimeClasspath]
}
tasks.build {
dependsOn shadowJar
}
2. Добавляем в Main-класс объект BukkitAudiences
Java:
public final class MiniMessageTest extends JavaPlugin {
// сам объект
private BukkitAudiences adventure;
// метод-геттер
public @NonNull BukkitAudiences getAdventure() {
if (this.adventure == null) {
throw new IllegalStateException("Tried to access Adventure when the plugin was disabled!");
}
return this.adventure;
}
@Override
public void onEnable() {
// инициализация объекта
this.adventure = BukkitAudiences.create(this);
// ...
}
@Override
public void onDisable() {
if (this.adventure != null) {
this.adventure.close();
this.adventure = null;
}
// ...
}
}
3. Теперь создадим класс, например, для слушателя события входа и попробуем отправить игроку сообщение в MiniMessage
Java:
public class JoinListener implements Listener {
private final MiniMessageTest plugin;
// синглтоны зло кстати
public JoinListener(MiniMessageTest plugin) {
this.plugin = plugin;
}
// а ещё по хорошему надо игнорировать отменённые события
@EventHandler(ignoreCancelled = true)
void onJoin(PlayerJoinEvent event) {
BukkitAudiences bukkitAudiences = plugin.getAdventure();
Player player = event.getPlayer();
// этот кусок кода вообще нужно вытащить в конфиг, но это как-нибудь потом
String message = "<white>Привет, <red><player_name></red>! <rainbow>Добро пожаловать на сервер!";
Component component = MiniMessage.miniMessage().deserialize(
message,
Placeholder.unparsed("player_name", player.getName()) // заменялка плейсхолдера в тексте
);
// передаём получателя и отправляем сообщение в component
bukkitAudiences.sender(player).sendMessage(component);
}
}
И подключим слушатель JoinListener в Main-классе:
Java:
@Override
public void onEnable() {
this.adventure = BukkitAudiences.create(this);
// регистрируем наш обработчик входа
this.getServer().getPluginManager().registerEvents(new JoinListener(this), this);
}
4. Собираем наш плагин кнопкой сборки в IDE или командой
Bash:
./gradlew build
Готово!
Проверка
Теперь возвращаемся к нашему Spigot версии 1.8.8, закидываем плагин в папку plugins и запускаем сервер. После чего заходим на него и видим следующий результат:
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Наш плагин отлично функционирует, вставляет свои плейсхолдеры и форматирует текст! Градиент на 1.8, к сожалению, не отображается во всей своей красе - поддержку шестнадцатиричных цветов добавили только в 1.16.
Мораль
Вот так с помощью нехитрых приспособлений буханку белого (или чёрного) хлеба можно превратить в троллейбус... но зачем?!
Вам необходимо зарегистрироваться для просмотра изображений-вложений
А я надеюсь что теперь никто не скажет что MiniMessage это сложно и приглянется к данному прекрасному формату
Последнее редактирование: