Code/net/minecraft/world/entity/ai/behavior/StartCelebratingIfTargetDea...

41 lines
1.9 KiB
Java

package net.minecraft.world.entity.ai.behavior;
import java.util.function.BiPredicate;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.EntityType;
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.level.GameRules;
public class StartCelebratingIfTargetDead {
public static BehaviorControl<LivingEntity> create(int p_259238_, BiPredicate<LivingEntity, LivingEntity> p_259102_) {
return BehaviorBuilder.create(
p_259600_ -> p_259600_.group(
p_259600_.present(MemoryModuleType.ATTACK_TARGET),
p_259600_.registered(MemoryModuleType.ANGRY_AT),
p_259600_.absent(MemoryModuleType.CELEBRATE_LOCATION),
p_259600_.registered(MemoryModuleType.DANCING)
)
.apply(p_259600_, (p_259049_, p_259067_, p_259031_, p_259141_) -> (p_259956_, p_259611_, p_259619_) -> {
LivingEntity livingentity = p_259600_.get(p_259049_);
if (!livingentity.isDeadOrDying()) {
return false;
} else {
if (p_259102_.test(p_259611_, livingentity)) {
p_259141_.setWithExpiry(true, p_259238_);
}
p_259031_.setWithExpiry(livingentity.blockPosition(), p_259238_);
if (livingentity.getType() != EntityType.PLAYER || p_259956_.getGameRules().getBoolean(GameRules.RULE_FORGIVE_DEAD_PLAYERS)) {
p_259049_.erase();
p_259067_.erase();
}
return true;
}
})
);
}
}