浆果丛

基本信息

属性 值
注册名 Natura:BerryBush(主世界)<br>Natura:NetherBerryBush(下界)
方块类 mods.natura.blocks.crops.BerryBush<br>NetherBerryBush
父类 net.minecraft.block.BlockLeavesBase(Material.leaves)
Item 类 mods.natura.items.blocks.BerryBushItem<br>NetherBerryBushItem
硬度 0.3(BerryBush 构造函数内设置)
脚步声 Block.soundTypeGrass
燃烧参数 60 / 100(仅主世界浆果丛)
贴图 8 张(4 种未成熟 + 4 种成熟)
采集方式 骨粉催熟;空手左右键采摘
开关 enableBerryBushes(主世界)<br>enableNetherBerryBushes(下界)

功能

浆果丛是 Natura 植物线的核心可交互方块。主世界版本为 BerryBush,下界版本为 NetherBerryBush(NContent.java:241-249)。两者在 Natura 中均有对应注册,且 Item 类不同以便区分 meta。

燃烧信息只在主世界版本注册:Blocks.fire.setFireInfo(berryBush, 60, 100)(NContent.java:248)。

骨粉催熟(boneFertilize)

BerryBush.boneFertilize(BerryBush.java:273-291)按元数据分两个阶段:

当前状态 行为
meta / 4 < 2(处于低阶段) 阶段 +1(setMeta = rand(2) + 1 + meta/4,上限 2),保持低 2 位不变,返回 true
meta / 4 >= 2(已完全长成) 若上方一格是空气,则有 1/3 概率在 y+1 长出同种浆果丛(meta 取 meta % 4),返回 true
上方非空气 返回 false

元数据的高位(/4)代表生长阶段,低 2 位(%4)代表浆果种类。

该方法由 Natura.bonemealEvent 触发:骨粉事件中若目标是 NContent.berryBush(需 enableBerryBushes)或 NContent.netherBerryBush(需 enableNetherBerryBushes),调用 boneFertilize 成功则 event.setResult(Result.ALLOW)(Natura.java:196-210)。

采摘

左键采摘(onBlockClicked,BerryBush.java:128-144):仅服务端执行,当 meta >= 12(即完全成熟)时:

  1. 方块元数据减 4(meta - 4),退回未成熟状态
  2. 在玩家位置生成 EntityItem,物品为 NContent.berryItem,meta 为 meta - 12(对应浆果种类)
  3. 若玩家不是 FakePlayer,调用 entityitem.onCollideWithPlayer(player) 触发拾取动画

右键采摘(onBlockActivated,BerryBush.java:146+):判定条件同为 meta >= 12,客户端直接 return true(防止放置方块),服务端执行与左键相同的掉落逻辑。

因此成熟浆果丛可以被左键或右键采摘,两者行为等价。

随机生长

BerryBush 构造时调用 setTickRandomly(true) 并设硬度 0.3F(BerryBush.java:37-41),贴图共 8 张(4 种未成熟 + 4 种成熟,textureNames 见 BerryBush.java:33-34)。

类中 onBlockClicked 使用 FakePlayer 判定以支持自动化采摘(BerryBush.java:142)。

数值

数值名 值 来源
硬度 0.3 BerryBush.java:40
成熟阈值 meta ≥ 12 BerryBush.java:131,154
骨粉阶段上限 2(setMeta 上限 2) BerryBush.java:276-278
向上生长概率 1/3(random.nextInt(3) == 0) BerryBush.java:287
燃烧参数 60 / 100 NContent.java:248
浆果种类数 4(主世界)/ 4(下界) NContent.java:759-770

交互

触发 行为
左键(meta ≥ 12) 元数据减 4,掉落对应浆果 1 个
右键(meta ≥ 12) 与左键相同;客户端直接拦截
骨粉(阶段 < 2) 生长阶段 +1,返回 true
骨粉(阶段 = 2 且上方空气) 1/3 概率在 y+1 长出新丛,返回 true
骨粉(阶段 = 2 且上方非空气) 返回 false,骨粉无效

变种

浆果种类由元数据低 2 位表示,共 4 种:

主世界浆果(BerryItem,NContent.java:756-763):

meta 浆果 物品字典
0 树莓 berryRasp
1 蓝莓 berryBlue
2 黑莓 berryBlack
3 马龙莓 berryMalo

下界浆果(NetherBerryItem,NContent.java:764-771):

meta 浆果 物品字典
0 枯萎浆果 berryBlight
1 暮色浆果 berryDusk
2 天空浆果 berrySky
3 刺浆果 berrySting

两种浆果物品均为 ItemFood,构造参数 healAmount = 1、饱和度 0.4F(items/BerryItem.java:24-25、items/NetherBerryItem.java:27-28)。

另有混合果酱(BerryMedley):healAmount = 5、饱和度 1.4F(items/BerryMedley.java:19-20,注册于 NContent.java:773-774,受 enableBerryBushes 控制)。

世界生成

主世界浆果丛由 BerryBushGen 生成,生成高度为 PHNatura.seaLevel + 对应 Spawn Range(BaseCropWorldgen.java:23-26):

浆果 生成范围偏移
树莓 seaLevel + raspSpawnRange(默认 seaLevel 64 + 64)
蓝莓 seaLevel + blueSpawnRange(64 + 64)
黑莓 seaLevel + blackSpawnRange(64 + 64)
马龙莓 seaLevel + geoSpawnRange(64 + 64)

下界浆果丛由 NetherBerryBushGen 生成,共 4 种(BaseCropWorldgen.java:30-33)。

相关条目