高大植物(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」章节)。