К содержанию

Разработка плагинов

paper-api.jar внутри процесса, события Paper и планировщики Folia.

Открыть на GitHubОбновлено 2026-11-11

Как это работает

Сервер поднимает JVM через JNI прямо внутри процесса chunkwake. В classpath лежит официальный paper-api.jar и наша реализация поведения — api-impl. Плагин видит Bukkit.getServer(), JavaPlugin, события и планировщики так же, как на Paper.

Если на событие нет слушателей, Rust не отправляет его в JVM. Поэтому цена неиспользуемых событий близка к нулю.

plugin.yml

name: HelloPlugin
version: 1.0.0
main: dev.chunkwake.hello.HelloPlugin
api-version: "26.3"

Поддерживаются plugin.yml и paper-plugin.yml, включая libraries: из Maven, loader и bootstrapper.

События

public final class HelloPlugin extends JavaPlugin {
  @Override
  public void onEnable() {
    getServer().getPluginManager().registerEvents(new Listener() {
      @EventHandler(priority = EventPriority.NORMAL)
      public void onJoin(PlayerJoinEvent event) {
        event.getPlayer().sendMessage("chunkwake is awake");
      }
    }, this);
  }
}

Порядок Bukkit/Paper событий сохраняется, включая отмену и подмену данных. Событие, которое в Paper стреляет после механики, здесь тоже стреляет после неё.

Планировщики Folia

Для всех плагинов работают:

  • GlobalRegionScheduler;
  • RegionScheduler;
  • AsyncScheduler;
  • EntityScheduler.

Обычные плагины при этом не отключаются, как в Folia. Плагины с folia-supported: true дополнительно получают модель регионов.

Данные и реестры

Доступны PersistentDataContainer, Metadatable, реестры, теги, атрибуты и каналы плагинов. Ванильные классы net.minecraft.* лежат в classpath для плагинов, которым нужен NMS.

Граница совместимости. Плагины, которые лезут во внутренности CraftBukkit, Netty или ServerLevel, могут работать не полностью. Полностью повторить Java-сервер без Java-сервера нельзя, и это не обещается.

Отладка

  • chunkwake doctor --dir ./server проверяет Java и конфигурацию.
  • Логи JVM и моста пишутся в общий лог сервера.
  • java/test-plugin в репозитории — живой плагин для проверки событий.
  • Исходники реализации: java/api-impl и crates/bridge.

На этой странице