Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-18 12:30:06 +01:00
Update maxhealth for entities that have variable max health. Fixes BUKKIT-3308
Slimes and wolves have health that can change based on certain conditions. So we check if their max health should be updated, and if it has been customized in any way. We also scale the wolf's health for their tail
Dieser Commit ist enthalten in:
Ursprung
b908c192bf
Commit
509e3d2a32
@ -1155,6 +1155,16 @@ public abstract class Entity {
|
||||
this.b(this.yaw, this.pitch);
|
||||
this.a(nbttagcompound);
|
||||
|
||||
// CraftBukkit start
|
||||
if (this instanceof EntityLiving) {
|
||||
EntityLiving entity = (EntityLiving) this;
|
||||
// If the entity does not have a max health set yet, update it (it may have changed after loading the entity)
|
||||
if (!nbttagcompound.hasKey("Bukkit.MaxHealth")) {
|
||||
entity.maxHealth = entity.getMaxHealth();
|
||||
}
|
||||
}
|
||||
// CraftBukkit end
|
||||
|
||||
// CraftBukkit start - exempt Vehicles from notch's sanity check
|
||||
if (!(this.getBukkitEntity() instanceof Vehicle)) {
|
||||
if (Math.abs(this.motX) > 10.0D) {
|
||||
|
@ -26,10 +26,16 @@ public class EntitySlime extends EntityLiving implements IMonster {
|
||||
|
||||
// CraftBukkit - protected -> public
|
||||
public void setSize(int i) {
|
||||
boolean updateMaxHealth = this.getMaxHealth() == this.maxHealth; // CraftBukkit
|
||||
this.datawatcher.watch(16, new Byte((byte) i));
|
||||
this.a(0.6F * (float) i, 0.6F * (float) i);
|
||||
this.setPosition(this.locX, this.locY, this.locZ);
|
||||
this.setHealth(this.getMaxHealth());
|
||||
// CraftBukkit start
|
||||
if (updateMaxHealth) {
|
||||
this.maxHealth = this.getMaxHealth();
|
||||
}
|
||||
this.setHealth(this.maxHealth);
|
||||
// CraftBukkit end
|
||||
this.bd = i;
|
||||
}
|
||||
|
||||
|
@ -43,7 +43,7 @@ public class EntityWolf extends EntityTameableAnimal {
|
||||
}
|
||||
|
||||
protected void bm() {
|
||||
this.datawatcher.watch(18, Integer.valueOf(this.getHealth()));
|
||||
this.datawatcher.watch(18, Integer.valueOf(this.getScaledHealth())); // CraftBukkit - this.getHealth() -> this.getScaledHealth()
|
||||
}
|
||||
|
||||
public int getMaxHealth() {
|
||||
@ -80,7 +80,8 @@ public class EntityWolf extends EntityTameableAnimal {
|
||||
}
|
||||
|
||||
protected String aY() {
|
||||
return this.isAngry() ? "mob.wolf.growl" : (this.random.nextInt(3) == 0 ? (this.isTamed() && this.datawatcher.getInt(18) < 10 ? "mob.wolf.whine" : "mob.wolf.panting") : "mob.wolf.bark");
|
||||
// CraftBukkit - getInt(18) < 10 -> < this.maxHealth / 2
|
||||
return this.isAngry() ? "mob.wolf.growl" : (this.random.nextInt(3) == 0 ? (this.isTamed() && this.datawatcher.getInt(18) < this.maxHealth / 2 ? "mob.wolf.whine" : "mob.wolf.panting") : "mob.wolf.bark");
|
||||
}
|
||||
|
||||
protected String aZ() {
|
||||
@ -235,11 +236,17 @@ public class EntityWolf extends EntityTameableAnimal {
|
||||
if (!this.world.isStatic) {
|
||||
// CraftBukkit - added event call and isCancelled check.
|
||||
if (this.random.nextInt(3) == 0 && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, entityhuman).isCancelled()) {
|
||||
boolean updateMaxHealth = this.getMaxHealth() == this.maxHealth; // CraftBukkit
|
||||
this.setTamed(true);
|
||||
this.setPathEntity((PathEntity) null);
|
||||
this.b((EntityLiving) null);
|
||||
this.d.a(true);
|
||||
this.setHealth(20);
|
||||
// CraftBukkit start
|
||||
if (updateMaxHealth) {
|
||||
this.maxHealth = this.getMaxHealth();
|
||||
}
|
||||
this.setHealth(this.maxHealth);
|
||||
// CraftBukkit end
|
||||
this.setOwnerName(entityhuman.name);
|
||||
this.f(true);
|
||||
this.world.broadcastEntityEffect(this, (byte) 7);
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren