nms-reflection-bridgelisted
Install: claude install-skill MrPippi/MJP-Claude-Skills
# NMS Reflection Bridge / NMS 反射橋接器
## 技能名稱 / Skill Name
`nms-reflection-bridge`
## 目的 / Purpose
提供**不依賴 Paperweight userdev** 的 NMS 存取方式,透過 Java reflection + 快取 Method/Field handle,使同一 JAR 可在多個 NMS 版本執行(例如 1.21、1.21.1、1.21.3)。
> 若專案只需單一版本,請使用 Paperweight 的原生 API(`nms-packet-sender` 等)更簡潔。本技能適用於跨版本分發場景。
## NMS 版本需求 / NMS Version Requirements
- Paper 1.20.5+(原生使用 Mojang mappings)
- 不需 Paperweight 編譯依賴
- 僅需 `org.spigotmc:spigot-api` 或 `io.papermc.paper:paper-api`
## 觸發條件 / Triggers
- 「reflection bridge」「反射橋接」「NMS reflection」
- 「跨版本 NMS」「cross-version」「版本無關」
- 「避開 Paperweight」「no paperweight」
## 輸入參數 / Inputs
| 參數 | 範例 | 說明 |
|------|------|------|
| `package_name` | `com.example.nms` | 產出類別所在 package |
| `bridge_class_name` | `NmsBridge` | 核心反射類 |
| `cache_enabled` | `true` | 是否快取 Method handle |
## 輸出產物 / Outputs
- `NmsBridge.java` — 反射工具核心(含 Method 快取)
- `NmsClasses.java` — NMS 類別名稱常數
- `MethodHandleCache.java` — `java.lang.invoke.MethodHandle` 快取機制
## 代碼範本 / Code Template
### `NmsClasses.java`
```java
package com.example.nms;
/**
* Mojang-mapped NMS 類別全名常數。
* Paper 1.20.5+ runtime 原生使用這些名稱,無需 remap。
*/
public final class NmsClasses {
private NmsClasses() {}
public static final String SERVER_PLAYER = "net.minecraft.server.level.ServerPlayer";
public static final String SERVER_LEVEL = "net.minecraft.server.level.ServerLevel";
public static final String SERVER_GAME_PACKET_LISTENER =
"net.minecraft.server.network.ServerGamePacketListe