MC Toolkit

指南 / 命令与数据

无需模组的自定义附魔:数据驱动的附魔格式

附魔已变为数据包 JSON,因此自定义附魔无需模组。以下是文件结构、真正生效的效果组件,以及如何让它可获得,权重决定附魔台里抽到的概率,原版常见附魔的权重是 10,非常稀有的附魔只有 1,差距十分悬殊。

附魔曾经是硬编码的。现在它们是数据包数据,这意味着一个真正自定义的附魔——新名称、新效果、新消耗曲线——就是一个 JSON 文件。

文件位置

data/<namespace>/enchantment/lightning_strike.json

单数形式的 enchantment/,与重命名以来所有其他数据包类别一样。

最小文件

{
  "description": { "translate": "enchantment.my_pack.lightning_strike" },
  "supported_items": "#minecraft:enchantable/melee_weapon",
  "weight": 2,
  "max_level": 3,
  "min_cost": { "base": 10, "per_level_above_first": 10 },
  "max_cost": { "base": 50, "per_level_above_first": 10 },
  "anvil_cost": 4,
  "slots": ["mainhand"]
}

这些就足以产生一个真实附魔,能够加载并显示在物品上。但它还不会做任何事——行为是分开的——而且附魔台在它被添加标签(见下文)之前不会提供它。

  • weight 是附魔台上的稀有度。原版用 10 表示常见,1 表示非常稀有。它是相对值,不是百分比。
  • slots 决定附魔在何处生效:mainhand、offhand、armor、head 等等。它是必填项:省略它文件将无法加载。
  • supported_items 接受物品标签或列表。#minecraft:enchantable/* 标签已经为合理的分组存在——melee_weapon、sharp_weapon、mining、armor 等等。没有 enchantable/sword;不存在的标签会导致文件加载失败。

让它做点什么

effects 附加行为:

"effects": {
  "minecraft:post_attack": [{
    "enchanted": "attacker",
    "affected": "victim",
    "effect": { "type": "minecraft:run_function", "function": "my_pack:strike" },
    "requirements": { "condition": "minecraft:random_chance", "chance": 0.25 }
  }]
}

post_attack 需要知道这是谁的附魔(enchanted)以及效果落在谁身上(affected)——两者都是必填项。run_function 是万能出口——函数能做的任何事,附魔都能做。内置效果类型涵盖伤害、击退、耐久度、物品掉落和属性,完全不需要函数,而且开销更低。

requirements 接受任何谓词,因此以目标类型、天气或随机概率为条件只需一段 JSON。

命名

description 是文本组件,所以硬编码名称可行:

"description": { "text": "Lightning Strike", "color": "gold" }

但 translate 键加上资源包中的语言文件,才能让其他语言的玩家正确阅读——这与本站从 Mojang 自己的翻译中获取游戏术语是同样的道理。

让它可获得

三条途径,通常你会想要不止一条:

  • 附魔台——一旦设置了 weight 和消耗曲线,并且附魔在 #minecraft:in_enchanting_table 中。
  • 战利品表——enchant_randomly 列出你的附魔,或者如果它应该在消耗上竞争,则用 enchant_with_levels。
  • 村民:交易——交易物品中带有你附魔的附魔书。

将其加入 #minecraft:in_enchanting_table 才能让附魔台提供它;这个标签很容易忘记,会导致附魔存在但从不出现。

在自定义附魔与纹饰构建器中构建附魔 JSON 及其盔甲纹饰对应物,并设置好标签和槽位。

自定义附魔与纹饰生成器 →

更多指南

查看全部 →