The bug
The model for four stacked snow layers defines a 16x8x16 pixel cuboid for the lower half of the block. As it turns out, this is completely redundant, as the bottom-half slab model does the exact same thing, yet the four snow layers model doesn't use the slab model as a parent, despite there being no visual difference in-game if it did.
It is worth noting that eight stacked snow layers uses the full snow block model instead of defining a dedicate "16 layers of snow" texture, so this is also somewhat of an inconsistency (even though there is no "snow slab" model for the blockstates file to refer to like it does for the fully stacked snow).
How to reproduce
Compare four stacked snow layers to any bottom-half slab
Notice that they are the exact same shape
Look in the models/block directory of minecraft.jar
Open any bottom half slab's model
Note that it references slab.json
Open slab.json
Take note of the shape it defines
Open snow_height8.json
Note that it defines the exact same cuboid shape, rather than just pointing to slab.json as a parent model
How to fix
Attached are two resource packs which completely fix this issue. snow-fix-lite simply repoints snow_height8.json to use slab.json as a parent, whereas snow-fix-ultimate also completely fixes the slab side of MC-235694. The latter fix is preferable to make models more intuitive, but the former will be a bit quicker to add.
Linked issues
testing discovered 1
Attachments
Comments 4
@unknown the files are infact generated. This is likely not worth the effort of fixing, considering the minimal benefit.
Can confirm in 1.20.3.
private void createSnowBlocks() {
TextureMapping texture = TextureMapping.cube(Blocks.SNOW);
ResourceLocation resourcelocation = ModelTemplates.CUBE_ALL.create(Blocks.SNOW_BLOCK, texture, this.modelOutput);
this.blockStateOutput.accept(MultiVariantGenerator.multiVariant(Blocks.SNOW)
.with(PropertyDispatch.property(BlockStateProperties.LAYERS)
.generate((height) -> Variant.variant().with(VariantProperties.MODEL, height < 8 ? ModelLocationUtils.getModelLocation(Blocks.SNOW, "_height" + height * 2) : resourcelocation))
)
);
this.delegateItemModel(Blocks.SNOW, ModelLocationUtils.getModelLocation(Blocks.SNOW, "_height2"));
this.blockStateOutput.accept(createSimpleBlock(Blocks.SNOW_BLOCK, resourcelocation));
}
This might be done so that if you want to change all slabs, you don't also have to overwrite the snow's model.