面向 Paper 1.21.11 / Java 21 的铁砧附魔插件,支持 经验等级、Vault 经济、PlayerPoints 三种费用方式。
- 插件名:
AnvilPro - 主类:
com.Xiaoniu2333.mlky.anvilpro.AnvilProPlugin - 作者:
Xiaoniu2333 - 主命令:
/anvilpro(别名/ap)
- 27 格大箱子 GUI,3 行布局,仿照铁砧:
- 左槽放入需要附魔的物品
- 中槽放入附魔书
- 右槽显示结果预览
- 下方铁砧按钮确认,屏障按钮取消
- 其余空位全部填充黑色玻璃板
- 放入有效物品和附魔书后自动锁定,输入槽和预览槽都不能再取出。
- 点击确认后按配置收费,把附魔书的附魔应用到物品上,并自动放入背包。
- 支持超过原版上限的附魔等级,例如锋利 6、保护 10。
- 只修改附魔数据:物品名称、Lore、耐久、CustomModelData、PDC/NBT 等其他数据保持不变。
- 中途关闭 GUI、按取消、死亡、掉线或插件卸载时自动返还物品。
- 返还顺序:背包 → 末影箱 → 脚下(最后兜底,避免物品被删除)。
- 玩家背包满时,确认后的成品也会尝试放入末影箱。
27 格(3 行 × 9 列):
第 1 行 [黑] [黑] [黑] [黑] [黑] [黑] [黑] [黑] [黑]
第 2 行 [物品] [黑] [黑] [黑] [附魔书] [黑] [黑] [黑] [预览]
第 3 行 [取消] [黑] [黑] [黑] [确认] [黑] [黑] [黑] [黑]
槽位编号:
| 槽位 | 用途 |
|---|---|
| 9 | 待附魔物品 |
| 13 | 附魔书 |
| 17 | 结果预览(不可取出) |
| 18 | 取消并返还 |
| 22 | 确认附魔 |
其余槽位均为黑色玻璃板,点击、Shift 点击、拖拽、数字键交换、双击收集等操作都会被拒绝。
- 确认服务端为 Paper 1.21.11,Java 为 21。
- 构建或直接使用
target/AnvilPro-1.1.1.jar。 - 把 jar 放进服务端的
plugins/目录。 - 重启服务器。
- 玩家执行
/anvilpro打开界面。
如果使用 Vault 经济,请同时安装 Vault 和一个经济插件;如果使用 PlayerPoints,请安装 PlayerPoints 2.x 或 3.x。未安装对应插件时 AnvilPro 仍可正常启动,只是选择该费用类型时无法完成扣费。
首次启动生成 plugins/AnvilPro/config.yml。
cost:
type: XP_LEVELS
amount: 10amount 不是整数时会向上取整。例如 10.5 实际收取 11 级。
cost:
type: VAULT
amount: 100.0需要 Vault 和经济插件。未检测到 Vault 时,确认按钮会提示经济系统不可用,不会扣物品。
cost:
type: PLAYER_POINTS
amount: 100amount 是 PlayerPoints 点数,不是小数;填写小数时会向上取整。兼容 PlayerPoints 2.x/3.x,通过反射调用其 PlayerPointsAPI#look 和 take,无需把 PlayerPoints 作为编译依赖。未安装 PlayerPoints 时不会影响插件启动,但确认时会提示 PlayerPoints 不可用,不会扣物品。
也接受 PLAYERPOINTS、PlayerPoints、PP 这几种写法。
config.yml 中的 gui 和 messages 都可以修改,支持 & 颜色代码和 {cost}、{destination} 等占位符。修改后执行 /anvilpro reload。
| 命令 | 说明 | 权限 |
|---|---|---|
/anvilpro |
打开附魔 GUI | anvilpro.use(默认所有玩家) |
/anvilpro book <附魔> <等级> |
获得一本指定等级附魔书,便于测试 | anvilpro.admin(默认 OP) |
/anvilpro reload |
重载配置 | anvilpro.reload(默认 OP) |
/anvilpro help |
查看帮助 | 无 |
示例:
/anvilpro book sharpness 6
/anvilpro book protection 10
等级范围为 1–255。生成的书使用 EnchantmentStorageMeta#addStoredEnchant(..., true),因此可以突破原版等级上限。
需要 JDK 21 和 Maven:
mvn clean package生成:
target/AnvilPro-1.1.1.jar
运行测试:
mvn testEnchantmentService#merge 先复制原物品,再只修改 ItemMeta 的附魔部分:
- 普通物品:
ItemMeta#addEnchant(enchantment, level, true) - 附魔书:
EnchantmentStorageMeta#addStoredEnchant(enchantment, level, true)
已有的同种附魔等级更高时保留原等级;附魔书等级更高时覆盖。因为是在原 ItemMeta 上修改,Lore、显示名、PDC 等组件不会被重建或清空。
- 两个输入槽都有效时,复制物品并标记为锁定。
- 锁定后所有对输入槽/预览槽的点击都被取消。
- 关闭、死亡、掉线、卸载时调用同一个幂等的
handleClose():- 未锁定:读取两个输入槽;
- 已锁定:使用服务端保存的副本;
- 清空 GUI 后按“背包 → 末影箱 → 脚下”返还。
- 确认成功时先标记
finished,再关闭 GUI,因此关闭事件不会重复返还。
GuiListener 和 AnvilSession 对以下操作做了处理:
- 黑色玻璃板/预览槽/按钮槽点击全部取消
- 从玩家背包 Shift 点击进入 GUI 取消
- 拖拽涉及 GUI 取消
- 双击收集、数字键交换、副手交换、丢弃键取消
- 锁定后输入槽和结果槽不可点击
见 TEST_REPORT.md。当前测试结果:
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
另外已在真实 Paper 1.21.11-132 服务端验证:
- 插件正常加载
/anvilpro命令注册成功/anvilpro reload正常执行- 同时安装 PlayerPoints 3.3.5 时,
cost.type: PLAYER_POINTS成功识别,未出现 hook 警告
- 一次操作会消耗一本附魔书;如果附魔书堆叠数大于 1,剩余书会返还。
- 待附魔物品如果是堆叠,会对整组物品应用附魔;通常建议一次放 1 个。
- 允许冲突附魔(例如同时存在锋利和亡灵杀手),因为这是“自定义等级附魔”插件的预期能力。
- 若背包和末影箱都满,物品会掉落在玩家脚下,避免被静默删除。