The Bug:
Vines can spread upward onto blocks that don't support it, if they have full collision on the bottom. For example, carpet, slabs, or sculk sensors. The vine will then break if given a block update.
Steps to Reproduce:
Place down some slabs.
Place some vines nearby.
Increase the
randomTickSpeed
to speed up the process of vines spreading.
/gamerule randomTickSpeed 1000
→ ❌ Notice how eventually, vines will be able to spread on to the slabs.
Information:
Relates to MC-215365 & MC-191314. Reproducing this issue may be quite difficult as vines spreading onto the sculk sensor is quite rare. With this information in mind, it may take a while to reproduce.
Linked issues
is duplicated by 2
Attachments
Comments 4
When reproducing, make sure that there are no other vines nearby. They only grow up if there are fewer than 4 other vine blocks in a 9×9×3 area. (From the wiki). This prevented me from reproducing this.
I took a look at the code, it looks like these are the lines responsible (in VineBlock.randomTick
):
// I renamed some local variables that the decompiler auto-generated for legibility, they probably don't match the real ones
BlockState new_vine = current_vine;
for (Direction dir : Direction.Plane.HORIZONTAL) {
if (random.nextBoolean() || !VineBlock.isAcceptableNeighbour(level, above.relative(dir), Direction.UP))
new_vine = new_vine.setValue(VineBlock.getPropertyForFace(dir), false);
}
It looks like this only rejects a face if the adjacent block would support a vine from below, instead of from the side. So probably dir
should be passed into isAcceptableNeighbour
instead of Direction.UP
. I'm not totally confident in that analysis, but it seems to explain it
I believe vines can spread on to every non-air block and only one report is enough for them.