无需模组的自定义附魔:数据驱动的附魔格式
附魔现在是数据包 JSON 文件,因此自定义附魔无需模组。本文将介绍文件结构、实际生效的效果组件以及如何使其可获取。
附魔过去是硬编码的。现在它们是数据包数据,这意味着一个真正自定义的附魔——新的名称、新的效果、新的消耗曲线——都只是一个 JSON 文件。
文件位置
data/<namespace>/enchantment/lightning_strike.json
自重命名以来,与其他所有数据包类别一样,是单数形式的 enchantment/。
最小文件
{
"description": { "translate": "enchantment.my_pack.lightning_strike" },
"supported_items": "#minecraft:enchantable/sword",
"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/*标签已经存在,用于合理的物品分组。
使其生效
effects 附加行为:
"effects": {
"minecraft:post_attack": [{
"effect": { "type": "minecraft:run_function", "function": "my_pack:strike" },
"requirements": { "condition": "minecraft:random_chance", "chance": 0.25 }
}]
}
run_function 是一个“逃生舱”——函数能做的一切,附魔也能做。内置的效果类型涵盖了伤害、击退、耐久度、物品掉落和属性,完全不需要函数,而且成本更低。
requirements 接受任何谓词(predicate),因此根据目标类型、天气或随机几率进行限制只需一个 JSON 块。
命名
description 是一个文本组件,因此硬编码的名称是可行的:
"description": { "text": "Lightning Strike", "color": "gold" }
但 translate 键加上资源包中的语言文件,才能让其他语言的玩家正确阅读——这与本网站从 Mojang 自己的翻译中获取游戏术语的原因相同。
使其可获取
有三种途径,通常你需要不止一种:
- 附魔台 — 一旦设置了
weight和消耗曲线,就会自动出现。 - 战利品表 — 列出你的附魔的
enchant_randomly,或者如果它应该在成本上竞争,则使用enchant_with_levels。 - 村民:交易 — 交易物品中包含你的附魔的附魔书。
将其添加到 #minecraft:in_enchanting_table 是使附魔台提供它的关键;这个标签很容易被遗忘,导致附魔存在但从不出现。
在 自定义附魔和盔甲纹饰生成器 中构建附魔 JSON 及其盔甲纹饰对应项,并设置好标签和槽位。