From 09614b74a63873e2f18e403b3c7d01030bf446c0 Mon Sep 17 00:00:00 2001 From: lap2ka <83134094+lap2ka@users.noreply.github.com> Date: Wed, 20 May 2026 01:24:50 +0200 Subject: [PATCH 1/2] Prevent NPE for weightless contraptions --- .../AbstractContraptionEntityMixin.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/AbstractContraptionEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/AbstractContraptionEntityMixin.java index a6661e82..46ca9001 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/AbstractContraptionEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/AbstractContraptionEntityMixin.java @@ -99,7 +99,9 @@ public AbstractContraptionEntityMixin(final EntityType arg, final Level arg2) if (!this.sable$added && this.level() instanceof final ServerLevel serverLevel) { this.sable$buildProperties(); this.sable$addToPlot(); - this.sable$addToPipeline(serverLevel); + if (this.sable$massTracker.getCenterOfMass() != null) { + this.sable$addToPipeline(serverLevel); + } this.sable$added = true; } } @@ -164,9 +166,12 @@ public CompoundTag saveWithoutId(final CompoundTag nbt) { assert this.sable$localBounds != null; this.sable$massTracker = MassTracker.build(this.sable$blockGetter(), this.sable$localBounds); - final Vector3d temp = this.sable$massTracker.getCenterOfMass().negate(new Vector3d()).add(0.5, 0.5, 0.5); - for (final FloatingBlockCluster cluster : this.sable$floatingClusterContainer.clusters) { - cluster.getBlockData().translateOrigin(temp); + final Vector3dc centerOfMass = this.sable$massTracker.getCenterOfMass(); + if (centerOfMass != null) { + final Vector3d temp = centerOfMass.negate(new Vector3d()).add(0.5, 0.5, 0.5); + for (final FloatingBlockCluster cluster : this.sable$floatingClusterContainer.clusters) { + cluster.getBlockData().translateOrigin(temp); + } } } From f3b5ebd8996537912bb00f6967aec199ee402f41 Mon Sep 17 00:00:00 2001 From: lap2ka <83134094+lap2ka@users.noreply.github.com> Date: Wed, 20 May 2026 01:55:35 +0200 Subject: [PATCH 2/2] Also prevent NPE for weightless contraptions on sublevels --- .../create/contraptions/AbstractContraptionEntityMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/AbstractContraptionEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/AbstractContraptionEntityMixin.java index 46ca9001..10703a83 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/AbstractContraptionEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/AbstractContraptionEntityMixin.java @@ -98,8 +98,8 @@ public AbstractContraptionEntityMixin(final EntityType arg, final Level arg2) private void sable$contraptionInitialize(final CallbackInfo ci) { if (!this.sable$added && this.level() instanceof final ServerLevel serverLevel) { this.sable$buildProperties(); - this.sable$addToPlot(); if (this.sable$massTracker.getCenterOfMass() != null) { + this.sable$addToPlot(); this.sable$addToPipeline(serverLevel); } this.sable$added = true;