📦 AdventureChest

Minecraft 死亡保护箱插件 — 玩家死亡时自动生成保护箱保存物品

📦 Paper / Purpur 1.21.4+ 🎨 11种死亡盒风格 🗄️ MySQL / SQLite 🔗 跨服同步 🔒 物品绑定

核心功能

📦
死亡保护箱
玩家死亡自动生成MythicMobs/ArmorStand保护箱, 保存全部物品和经验
🎨
11种风格
潜影盒/末影箱/木桶/蛙鸣灯/萤石灯/钻石块等, 管理员指令给予+天数
🎟️
赎回限制
每日免费次数(权限分级VIP/MVP/PRO), 超限需GUI付费赎回
🔒
物品绑定
Lore含"绑定 @"自动绑定, 防止丢弃/他人拾取, GUI解绑
🗄️
数据库
MySQL + SQLite 双模, 死亡记录历史, BungeeCord/Velocity跨服
性能优化
粒子限流/ArmorStand泄露防护/异步IO/5分钟自动保存

📥 安装

环境要求

项目要求
服务端Paper / Purpur 1.21.4+
JavaJava 21+
必须依赖Vault (经济)
可选依赖PlaceholderAPI, WorldGuard, MythicMobs

安装步骤

  1. AdventureChest-1.2.0.jar 放入 plugins/
  2. 重启服务器, 首次启动自动生成配置文件
  3. 编辑 config.yml 调整核心设置
  4. 编辑 styles.yml 自定义死亡盒风格
  5. 如需数据库, 编辑 database.yml
  6. 如需赎回限制, 编辑 redemption.yml
  7. 执行 /achest reload 热重载

配置文件列表

文件说明
config.yml核心配置 (箱子/音效/粒子/惩罚/绑定/跨服)
messages.yml所有消息文本 (99%可自定义)
styles.yml死亡盒风格定义
database.yml数据库配置 (MySQL/SQLite)
redemption.yml赎回限制配置 (每日次数/权限分级/费用)
groups.yml死亡箱组配置 (不同权限组不同持续时间)

📝 更新日志

v1.2.1 (2026-04-08)

修复

  • 普通玩家无法右键死亡箱拿取物品 — 不可见 ArmorStand 在 Paper 1.21+ 可能不触发客户端实体交互包。新增 PlayerInteractEvent 回退机制: 通过视线方向+距离锥形检测自动匹配附近死亡箱
  • 悬浮字(全息)导致卡顿 — 全息更新新增文本缓存(未变化时跳过), 移除每秒 teleport() 调用(ArmorStand 位置在创建时已固定)
  • 悬浮字残留无法清除 — 所有插件 ArmorStand 现在标记 AChest_Entity / AChest_Hologram scoreboard tag, 泄露清理改用 tag 精确识别,替代之前不可靠的名称匹配

新增

  • 全息开关 — 新增配置项 hologram-enabled: true/false,关闭后不再生成全息 ArmorStand,大幅降低实体数量
  • 默认全息文本简化为仅显示玩家名 ☠ {player} ☠

v1.2.0 (2026-04-04)

新功能

  • 死亡盒风格系统 — 11种预设风格 (潜影盒/末影箱/木桶/蛙鸣灯/萤石灯/海晶灯/钻石块/黑曜石等), 管理员可通过 /achest style 给予玩家风格+天数
  • 赎回限制系统 — 每日免费死亡次数(权限分级: VIP 5次, MVP 7次, PRO 8次, MAX 10次), 超限后物品存入赎回队列, 需在GUI中付费赎回
  • 数据库支持 — MySQL + SQLite 双模, 死亡记录历史表, 每日死亡计数表, 玩家风格表, 赎回队列表
  • 跨服同步 — BungeeCord/Velocity 插件消息通道, 同步死亡通知/风格/赎回数据

GUI 重制

  • 详情GUI 3按钮布局 — 传送(末影珍珠)+5s无敌保护、远程赎回(漏斗)、丢弃(岩浆桶)
  • 虚空检测 — 虚空箱子自动禁用传送按钮(显示屏障),只允许赎回或丢弃
  • 5秒无敌保护 — 传送到箱子后自动获得5秒伤害免疫(岩浆/高空安全)
  • 地图信息物品 — FILLED_MAP 显示坐标、世界名(Multiverse别名)、死因、物品数、经验
  • Multiverse-Core — GUI世界名自动显示Multiverse别名
  • AdventureManage兼容 — 死亡时自动过滤AM绑定物品,不放入死亡箱

改进

  • 命令前缀变更/ac/achest (别名 /ach), 避免与AdventureCrats冲突
  • 绑定机制简化 — 移除color-rules, 简化为Lore含"绑定 @"即触发, 忽略颜色代码
  • 性能优化 — 粒子限流(仅附近有玩家时播放, 每3秒一次), ArmorStand泄露防护, 异步文件保存(每5分钟), tick优化
  • 消息完善 — 新增绑定GUI/风格/赎回相关消息, 所有消息可在 messages.yml 自定义

修复

  • 修复GUI切换视图时session被误删导致物品可被拿取、按钮无响应的严重BUG
  • 移除残留的/acbind命令注册
  • 修复绑定系统在不同颜色代码下无法正确识别的问题
  • 修复无主ArmorStand可能泄露的问题

v1.1.0

  • 初始版本: 死亡保护箱核心系统
  • MythicMobs / ArmorStand 双模显示
  • 物品绑定系统 (color-rules)
  • GUI管理界面
  • 新手保护系统

⌨️ 主命令

管理员命令

命令说明权限
/achest reload重新加载所有配置adventurechest.admin
/achest version查看版本信息和箱子数量adventurechest.admin
/achest debug切换调试模式adventurechest.admin
/achest style <玩家> <风格> [天数]设置玩家死亡盒风格adventurechest.admin
/achest help显示帮助信息adventurechest.admin
别名: /achest 可缩写为 /ach

风格命令详解

/achest style Steve shulker 30    # 给Steve潜影盒风格30天
/achest style Steve diamond -1    # 给Steve钻石块风格永久
/achest style Steve default       # 恢复默认风格

👤 玩家命令

命令说明权限
/acgui [玩家]打开死亡箱GUIadventurechest.gui
/aclist [玩家]列出所有死亡箱adventurechest.use
/actp [编号]传送到指定死亡箱adventurechest.tp
/acfetch [编号]将死亡箱传送到身边adventurechest.fetch
/acunlock [编号]解锁受保护的死亡箱adventurechest.protect
/actoggle开关死亡箱功能adventurechest.toggle

🔗 绑定命令

命令说明权限
/acbind打开物品解绑GUIadventurechest.binding.use
/acbind unbind直接解绑手中物品adventurechest.binding.use

绑定机制

v1.2.0 起绑定机制已简化:

  • 物品Lore中包含 绑定 @ 即视为可绑定物品 (忽略颜色代码)
  • 玩家首次拾取/使用时自动绑定, Lore变为 绑定 @玩家名
  • 绑定后: 不可丢弃, 其他玩家不可拾取/使用
  • 解绑: 通过GUI支付费用解绑, 或管理员命令强制解绑
注意: 不再需要 binding.yml 的 color-rules 配置, 所有绑定共用 config.yml 中的全局解绑费用.

📦 死亡箱系统

死亡流程

  1. 玩家死亡 → 检查权限/冷却/世界黑名单
  2. 赎回限制检查: 增加今日死亡计数
  3. 未超限: 生成MythicMobs/ArmorStand实体, 保存全部物品+经验+装备
  4. 超限: 物品存入赎回队列, 不生成实体 (减少服务器负担)
  5. 播放音效/粒子/图腾动画
  6. 全息文字显示箱子信息 (玩家名/物品数/倒计时)

交互方式

  • 右键点击 实体 → 弹出物品取回GUI
  • 命令 /acgui → 打开死亡箱列表GUI
  • 命令 /actp → 传送到箱子位置
  • 命令 /acfetch → 将箱子传送到身边

过期处理

  • 箱子有持续时间 (可配置), 到期后根据配置 掉落物品 或 删除物品
  • 离线暂停: 箱主离线时倒计时暂停 (可配置)
  • 保护锁定: 其他玩家一定时间内无法打开 (可配置)

🎨 风格系统

v1.2.0 新增. 管理员可为玩家设置不同的死亡盒外观风格.

预设风格

ID名称锁定材质解锁材质
default默认箱子CHESTENDER_CHEST
shulker潜影盒SHULKER_BOXPURPLE_SHULKER_BOX
ender末影箱ENDER_CHESTENDER_CHEST
barrel木桶BARRELBARREL
froglight_ochre赭黄蛙鸣灯OCHRE_FROGLIGHTOCHRE_FROGLIGHT
froglight_pearlescent珠光蛙鸣灯PEARLESCENT_FROGLIGHTPEARLESCENT_FROGLIGHT
froglight_verdant翠绿蛙鸣灯VERDANT_FROGLIGHTVERDANT_FROGLIGHT
glowstone萤石灯GLOWSTONEGLOWSTONE
sea_lantern海晶灯SEA_LANTERNSEA_LANTERN
diamond钻石块DIAMOND_BLOCKDIAMOND_BLOCK
obsidian黑曜石OBSIDIANCRYING_OBSIDIAN

使用方式

# 给予风格 (天数为-1=永久)
/achest style <玩家> <风格ID> [天数]

# 示例
/achest style Steve shulker 30
/achest style Alex diamond -1

自定义风格

编辑 styles.yml 添加新风格:

styles:
  my_style:
    display-name: "&6我的风格"
    material: GOLD_BLOCK
    material-unlocked: GOLD_BLOCK
    permission: ""
    description: "金块外观"

🎟️ 赎回限制

v1.2.0 新增. 限制每日免费死亡次数, 超限后物品不生成MM实体, 减少服务器负担.

流程

  1. 玩家死亡 → 今日死亡次数 +1
  2. 判断是否超过免费上限 (基于权限分级)
  3. 未超限 → 正常生成死亡箱实体
  4. 超限 → 物品存入赎回队列 (数据库), 需在GUI中付费赎回

权限分级

权限每日免费次数
默认 (所有玩家)3
adventurechest.limit.vip5
adventurechest.limit.mvp7
adventurechest.limit.pro8
adventurechest.limit.max10
提示: 拥有多个权限的玩家取最高次数. 费用 = redeem-cost-per-death × 超限次数.

配置

编辑 redemption.yml:

enabled: true
redeem-cost-per-death: 100.0
permission-limits:
  default: 3
  adventurechest.limit.vip: 5
  adventurechest.limit.mvp: 7

🔒 物品绑定

工作原理

  • 物品Lore中包含 绑定 @ (忽略颜色代码) → 标记为可绑定
  • 玩家首次拾取/使用 → 自动绑定, Lore变为 绑定 @玩家名
  • 绑定后效果: 不可丢弃, 其他玩家不可拾取/使用
  • 解绑方式: GUI支付费用 或 管理员命令

配置 (config.yml)

binding:
  enable: true
  can-gui-unbind: true
  unbind-cost-money: 500
  unbind-cost-xp: 0
  unbind-cost-item: ""
  unbind-cost-item-amount: 0
  unbind-permission: ""

绕过权限

拥有 adventurechest.binding.bypass 的玩家不受绑定限制.

🗄️ 数据库

v1.2.0 新增. 支持 MySQL 和 SQLite 双模式.

数据表

表名说明
achest_death_records死亡记录历史 (玩家/位置/原因/物品数/击杀者)
achest_daily_deaths每日死亡计数 (赎回限制用)
achest_player_styles玩家死亡盒风格 (风格ID/过期时间)
achest_redemption_queue赎回队列 (超限物品/费用/状态)

MySQL 配置

编辑 database.yml:

enabled: true
type: mysql
table-prefix: "achest_"
server-id: "lobby"
mysql:
  host: localhost
  port: 3306
  database: minecraft
  username: root
  password: ""
  use-ssl: false

SQLite 配置

enabled: true
type: sqlite

SQLite 数据库文件自动创建在插件目录: plugins/AdventureChest/data.db

跨服同步

启用 config.yml 中的 cross-server.enabled: true, 需要 BungeeCord/Velocity 代理.

同步内容: 死亡通知 / 风格变更 / 赎回数据刷新.

📁 配置文件

config.yml 核心配置

配置项说明默认值
chest-duration箱子持续时间(秒), -1=永久300
protect-time保护锁定时间(秒)60
max-chests每个玩家最大箱子数3
drop-on-expire过期是否掉落物品true
suspend-when-offline离线暂停倒计时true
void-detection虚空检测(避免箱子在虚空生成)true
show-location死亡时显示箱子位置true
totem-animation播放不死图腾动画false

音效配置

配置项说明
sound-chest-spawn箱子生成音效
sound-chest-expire箱子过期音效
sound-chest-unlock箱子解锁音效
sound-chest-loot取回物品音效

粒子配置

配置项说明
particle-enabled是否启用粒子效果
particle-type粒子类型 (Bukkit Particle枚举)
particle-count粒子数量
particle-radius粒子范围
性能: 粒子已优化为每3秒播放一次, 且仅在48格内有玩家时才播放.

🔐 权限节点

权限说明默认
adventurechest.use死亡时生成保护箱true
adventurechest.protect保护箱对其他玩家锁定true
adventurechest.protect.bypass可以打开他人锁定的箱子op
adventurechest.tp传送到死亡箱false
adventurechest.fetch将死亡箱传送到身边false
adventurechest.toggle开关死亡箱功能true
adventurechest.preview预览死亡箱内容true
adventurechest.others操作他人死亡箱op
adventurechest.admin管理员权限op
adventurechest.gui使用GUItrue
adventurechest.unlock解锁保护箱true
adventurechest.binding.use使用物品绑定true
adventurechest.binding.bypass绕过物品绑定限制op
adventurechest.protection.bypass绕过新手保护false
adventurechest.penalty.bypass绕过死亡惩罚false
adventurechest.limit.vipVIP每日5次免费死亡false
adventurechest.limit.mvpMVP每日7次免费死亡false
adventurechest.limit.proPRO每日8次免费死亡false
adventurechest.limit.maxMAX每日10次免费死亡false

🔗 PAPI 占位符

需安装 PlaceholderAPI.

占位符说明
%adventurechest_count%玩家当前死亡箱数量
%adventurechest_total_deaths%历史总死亡次数 (需数据库)
%adventurechest_today_deaths%今日死亡次数
%adventurechest_free_left%今日剩余免费死亡次数
%adventurechest_style%当前死亡盒风格