浆果丛
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | 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(即完全成熟)时:
- 方块元数据减 4(
meta - 4),退回未成熟状态 - 在玩家位置生成
EntityItem,物品为NContent.berryItem,meta 为meta - 12(对应浆果种类) - 若玩家不是
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)。