From e1503bae72c088908d25b2edcc96c17e41ad1d48 Mon Sep 17 00:00:00 2001 From: altrisi Date: Sat, 29 Nov 2025 03:28:22 +0100 Subject: [PATCH] More readable check for freezing fake players And properly freeze entities with fake players riding them --- .../TickRateManager_fakePlayersMixin.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/carpet/mixins/TickRateManager_fakePlayersMixin.java b/src/main/java/carpet/mixins/TickRateManager_fakePlayersMixin.java index 170ce137..75c95e1c 100644 --- a/src/main/java/carpet/mixins/TickRateManager_fakePlayersMixin.java +++ b/src/main/java/carpet/mixins/TickRateManager_fakePlayersMixin.java @@ -2,6 +2,7 @@ package carpet.mixins; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import com.llamalad7.mixinextras.injector.ModifyReturnValue; @@ -18,9 +19,20 @@ abstract class TickRateManager_fakePlayersMixin { abstract boolean runsNormally(); @ModifyReturnValue(method = "isEntityFrozen", at = @At("TAIL")) - private boolean handler(boolean alreadyFrozen, Entity entity) { + private boolean handler(boolean alreadyFrozen, Entity entity) + { if (alreadyFrozen) return true; - return !runsNormally() && (entity instanceof EntityPlayerMPFake) - && !((EntityInterface) entity).cm$getIndirectPassengersStream().anyMatch(e -> e instanceof Player && !(e instanceof EntityPlayerMPFake)); + if (runsNormally()) return false; + + return !isActualPlayer(entity) && // not carrying players + ((EntityInterface) entity) + .cm$getIndirectPassengersStream() + .noneMatch(TickRateManager_fakePlayersMixin::isActualPlayer); + } + + @Unique + private static boolean isActualPlayer(Entity e) + { + return e instanceof Player && !(e instanceof EntityPlayerMPFake); } }