28 lines
1.2 KiB
Java
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);
|
|
}
|
|
}
|