Code/net/minecraft/world/entity/ai/sensing/PiglinBruteSpecificSensor.java

42 lines
2.0 KiB
Java

package net.minecraft.world.entity.ai.sensing;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.ai.Brain;
import net.minecraft.world.entity.ai.memory.MemoryModuleType;
import net.minecraft.world.entity.ai.memory.NearestVisibleLivingEntities;
import net.minecraft.world.entity.boss.wither.WitherBoss;
import net.minecraft.world.entity.monster.WitherSkeleton;
import net.minecraft.world.entity.monster.piglin.AbstractPiglin;
public class PiglinBruteSpecificSensor extends Sensor<LivingEntity> {
@Override
public Set<MemoryModuleType<?>> requires() {
return ImmutableSet.of(MemoryModuleType.NEAREST_VISIBLE_LIVING_ENTITIES, MemoryModuleType.NEAREST_VISIBLE_NEMESIS, MemoryModuleType.NEARBY_ADULT_PIGLINS);
}
@Override
protected void doTick(ServerLevel p_26721_, LivingEntity p_26722_) {
Brain<?> brain = p_26722_.getBrain();
List<AbstractPiglin> list = Lists.newArrayList();
NearestVisibleLivingEntities nearestvisiblelivingentities = brain.getMemory(MemoryModuleType.NEAREST_VISIBLE_LIVING_ENTITIES).orElse(NearestVisibleLivingEntities.empty());
Optional<Mob> optional = nearestvisiblelivingentities.findClosest(p_186155_ -> p_186155_ instanceof WitherSkeleton || p_186155_ instanceof WitherBoss)
.map(Mob.class::cast);
for (LivingEntity livingentity : brain.getMemory(MemoryModuleType.NEAREST_LIVING_ENTITIES).orElse(ImmutableList.of())) {
if (livingentity instanceof AbstractPiglin && ((AbstractPiglin)livingentity).isAdult()) {
list.add((AbstractPiglin)livingentity);
}
}
brain.setMemory(MemoryModuleType.NEAREST_VISIBLE_NEMESIS, optional);
brain.setMemory(MemoryModuleType.NEARBY_ADULT_PIGLINS, list);
}
}