nms-block-entitylisted
Install: claude install-skill MrPippi/MJP-Claude-Skills
# NMS Block Entity / NMS 自定義方塊實體
## 技能名稱 / Skill Name
`nms-block-entity`
## 目的 / Purpose
繼承 NMS `BlockEntity` 實作自定義方塊實體,實現 NBT 讀寫、伺服器端 Tick 邏輯(`BlockEntityTicker`)、以及透過封包同步狀態至客戶端。
## NMS 版本需求 / NMS Version Requirements
- Paper 1.21 – 1.21.3
- Paperweight userdev 1.7.2+
- Mojang mappings(已由 Paper 1.20.5+ 原生支援)
## 觸發條件 / Triggers
- 「BlockEntity」「TileEntity」「自定義方塊實體」「block entity」「tile entity」
- 「方塊 tick」「block tick」「BlockEntityTicker」「方塊 NBT」「block nbt」
- 「自定義方塊 NMS」「custom block nms」
## 輸入參數 / Inputs
| 參數 | 範例 | 說明 |
|------|------|------|
| `package_name` | `com.example.block` | 產出類別所在 package |
| `entity_class_name` | `GeneratorBlockEntity` | BlockEntity 子類名 |
| `has_ticker` | `true` | 是否需要 tick 邏輯 |
| `base_block` | `CHEST` | 用哪個 NMS 方塊作為載體 |
## 輸出產物 / Outputs
- `CustomBlockEntity.java` — BlockEntity 實作(含 NBT load/save)
- `CustomBlockEntityTicker.java`(選)— ServerLevel tick 邏輯
- `BlockEntityHelper.java` — 在世界中取得/設定 BlockEntity 工具
## Paperweight 建置設定 / Build Setup
參見 `Skills/paper-nms/PLATFORM.md`。關鍵依賴:
```groovy
dependencies {
paperweight.paperDevBundle('1.21.1-R0.1-SNAPSHOT')
}
```
## 代碼範本 / Code Template
### `CustomBlockEntity.java`
```java
package com.example.block;
import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientGamePacketListener;
import net.minecraft.network.protocol.game.ClientboundBlock