Variants-CIT

Variants-CIT

针对具有重复模式的大型变异集合的备选CIT格式。

基础库

Variants-CIT

一种替代性的 CIT 格式,旨在处理大量变体。

该模组在以下场景中表现出色:一个物品拥有许多基于相同数据片段的变体。当存在极大量 CIT 时,它能提供更好的性能,并使用冗余更少的资源格式,只需一个简短文件即可一次性配置某个物品的所有可能变体。

仍支持逐案例分配模型(类似于 Optifine-CIT 的处理方式),但性能不如前者。

资源包格式

以下是快速展示。完整指南请参阅 Wiki

该格式的核心在于:物品变体自动关联到具有匹配名称的模型或纹理。 无需为每个变体定义单独的条件,你只需定义一个规则来统辖集合中的所有变体(即所谓的 模块)。该模块定义了受影响的物品、如何识别其变体,以及变体模型所在的位置。

全自动变体到模型的关联

以下是一个简单模块,用于更改附魔书的纹理:

{
	"items": "enchanted_book", // 受影响的物品类型

	"modelPrefix": "book_cit/", // 包含可能模型/纹理的文件夹
	"assetGen": "item_model/generated", // 从纹理自动生成模型(如果缺失)
	
	"type": "stored_entchantment", // 如何计算物品的“变体 ID”
	"parameters": { // 模块类型专属的额外选项
		"levelSeparator": "_lvl_" // 在变体 ID 中包含附魔等级
	}
}

此处,一本附有 minecraft:unbreaking 且等级为 2 的书,其变体 ID 为 minecraft:unbreaking_lvl_2,因此会使用存储在 /assets/minecraft/textures/item/book_cit/unbreaking_lvl_2.png 的纹理。 该单一模块适用于所有可能的附魔,无论是原版还是模组,只要有对应的纹理存在即可。

基于自定义数据的自动变体

上述模块具有专为附魔书设计的类型。如果特定用例没有现成类型,你仍可使用更通用的模块从任何组件中获取变体:

{
	"items": "minecraft:suspicious_stew",
	"modelPrefix": "item/suspicious_stew_cit/",
	"assetGen": "item_model/generated",

	"type": "component_data",
	"parameters": {
		"componentType": "suspicious_stew_effects", // 包含变体 ID 的组件
		"nbtPath": "[0].id" // 变体 ID 在组件中的位置
	}
}

处理无法直接使用的数据:

{
	"items": "diamond_sword",

	"modelPrefix": "item/named_swords/",
	"assetGen": "item_model/handheld",

	"type": "component_data",
	"parameters":
	{
		"componentType": "custom_name",
		"transform": [
			{
				"function": "regex",
				// 模式匹配…
				"regex": "(?i)(.*'s )?(Great |Grand )?(?<var>.*(sword|dagger))( of doom)?",
				// …并且仅保留名称的一部分。
				"substitution": "$var"
				// (例如:“steev18's great Steel Sword” => “Steel Sword”)
			}
			{
				// 将任何文本转换为有效的标识符
				"function": "sanitize"
				// (例如:“Steel Sword” => “minecraft:steel_sword”)
			}
		]
	}
}

结合来自不同来源的多项数据:

{
	"items": "minecraft:diamond_sword",
	"modelPrefix": "item/trimmed_diamond_sword/",
	"assetGen": "item_model/handheld",

	"type": "component_format",
	"parameters":
	{
		// 如何将各项数据组合成变体 ID
		// (例如:sentry_diamond)
		"format": "${pattern}_${material}",
		// 在何处查找这些数据。
		"variables": {
			"pattern": {
				"componentType": "trim",
				"nbtPath": ".pattern"
			},
			"material": {
				"componentType": "trim",
				"nbtPath": ".material",
				"transform": "discard_namespace"
			}
		}
	}
}

逐案例变体

对于不完全遵循规则的系统(或者变体数量太少,无需自动化),你可以使用更接近 Optifine-CIT 范式的格式:

{
	"items": "trident",
	"modelPrefix": "item/godly_tridents/",
	"assetGen": "item_model/trident",

	"type": "predicates",
	"parameters": {
		"predicates":
		[
			{
				"variantId": "zeus_smite",
				"precondition": {
					"enchantments.channeling": { "greater_or_equals": 1 }
				}
			},
			{
				"variantId": "jupiter_syphon",
				"precondition": {
					"enchantments.riptide": { "greater_or_equals": 1 }
				}
			}
			// 等等
		]
	}
}