minecraft-src/net/minecraft/world/entity/monster/piglin/StartHuntingHoglin.java
2025-07-04 02:00:41 +03:00

35 lines
1.5 KiB
Java

package net.minecraft.world.entity.monster.piglin;
import net.minecraft.world.entity.ai.behavior.OneShot;
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder;
import net.minecraft.world.entity.ai.memory.MemoryModuleType;
import net.minecraft.world.entity.monster.hoglin.Hoglin;
public class StartHuntingHoglin {
public static OneShot<Piglin> create() {
return BehaviorBuilder.create(
instance -> instance.group(
instance.present(MemoryModuleType.NEAREST_VISIBLE_HUNTABLE_HOGLIN),
instance.absent(MemoryModuleType.ANGRY_AT),
instance.absent(MemoryModuleType.HUNTED_RECENTLY),
instance.registered(MemoryModuleType.NEAREST_VISIBLE_ADULT_PIGLINS)
)
.apply(instance, (memoryAccessor, memoryAccessor2, memoryAccessor3, memoryAccessor4) -> (serverLevel, piglin, l) -> {
if (!piglin.isBaby() && !instance.tryGet(memoryAccessor4).map(list -> list.stream().anyMatch(StartHuntingHoglin::hasHuntedRecently)).isPresent()) {
Hoglin hoglin = instance.get(memoryAccessor);
PiglinAi.setAngerTarget(serverLevel, piglin, hoglin);
PiglinAi.dontKillAnyMoreHoglinsForAWhile(piglin);
PiglinAi.broadcastAngerTarget(serverLevel, piglin, hoglin);
instance.tryGet(memoryAccessor4).ifPresent(list -> list.forEach(PiglinAi::dontKillAnyMoreHoglinsForAWhile));
return true;
} else {
return false;
}
})
);
}
private static boolean hasHuntedRecently(AbstractPiglin piglin) {
return piglin.getBrain().hasMemoryValue(MemoryModuleType.HUNTED_RECENTLY);
}
}