Хотя Minecraft приветствует различные плагины (которые вы можете использовать для изменения игрового процесса), некоторые элементы игры защищены от манипуляций с плагинами. Net.Minecraft.Server (NMS) — один из таких защищенных пакетов, так как он содержит жизненно важный серверный код для игры. Этот код получен непосредственно от разработчиков Minecraft, Mojang, и не должен быть доступен игрокам.
< р>С помощью Bukkit игроки могут создать слой абстракции вокруг кода NMS. Это позволяет им разрабатывать подключаемые модули, которые взаимодействуют с кодом сервера, не внося прямых изменений в кодовую базу, которая необходима для игры. Думайте об этом как об окне, которое позволяет вам просматривать код, который вы хотите использовать в своем плагине, но также действует как барьер, который не позволяет вам напрямую изменять код.
Давайте рассмотрим, как использовать Bukkit. с NMS Minecraft.
Перед тем, как начать – Что нужно знать о Bukkit
Bukkit — это API, который позволяет вам создавать и использовать плагины, изменяющие ваш опыт многопользовательской игры в Minecraft. По крайней мере, так было. Последняя версия Bukkit вышла в 2016 году, и с тех пор ее выпуск был прекращен, чтобы уступить место другому API под названием Spigot. Работает аналогично Bukkit, но обеспечивает более высокую производительность сервера.
Таким образом, использование Bukkit для ваших плагинов требует, чтобы вы играли в устаревшую версию Minecraft и принимали тот факт, что Bukkit не так хорош, как заменяющий его API. Предполагая, что вы готовы принять эти жертвы, вот все, что вам нужно:

- Java Development Kit (JDK) 7 или более поздней версии, причем наиболее рекомендуется JDK 8.
С этим вы готовы создавать некоторые плагины.
Как создавать плагины Bukkit для Minecraft

Прежде чем вы сможете начать использовать Bukkit для доступа к NMS Minecraft, вам необходимо добавить API в качестве зависимости, установить основной класс, который позволяет Bukkit взаимодействовать с созданным вами плагином, и предоставить Bukkit информацию, необходимую для загрузки вашего плагина. в игру. Каждый шаг требует написания кода, а приведенные ниже примеры взяты из Учебника RIP.
Шаг 1 – Добавить Bukkit в качестве зависимости
Раньше вы могли добавить Bukkit в качестве зависимости в Minecraft, загрузив файл Bukkit.jar из репозитория Bukkit и добавив его в путь к классам вашего проекта. Этот вариант больше недоступен, потому что репозиторий больше не доступен.
К счастью, есть альтернативный метод, использующий файл pom.xml вашей игры. Откройте файл и добавьте следующие строки:
<репозитории> <репозиторий> <id>spigot-repo</id> <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url> </репозиторий> </репозитории> <зависимости> <!—Bukkit API—> <зависимость> <groupId>org.bukkit</groupId> <artifactId>буккит</artifactId> <версия>{ВЕРСИЯ}</версия> <scope>при условии</scope> </зависимость> </зависимости>
Шаг 2 – Создайте основной класс своего плагина
Ваш подключаемый модуль должен иметь возможность создавать единственный экземпляр своего основного класса, который используется для расширения “JavaPlugin” чтобы он распознавал и позволял вам использовать плагин, когда вы находитесь в игре. Думайте об этом основном классе как о двери, через которую Bukkit может войти, чтобы загрузить плагин и управлять им. Большинство из них дают основному классу своего плагина то же имя, что и сам плагин, что упрощает обращение к основному классу при кодировании.
В следующем примере кода из RIP Tutorial предлагается пример основного класса для подключаемый модуль “MyPlugin:”
пакет com.example.myplugin; //{$TopLevelDomain}.{$Domain}.{$PluginName}; импортировать org.bukkit.plugin.java.JavaPlugin; public final class MyPlugin extends JavaPlugin { @Override public void onEnable() { //Вызывается при включении плагина getLogger().info(«onEnable был вызван!»); } @Override public void onDisable() { //Вызывается, когда плагин отключен getLogger().info(«onDisable был вызван!»); } }
Доступ к вашему плагину из другого класса
Вы можете получить доступ к своему плагину через класс, отличный от основного класса, который вы для него создаете, что может быть полезно для доступа к нескольким плагинам в одной игре Minecraft.
Для этого вам нужно сначала сохранить экземпляр основного класса, который вы создали с помощью Bukkit, чтобы другие классы могли получить к нему доступ. Опять же, следующий пример кода взят из RIP Tutorial и использует “MyPlugin” имя класса:
открытый класс MyPlugin расширяет JavaPlugin { частный статический экземпляр MyPlugin; //Фактически конечная переменная, содержащая экземпляр вашего плагина public MyPlugin(){ if(MyPlugin.instance != null) { //Ненужная проверка, но гарантирует, что ваш плагин инициализируется только один раз. throw new Error(«Плагин уже инициализирован!»); } MyPlugin.instance = это; //Конструктор плагина должен вызываться только один раз } public static MyPlugin getInstance(){ //Получить экземпляр вашего плагина return instance; } //ваш другой код… }
После того, как у вас есть экземпляр, вы можете получить доступ к своему основному классу (созданному с помощью Bukkit) с помощью “getInstance()” команда. Вот пример использования RIP Tutorial “MyPlugin” основной класс:
открытый класс MyOtherClass { public void doSomethingWithMainClass(){ MyPlugin.getInstance().getLogger().info(«Мы только что использовали MyPlugin»); } }
Шаг 3 – Создайте свой файл plugin.yml
Файл plugin.yml содержит важную информацию о вашем подключаемом модуле, то есть он служит основным файлом конфигурации подключаемого модуля. Без этого файла у Bukkit не будет информации, необходимой для загрузки вашего плагина в Minecraft, что приведет к сбою загрузки плагина и вероятному сбою игры.
Этот файл должен содержать следующие сведения:
- Имя – Это имя, которое вы дали своему подключаемому модулю (например, RIP Tutorial “MyPlugin”), и оно будет отображаться в сообщениях журнала и списке ваших подключаемых модулей.
- Версия – Используйте это поле для обозначения истории версий подключаемого модуля, начиная с 1.0.0 и повышаясь по мере изменения или редактирования подключаемого модуля.
- Главная– Содержит имя основного класса подключаемого модуля, который расширяет “JavaPlugin”, позволяя Bukkit входить в подключаемый модуль. В примере RIP Tutorial это имя будет “package com.example.myplugin,” который вы можете увидеть в коде основного класса выше.
- Описание – Основное описание того, что делает ваш плагин.
- Автор– У вас может быть один автор или несколько авторов, последние обозначаются квадратными скобками и запятыми следующим образом – [Автор1, Автор2, Автор3].
- Соавторы – Вы будете использовать этот раздел, чтобы отметить всех, кто внес свой вклад в ваш подключаемый модуль, при этом форматирование будет таким же, как и для “Authors” раздел.
- Веб-сайт – Если у вас есть веб-сайт для подключения или вы хотите связать людей со страницей плагина или репозиторием GitHub, вы можете ввести URL-адрес здесь.
- API-Version
- API-Versionсильный>– Введите здесь версию Bukkit API, которую вы используете. Если вы не укажете версию API, Minecraft будет считать, что загружается устаревший плагин. Плагин может по-прежнему работать, хотя вы увидите предупреждение о том, что это устаревшая версия, напечатанная в вашей консоли при загрузке.
Ниже приведен пример файла plugin.yml на основе соглашения об именах, используемые в коде RIP Tutorial, используемом в этой статье:
название: MyPlugin версия: 1.0.0 основной: пакет com.example.myplugin описание: тестовый плагин для Minecraft автор: RIP Tutorial веб-сайт: https://riptutorial.com/bukkit версия API: 1.17
Подходит ли Bukkit для Доступ и использование NMS?
При этом вы создали зависимость Bukkit, построили основной класс, который служит дверью Bukkit в плагин, и у вас есть файл plugin.yml, который Bukkit может использовать для посмотрите, что делает плагин. Однако вы можете не захотеть этого делать, так как Bukkit настолько устарел, что вам нужно будет запустить очень старую версию Minecraft, чтобы использовать его эффективно. Большинство из них уже перешли на Sprigot, который во многом повторяет то, что сделал Bukkit, но предлагает более высокую производительность.
Если вы все еще хотите использовать Bukkit для доступа к плагинам, почему вы выбрали его, а не более современные API? Какие плагины вы используете для улучшения вашего опыта в Minecraft? Расскажите нам об этом в разделе комментариев ниже.