diff --git a/src/main/java/carpet/mixins/Entity_horseFixMixin.java b/src/main/java/carpet/mixins/Entity_horseFixMixin.java new file mode 100644 index 00000000..685c21a4 --- /dev/null +++ b/src/main/java/carpet/mixins/Entity_horseFixMixin.java @@ -0,0 +1,35 @@ +package carpet.mixins; + +import carpet.settings.CarpetSettings; +import net.minecraft.client.network.packet.EntityPositionS2CPacket; +import net.minecraft.entity.Entity; +import net.minecraft.entity.mob.MobEntity; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Entity.class) +public abstract class Entity_horseFixMixin +{ + @Shadow private Entity vehicle; + + @Shadow public abstract World getEntityWorld(); + + @Inject(method = "stopRiding", at = @At("HEAD")) + private void resetNavigation(CallbackInfo ci) + { + if (vehicle != null && vehicle instanceof MobEntity && CarpetSettings.horseWanderingFix) + { + ((MobEntity) vehicle).getNavigation().stop(); + if (!getEntityWorld().isClient) + { + ((ServerWorld) getEntityWorld()).method_14178().sendToNearbyPlayers((Entity)(Object)this, new EntityPositionS2CPacket(vehicle)); + } + } + } + +} diff --git a/src/main/java/carpet/settings/CarpetSettings.java b/src/main/java/carpet/settings/CarpetSettings.java index 1d46be6e..89416edf 100644 --- a/src/main/java/carpet/settings/CarpetSettings.java +++ b/src/main/java/carpet/settings/CarpetSettings.java @@ -401,4 +401,11 @@ public class CarpetSettings @Rule(desc = "Spawning requires much less CPU and Memory", category = OPTIMIZATION) public static boolean lagFreeSpawning = false; + + @Rule( + desc = "Prevents horses and other mobs to wander into the distance after dismounting", + extra = "Fixes issues with various Joergens wandering off and disappearing client-side", + category = BUGFIX + ) + public static boolean horseWanderingFix = false; } diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 3c35b4a8..3fb50f52 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -81,6 +81,8 @@ "Entity_portalSuffocationMixin", "PortalForcer_portalSuffocationMixin", + "Entity_horseFixMixin", + "HopperBlockEntityMixin", "ContainerMixin", "ClientConnectionMixin",