ItemOverrides
ItemOverrides 让 BakedModel 处理 ItemStack 的状态并返回新的 BakedModel,随后新模型替换旧模型。它表示任意函数 (BakedModel, ItemStack, ClientLevel, LivingEntity, int) → BakedModel,因此适合动态模型。原版使用它实现物品属性覆盖。
原创说明图,依据 Forge 1.21.x 官方文档 绘制。
ItemOverrides()
构造函数接收 ItemOverride 列表,将其复制并烘焙。可通过 #getOverrides 访问烘焙后的覆盖项。
resolve
接收 BakedModel、ItemStack、ClientLevel、LivingEntity 和 int,生成另一个用于渲染的 BakedModel。模型可在此处理物品状态。此方法不应修改世界。
getOverrides
返回不可变列表,其中包含该 ItemOverrides 使用的所有 BakedOverride。没有适用项时返回空列表。
BakedOverride
此类表示原版物品覆盖,保存多个针对物品属性的 ItemOverrides$PropertyMatcher,以及满足这些匹配条件时使用的模型。它们是原版物品 JSON 模型的 overrides 数组中的对象:
以下带注释的示例用于说明结构;实际 JSON 文件不支持注释和省略号,应移除并补全。
{
// 在原版 JSON 物品模型内
"overrides": [
{
// 这是一个 ItemOverride
"predicate": {
// 这是 Map<ResourceLocation, Float>,包含属性名称及其最小值
"example1:prop": 0.5
},
// 覆盖的 location 或目标模型;上方谓词匹配时使用
"model": "example1:item/model"
},
{
// 这是另一个 ItemOverride
"predicate": { "example2:prop": 1 },
"model": "example2:item/model"
}
]
}
原文:Item Overrides。