合成配方
基本信息
| 属性 | 值 |
|---|---|
| 注册类 | RecipeList(mechanics/RecipeList.java,371 行) |
| 注册方式 | GameRegistry.addShapedRecipe / addShapelessRecipe + 1 条 FurnaceRecipes.smelting() |
| 实际配方数 | 71 条 |
| 调用点 | 37 个 GameRegistry 调用点(其中 2 个在 for 循环内) |
| 注册时机 | preInit(HardcoreEnderExpansion.java:140 前后,Stopwatch 计时包裹) |
功能
配方分三段:// SHAPED(L21)、诅咒循环(L162–185)、// SMELTING(L363–366)。
71 条配方是怎么算出来的
| 分类 | 计算 | 条数 |
|---|---|---|
| 循环外的有序配方 | 29 个 addShapedRecipe 调用点 − 1(在 CurseType 循环内,L163) |
28 |
| 循环外的无序配方 | 8 个 addShapelessRecipe 调用点 − 1(诅咒永恒变体在循环内,L181)− 1(染料循环 L348) |
6 |
| 诅咒循环产出 | CurseType.VALUES 共 11 个常量 × (1 有序 + 1 无序) |
22 |
| 染料循环产出 | for (int a = 0; a < 14; a++)(L347) |
14 |
| 熔炼配方 | FurnaceRecipes.smelting().func_151393_a(L365) |
1 |
| 合计 | 28 + 6 + 22 + 14 + 1 | 71 |
三种互相验证的计数表述(对应简报检查 #11):
grep -c 'addShapedRecipe('→ 29;grep -c 'addShapelessRecipe('→ 8(均含方法调用,无声明干扰)- Python 剥离注释后
re.findall(r'addShapedRecipe', t)→ 29,addShapelessRecipe→ 8 - Python 按括号深度提取调用块 → 37 个
GameRegistry调用点,与 29 + 8 = 37 一致
数值
全部 37 个调用点逐条列表
| # | 行 | 类型 | 产物 | 配方 |
|---|---|---|---|---|
| 1 | 23 | 有序 | ItemList.altar_nexus |
DED(D=钻石 E=末影之眼) |
| 2 | 26 | 有序 | BlockList.laboratory_glass ×8 |
BBB / BLB / BBB(B=玻璃 L=end_powder) |
| 3 | 36 | 有序 | BlockList.essence_altar |
LLL / BNB / OOO(L=皮革 B=书架 N=altar_nexus O=黑曜石) |
| 4 | 50 | 有序 | BlockList.void_chest |
PPP / ECE / PPP(E=endium_block C=末影箱 P=end_powder) |
| 5 | 62 | 有序 | BlockList.decomposition_table |
PBP / SCS / INI,中心 C=igneous_rock |
| 6 | 80 | 有序 | BlockList.experience_table |
同框架,中心 C=Items.glass_bottle |
| 7 | 98 | 有序 | BlockList.accumulation_table |
同框架,中心 C=energy_wand_core |
| 8 | 116 | 有序 | BlockList.extraction_table |
同框架,中心 C=living_matter |
| 9 | 134 | 有序 | ItemList.biome_compass |
N / NSN / N(N=endium_ingot S=end_powder) |
| 10 | 144 | 有序 | ItemList.spectral_tear |
E / ETE / E(E=ectoplasm T=恶魂之泪) |
| 11 | 154 | 无序 | ItemList.living_matter |
silverfish_blood + Items.bone + Items.spider_eye + spectral_tear + instability_orb |
| 12 | 163 | 有序(11 循环) | ItemList.curse ×8, curse.damage |
PAP / DLB / PCP |
| 13 | 181 | 无序(11 循环) | ItemList.curse ×1, damage | 0b100000000 |
curse + stardust + arcane_shard |
| 14 | 188 | 有序 | ItemList.charm_pouch |
PLP / LRL / PLP(R=rune WILDCARD) |
| 15 | 200 | 有序 | ItemList.obsidian_rod |
" F" / "F "(F=obsidian_fragment) |
| 16 | 202 | 有序 | Blocks.obsidian(原版黑曜石) |
3×3 F(F=obsidian_fragment) |
| 17 | 205 | 有序 | BlockList.obsidian_stairs |
" F" / " FF" / "FFF" |
| 18 | 213 | 有序 | BlockList.obsidian_special meta 0 |
3×3 C,C=Blocks.quartz_block meta 0 |
| 19 | 223 | 有序 | BlockList.obsidian_special meta 1 |
3×3 C,C=Blocks.quartz_block meta 1 |
| 20 | 233 | 有序 | BlockList.obsidian_special meta 2 |
3×3 C,C=Blocks.quartz_block meta 2 |
| 21 | 243 | 有序 | ItemList.energy_wand_core |
3×3 A,A=auricion,中心 E=endium_block |
| 22 | 253 | 有序 | ItemList.energy_wand |
" C" / " R " / "R "(C=energy_wand_core R=obsidian_rod) |
| 23 | 263 | 有序 | BlockList.ravaged_brick_slab ×6 |
"XXX",X=ravaged_brick WILDCARD |
| 24 | 269 | 有序 | BlockList.ravaged_brick_stairs ×4 |
" X" / " XX" / "XXX" |
| 25 | 277 | 有序 | BlockList.ravaged_brick_fence ×6 |
"XXX" / "XXX" |
| 26 | 284 | 有序 | BlockList.spooky_log |
3×3 X(X=dry_splinter) |
| 27 | 287 | 无序 | BlockList.spooky_leaves |
dry_splinter + Blocks.deadbush + Blocks.sand |
| 28 | 293 | 有序 | ItemList.scorching_pickaxe |
FFF / FPF / FFF(F=infernium P=金镐) |
| 29 | 303 | 有序 | ItemList.blank_gem |
AAA / AEA / AAA(A=arcane_shard E=endium_block) |
| 30 | 313 | 有序 | ItemList.spatial_dash_gem |
APA / PGP / APA(A=arcane_shard P=末影珍珠 G=blank_gem) |
| 31 | 325 | 有序 | ItemList.transference_gem |
AEA / EGE / AEA(A=arcane_shard E=ectoplasm G=spatial_dash_gem) |
| 32 | 337 | 有序 | BlockList.endium_block |
3×3 X(X=endium_ingot) |
| 33 | 345 | 无序 | ItemList.endium_ingot ×9 |
BlockList.endium_block |
| 34 | 348 | 无序(14 循环) | Items.dye ×2 meta 13(红染料) |
death_flower meta 0–13 各一条 |
| 35 | 352 | 无序 | Items.dye ×2 meta 8(绿染料) |
death_flower meta 15 |
| 36 | 354 | 无序 | Items.dye ×2 meta 14(黄染料) |
crossed_decoration meta dataLilyFire |
| 37 | 358 | 无序 | Items.ender_eye(原版末影之眼) |
enhanced_ender_pearl + Items.blaze_powder |
5–8 号的共用框架
PBP
SCS
INI
| 符号 | 物品 |
|---|---|
P |
ItemList.end_powder |
B |
Blocks.iron_bars(铁栏杆) |
S |
Blocks.stone |
C |
见表;4 种台各 1 条,共 4 条 |
N |
BlockList.endium_block |
I |
Blocks.iron_block |
诅咒配方(22 条)
- 本体(11 条,L163–179):
PAP/DLB/PCP产出ItemStack(ItemList.curse, 8, curse.damage)。A=curse.getRecipeItem(0)、B=…(1)、C=…(2)、D=…(3),四种材料逐诅咒不同(见 诅咒系统) - 永恒变体(11 条,L181–185):无序,
ItemStack(curse, 1, curse.damage)+stardust+arcane_shard→ItemStack(curse, 1, curse.damage | 0b100000000)
熔炼(1 条,L365)
FurnaceRecipes.smelting().func_151393_a(BlockList.endium_ore, new ItemStack(ItemList.endium_ingot), 0.9F);
endium_ore → endium_ingot,经验 0.9F。
交互
rune与ravaged_brick在本文件中只作为材料出现(new ItemStack(ItemList.rune, 1, WILDCARD_VALUE)/new ItemStack(BlockList.ravaged_brick, 1, WILDCARD_VALUE)),没有以它们为产物的配方 —— 因此它们无法通过合成获得- 12–13 号的诅咒配方在
for (CurseType curse : CurseType.VALUES)循环内(RecipeList.java:162),迭代对象是 11 常量枚举 —— 这是简报检查 #6「注册方法名 ≠ 注册」与「枚举 + 循环」的实例:11 个调用点产生 22 条配方 - 34 号在
for (int a = 0; a < 14; a++)循环内(RecipeList.java:347),1 个调用点产生 14 条配方 - 2 号、23 号、25 号、33 号、14 号用
OreDictionary.WILDCARD_VALUE或数量参数
无合成配方的内容
以下注册物品在 RecipeList.java 中完全没有配方,只能由世界生成、结构、宝箱 / 神殿战利品或祭坛转化获得:
| 类别 | 物品 |
|---|---|
| 材料 | end_powder、stardust、ectoplasm、infernium(fire_shard)、silverfish_blood、dry_splinter、obsidian_fragment、arcane_shard、auricion、music_disk、enderman_head、bucket_ender_goo |
| 矿石 | end_powder_ore / stardust_ore / igneous_rock_ore / instability_orb_ore / sphalerite 的产物(只有 endium_ore 有熔炼配方) |
| 方块 | transport_beacon、energy_cluster、corrupted_energy_high / _low、laser_beam、temple_end_portal、biome_core、death_flower_pot、custom_spawner、block_special_effects、cinder、persegrit、laboratory_obsidian / _floor / _stairs、end_stone_terrain、ravaged_brick(本体)、enhanced_tnt |
| 工具 | enhanced_brewing_stand、enhanced_ender_pearl、potion_of_instability、potion_of_purity、infestation_remedy、ghost_amulet、curse_amulet、spawn_eggs |
| 物品 | essence(由祭坛产出) |
| 全部方块物品 | decomposition_table / experience_table / accumulation_table / extraction_table / essence_altar / void_chest 有配方;但 enhanced_tnt、enhanced_brewing_stand(作为方块)没有 |
「有 / 没有配方」判定方式:在
mechanics/RecipeList.java全文 grep 目标字段名(BlockList.xxx/ItemList.xxx/Blocks.xxx/Items.xxx)作为 产物(new ItemStack(...)首个参数)。命中 = 有配方,未命中 = 无。