package net.minecraft.world.entity.ai.sensing; import com.google.common.collect.ImmutableSet; import java.util.Optional; import java.util.Set; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.ai.memory.MemoryModuleType; import net.minecraft.world.entity.ai.memory.NearestVisibleLivingEntities; public class AdultSensor extends Sensor { @Override public Set> requires() { return ImmutableSet.of(MemoryModuleType.NEAREST_VISIBLE_ADULT, MemoryModuleType.NEAREST_VISIBLE_LIVING_ENTITIES); } protected void doTick(ServerLevel serverLevel, AgeableMob ageableMob) { ageableMob.getBrain() .getMemory(MemoryModuleType.NEAREST_VISIBLE_LIVING_ENTITIES) .ifPresent(nearestVisibleLivingEntities -> this.setNearestVisibleAdult(ageableMob, nearestVisibleLivingEntities)); } private void setNearestVisibleAdult(AgeableMob mob, NearestVisibleLivingEntities nearbyEntities) { Optional optional = nearbyEntities.findClosest(livingEntity -> livingEntity.getType() == mob.getType() && !livingEntity.isBaby()) .map(AgeableMob.class::cast); mob.getBrain().setMemory(MemoryModuleType.NEAREST_VISIBLE_ADULT, optional); } }