跳到正文
烈焰甘蔗Wiki

Pumpkin Cheese Cake(pampumpkincheeseCake)

事实基准:harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。

基本信息

属性 值 来源
注册名 harvestcraft:pampumpkincheeseCake BlockRegistry.java:824
源码类 BlockPamCake(extends BlockCake implements IEdibleBlock) BlockPamCake.java:24-26
字段 BlockRegistry.pampumpkincheeseCake BlockRegistry.java:634
构造 new BlockPamCake(6).func_149711_c(0.5f).func_149658_d("harvestcraft:pampumpkincheesecake").func_149663_c("pampumpkincheeseCake").func_149647_a(HarvestCraft.tabHarvestCraft3) BlockRegistry.java:634
显示名 tile.pampumpkincheeseCake.name = Pumpkin Cheese Cake en_US.lang:233
可食用片数(= meta 数) 6 BlockRegistry.java:634(构造器第 1 参数)
硬度 0.5f(func_149711_c) BlockRegistry.java:634
爆炸抗性 未调用 func_149722_d,沿用原版 BlockCake 默认值 —
TileEntity 无 —
多方块 否,单方块,无朝向覆写 —
创造标签 tabHarvestCraft3 BlockRegistry.java:634

片数是构造期硬编码的,Config.java 中没有任何蛋糕相关配置项 —— 即不可配置。10 个变体的片数在 BlockRegistry.java:625-634 逐个传参,实际为 3 / 4 / 5 / 6 四种,不是统一的 6 片。

食用效果

项 值 来源
每片食物值 2 BlockPamCake.java:99(有 AppleCore)/ :83(无 AppleCore)
每片饱和度 0.1f 同上
整块吃完总计 12 食物值 / 0.6 饱和度 上两行 × 6 片(计算值)
回血 / 生命回复 无 —— 全类无任何 addPotionEffect 调用 BlockPamCake.java 全文
特殊增益(药水效果) 无 —— 只有上述食物值与饱和度 同上
满饥饿时能否再吃 不能(isEdibleAtMaxHunger 恒为 false) 见下

食用走的是 consume(...)(BlockPamCake.java:76-91),两条分支给出同一个数值:

if (HarvestCraft.isLoadedAppleCore) {
    this.onEatenCompatibility(new ItemStack((Block)this), player);   // :81
} else {
    player.func_71024_bL().func_75122_a(2, 0.1f);                  // :83
}

getFoodValues 同样返回 new FoodValues(2, 0.1f)(BlockPamCake.java:99)。注意 BlockPamCake.java:98-100 带 @Optional.Method(modid="AppleCoreAPI") 注解,即该方法只在装了 AppleCore 时存在。

isEdibleAtMaxHunger 恒为 false

  • 字段声明并初始化为 false:BlockPamCake.java:28
  • 唯一的 setter setEdibleAtMaxHunger(boolean):BlockPamCake.java:93-95
  • 全 mod 范围内没有任何一处调用该 setter(grep -rn "setEdibleAtMaxHunger" 仅命中声明处与定义处)
  • 因此 :77 的 player.func_71043_e(this.isEdibleAtMaxHunger) 始终以 false 调用,即饥饿条满时无法食用。

放置形态

项 值 来源
metadata 取值 0 ~ 5,共 6 个形态 BlockRegistry.java:634 + BlockPamCake.java:39
碰撞箱宽度 0.0625 + 0.875 * (meta / 6),随吃掉逐片收缩 BlockPamCake.java:36-48
高度 0.5 BlockPamCake.java:40-41
选择框 与碰撞箱同宽,但不含 0.0625 的 Y 偏移 BlockPamCake.java:59-65
食用后 meta + 1;当 nextMeta >= 6 时整个方块消失 BlockPamCake.java:85-90

源码没有 PropertyInteger,metadata 是用 world.func_72805_g(x,y,z) 直接读的原始值(BlockPamCake.java:37、:51、:60、:85),因此不存在 1.12.2 版那个「BITES 属性范围 0-6」的声明。

物品形态

项 值 来源
物品注册名 harvestcraft:pumpkincheesecakeItem ItemRegistry.java:2262
字段 ItemRegistry.pumpkincheesecakeItem 声明 ItemRegistry.java:1701
类 ItemPamCakeFood(extends ItemReed) ItemPamCakeFood.java:9-10
构造实参 (12, snacksaturation, false, BlockRegistry.pampumpkincheeseCake) ItemRegistry.java:1701
显示名 item.pumpkincheesecakeItem.name = Pumpkin Cheesecake en_US.lang:1027

⚠️ 前 3 个构造参数被丢弃:ItemPamCakeFood 的构造器体内只有 super(cake);(ItemPamCakeFood.java:11-13),amount / saturation / isWolfFood 没有传给任何父类构造器。所以上表的 12(声明的食物值)与 snacksaturation(饱和度)全部无效 —— 这个物品本身没有任何食物属性。真正可食用的是放置后的方块。

本类继承的是 ItemReed(ItemPamCakeFood.java:10)—— 它持有蛋糕方块并据此提供 getItemStackFromBlock 与未本地化名,因此实际承担了「蛋糕方块的物品形态」这一角色;它与作物的 ItemPamSeedFood 毫无继承关系。

配方

配方类型 ShapelessOreRecipe(无序 + 矿物词典),登记于 PamFoodRecipes.java:677:

Blocks.field_150423_aK + foodCheesecake  ->  pumpkincheesecakeItem
槽位 矿物词典名
1 Blocks.field_150423_aK —— 原版方块。未反混淆,但本 mod 在 PamFoodOreDictionaryRegistry.java:22 把它登记为 cropPumpkin、:19 登记为 listAllveggie,故可确定为南瓜方块
2 foodCheesecake

破坏掉落

BlockPamCake 未覆写任何掉落方法(getItemDropped / quantityDropped 在 BlockPamCake.java 全文中均无覆写),行为完全继承原版 BlockCake。原版源码不在本仓库内,故不断言具体掉落物。

源码缺陷

  1. ItemPamCakeFood 的食物参数是死参数(ItemPamCakeFood.java:11-13)—— ItemRegistry.java 中 10 处调用传入的饥饿值 / 饱和度全部无效。
  2. setEdibleAtMaxHunger 无调用者(BlockPamCake.java:93-95)—— 配置意图无法生效,饥饿满时一律吃不了。
  3. 构造器里的 func_149649_H()(BlockPamCake.java:32)调用点无对应可读语义,不做断言。

相关条目

浏览全部模组