Orange(食物)
事实基准:
harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。
基本信息
| 属性 | 值 | 来源 |
|---|---|---|
| 注册名 | harvestcraft:orangeItem |
ItemRegistry.java:1971 |
| 显示名 | Orange |
en_US.lang:428 |
| Java 类 | ItemFood |
ItemRegistry.java:1185 |
| 字段 | ItemRegistry.orangeItem |
ItemRegistry.java 字段声明 |
| 创造标签 | tabHarvestCraft2(HarvestCraft Crops) |
ItemRegistry.java:1185 |
| 条件注册 | 否,无条件注册 | ItemRegistry.java:1971 |
| 属性 | 值 | 来源 |
|---|---|---|
| 最大堆叠 | 64(未覆写,Item 默认) |
ItemFood 未覆写 |
| 耐久度 | 无 | 无 setMaxDamage 调用 |
| 饥饿值恢复 | cropfoodRestore |
ItemRegistry.java:1185(构造器第 1 参数) |
| 饱和度 | cropsaturationRestore(推定) |
配置键同名,默认 0.6f —— 依据见下方说明 |
狼食物(isWolfFood) |
false |
CFR 输出的末位实参字面量 —— 依据见下方说明 |
| 食用动作 | 吃(eat) —— 继承 ItemFood 默认,未覆写 getItemUseAction |
ItemRegistry.java:1185 |
获取方式(源码中登记的配方)
压制机(Presser)
| 来源 | 配方 |
|---|---|
PresserRecipes.java:35 |
作为原料被加工为:orangejuiceItem、fruitbaitItem |
作为材料被使用
下列合成台配方把本物品列为材料。分两类:经矿词典名匹配的,与把本物品以 Item 实例直接引用的。两者都是集合关系,已按 (来源, 产物) 去重。
经矿词典名匹配
| 来源 | 产物 | 命中的矿词典名 | 同一配方中的其它矿词典材料 |
|---|---|---|---|
PamFoodRecipes.java:187 |
fruitsaladItem |
listAllfruit |
砧板(toolCuttingboard) |
PamFoodRecipes.java:385 |
fruitcrumbleItem |
listAllfruit |
foodButter、foodFlour、foodGroundcinnamon、烤盘(toolBakeware) |
PamFoodRecipes.java:400 |
orangejuiceItem |
cropOrange |
榨汁机(toolJuicer) |
PamFoodRecipes.java:401 |
orangechickenItem |
cropOrange |
cropBroccoli、cropRice、listAllchicken、listAllsugar、深锅(toolSaucepan) |
PamFoodRecipes.java:402 |
orangesmoothieItem |
cropOrange |
榨汁机(toolJuicer) |
PamFoodRecipes.java:403 |
orangeyogurtItem |
cropOrange |
foodPlainyogurt |
PamFoodRecipes.java:436 |
jaffaItem |
cropOrange |
foodChocolatebar、foodFlour、listAllegg、listAllsugar、烤盘(toolBakeware) |
PamFoodRecipes.java:488 |
fruitpunchItem |
listAllfruit |
listAllsugar、榨汁机(toolJuicer) |
PamFoodRecipes.java:510 |
orangejellyItem |
cropOrange |
listAllsugar、深锅(toolSaucepan) |
PamFoodRecipes.java:587 |
citrussaladItem |
listAllcitrus |
cropLettuce、砧板(toolCuttingboard) |
PamFoodRecipes.java:665 |
mincepieItem |
listAllfruit |
foodButter、foodDough、listAllbeefcooked、listAllnut、烤盘(toolBakeware) |
PamOtherRecipes.java:148 |
fruitbaitItem |
listAllfruit |
— |
矿词典(OreDictionary)
本物品注册进以下矿词典名。注意方向:注册进矿词典只代表本物品可被当作这些名字的材料使用,不代表它拥有这些名字对应的其他物品。
| 矿词典名 | 注册位置 |
|---|---|
cropOrange |
PamFoodOreDictionaryRegistry.java:480 |
listAllfruit |
PamFoodOreDictionaryRegistry.java:481 |
listAllcitrus |
PamFoodOreDictionaryRegistry.java:482 |
源码缺陷 / 备注
- ⚠️ 构造器实参个数与
ItemFood签名不符。ItemRegistry.java:1185写的是new ItemFood(cropfoodRestore,false)—— 只有 2 个实参,而 1.7.10 原版ItemFood的构造器是ItemFood(int amount, float saturation, boolean isWolfFood),需要 3 个。Java 不允许这样编译。- 本仓库不含原版 Minecraft 源码、也不含 MCP 映射表,因此无法判定缺的是哪一参,也无法判定这是 mod 的源码错误还是 CFR 0.152 的反编译产物(
ItemRegistry.java:1001附近有 CFR 的 「Opcode count of 13216 triggered aggressive code reduction」注释)。 - 本条目的三个字段中:饥饿值 =
cropfoodRestore是直读;狼食物 =false是 CFR 输出的末位实参,推定为直读;饱和度 =cropsaturationRestore(默认0.6f)是推定,依据见上表。 - 📌 CFR 0.152 在这条
ItemFood路径上丢了中间实参。判定依据三条: ① 1.7.10 的ItemFood只有(int,float,boolean)/(int,float,boolean,Block),无 2 参构造器; ② 同一个参数cropsaturationRestore在ItemPamSeedFood调用(ItemRegistry.java:1034、:1038-1044)里 CFR 正常显示为第 2 实参 ⇒ 是路径特异性的解码缺陷,不是源码如此; ③ 全仓 501 处new ItemFood中唯这 34 处是 2 参,异常点唯一且集中。 - 要真正直读需列出
invokespecial之前ldc的常量索引(本机只有 JRE 无javap),尚未做到。 - 这不是孤例:全仓库共有 34 处
new ItemFood(cropfoodRestore, false)两参调用,全部是果树/坚果/香料类物品(杏仁、杏、牛油果、香蕉、腰果、樱桃、栗、肉桂、椰、椰枣、火龙果、榴莲、无花果、葡萄柚、柠檬、青柠、枫糖浆、芒果、肉豆蔻、橄榄、橙、木瓜、桃、梨、山核桃、辣椒柿子、开心果、李子、石榴、杨桃、香草豆、胡桃、鹅莓)。
- 本仓库不含原版 Minecraft 源码、也不含 MCP 映射表,因此无法判定缺的是哪一参,也无法判定这是 mod 的源码错误还是 CFR 0.152 的反编译产物(
相关条目
- 家族汇总:Pam Food