fix: 修复已知代码问题 - 禁言生效/heal血量恢复/kick自我检查/控制台解禁/注册tpaback/NPE防护/屏蔽词包含匹配/PAPI缺失优雅退出/权限节点统一

This commit is contained in:
database-mysql committed 2026-11-09 08:01:18 +08:00
1 parent 6c7d7fedcb
commit 9d262330d4
10 files changed
+62 -35

No files matched your search

+21 -14
View File
@@ -94,15 +94,15 @@
| `/back` | - | `/back` | `OpenTools.default` | 所有人 |
| `/tpaaccept` | - | `/tpaaccept <玩家ID>` | `OpenTools.default` | 所有人 |
| `/tpadefuse` | - | `/tpadefuse <玩家ID>` | `OpenTools.default` | 所有人 |
| `/tpaback` | - | `/tpaback` | `OpenTools.default` | 所有人 |
| `/PlayerTitle` | `/plt` | `/PlayerTitle help` | `OpenTools.default` | 所有人 |
| `/testGUI` | - | `/testGUI KickGUI` | `OpenTools.testGUI` | OP |
| `/OSTReload` | - | `/OSTReload` | `OpenTools.reload` | OP |
| `/OSTReload` | - | `/OSTReload` | `OpenTools.ostreload` | OP |
| `/stop` | - | `/stop [提示语]` | `OpenTools.stop` | OP |
| `/gamemode` | `/gm` | `/gamemode <模式> [玩家ID]` | `OpenTools.gamemode` | OP |
| `/sun` | - | `/sun` | `OpenTools.sun` | OP |
| `/setspawn` | - | `/setspawn` | `OpenTools.setspawn` | OP |
| `/day` | - | `/day` | `OpenTools.day` | OP |
| `/vanish` | `/v` | `/vanish [玩家ID]` | `OpenTools.vanish` | OP |
| `/day` | - | `/day` | `OpenTools.day` | OP || `/vanish` | `/v` | `/vanish [玩家ID]` | `OpenTools.vanish` | OP |
| `/fly` | - | `/fly [玩家ID]` | `OpenTools.fly` | OP |
| `/mute` | - | `/mute <玩家ID>` | `OpenTools.mute` | OP |
| `/unmute` | - | `/unmute <玩家ID>` | `OpenTools.unmute` | OP |
@@ -138,6 +138,7 @@
| `OpenTools.stop` | OP | /stop |
| `OpenTools.gamemode` | OP | /gamemode |
| `OpenTools.setspawn` | OP | /setspawn |
| `OpenTools.day` | OP | /day |
| `OpenTools.list` | OP | /list |
| `OpenTools.testGUI` | OP | /testGUI |
@@ -249,6 +250,7 @@ powershell -NoProfile -ExecutionPolicy Bypass -File tools/smoke-test/start-test-
| 版本 | 日期 | 变更 |
|---|---|---|
| `dev-mc-1.21.11`(分支) | 2026-11-09 | 修复 10 项已知代码问题(禁言生效、/heal 血量恢复、/kick 自我检查、控制台解禁、注册 /tpaback、NPE 防护、屏蔽词包含匹配、PAPI 缺失优雅退出、权限节点统一) |
| `2.1.0` | 2026-11-09 | 升级 Bukkit API 至 **1.21.11**;`api-version` 提升至 `1.21`;声明 `depend: [PlaceholderAPI]` 保证加载顺序;补充自动化冒烟测试设施 |
| `2.0` | 2025 | 初版(Spigot API 1.20) |
@@ -256,18 +258,23 @@ powershell -NoProfile -ExecutionPolicy Bypass -File tools/smoke-test/start-test-
## 已知问题与限制
> 以下问题为代码现状记录,不影响插件基本使用,欢迎提交 PR 修复。
以下问题已在 **`dev-mc-1.21.11` 分支修复**:
1. **禁言不生效**:`/mute` 仅将玩家写入配置 `MutePlayerList`,聊天事件未检查该列表。
2. **`/heal` 实际恢复的是饱食度**(与 `/feed` 相同),且配置键大小写不匹配(`healCommandSetting` vs `HealCommandSetting`),导致默认被禁用。
3. **`/kick` 无法阻止踢出自己**:自我检查逻辑失效(`player.getName().equals(player.getName())` 恒为真)。
4. **控制台执行 `/unmute` 无效**:解禁分支误用 `add` 而非 `remove`。
5. **`/tpaback` 未注册**:类存在但未在 plugin.yml 与主类中注册。
6. **空指针风险**:玩家未死亡时使用 `/back` 或重生事件、未使用过 TPA 时执行 `/tpaback`、跨世界飞行检查,均可能抛出 NPE。
7. **状态仅存内存**:TPA 请求、聊天冷却、死亡点、隐身/飞行状态存于静态 HashMap,服务器重启即丢失。
8. **权限声明不一致**:`/OSTReload` 使用 `OpenTools.reload` 而权限节定义为 `OpenTools.ostreload`;`/day` 的 `OpenTools.day` 未在权限节声明。
9. **硬依赖退出方式激进**:缺失 PlaceholderAPI 时插件会 `System.exit(0)` 直接结束整个 JVM(现已通过 `depend` 声明保证加载顺序规避)。
10. **屏蔽词精确匹配**:仅拦截与关键词完全相同的整句消息。
1. ✅ 禁言不生效 → 聊天事件现在检查 `MutePlayerList`,被禁言玩家无法发言。
2. ✅ `/heal` 恢复饱食度 + 配置键大小写不匹配 → 现在恢复生命值并使用正确的 `HealCommandSetting` 配置键。
3. ✅ `/kick` 无法阻止踢出自己 → 自我检查改为与命令发送者比较。
4. ✅ 控制台 `/unmute` 无效 → 解禁分支由 `add` 修正为 `remove`。
5. ✅ `/tpaback` 未注册 → 已注册命令与权限(返回 TPA 传送前位置)。
6. ✅ 多处空指针风险(重生事件、/tpaback、跨世界飞行检查)→ 已加空值保护。
7. ✅ 跨世界飞行权限节点错误(`OpenSourceTools.FLY`)→ 改为正确的 `OpenTools.fly`。
8. ✅ 屏蔽词仅整句精确匹配 → 改为包含匹配(忽略大小写)。
9. ✅ 缺失 PlaceholderAPI 时 `System.exit(0)` 强杀整个 JVM → 改为优雅禁用插件。
10. ✅ 权限声明不一致(OSTReload/day)→ 已统一权限节点。
### 仍存在的限制
- **状态仅存内存**:TPA 请求、聊天冷却、死亡点、隐身/飞行状态保存在内存中,服务器重启后丢失(如需持久化请提 Issue 讨论方案)。
- `/kick` 踢人 GUI 与命令的自我踢出/管理员保护逻辑按现有设计保留。
---