spigot-paper-api-callerlisted
Install: claude install-skill MrPippi/MJP-Claude-Skills
# Spigot / Paper API Caller Skill
## 目標
依使用者描述的功能需求,產生正確、現代化的 Spigot/Paper Java API 調用代碼片段,並附上必要的 import 與說明。
---
## 使用流程
1. **確認 MC 版本**:Paper 1.20+ 與舊版 API 有差異,優先使用新版寫法
2. **確認功能需求**:事件監聽 / 指令 / 玩家操作 / 排程 / 資料儲存
3. **產生代碼**:含完整 import、正確類別與方法名稱
4. **補充注意事項**:執行緒安全、主執行緒限制、棄用 API 替代方案
---
## 常用 API 類別速查
| 需求 | 主要類別 |
|------|----------|
| 玩家操作 | `Player`, `HumanEntity` |
| 世界操作 | `World`, `Location`, `Chunk` |
| 物品 | `ItemStack`, `ItemMeta`, `Material` |
| 事件 | `Listener`, `@EventHandler`, `EventPriority` |
| 指令 | `CommandExecutor`, `TabCompleter` |
| 排程 | `BukkitRunnable`, `BukkitScheduler` |
| NBT (Paper) | `PersistentDataContainer`, `PersistentDataType` |
| 聊天訊息 | `Component` (Adventure API, Paper 1.16+) |
| 資料庫 | `HikariCP` (連線池推薦) |
---
## 代碼範本
### 事件監聽器
```java
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
public class PlayerListener implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerJoin(PlayerJoinEvent event) {
// event.getPlayer() 取得玩家
}
}
```
注意:Listener 必須在主類 `onEnable()` 中 `getServer().getPluginManager().registerEvents(new PlayerListener(), this);`
### 非同步排程(延遲/重複執行)
```java
// 延遲 20 ticks(1 秒)後在主執行緒執行
new BukkitRunnable() {
@Override
public void run() {
// 主執行緒安全操作
}
}.runTaskLater(plugin, 20L);
// 非同步重複任務(不可操作 Bukkit 物件)
new BukkitRunna