From 7c51ba39a107752ed6eb2905b4d51eaa0824e068 Mon Sep 17 00:00:00 2001 From: CaiBai-Fish Date: Wed, 6 May 2026 21:01:44 +0800 Subject: [PATCH] fix: prevent NPE when Camera.entity is null MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Leawind‘s Third Person may temporarily set camera entity to null, causing Sable to crash at entity.level(). Add null check and fallback to original behavior. --- .../sable/neoforge/mixin/camera_rotation/CameraMixin.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/camera_rotation/CameraMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/camera_rotation/CameraMixin.java index b283dcf1..e20287ea 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/camera_rotation/CameraMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/camera_rotation/CameraMixin.java @@ -25,7 +25,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Camera.class) -public abstract class CameraMixin { +公共 abstract class CameraMixin { @Shadow @Final @@ -69,6 +69,10 @@ public abstract class CameraMixin { @WrapMethod(method = "setPosition(Lnet/minecraft/world/phys/Vec3;)V") private void sable$setPosition(final Vec3 arg, final Operation original) { + if (this.entity == null) { + original.call(arg); + return; + } final Level level = this.entity.level(); final ClientSubLevel subLevel = (ClientSubLevel) Sable.HELPER.getContaining(level, arg);