Spaces:
Build error
Build error
package net.minecraft.world.entity; | |
import java.util.Objects; | |
import java.util.UUID; | |
import javax.annotation.Nullable; | |
import net.minecraft.nbt.CompoundTag; | |
import net.minecraft.server.level.ServerLevel; | |
import net.minecraft.world.entity.player.Player; | |
import net.minecraft.world.level.GameRules; | |
import net.minecraft.world.level.Level; | |
public interface NeutralMob { | |
String TAG_ANGER_TIME = "AngerTime"; | |
String TAG_ANGRY_AT = "AngryAt"; | |
int getRemainingPersistentAngerTime(); | |
void setRemainingPersistentAngerTime(int p_21673_); | |
UUID getPersistentAngerTarget(); | |
void setPersistentAngerTarget(; UUID p_21672_) | |
void startPersistentAngerTimer(); | |
default void addPersistentAngerSaveData(CompoundTag p_21679_) { | |
p_21679_.putInt("AngerTime", this.getRemainingPersistentAngerTime()); | |
if (this.getPersistentAngerTarget() != null) { | |
p_21679_.putUUID("AngryAt", this.getPersistentAngerTarget()); | |
} | |
} | |
default void readPersistentAngerSaveData(Level p_147286_, CompoundTag p_147287_) { | |
this.setRemainingPersistentAngerTime(p_147287_.getInt("AngerTime")); | |
if (p_147286_ instanceof ServerLevel) { | |
if (!p_147287_.hasUUID("AngryAt")) { | |
this.setPersistentAngerTarget(null); | |
} else { | |
UUID uuid = p_147287_.getUUID("AngryAt"); | |
this.setPersistentAngerTarget(uuid); | |
Entity entity = ((ServerLevel)p_147286_).getEntity(uuid); | |
if (entity != null) { | |
if (entity instanceof Mob mob) { | |
this.setTarget(mob); | |
this.setLastHurtByMob(mob); | |
} | |
if (entity instanceof Player player) { | |
this.setTarget(player); | |
this.setLastHurtByPlayer(player); | |
} | |
} | |
} | |
} | |
} | |
default void updatePersistentAnger(ServerLevel p_21667_, boolean p_21668_) { | |
LivingEntity livingentity = this.getTarget(); | |
UUID uuid = this.getPersistentAngerTarget(); | |
if ((livingentity == null || livingentity.isDeadOrDying()) && uuid != null && p_21667_.getEntity(uuid) instanceof Mob) { | |
this.stopBeingAngry(); | |
} else { | |
if (livingentity != null && !Objects.equals(uuid, livingentity.getUUID())) { | |
this.setPersistentAngerTarget(livingentity.getUUID()); | |
this.startPersistentAngerTimer(); | |
} | |
if (this.getRemainingPersistentAngerTime() > 0 && (livingentity == null || livingentity.getType() != EntityType.PLAYER || !p_21668_)) { | |
this.setRemainingPersistentAngerTime(this.getRemainingPersistentAngerTime() - 1); | |
if (this.getRemainingPersistentAngerTime() == 0) { | |
this.stopBeingAngry(); | |
} | |
} | |
} | |
} | |
default boolean isAngryAt(LivingEntity p_21675_, ServerLevel p_366229_) { | |
if (!this.canAttack(p_21675_)) { | |
return false; | |
} else { | |
return p_21675_.getType() == EntityType.PLAYER && this.isAngryAtAllPlayers(p_366229_) ? true : p_21675_.getUUID().equals(this.getPersistentAngerTarget()); | |
} | |
} | |
default boolean isAngryAtAllPlayers(ServerLevel p_362225_) { | |
return p_362225_.getGameRules().getBoolean(GameRules.RULE_UNIVERSAL_ANGER) && this.isAngry() && this.getPersistentAngerTarget() == null; | |
} | |
default boolean isAngry() { | |
return this.getRemainingPersistentAngerTime() > 0; | |
} | |
default void playerDied(ServerLevel p_360871_, Player p_21677_) { | |
if (p_360871_.getGameRules().getBoolean(GameRules.RULE_FORGIVE_DEAD_PLAYERS)) { | |
if (p_21677_.getUUID().equals(this.getPersistentAngerTarget())) { | |
this.stopBeingAngry(); | |
} | |
} | |
} | |
default void forgetCurrentTargetAndRefreshUniversalAnger() { | |
this.stopBeingAngry(); | |
this.startPersistentAngerTimer(); | |
} | |
default void stopBeingAngry() { | |
this.setLastHurtByMob(null); | |
this.setPersistentAngerTarget(null); | |
this.setTarget(null); | |
this.setRemainingPersistentAngerTime(0); | |
} | |
LivingEntity getLastHurtByMob(); | |
void setLastHurtByMob(; LivingEntity p_21669_) | |
void setLastHurtByPlayer(; Player p_21680_) | |
void setTarget(; LivingEntity p_21681_) | |
boolean canAttack(LivingEntity p_181126_); | |
LivingEntity getTarget(); | |
} |