package net.minecraft.world.entity.ai.goal.target; import java.util.List; import net.minecraft.world.entity.EntitySelector; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.NeutralMob; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.level.GameRules; import net.minecraft.world.phys.AABB; public class ResetUniversalAngerTargetGoal extends Goal { private static final int ALERT_RANGE_Y = 10; private final T mob; private final boolean alertOthersOfSameType; private int lastHurtByPlayerTimestamp; public ResetUniversalAngerTargetGoal(T p_26121_, boolean p_26122_) { this.mob = p_26121_; this.alertOthersOfSameType = p_26122_; } @Override public boolean canUse() { return getServerLevel(this.mob).getGameRules().getBoolean(GameRules.RULE_UNIVERSAL_ANGER) && this.wasHurtByPlayer(); } private boolean wasHurtByPlayer() { return this.mob.getLastHurtByMob() != null && this.mob.getLastHurtByMob().getType() == EntityType.PLAYER && this.mob.getLastHurtByMobTimestamp() > this.lastHurtByPlayerTimestamp; } @Override public void start() { this.lastHurtByPlayerTimestamp = this.mob.getLastHurtByMobTimestamp(); this.mob.forgetCurrentTargetAndRefreshUniversalAnger(); if (this.alertOthersOfSameType) { this.getNearbyMobsOfSameType().stream().filter(p_26127_ -> p_26127_ != this.mob).map(p_26125_ -> (NeutralMob)p_26125_).forEach(NeutralMob::forgetCurrentTargetAndRefreshUniversalAnger); } super.start(); } private List getNearbyMobsOfSameType() { double d0 = this.mob.getAttributeValue(Attributes.FOLLOW_RANGE); AABB aabb = AABB.unitCubeFromLowerCorner(this.mob.position()).inflate(d0, 10.0, d0); return this.mob.level().getEntitiesOfClass((Class)this.mob.getClass(), aabb, EntitySelector.NO_SPECTATORS); } }