minecraft-src/net/minecraft/world/entity/ai/sensing/AdultSensor.java
2025-07-04 03:15:13 +03:00

28 lines
1.2 KiB
Java

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<AgeableMob> {
@Override
public Set<MemoryModuleType<?>> 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<AgeableMob> optional = nearbyEntities.findClosest(livingEntity -> livingEntity.getType() == mob.getType() && !livingEntity.isBaby())
.map(AgeableMob.class::cast);
mob.getBrain().setMemory(MemoryModuleType.NEAREST_VISIBLE_ADULT, optional);
}
}