Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
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}