[MD]
## v1.1.5 (2026-03-28)
### ✨ 新功能
#### 规则书独立文件夹存储
重构了规则书配置存储结构,每本规则书现在有独立的文件夹:
**新结构**:
```
plugins/AdventureRule/
├── config.yml # 全局设置(不含规则书)
├── rules/ # 规则书文件夹
│ ├── server_rule/ # 主规则书
│ │ └── rule.yml # 完整配置(页面、按钮、设置)
│ └── refuse_book/ # 拒绝提示书
│ └── rule.yml
```
**优点**:
- 每本规则书配置独立,便于管理和备份
- 创建新规则书只需新建文件夹 + `rule.yml`
- `config.yml` 更简洁,只包含全局设置
- 兼容旧版:如果 `rules/` 为空,仍会从 `config.yml` 加载
**创建新规则书**:
1. 在 `rules/` 下创建新文件夹(文件夹名即规则书ID)
2. 在文件夹内创建 `rule.yml` 文件
3. 参考默认模板配置页面、按钮等
---
## v1.1.4 (2026-03-28)
### 🔧 改进
#### 多重书本关闭检测机制
重写了书本关闭检测逻辑,现在使用多种方式同时检测,确保玩家关闭书本后能可靠地重新打开:
1. **InventoryCloseEvent** - 检测 E/Esc 键关闭
2. **视角转动检测** - 检测玩家转头(yaw/pitch 变化超过 5° 阈值)
3. **主动移动检测** - 检测玩家位置变化
4. **交互事件检测** - 检测左键/右键/命令/聊天等操作
---
## v1.1.3 (2026-03-28)
### 🐛 Bug 修复
#### 修复玩家按 E/Esc 关闭书本后不触发重开的问题
- **问题**:玩家按 E 键或 Esc 键关闭规则书后,书本不会重新打开
- **原因**:v1.1.2 移除了移动事件中的重开逻辑后,如果玩家关闭书本后不进行任何交互操作,书本就不会重新打开
- **修复**:新增 `InventoryCloseEvent` 监听器,当玩家关闭书本(包括按 E/Esc)时自动检测并重新打开
### ✨ 新功能
#### 定时提醒消息
- 当玩家未同意协议时,每隔配置的秒数自动发送提醒消息(仅该玩家可见)
- 支持 `&` 颜色代码
- 支持可点击文字,点击后执行指定命令(如 `/rule` 打开规则书)
- 配置项:
```yaml
settings:
reminder:
enabled: true
interval: 30 # 秒
message: "&e[系统] &f为了您的安全以及服务器的权益,您需要阅读并同意本次的协议!如果关闭了点击-> "
click-text: "&a&l[点我打开]"
click-command: "/rule"
```
---
## v1.1.2 (2026-03-28)
### 🐛 Bug 修复
#### 1. 修复 1.20.1 版本 Sound.valueOf() 兼容性问题
- **问题**:在 Paper 1.20.1 服务端上,点击同意/拒绝按钮时报错
- **问题**:玩家正在阅读规则书(如第4页),会突然被跳回第1页
2. 移除移动事件中的 `tryReopenBook()` 调用(移动事件不能用于检测书本关闭)
3. 只在交互事件(左键/右键)、命令事件、聊天事件中触发重新打开(这些事件在书本 UI 打开时会被客户端捕获,不会触发服务端事件)
### 📝 技术说明
**关于书本关闭检测的设计**:
- `player.openBook()` 是纯客户端行为,服务端无法通过任何 API 检测书本是否仍在打开
- 移动事件(`PlayerMoveEvent`)不能用于检测书本关闭,因为服务端物理计算与客户端 UI 状态无关
- 交互事件(`PlayerInteractEvent`)、命令事件(`PlayerCommandPreprocessEvent`)、聊天事件(`AsyncChatEvent`)可以用于检测
---
## v1.1.1 (2026-03-28)
### ✨ 新功能
#### 双版本构建支持
- 新增 Maven 多 profile 构建,支持同时生成两个版本的插件 JAR:
- `mc1201`:面向 Paper/Purpur 1.20.1+,使用 JDK 17 编译
- `mc1214`:面向 Paper/Purpur 1.21.4+,使用 JDK 21 编译
---
[/MD]