背包染色配方

[!INFO] 注册真源:RecipeHelper.registerRecipes() 中的 for (int i = 1; i < 17; i++) 循环

基本信息

RecipeHelper 用一个 dyes 字符串数组把颜色索引映射到原版染料 Item, 再对 16 种颜色各注册 3 个 ShapedOreRecipe:

String[] dyes = { "dyeBlack", "dyeRed", "dyeGreen", "dyeBrown", "dyeBlue", "dyePurple",
        "dyeCyan", "dyeLightGray", "dyeGray", "dyePink", "dyeLime", "dyeYellow",
        "dyeLightBlue", "dyeMagenta", "dyeOrange", "dyeWhite" };

16 × 3 = 48 个静态配方,全部为 "LLL" / "LDL" / "LLL" 形状(L=皮革类材料,D=染料)。

颜色索引表

索引 i 直接对应 metadata 的个位/末两位,dyes[i-1] 为所用染料:

i 名称 染料 i 名称 染料
1 黑 dyeBlack 9 粉 dyePink
2 红 dyeRed 10 黄绿 dyeLime
3 绿 dyeGreen 11 黄 dyeYellow
4 棕 dyeBrown 12 淡蓝 dyeLightBlue
5 蓝 dyeBlue 13 品红 dyeMagenta
6 紫 dyePurple 14 橙 dyeOrange
7 青 dyeCyan 15 白 dyeWhite
8 淡灰 dyeLightGray 16 灰 dyeGray

metadata 0 = 无色(由独立的无染料配方产出)。

三组配方对照

目标 metadata 形状 L 开关条件
i(1…16) LLL/LDL/LLL Items.leather !DISABLE_BACKPACKS
100 + i MD(2 格) M = backpack(100) !DISABLE_BIG_BACKPACKS && !BIG_BY_UPGRADE_ONLY
200 + i LLL/LDL/LLL ItemsBackpack.tannedLeather 同上

中等级(100 + i)的形状是 2 格而非 8 格,材料是一个已合成的中等级无色背包 (metadata 100)加染料 —— 与另两组的材料逻辑完全不同。

两个无色基础配方(i = 0)

目标 形状 条件
0 普通无色 LLL/L L/LLL,L = Items.leather !DISABLE_BACKPACKS
100 中级无色 LLL/LNL/LLL,L = leather,N = backpack(0) !DISABLE_BACKPACKS 不适用;受 !DISABLE_BIG_BACKPACKS 控制
200 大级无色 LLL/L L/LLL,L = tannedLeather !DISABLE_BIG_BACKPACKS && !BIG_BY_UPGRADE_ONLY

⚠️ 中等级无色包的代码在 !DISABLE_BACKPACKS 之外:它被放在 if (!DISABLE_BIG_BACKPACKS && !BIG_BY_UPGRADE_ONLY) 块内, 所以 disableBackpacks = true 不会阻止 metadata 100 的产出。

Airship Mod 兼容分支

AIRSHIP_MOD_COMPATIBILITY 为 true 时,无色普通背包的配方由 LLL/L L/LLL 变为中心放箱子的 LLL/LCL/LLL(C = Blocks.chest):

if (ConfigurationBackpack.AIRSHIP_MOD_COMPATIBILITY) {
    GameRegistry.addRecipe(backpackStack, "LLL", "LCL", "LLL", 'L', Items.leather, 'C', Blocks.chest);
} else {
    GameRegistry.addRecipe(backpackStack, "LLL", "L L", "LLL", 'L', Items.leather);
}

此分支只影响 metadata 0 这一个配方,16 种染色配方不受影响。

末位背包(ENDERBACKPACK)不参与染色

末位包的两种配方由 ENDER_RECIPE 配置切换,与本条目无关:

enderRecipe 形状 材料
0(默认) LLL/LEL/LLL L = leather,E = Blocks.ender_chest
1 LLL/LDL/LLL L = leather,D = Items.ender_eye

相关条目