高大植物(TallPlantBlock)

6 种高可达多格的大型植物方块。metadata 不是变体,而是该植物的高度序号(从下往上 0…n-1)。 注册入口:ViriBlocks.registerTallPlant(String, int, int[, int])。

基本信息

属性 值 来源
Java 类 net.junedev.viridium.blocks.TallPlantBlock blocks/TallPlantBlock.java
材质 Material.grass 构造函数 super(Material.grass)
硬度 0.0F setHardness(0.0F)
脚步声 soundTypeGrass setStepSound
爆炸抗性 mod 代码未调用 setResistance() —
碰撞 无,getCollisionBoundingBoxFromPool() 返回 null —
选中框 按 pixelWidth / 32 计算的水平居中方形,高 1 格 getSelectedBoundingBoxFromPool()
渲染类型 ViriRenderIds.tallPlantBlockRenderId(运行时分配) getRenderType()
创造栏 Viridium.VTab setCreativeTab
贴图 viridium:complex_plants/<name>(整株一张 16px 宽长图) setBlockName()
TileEntity 无 —

方块列表(6 个)

verticalBlockSize = 占用的方块数,也是 metadata 上限;pixelWidth = 贴图中植株实际像素宽度(决定选中框宽度);textureX = 该植株在贴图中的横向起点(用于 CroppedIcon 切片)。

注册名 高度(格) 像素宽度 贴图X 游戏内名称
viridium:agave_americana_leaves 2 30 1 Agave Americana Leaves
viridium:welwitschia_leaf 3 19 22 Welwitschia Leaf
viridium:corpse_flower_inflorescence 2 24 4 Corpse Flower Inflorescence
viridium:corpse_flower_leaf 2 21 6 Corpse Flower Leaf
viridium:hemp_leaf 2 21 5 Hemp Leaf
viridium:monstera_leaf_large 2 13 9 Monstera Large Leaf

高度与 metadata 机制

放置时 onBlockPlacedBy 一次性把整株填满:

for (int i = 1; i < verticalBlockSize; i++)
    worldIn.setBlock(x, y + i, z, this, i, 2);   // meta = 高度序号 i

canPlaceBlockAt 在放置前检查上方 1..verticalBlockSize-1 是否全为空气,空间不足则拒绝放置。

metadata 语义由三个判定方法给出:

判定 条件 含义
isBottom(meta) meta == 0 植株底部
isTop(meta) meta == verticalBlockSize - 1 植株顶部
isMiddle(meta) 既不是顶也不是底 中间段

破坏与掉落

onBlockHarvested 只保留被挖的那一格,其余整株被清除:

for (int i = 0; i < verticalBlockSize; i++)
    if (i != meta) worldIn.setBlockToAir(x, y - meta + i, z);

getItemDropped 只在底部格掉落物品:

被挖的 metadata 掉落
0(底部) 自身(Item.getItemFromBlock(this))
1 .. n-1 null(无掉落)

因此挖中段或顶端拿不到任何物品,必须从最底下一格挖。

渲染与图标

  • getIcon(side, meta) 返回 croppedIcons[meta];meta 越界会打 WARN 日志并回退到 croppedIcons[0]
  • croppedIcons 在 registerBlockIcons 中由 CroppedIcon(fullIcon, i, textureX, pixelWidth, 16) 逐段构造——即一张长贴图按高度切片,每段是 pixelWidth 宽 × 16 高的图标
  • 位置抖动:getPositionHash(x, z) + getRandomOffset(hash, shift, range),按坐标哈希给每株植物一个固定的随机偏移

掉落物

mod 没有覆写 getDrops / breakBlock(零命中),掉落完全由上面的 getItemDropped + 原版 harvestBlock 决定。

配方

本 mod 不注册任何合成配方(见分类页「本 mod 没有 X」章节)。

相关条目

  • 灌木 - 另一类植物方块,碰撞与移动模型不同
  • 创造栏排序 - 创造栏排序中位于灌木、树木之后