diff --git a/src/main/java/carpetfixes/CarpetFixesSettings.java b/src/main/java/carpetfixes/CarpetFixesSettings.java index 7a6086bc..2fb0c4fd 100644 --- a/src/main/java/carpetfixes/CarpetFixesSettings.java +++ b/src/main/java/carpetfixes/CarpetFixesSettings.java @@ -91,6 +91,14 @@ public class CarpetFixesSettings { ) public static boolean comparatorUpdateFix = false; + //By Hendrix-Shen + @Rule( + desc = "Tracing the target to another dimension does not stop checking for visibility, so that a large number of necessary chunks are loaded.", + extra = "This bug may cause server crash. Use 1.13", + category = {CARPETFIXES,BUGFIX} + ) + public static boolean zombiePiglinTracingFix = false; + /* @@ -112,7 +120,7 @@ public class CarpetFixesSettings { @Rule( desc = "Shulkers do not teleport correctly when going through a portal.", extra = "Fixed [MC-139265](https://bugs.mojang.com/browse/MC-139265) from 21w03a", - category = {CARPETFIXES,BACKPORT} + category = {CARPETFIXES,BUGFIX,BACKPORT} ) public static boolean shulkerTeleportFix = false; diff --git a/src/main/java/carpetfixes/mixins/entityFixes/LivingEntity_VisibilityCheckMixin.java b/src/main/java/carpetfixes/mixins/entityFixes/LivingEntity_VisibilityCheckMixin.java new file mode 100644 index 00000000..51acdc20 --- /dev/null +++ b/src/main/java/carpetfixes/mixins/entityFixes/LivingEntity_VisibilityCheckMixin.java @@ -0,0 +1,33 @@ +package carpetfixes.mixins.entityFixes; + +import carpetfixes.CarpetFixesSettings; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(LivingEntity.class) +public abstract class LivingEntity_VisibilityCheckMixin extends Entity { + public LivingEntity_VisibilityCheckMixin(EntityType type, World world) { + super(type, world); + } + + @Inject( + method = "canSee", + at = @At( + value = "HEAD" + ), + cancellable = true + ) + private void onVisibilityCheck(Entity entity, CallbackInfoReturnable cir) { + if (CarpetFixesSettings.zombiePiglinTracingFix) { + if (entity.world != this.world) { + cir.setReturnValue(false); + } + } + } +} diff --git a/src/main/resources/carpetfixes.mixins.json b/src/main/resources/carpetfixes.mixins.json index adf05f53..5b52357d 100644 --- a/src/main/resources/carpetfixes.mixins.json +++ b/src/main/resources/carpetfixes.mixins.json @@ -18,6 +18,7 @@ "entityFixes.Entity_blockCollisionMixin", "entityFixes.EntityAccessorMixin", "entityFixes.ItemEntity_shulkerDroppingMixin", + "entityFixes.LivingEntity_VisibilityCheckMixin", "entityFixes.ShulkerEntity_CustomDataMixin", "redstoneFixes.AbstractRedstoneGateBlock_repeaterPriorityMixin", "redstoneFixes.PistonBlock_doubleRetractionMixin",