nms-packet-interceptorlisted
Install: claude install-skill MrPippi/MJP-Claude-Skills
# NMS Packet Interceptor / NMS 封包攔截器
## 技能名稱 / Skill Name
`nms-packet-interceptor`
## 目的 / Purpose
在玩家的 Netty 連線管線中注入自訂 `ChannelDuplexHandler`,於封包進入/離開伺服器時進行讀取、修改或取消。常用於反外掛、封包記錄、自訂通訊協議、偽造資訊等場景。
## NMS 版本需求 / NMS Version Requirements
- Paper 1.21 – 1.21.3
- Paperweight userdev 1.7.2+
- Netty 4.x(Paper 內建)
## 觸發條件 / Triggers
- 「封包攔截」「packet intercept」「netty pipeline」
- 「channel handler」「封包監聽」「修改封包」
- 「packet listener」「anti-cheat packet」
## 輸入參數 / Inputs
| 參數 | 範例 | 說明 |
|------|------|------|
| `package_name` | `com.example.network` | ���出類別所在 package |
| `handler_name` | `PacketInterceptor` | Handler 類別名稱 |
| `manager_name` | `InterceptorManager` | 管理器類別名稱 |
| `handler_id` | `myplugin_interceptor` | Netty pipeline 中的 handler 名稱(須唯一) |
## 輸出產物 / Outputs
- `PacketInterceptor.java` — `ChannelDuplexHandler` 實作
- `InterceptorManager.java` — 監聽 Join/Quit 事件管理注入/移除
- `InterceptorListener.java` — Bukkit 事件監聽器
## Paperweight 建置設定 / Build Setup
參見 `Skills/paper-nms/PLATFORM.md`。Netty 隨 Paper 提供,無需額外依賴。
## 代碼範本 / Code Template
### `PacketInterceptor.java`
```java
package com.example.network;
import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPromise;
import net.minecraft.network.protocol.Packet;
import org.bukkit.entity.Player;
import java.util.UUID;
import java.util.function.BiFunction;
@SuppressWarnings("UnstableApiUsage")
public final class PacketInterceptor extends ChannelDuplexHandler {