
单文件资源包实现竖半砖(超简单!)
该方法存在缺陷
在部分情况下该方法有视觉缺陷。详情见编者注。
引言
我悄无声息的来,悄无声息的离开,希望能够给你,留下一朵花开 ~ ~ ~ 咕咕嘎嘎 *OvO* Dreamy_Blaze在此致敬各位辛苦的建筑师,同时感谢香草图书馆对本文的支持!
随着Java版的更新,建筑党心心念念的 竖半砖 是不是有更好的实现方案了呢?没错,这里提供一个基于 原版资源包 的实现方案,特别轻量、简单!
在Java 1.21.9版本中Minecraft更新了 展示架 ,我们今天的主角就是使用展示架来模拟竖半砖,只需要写一个json文件就可以实现所有台阶的竖半砖形式,而且兼容大多数纹理包,甚至支持其他mod的半砖!
效果如图所示:

资源包已发布到MR和CF等模组平台,名为Vertical Slabs Shelf。
原理
下面简单介绍一下原理,保证小白也看得懂:
根据Wiki的介绍,在Minecraft中,模型分为 烘焙模型 和 动态模型 ,我们不需要知道它们是什么意思,只要知道绝大多数静态的方块都是使用的烘焙模型,烘焙模型是可以 继承 的,例如所有的方块继承自block,所有的台阶继承自slab,这样就可以拥有父模型的共同特征,通过指定元素parent即可继承父模型。因此,我们只要修改覆盖原版的父模型文件assets\minecraft\models\block\slab.json即可实现对所有半砖都生效的修改。
{
"parent": "block/block",
"textures": {
"particle": "#side"
},
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 8, 16 ],
"faces": {
"down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" },
"up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" },
"north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" },
"south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" },
"west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" },
"east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" }
}
}
]
}上面是原版slab模型文件,我们对其进行修改,最终结果如下所示:
{
"parent": "block/block",
"textures": {
"particle": "#side"
},
"elements": [
{
"from": [ -0.01, -0.01, -0.01 ],
"to": [ 16.01, 8.01, 16.01 ],
"faces": {
"down": { "uv": [ -0.01, -0.01, 16.01, 16.01 ], "texture": "#bottom", "cullface": "down" },
"up": { "uv": [ -0.01, -0.01, 16.01, 16.01 ], "texture": "#top" },
"north": { "uv": [ -0.01, 8.01, 16.01, 16.01 ], "texture": "#side", "cullface": "north" },
"south": { "uv": [ -0.01, 8.01, 16.01, 16.01 ], "texture": "#side", "cullface": "south" },
"west": { "uv": [ -0.01, 8.01, 16.01, 16.01 ], "texture": "#side", "cullface": "west" },
"east": { "uv": [ -0.01, 8.01, 16.01, 16.01 ], "texture": "#side", "cullface": "east" }
}
}
],
"display": {
"on_shelf": {
"rotation": [-90, 0, 0],
"translation": [0, 0, -16],
"scale": [4, 4, 4]
}
}
}好,我们解释一下,首先增加了display标签,它们的格式都可以在Wiki中查阅到,然后添加on_shelf的参数作为台阶类物品在展示架上的渲染变换,通过一定的旋转、偏移和缩放(可使用Blockbench工具编辑),实现物品放在展示架上的时候,渲染一个竖半砖;其次,由于scale最大限制只能为4,这样修改完以后一个问题是,竖半砖模型和展示架边框有纹理冲突,会发生闪烁叠加现象,然后我们通过修改elements的from和to即可修正,它们表示模型要从什么坐标到什么坐标,显然原来的0和16对于展示架等完整方块是冲突的,我们需要稍稍增加一点最大值,稍稍减少一点最小值,这样一来,展示架就被台阶模型包裹住了,同样,不同面的uv也要照葫芦画瓢修改,最终得到结果。
使用上面的文件覆盖掉原版的文件,在展示架中间的格子上放置台阶时,就可以看到竖半砖了!(使用Ctrl+Select选中带有物品数据的展示架,可以更方便的放置某种竖半砖)
这种方案的好处在哪里呢?很乐意分享我是怎么想到要做一个这个东西的。 作者我也是好久没有接触MC原版开发了QAQ,由于在 小破站 上偶然间刷到有人使用活板门来替代竖半砖的视频,于是思考了这个问题,并尝试寻找更为普遍和通用的方案。在现有的模组平台上,的比较流行的竖半砖作品大多是基于 模组 或 数据包 的实现。模组就不说了(万能的代码),缺点是依赖模组加载器,不够灵活。数据包作者会使用封装好的展示实体工具来操作竖半砖的转换,缺点更明显,实体比方块的数据复杂很多,而且不论是保存结构还是原理图都要留意是否选择了包括实体,否则容易遗漏,此外,创作者调试时很容易误操作这类实体,而方块就不容易误操作,还有其独特的碰撞箱。最初,我想是不是可以修改那一坨五花肉铜活板门来代替各个台阶呢?但是那一坨再多也就8个活板门,而台阶有数十种,后来就去思考其它的多状态方块,我一直在想告示牌、旗帜、蜡烛等等,但是修改了它们就不能再使用它们,而且它们不能随意放置,依附其他方块,容易被破坏掉,后来才想到的展示架,展示架是一个非常轻量的方块实体。在以前的版本中,也有使用 资源包 的对竖半砖的实现,例如修改物品在 物品展示框 的模型,这种方案甚至可以看到两个竖半砖在一个格子里。不过,直到1.21.9,展示架的出现才让原版竖半砖的实现脱离了实体。 END
编者注
来自GeForceLegend与编者的商榷:
GeForceLegend 2026/3/9 14:53:27
而且这玩意因为原版本身的实体渲染性能也不太能大量使用
CR_019 2026/3/9 14:54:27
那有啥办法呢
CR_019 2026/3/9 14:54:32
深度冲突是搞得定的
CR_019 2026/3/9 14:54:49
至于实体渲染,高版本倒是优化了不少
CR_019 2026/3/9 14:55:00
我的建议是有就不错了
GeForceLegend 2026/3/9 14:57:52
优化是优化了一点,从有多少个实体draw多少次变成了用同样纹理的一起draw
GeForceLegend 2026/3/9 14:58:03
但是每帧完整上传一次VBO在这里
GeForceLegend 2026/3/9 14:58:41
而且用这玩意弄的深度冲突只能减缓到近距离只有微小部位可见吧
GeForceLegend 2026/3/9 14:59:11
你要全包展示架就肯定要全向凸出一些,旁边也放一个就会有微小的重合部分
GeForceLegend 2026/3/9 14:59:34
以及原版的逆天深度精度导致稍微远一点,为了避免深度冲突需要的深度差急剧拉大
GeForceLegend 2026/3/9 15:00:32
以及实体的最大缺陷,稍微远一点就不渲染了,不确定展示架上面的实体受不受实体渲染距离的影响
GeForceLegend 2026/3/9 15:00:49
没有原生竖半砖还是太难受了,替代方案的负面作用都挺大的测试后发现,展示架上的物品使用实体渲染,受深度精度损失影响会在稍远处产生深度冲突,并在更远一些的位置不再渲染。
此外,大批量使用可能会影响渲染性能。