A universal compatibility mod that fixes crashes when placing block entities from various mods on Create 6.0.8 contraptions.
A universal compatibility mod that fixes crashes when placing block entities from various mods on Create contraptions.
In Create 6.0.8, placing certain block entities on contraptions causes the game to crash with:
java.lang.UnsupportedOperationException: VirtualRenderWorld doesn't maintain a chunk array.
at com.simibubi.create.content.contraptions.render.VirtualRenderWorld.getChunk(VirtualRenderWorld.java:69)
This occurs because Create 6.0.8 introduced a change where block entities are loaded into a VirtualRenderWorld before their NBT data is processed. When block entities call setChanged() during initialization, it triggers Level.blockEntityChanged() which tries to mark chunks as unsaved - but VirtualRenderWorld is a lightweight render-only world that doesn't support chunk operations.
And is solved in Create 6.0.9
This mod uses a Mixin to intercept calls to Level.blockEntityChanged() and cancels them when the level is a VirtualRenderWorld. Since VirtualRenderWorld is temporary and never persists, marking chunks as unsaved is unnecessary and can be safely skipped.
@Mixin(value = Level.class)
public class VirtualRenderWorldMixin {
@Inject(method = "blockEntityChanged", at = @At("HEAD"), cancellable = true)
public void preventBlockEntityChangedInVirtualWorld(BlockPos pos, CallbackInfo ci) {
if ((Object) this instanceof VirtualRenderWorld) {
ci.cancel();
}
}
}
Affected Mods
This fix is universal and works with any mod where block entities call setChanged() during loading:
Conversation