# CustomDeaths

基于规则的,有趣的 Minecraft 死亡信息。专为 **PaperMC 1.21.x** 和 **Java 21** 设计。悬停时显示 **原始的 Vanilla 死亡信息**,同时广播你自定义的信息。
---
⚠️ **不可逆 (消息仅限):** 此插件 *替换广播的死亡消息*。它不改变掉落物、经验或物品栏,但你的聊天记录无法“取消广播”。请谨慎使用。
---
## ✅ 支持的平台和要求
- **Minecraft 服务器:** PaperMC 1.21.x (API 1.21)。
- 在保持 API 对齐的 Paper 兼容的分叉上有效 (例如,Purpur)。
- **Java 运行时:** Java 21 (服务器 + 构建)。
---
## ✨ 特性
- **自定义死亡规则:** 通过条件定义消息:
- 伤害原因、世界、生物群系
- Y 高度 (高于/低于)
- 杀手类型、名称,或杀手是否为玩家
- 受害者权限或持有的物品
- **悬停时显示原始信息:** Vanilla 死亡消息仍然可用作悬停提示。
- **快速启用/禁用:** 通过 `/customdeaths toggle` 或设置 `enabled: true|false` 切换。
- **按原因和全局消息:** 简单的配置列表。
- **预设包含:** 附带默认设置;通过 `use-presets: false` 禁用。
- **热重载:** `/customdeaths reload` 应用更改,无需重启。
---
## 📦 指令
- `/customdeaths reload` — 重新加载 `config.yml`。
- `/customdeaths toggle` — 翻转主 `enabled` 标志的开关。
### 权限
- `customdeaths.admin` — 默认: **op**
---
## ⚙️ 配置 (`plugins/CustomDeaths/config.yml`)
```yaml
enabled: true
hover-original: true
override-broadcast: true
use-presets: true
messages:
- "{player} 睡了一个永久性的午觉,没有设置闹钟。"
per-cause:
VOID:
- "{player} 掉进了互联网的边缘。"
# 自定义规则 (第一个匹配获胜)
custom-deaths:
- name: "archer_headshot"
when:
killer-type: "SKELETON"
y-above: 100
messages:
- "{player} 从 {killer} 得到了高空爆头。"
presets:
messages:
- "{player} 打开了硬核教程。"
per-cause:
FALL:
- "{player} 把地面当成了蹦床。"
```
**支持的 `when` 键**
- `cause` (DamageCause), `world`, `biome`
- `y-above`, `y-below`
- `killer-type` (EntityType), `killer-name`, `killer-is-player`
- `victim-has-permission`, `victim-holding`
**占位符:** `{player}`, `{killer}`, `{cause}`
---
## 🧭 工作原理
1. 在 `PlayerDeathEvent` 上,插件按顺序检查 **custom-deaths** 规则。
2. 第一个匹配获胜;如果没有匹配,则会回退到 **per-cause**,然后是 **messages**,然后是 **presets**。
3. 所选行将被广播,如果启用了,则 Vanilla 消息将显示为悬停提示。
---
## 📥 安装
1. 将插件 JAR 放入 Paper 1.21.x 服务器的 `plugins/` 目录中。
2. 启动服务器以生成 `config.yml`。
3. 编辑 `plugins/CustomDeaths/config.yml`。
4. 使用 `/customdeaths reload` 应用更改 (或重启)。
---
## 🔒 安全提示
- 仅替换广播的死亡消息;不触碰物品栏、经验或掉落物。
- 确保管理员理解 **custom-deaths** 中 “第一个匹配获胜” 的规则。
---
## 📄 许可证
MIT — 免费使用和贡献。