enchantlib-example

enchantlib-example

以下是一些适用于EnchantLib的示例模组。

魔法

EnchantLib 示例模组

English | 中文

这是 EnchantLib 的官方示例模组,通过 12 个自定义附魔完整演示了 EnchantLib API 的用法,可直接作为模组开发模板使用。

  • Mod ID: enchantlib-examplemod
  • 版本: 1.0.1
  • 依赖: Minecraft 26.2 · Fabric Loader ≥ 0.19.3 · Fabric API · EnchantLib ≥ 1.0.1
  • 许可证: MIT

这是什么

本模组并非追求游戏平衡性,而是用具体附魔实例来演示 EnchantLib 的每类 API:从最简单的“注册一个附魔”到高级的“Display 实体旋转视觉 + 标记引爆”。开发者可阅读源码理解每个 API 的用法,或直接复制源码结构作为新模组的起点。

源码按“每个附魔一个文件”拆分,入口只做调度,便于逐个阅读:

examplemod/
  ExampleModEnchantments.java     # 入口:委托子模块 + 互斥组/战利品/村民交易
  enchantment/
    DisguiseEnchantments.java     # 4 个伪装合并 + EntityCategory + LIVING_ENTITY_TICK
    AutoSmeltEnchantment.java     # MODIFY_BLOCK_DROPS + SmeltingLookup
    SlimeSlayerEnchantment.java   # MODIFY_DAMAGE + POST_ATTACK 范围溅射
    ExecutionerEnchantment.java   # MODIFY_DAMAGE 条件增减伤
    RetributionEnchantment.java   # AFTER_DAMAGE 监听 + MODIFY_DAMAGE
    SilentPactEnchantment.java    # FOOD_REGEN 压制 + AFTER_DEATH 击杀回血
    HeartburnEnchantment.java     # POST_ATTACK 标记 + LIVING_ENTITY_TICK 持续伤害
    EchoMarkEnchantment.java      # PROJECTILE_HIT 标记 + AFTER_DAMAGE 引爆
    FrostEnchantment.java         # POST_ATTACK 视觉 + Display 实体旋转

12 个附魔一览

名称 等级 适用物品 效果 演示的 API
亡灵伪装 undead_disguise I 头盔 穿戴时玩家被标记为亡灵,亡灵生物不再锁定玩家 EntityCategory + LIVING_ENTITY_TICK
水生伪装 aquatic_disguise I 头盔 玩家被标记为水生生物,水生生物不再攻击 同上(4 个伪装共享同一文件,共用 tick 回调)
灾厄村民伪装 illager_disguise I 头盔 玩家被标记为灾厄村民,灾厄村民不再攻击 同上
节肢动物伪装 arthropod_disguise I 头盔 玩家被标记为节肢动物,节肢动物不再攻击 同上
自动熔炼 auto_smelt I 镐/锹 破坏方块直接掉落熔炼产物,并获得熔炼经验加成 MODIFY_BLOCK_DROPS + SmeltingLookup
史莱姆杀手 slime_slayer V 剑/斧 对史莱姆类生物每级 +2.5 伤害;溅射击中 20 格半径内 等级+1 个目标 MODIFY_DAMAGE + POST_ATTACK 溅射
处刑人 executioner III 剑/斧 高生命时减伤 / 低生命时增伤;阈值随等级变化 MODIFY_DAMAGE 条件分支
复仇 retribution II 剑/斧 受到伤害后 5 秒内,下一次攻击造成 +30%/+50% 原始伤害 AFTER_DAMAGE 全局监听 + EntityCounter + MODIFY_DAMAGE
沉默契约 silent_pact II 胸甲 压制自然回复;击杀恢复 2×等级 点生命值 FOOD_REGEN 拦截 + AFTER_DEATH
烧心 heartburn II 剑 攻击施加持续真实伤害标记(每秒 2%/3% 最大生命值)+ 火焰粒子 POST_ATTACK 标记 + LIVING_ENTITY_TICK 持续伤害
回声标记 echo_mark II 弓 箭矢命中留下 4 秒标记;下次命中时引爆,造成已损失生命值 50% 的伤害 PROJECTILE_HIT + AFTER_DAMAGE 引爆
冰霜 frost II 剑 施加缓慢效果 + 3 个冰块展示实体不规则旋转 + 雪花粒子 POST_ATTACK + LIVING_ENTITY_TICK + Display 实体

获取途径演示

示例模组还演示了 EnchantLib 的获取途径 API,让附魔真正融入玩家的游戏流程:

途径 涉及附魔 演示的 API
简易地牢 / 废弃矿井(30%) 史莱姆杀手、处刑人 LootInjectionBuilder 多表注入
沙漠神殿 / 丛林神庙(25%) 复仇、亡灵伪装、节肢动物伪装 多附魔合并注入
末地城宝藏(40%) 烧心、冰霜 高稀有度注入
林地府邸(30%) 回声标记 单附魔注入
远古城市(35%) 沉默契约 宝藏附魔(仅此途径;不对交易和附魔台开放)
沉船补给(20%) 自动熔炼 工具类附魔注入
沉船宝藏 / 海底废墟(30%) 水生伪装 按类别分发至对应结构
掠夺者前哨站(25%) 灾厄村民伪装 同上
图书管理员自动出售 7 个战斗/工具附魔 TradeableEnchantmentsBuilder 添加至 #minecraft:tradeable
武器匠 3 级 烧心(附魔钻石剑) VillagerTradeBuilder 自定义交易
武器匠 4 级 处刑人(附魔钻石剑) 同上
制图师 3 级 回声标记(附魔书) 同上
皮匠 2 级 自动熔炼(附魔书) 同上
牧师 4 级 冰霜(附魔书) 同上
盔甲匠 2 级 4 个伪装(附魔铁头盔,4 选 1) 多附魔随机交易

互斥组:4 个伪装附魔互斥(不能共存于同一头盔);烧心与原版火焰附加互斥。


如何运行

本项目是一个独立的 Fabric 模组项目。你需要先构建前置 EnchantLib 得到 jar,然后将其放入 libs/ 后再编译运行。

1. 构建前置 EnchantLib

git clone <enchantlib-repo>
cd enchantlib
.\gradlew build                   # 生成 build/libs/enchantlib-26.2-1.0.1.jar

EnchantLib 构建所需的 Fabric API 本地 jar 请参阅前置仓库的 README。

2. 准备本地依赖

将以下 jar 复制到本项目的 libs/ 目录:

libs/
  enchantlib-26.2-1.0.1.jar       # 上一步的输出
  fabric-api-26.2.jar              # Fabric API 运行时容器(JarJar,内嵌所有子模块)
  fabric-api-base-2.0.4.jar        # 编译类来源(EnchantLib API 的传递依赖)
  fabric-command-api-v2-3.1.0.jar
  fabric-entity-events-v1-5.0.5.jar
  fabric-events-interaction-v0-5.2.6.jar
  fabric-lifecycle-events-v1-4.1.3.jar
  fabric-loot-api-v3-3.0.17.jar
  fabric-permission-api-v1-1.0.3.jar

这些 jar 可从 Fabric API 0.155.2+26.2 发布包中提取(运行时容器 + 展平的子模块 jar)。

3. 构建与运行

cd example-mod
.\gradlew runServer               # 启动示例模组服务端
.\gradlew runClient               # 启动示例模组客户端(连接本地服务端)
.\gradlew build                   # 生成 build/libs/enchantlib-examplemod-1.0.1.jar

服务端启动后,玩家加入时会自动接收资源包(附魔本地化名称)。使用 /enchantlib list 可查看全部 12 个附魔,使用 /enchantlib give <id> [level] 可直接对手持物品附魔以便测试。

打包产物 enchantlib-examplemod-1.0.1.jar 必须与 enchantlib-26.2-1.0.1.jar 一起放入服务端的 mods/ 目录。


作为开发模板

如果你想基于示例模组编写自己的附魔模组,可以参考本项目的结构作为模板:

  1. 将 ExampleModEnchantments 重命名为你的入口类,并删除不需要的附魔子模块
  2. 保留 resolveEnchantment 公共辅助方法和 MOD_ID 常量
  3. 按照 enchantment/XxxEnchantment.java 模式为每个附魔新增文件:register 负责注册,registerCallbacks 负责绑定事件,私有静态方法实现回调

每个附魔文件都是独立的:包含自己的 ID 常量、Holder 字段、事件回调,互不影响,便于阅读和维护。


相关文档

  • EnchantLib 开发者手册 — 见前置 enchantlib 仓库的 docs/developer-guide.md(完整 API 参考)

作者

liluo23 · MIT 许可证