Skip to content
MJP
/ NMS 多版本適配器

NMS · NMS 橋接

NMS 多版本適配器

抽象 Adapter 介面搭配版本特定實作與 runtime dispatch,讓同一 plugin 支援多個 Paper 26.x 版本。

NMS已發布v1.0.0nms-version-adapter更新於 2026年4月19日

觸發關鍵字

version adapter版本適配器multi-version多版本相容adapter pattern NMS

NMS Version Adapter

目的

建立抽象 Adapter 介面定義共通 NMS 操作,為每個支援的 MC 版本提供具體實作,runtime 時根據伺服器版本自動選擇。


平台需求

  • Paper 1.21.11 / 26.x(adapter 範例以 26.2 / 26.3 示範)
  • 建議搭配 multi-module Gradle build(每個版本各自 module 使用 Paperweight 編譯)

產生的代碼

NmsAdapter.java(介面)

public interface NmsAdapter {
    NmsVersion version();
    void sendActionBar(Player player, Component message);
    int getLatency(Player player);
    void spawnParticleClient(Location loc, String particleKey, int count);
}

AdapterRegistry.java

// 啟動時注冊各版本 adapter
AdapterRegistry.register(new V26_2_Adapter());
AdapterRegistry.register(new V26_3_Adapter());
AdapterRegistry.initialize(); // 自動偵測版本並選擇

// 使用(版本無關)
AdapterRegistry.get().sendActionBar(player, Component.text("歡迎!"));

NmsVersion.java

public enum NmsVersion {
    V26_1, V26_2, V26_3, UNSUPPORTED;

    public static NmsVersion detect() {
        String[] parts = Bukkit.getMinecraftVersion().split("\\."); // "26.2"、"26.1.2"
        return switch (parts[0] + "." + parts[1]) {
            case "26.1" -> V26_1;
            case "26.2" -> V26_2;
            case "26.3" -> V26_3;
            default -> UNSUPPORTED;
        };
    }
}

Multi-module Gradle 結構

my-plugin/
├── core/           # NmsAdapter 介面(只依賴 paper-api)
├── adapter-v26_2/  # Paper 26.2 dev bundle 編譯
├── adapter-v26_3/# Paper 26.3 dev bundle 編譯
└── plugin/         # shadowJar 整合打包