Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
at master 30 lines 1.9 kB view raw
1package net.lerariemann.infinity.mixin.fixes; 2 3import com.llamalad7.mixinextras.sugar.Local; 4import net.lerariemann.infinity.access.MobEntityAccess; 5import net.lerariemann.infinity.util.InfinityMethods; 6import net.minecraft.core.BlockPos; 7import net.minecraft.server.level.ServerLevel; 8import net.minecraft.world.entity.Mob; 9import net.minecraft.world.entity.MobCategory; 10import net.minecraft.world.level.NaturalSpawner; 11import net.minecraft.world.level.chunk.ChunkAccess; 12import org.spongepowered.asm.mixin.Mixin; 13import org.spongepowered.asm.mixin.injection.At; 14import org.spongepowered.asm.mixin.injection.Inject; 15import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 16 17/** Many mobs including vanilla elder guardians, which are never intended to spawn from a biome, are always set as persistent. 18 * This leads to them not respecting mobcaps and lagging everything out. 19 * This mixin fixes that :D */ 20@Mixin(NaturalSpawner.class) 21public class SpawnHelperMixin { 22 @Inject(method = "spawnCategoryForPosition(Lnet/minecraft/world/entity/MobCategory;Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/chunk/ChunkAccess;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/NaturalSpawner$SpawnPredicate;Lnet/minecraft/world/level/NaturalSpawner$AfterSpawnCallback;)V", 23 at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerLevel;addFreshEntityWithPassengers(Lnet/minecraft/world/entity/Entity;)V")) 24 private static void persistentMobSpawnFix(MobCategory group, ServerLevel world, ChunkAccess chunk, BlockPos pos, NaturalSpawner.SpawnPredicate checker, NaturalSpawner.AfterSpawnCallback runner, CallbackInfo ci, 25 @Local Mob mobEntity) { 26 if (InfinityMethods.isBiomeInfinity(world, pos)) { 27 ((MobEntityAccess)mobEntity).infinity$setPersistent(false); 28 } 29 } 30}