package net.minecraft.world.entity.ai.behavior; import java.util.Optional; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; 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; public class StartAttacking { public static BehaviorControl create(StartAttacking.TargetFinder p_368894_) { return create((p_362883_, p_24212_) -> true, p_368894_); } public static BehaviorControl create(StartAttacking.StartAttackingCondition p_363679_, StartAttacking.TargetFinder p_360766_) { return BehaviorBuilder.create( p_258782_ -> p_258782_.group(p_258782_.absent(MemoryModuleType.ATTACK_TARGET), p_258782_.registered(MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE)) .apply(p_258782_, (p_258778_, p_258779_) -> (p_359048_, p_359049_, p_359050_) -> { if (!p_363679_.test(p_359048_, p_359049_)) { return false; } else { Optional optional = p_360766_.get(p_359048_, p_359049_); if (optional.isEmpty()) { return false; } else { LivingEntity livingentity = optional.get(); if (!p_359049_.canAttack(livingentity)) { return false; } else { p_258778_.set(livingentity); p_258779_.erase(); return true; } } } }) ); } @FunctionalInterface public interface StartAttackingCondition { boolean test(ServerLevel p_365334_, E p_367852_); } @FunctionalInterface public interface TargetFinder { Optional get(ServerLevel p_363589_, E p_364995_); } }