diff --git a/src/main/java/ru/betterend/entity/EntityShadowWalker.java b/src/main/java/ru/betterend/entity/EntityShadowWalker.java index 5e4bd98f..b7d5d50c 100644 --- a/src/main/java/ru/betterend/entity/EntityShadowWalker.java +++ b/src/main/java/ru/betterend/entity/EntityShadowWalker.java @@ -1,9 +1,13 @@ package ru.betterend.entity; +import java.util.List; +import java.util.Random; + import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.SpawnReason; import net.minecraft.entity.ai.goal.FollowTargetGoal; import net.minecraft.entity.ai.goal.LookAroundGoal; import net.minecraft.entity.ai.goal.LookAtEntityGoal; @@ -19,6 +23,8 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.particle.ParticleTypes; import net.minecraft.sound.SoundEvent; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.world.ServerWorldAccess; import net.minecraft.world.World; import ru.betterend.registry.EndSounds; import ru.betterend.util.MHelper; @@ -106,6 +112,15 @@ public class EntityShadowWalker extends HostileEntity { return attack; } + public static boolean canSpawn(EntityType type, ServerWorldAccess world, SpawnReason spawnReason, BlockPos pos, Random random) { + if (HostileEntity.canSpawnInDark(type, world, spawnReason, pos, random)) { + Box box = new Box(pos).expand(16); + List entities = world.getEntitiesByClass(EntityShadowWalker.class, box, (entity) -> { return true; }); + return entities.size() < 6; + } + return false; + } + private final class AttackGoal extends MeleeAttackGoal { private final EntityShadowWalker walker; private int ticks; diff --git a/src/main/java/ru/betterend/mixin/common/HostileEntityMixin.java b/src/main/java/ru/betterend/mixin/common/HostileEntityMixin.java index b3e5ee01..dee0f41a 100644 --- a/src/main/java/ru/betterend/mixin/common/HostileEntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/HostileEntityMixin.java @@ -21,7 +21,7 @@ public class HostileEntityMixin { @Inject(method = "canSpawnInDark", at = @At(value = "RETURN"), cancellable = true) private static void endermenCheck(EntityType type, ServerWorldAccess serverWorldAccess, SpawnReason spawnReason, BlockPos pos, Random random, CallbackInfoReturnable info) { boolean canSpawn = info.getReturnValue(); - if (canSpawn && spawnReason == SpawnReason.NATURAL) { + if (canSpawn && spawnReason == SpawnReason.NATURAL && type == EntityType.ENDERMAN) { Box box = new Box(pos).expand(16); List entities = serverWorldAccess.getEntitiesByClass(EndermanEntity.class, box, (entity) -> { return true; }); info.setReturnValue(entities.size() < 6); diff --git a/src/main/java/ru/betterend/registry/EndEntities.java b/src/main/java/ru/betterend/registry/EndEntities.java index b62bc27b..1f685f43 100644 --- a/src/main/java/ru/betterend/registry/EndEntities.java +++ b/src/main/java/ru/betterend/registry/EndEntities.java @@ -9,7 +9,6 @@ import net.minecraft.entity.EntityType.EntityFactory; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.SpawnGroup; import net.minecraft.entity.attribute.DefaultAttributeContainer.Builder; -import net.minecraft.entity.mob.HostileEntity; import net.minecraft.util.registry.Registry; import ru.betterend.BetterEnd; import ru.betterend.entity.EntityCubozoa; @@ -30,7 +29,7 @@ public class EndEntities { public static void register() { SpawnHelper.restrictionLand(END_SLIME, EntityEndSlime::canSpawn); SpawnHelper.restrictionWater(END_FISH, EntityEndFish::canSpawn); - SpawnHelper.restrictionLand(SHADOW_WALKER, HostileEntity::canSpawnInDark); + SpawnHelper.restrictionLand(SHADOW_WALKER, EntityShadowWalker::canSpawn); SpawnHelper.restrictionWater(CUBOZOA, EntityCubozoa::canSpawn); }