无需模组的自定义附魔:数据驱动的附魔格式
附魔已变为数据包 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 及其盔甲纹饰对应物,并设置好标签和槽位。