跳到正文
烈焰甘蔗Wiki

Red Velvet Cake(pamredvelvetCake)

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

基本信息

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

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

食用效果

项 值 来源
每片食物值 2 BlockPamCake.java:99(有 AppleCore)/ :83(无 AppleCore)
每片饱和度 0.1f 同上
整块吃完总计 8 食物值 / 0.4 饱和度 上两行 × 4 片(计算值)
回血 / 生命回复 无 —— 全类无任何 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 ~ 3,共 4 个形态 BlockRegistry.java:630 + BlockPamCake.java:39
碰撞箱宽度 0.0625 + 0.875 * (meta / 4),随吃掉逐片收缩 BlockPamCake.java:36-48
高度 0.5 BlockPamCake.java:40-41
选择框 与碰撞箱同宽,但不含 0.0625 的 Y 偏移 BlockPamCake.java:59-65
食用后 meta + 1;当 nextMeta >= 4 时整个方块消失 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:redvelvetcakeItem ItemRegistry.java:2266
字段 ItemRegistry.redvelvetcakeItem 声明 ItemRegistry.java:1461
类 ItemPamCakeFood(extends ItemReed) ItemPamCakeFood.java:9-10
构造实参 (8, snacksaturation, false, BlockRegistry.pamredvelvetCake) ItemRegistry.java:1461
显示名 item.redvelvetcakeItem.name = Red Velvet Cake en_US.lang:754

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

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

配方

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

toolBakeware + listAllmilk + foodFlour + listAllheavycream + listAllsugar + listAllegg + dyeRed + dyeRed  ->  redvelvetcakeItem
槽位 矿物词典名
1 toolBakeware
2 listAllmilk
3 foodFlour
4 listAllheavycream
5 listAllsugar
6 listAllegg
7 dyeRed
8 dyeRed

破坏掉落

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)调用点无对应可读语义,不做断言。

相关条目

浏览全部模组