Code/net/minecraft/world/entity/ai/behavior/LocateHidingPlace.java

66 lines
3.4 KiB
Java
Raw Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.world.entity.ai.behavior;
import net.minecraft.core.BlockPos;
import net.minecraft.core.GlobalPos;
import net.minecraft.core.Holder;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder;
import net.minecraft.world.entity.ai.behavior.declarative.MemoryAccessor;
import net.minecraft.world.entity.ai.memory.MemoryModuleType;
import net.minecraft.world.entity.ai.memory.WalkTarget;
import net.minecraft.world.entity.ai.village.poi.PoiManager;
import net.minecraft.world.entity.ai.village.poi.PoiTypes;
public class LocateHidingPlace {
public static OneShot<LivingEntity> create(int p_259202_, float p_259881_, int p_259982_) {
return BehaviorBuilder.create(
p_258505_ -> p_258505_.group(
p_258505_.absent(MemoryModuleType.WALK_TARGET),
p_258505_.registered(MemoryModuleType.HOME),
p_258505_.registered(MemoryModuleType.HIDING_PLACE),
p_258505_.registered(MemoryModuleType.PATH),
p_258505_.registered(MemoryModuleType.LOOK_TARGET),
p_258505_.registered(MemoryModuleType.BREED_TARGET),
p_258505_.registered(MemoryModuleType.INTERACTION_TARGET)
)
.apply(
p_258505_,
(p_258484_, p_258485_, p_258486_, p_258487_, p_258488_, p_258489_, p_258490_) -> (p_375011_, p_375012_, p_375013_) -> {
p_375011_.getPoiManager()
.find(
p_217258_ -> p_217258_.is(PoiTypes.HOME),
p_23425_ -> true,
p_375012_.blockPosition(),
p_259982_ + 1,
PoiManager.Occupancy.ANY
)
.filter(p_374999_ -> p_374999_.closerToCenterThan(p_375012_.position(), p_259982_))
.or(
() -> p_375011_.getPoiManager()
.getRandom(
p_217256_ -> p_217256_.is(PoiTypes.HOME),
p_23421_ -> true,
PoiManager.Occupancy.ANY,
p_375012_.blockPosition(),
p_259202_,
p_375012_.getRandom()
)
)
.or(() -> p_258505_.<GlobalPos>tryGet(p_258485_).map(GlobalPos::pos))
.ifPresent(p_390570_ -> {
p_258487_.erase();
p_258488_.erase();
p_258489_.erase();
p_258490_.erase();
p_258486_.set(GlobalPos.of(p_375011_.dimension(), p_390570_));
if (!p_390570_.closerToCenterThan(p_375012_.position(), p_259982_)) {
p_258484_.set(new WalkTarget(p_390570_, p_259881_, p_259982_));
}
});
return true;
}
)
);
}
}