Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-23 14:50:08 +01:00
e24569a9ed
Fixes wolves and ocelots standing up when the damag event is being canceled. Also stops breeding mode reset by the same event.
98 Zeilen
4.3 KiB
Diff
98 Zeilen
4.3 KiB
Diff
--- ../work/decompile-8eb82bde/net/minecraft/server/EntityWolf.java 2014-12-10 18:34:37.316492559 +0000
|
|
+++ src/main/java/net/minecraft/server/EntityWolf.java 2014-12-10 18:34:29.104492649 +0000
|
|
@@ -1,5 +1,10 @@
|
|
package net.minecraft.server;
|
|
|
|
+// CraftBukkit start
|
|
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
|
+import org.bukkit.event.entity.EntityTargetEvent.TargetReason;
|
|
+// CraftBukkit end
|
|
+
|
|
public class EntityWolf extends EntityTameableAnimal {
|
|
|
|
private float bm;
|
|
@@ -51,8 +56,19 @@
|
|
} else if (!this.isTamed()) {
|
|
this.setAngry(true);
|
|
}
|
|
+ }
|
|
|
|
+ // CraftBukkit - add overriden version
|
|
+ @Override
|
|
+ public void setGoalTarget(EntityLiving entityliving, org.bukkit.event.entity.EntityTargetEvent.TargetReason reason, boolean fire) {
|
|
+ super.setGoalTarget(entityliving, reason, fire);
|
|
+ if (entityliving == null) {
|
|
+ this.setAngry(false);
|
|
+ } else if (!this.isTamed()) {
|
|
+ this.setAngry(true);
|
|
+ }
|
|
}
|
|
+ // CraftBukkit end
|
|
|
|
protected void E() {
|
|
this.datawatcher.watch(18, Float.valueOf(this.getHealth()));
|
|
@@ -85,7 +101,8 @@
|
|
}
|
|
|
|
protected String z() {
|
|
- return this.isAngry() ? "mob.wolf.growl" : (this.random.nextInt(3) == 0 ? (this.isTamed() && this.datawatcher.getFloat(18) < 10.0F ? "mob.wolf.whine" : "mob.wolf.panting") : "mob.wolf.bark");
|
|
+ // CraftBukkit - (getFloat(18) < 10) -> (getFloat(18) < this.getMaxHealth() / 2)
|
|
+ return this.isAngry() ? "mob.wolf.growl" : (this.random.nextInt(3) == 0 ? (this.isTamed() && this.datawatcher.getFloat(18) < this.getMaxHealth() / 2 ? "mob.wolf.whine" : "mob.wolf.panting") : "mob.wolf.bark");
|
|
}
|
|
|
|
protected String bn() {
|
|
@@ -176,7 +193,8 @@
|
|
} else {
|
|
Entity entity = damagesource.getEntity();
|
|
|
|
- this.bk.setSitting(false);
|
|
+ // CraftBukkit - moved into EntityLiving.d(DamageSource, float)
|
|
+ // this.bk.setSitting(false);
|
|
if (entity != null && !(entity instanceof EntityHuman) && !(entity instanceof EntityArrow)) {
|
|
f = (f + 1.0F) / 2.0F;
|
|
}
|
|
@@ -219,7 +237,7 @@
|
|
--itemstack.count;
|
|
}
|
|
|
|
- this.heal((float) itemfood.getNutrition(itemstack));
|
|
+ this.heal((float) itemfood.getNutrition(itemstack), org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.EATING); // CraftBukkit
|
|
if (itemstack.count <= 0) {
|
|
entityhuman.inventory.setItem(entityhuman.inventory.itemInHandIndex, (ItemStack) null);
|
|
}
|
|
@@ -244,7 +262,7 @@
|
|
this.bk.setSitting(!this.isSitting());
|
|
this.aW = false;
|
|
this.navigation.n();
|
|
- this.setGoalTarget((EntityLiving) null);
|
|
+ this.setGoalTarget((EntityLiving) null, TargetReason.FORGOT_TARGET, true); // CraftBukkit - reason
|
|
}
|
|
} else if (itemstack != null && itemstack.getItem() == Items.BONE && !this.isAngry()) {
|
|
if (!entityhuman.abilities.canInstantlyBuild) {
|
|
@@ -256,12 +274,13 @@
|
|
}
|
|
|
|
if (!this.world.isStatic) {
|
|
- if (this.random.nextInt(3) == 0) {
|
|
+ // CraftBukkit - added event call and isCancelled check.
|
|
+ if (this.random.nextInt(3) == 0 && !CraftEventFactory.callEntityTameEvent(this, entityhuman).isCancelled()) {
|
|
this.setTamed(true);
|
|
this.navigation.n();
|
|
- this.setGoalTarget((EntityLiving) null);
|
|
+ this.setGoalTarget((EntityLiving) null, TargetReason.FORGOT_TARGET, true);
|
|
this.bk.setSitting(true);
|
|
- this.setHealth(20.0F);
|
|
+ this.setHealth(this.getMaxHealth()); // CraftBukkit - 20.0 -> getMaxHealth()
|
|
this.setOwnerUUID(entityhuman.getUniqueID().toString());
|
|
this.l(true);
|
|
this.world.broadcastEntityEffect(this, (byte) 7);
|
|
@@ -348,7 +367,7 @@
|
|
}
|
|
|
|
protected boolean isTypeNotPersistent() {
|
|
- return !this.isTamed() && this.ticksLived > 2400;
|
|
+ return !this.isTamed() /*&& this.ticksLived > 2400*/; // CraftBukkit
|
|
}
|
|
|
|
public boolean a(EntityLiving entityliving, EntityLiving entityliving1) {
|