Skip to content
Xiaoniu2333Public

About

Minecraft高级铁砧

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AnvilPro


声明:本插件由AI(DeepSeek)开发

面向 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、按取消、死亡、掉线或插件卸载时自动返还物品。
  • 返还顺序:背包 → 末影箱 → 脚下(最后兜底,避免物品被删除)。
  • 玩家背包满时,确认后的成品也会尝试放入末影箱。

GUI 布局

27 格(3 行 × 9 列):

第 1 行  [黑] [黑] [黑] [黑] [黑] [黑] [黑] [黑] [黑]
第 2 行  [物品] [黑] [黑] [黑] [附魔书] [黑] [黑] [黑] [预览]
第 3 行  [取消] [黑] [黑] [黑] [确认] [黑] [黑] [黑] [黑]

槽位编号:

槽位 用途
9 待附魔物品
13 附魔书
17 结果预览(不可取出)
18 取消并返还
22 确认附魔

其余槽位均为黑色玻璃板,点击、Shift 点击、拖拽、数字键交换、双击收集等操作都会被拒绝。

安装

  1. 确认服务端为 Paper 1.21.11,Java 为 21。
  2. 构建或直接使用 target/AnvilPro-1.1.1.jar。
  3. 把 jar 放进服务端的 plugins/ 目录。
  4. 重启服务器。
  5. 玩家执行 /anvilpro 打开界面。

如果使用 Vault 经济,请同时安装 Vault 和一个经济插件;如果使用 PlayerPoints,请安装 PlayerPoints 2.x 或 3.x。未安装对应插件时 AnvilPro 仍可正常启动,只是选择该费用类型时无法完成扣费。

配置

首次启动生成 plugins/AnvilPro/config.yml。

默认:消耗经验等级

cost:
  type: XP_LEVELS
  amount: 10

amount 不是整数时会向上取整。例如 10.5 实际收取 11 级。

使用 Vault 经济

cost:
  type: VAULT
  amount: 100.0

需要 Vault 和经济插件。未检测到 Vault 时,确认按钮会提示经济系统不可用,不会扣物品。

使用 PlayerPoints

cost:
  type: PLAYER_POINTS
  amount: 100

amount 是 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 test

实现要点

附魔合并

EnchantmentService#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 个。
  • 允许冲突附魔(例如同时存在锋利和亡灵杀手),因为这是“自定义等级附魔”插件的预期能力。
  • 若背包和末影箱都满,物品会掉落在玩家脚下,避免被静默删除。

About

Minecraft高级铁砧

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages