跳到正文
烈焰甘蔗Wiki

Slab (Carvable)

可雕刻半砖方块,支持双层堆叠。

基本属性

属性 值
注册名 chisel:marble_slab / chisel:limestone_slab / chisel:marble_pillar_slab / chisel:concrete_slab
父类 BlockCarvable
物品类 ItemCarvableSlab
渲染 非实心 (isOpaqueCube() = false)
物品高度 0.5F(setBlockBoundsForItemRender → 0~0.5)

双层机制

  • isBottom - 标记当前实例是下半砖还是上半砖(BlockCarvableSlab.java:27、:48)
  • bottom / top - 引用配对的半砖(:25-26、:43-44)
  • master - 引用满方块本体,两半填满时替换成它(:24)

上下半砖是两个独立的 Block 实例(top = new BlockCarvableSlab(this), BlockCarvableSlab.java:35),共享同一个 carverHelper(:46), 靠 isBottom 区分高度,不是靠 metadata。

放置逻辑

已订正(编造的方法):原文列有"onBlockPlaced - 根据放置面和高度确定 metadata"。 BlockCarvableSlab 中不存在 onBlockPlaced 方法(已确认全文)。 上下半砖的选择完全在物品类 ItemCarvableSlab.onItemUse 中完成:

  • 点击位置 hy > 0.5D 且不是从下方点击 → 放 block.top,否则放 block.bottom (ItemCarvableSlab.java:59-63)
  • 若目标处已是配对的另一半且 meta 相同 → 直接放 block.master(满方块), 即"双层填满变回整块"(ItemCarvableSlab.java:40-45)
  • 若点击的是下半砖且从上方点击(或上半砖从下方点击)→ 补满为 block.master (ItemCarvableSlab.java:48-53)

证据:ItemCarvableSlab.java:23-67;BlockCarvableSlab 全文无 onBlockPlaced。

setBlockBoundsForItemRender 固定为 0~0.5 半高(BlockCarvableSlab.java:73-75); addCollisionBoxesToList 先调 setBlockBoundsBasedOnState 再交给父类 (BlockCarvableSlab.java:78-84)。

材质属性

方法 行为
isOpaqueCube() false(:88-90)
renderAsNormalBlock() false(:104-106)
isSideSolid() !isBottom && (side == UP)——下半砖顶面实心,上半砖任何面都不实心(:137-140)
damageDropped(int) 返回 meta,保留变体(:92-94)

已订正(语义写反):原文写"isSideSolid() | 仅顶面实心(isBottom=false 时)"。 条件写反。源码是 return !isBottom && (side == UP); ——即 isBottom = true(下半砖)时顶面才实心;上半砖对 UP 也返回 false。 证据:BlockCarvableSlab.java:137-140。

注册的半砖(各自独立变体组)

方块 变体组 证据
chisel:marble_slab marble_slab Features.java:2538
chisel:limestone_slab limestone_slab Features.java:2424
chisel:marble_pillar_slab marble_pillar_slab Features.java:2759
chisel:concrete_slab concrete_slab Features.java:888

这 4 个是四个互不相通的组,不能互相雕刻替换(原文把它们并列但未说明组关系)。

破坏行为

getItemDropped 返回 Item.getItemFromBlock(bottom)(BlockCarvableSlab.java:97-99), getPickBlock 同样返回 new ItemStack(bottom, 1, meta)(:109-112)—— 无论破坏上半砖还是下半砖,掉落的都是下半砖的物品。

浏览全部模组