43 lines
2.1 KiB
Java
43 lines
2.1 KiB
Java
package net.minecraft.world.entity.monster.piglin;
|
|
|
|
import java.util.List;
|
|
import net.minecraft.server.level.ServerLevel;
|
|
import net.minecraft.world.entity.ai.behavior.OneShot;
|
|
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.monster.hoglin.Hoglin;
|
|
|
|
public class StartHuntingHoglin {
|
|
public static OneShot<Piglin> create() {
|
|
return BehaviorBuilder.create(
|
|
p_259791_ -> p_259791_.group(
|
|
p_259791_.present(MemoryModuleType.NEAREST_VISIBLE_HUNTABLE_HOGLIN),
|
|
p_259791_.absent(MemoryModuleType.ANGRY_AT),
|
|
p_259791_.absent(MemoryModuleType.HUNTED_RECENTLY),
|
|
p_259791_.registered(MemoryModuleType.NEAREST_VISIBLE_ADULT_PIGLINS)
|
|
)
|
|
.apply(
|
|
p_259791_,
|
|
(p_259255_, p_260214_, p_259562_, p_259156_) -> (p_359306_, p_359307_, p_359308_) -> {
|
|
if (!p_359307_.isBaby()
|
|
&& !p_259791_.tryGet(p_259156_).map(p_259958_ -> p_259958_.stream().anyMatch(StartHuntingHoglin::hasHuntedRecently)).isPresent()) {
|
|
Hoglin hoglin = p_259791_.get(p_259255_);
|
|
PiglinAi.setAngerTarget(p_359306_, p_359307_, hoglin);
|
|
PiglinAi.dontKillAnyMoreHoglinsForAWhile(p_359307_);
|
|
PiglinAi.broadcastAngerTarget(p_359306_, p_359307_, hoglin);
|
|
p_259791_.tryGet(p_259156_).ifPresent(p_259760_ -> p_259760_.forEach(PiglinAi::dontKillAnyMoreHoglinsForAWhile));
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
)
|
|
);
|
|
}
|
|
|
|
private static boolean hasHuntedRecently(AbstractPiglin p_260138_) {
|
|
return p_260138_.getBrain().hasMemoryValue(MemoryModuleType.HUNTED_RECENTLY);
|
|
}
|
|
}
|