关于不对称构图的kubejs自定义方块的放置朝向问题【1.18.2】粗解

根据https://wiki.latvian.dev/books/kubejs-legacy/page/custom-blocks中的基础描述,我们可以获得如下的kubejs自定义方块的基础格式:
【1.18.2】kubejs
onEvent('block.registry', event => {
event.create('id', 'type')
.material('material')
.hardness(float,>=0.0)
.displayName('name')
.notSolid()
.renderType(cutout)
})
其中type可选【basic、detector 、slab、stairs、fence、fence_gate、wall、wooden_pressure_plate、stone_pressure_plate、wooden_button、stone_button、falling、crop】,默认为basic;
为了实现原版熔炉放置时根据玩家视角保证正面朝向玩家,因此我们可以选择stairs【楼梯】、fence_gate【栅栏门】、stone/wooden_button【按钮】这三种,而选择依据是当我们观察原版中所放置的同名类型方块时,可以得到【facing】这一方块属性来实现朝向设定。
按照常规套路,我们只需要在kubejs/assets/kubejs/textures/block/...以及kubejs/assets/kubejs/models/block/...分别添加纹理贴图以及模型文件就可以完成,但只适用于type为basic时;通过研究原版的blockstates文件,以橡木材质为例,如下所示:


type为fence_gate

我们可以发现,这三种类型需要不同数量的额外模型文件,经过测试,我们可以使用完全相同的模型文件,仅改变文件名后缀即可适用,如type为button时,在kubejs/assets/kubejs/models/block/...需要添加id.json跟id_pressed.json的模型文件;type为fence_gate时,在kubejs/assets/kubejs/models/block/...需要添加id.json、id_open.json、id_wall.json、id_wall_open.json的模型文件;type为stairs时,在kubejs/assets/kubejs/models/block/...需要添加id.json、id_outer.json、id_inner.json的模型文件;
同时我们发现选择后两种类型时,其blockstates中"uvlock": true代表在改变放置朝向时不改变纹理分布,这样会造成贴图出现错落,因此为了解决这种问题,我们可以在kubejs/assets/kubejs/...中新建一个blockstates文件夹并在其中添加id.json文件,其内容可以直接复制原版同名类型文件,但需要修改两个部分:
①举例:将"model": "minecraft:block/oak_stairs_outer"改为"model": "kubejs:block/id_outer"
②将"uvlock": true修改为"uvlock": false
完成以上操作,就基本完成了,但进入游戏后,我们会发现kubejs自带的物品栏贴图变成类型贴图,为了解决这个问题,我们只需要在kubejs/assets/kubejs/models/item/...中加入id.json,文件内容以橡木材质为例,如下所示:
【type为button】时
{
"parent": "minecraft:block/oak_button_inventory"
}
我们需要将"parent": "minecraft:block/oak_button_inventory"修改为"parent": "kubejs:block/id_inventory"
【type为fence_gate跟stairs】时
{
"parent": "minecraft:block/oak_fence_gate"
}
{
"parent": "minecraft:block/oak_stairs"
}
我们需要将"parent": "minecraft:block/oak_fence_gate"或"parent": "minecraft:block/oak_stairs"修改为"parent": "kubejs:block/id"
此处文件内容所涉及的模型文件可以跟kubejs/assets/kubejs/models/block/...中的id.json完全一致
备注:①方块注册文件中,.displayName('name')不能取消,虽然不知道原因,但取消后将无法实现模型跟贴图的应用,只会显示跟类型同名的类原版贴图
②type为button时,其碰撞箱很小,因此会造成穿模,目前我未能处理此问题
③type为fence_gate时,如果对此类方块配置右键操作【block.right_click】,会出现模型抽搐现象,目前没有办法解决,这是因为fence_gate为原版栅栏门,存在红石属性以及右键开关属性。
另外,以上内容均来自@无梦之心的服务器中所使用的文件