--- a/net/minecraft/world/entity/animal/EntityWolf.java
+++ b/net/minecraft/world/entity/animal/EntityWolf.java
@@ -69,6 +69,12 @@
 import net.minecraft.world.level.pathfinder.PathType;
 import net.minecraft.world.phys.Vec3D;
 
+// CraftBukkit start
+import org.bukkit.event.entity.EntityRegainHealthEvent;
+import org.bukkit.event.entity.EntityTargetEvent;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+// CraftBukkit end
+
 public class EntityWolf extends EntityTameableAnimal implements IEntityAngerable {
 
     private static final DataWatcherObject<Boolean> DATA_INTERESTED_ID = DataWatcher.defineId(EntityWolf.class, DataWatcherRegistry.BOOLEAN);
@@ -297,15 +303,19 @@
         } else {
             Entity entity = damagesource.getEntity();
 
-            if (!this.level().isClientSide) {
-                this.setOrderedToSit(false);
-            }
+            // CraftBukkit - move diff down
 
             if (entity != null && !(entity instanceof EntityHuman) && !(entity instanceof EntityArrow)) {
                 f = (f + 1.0F) / 2.0F;
             }
 
-            return super.hurt(damagesource, f);
+            // CraftBukkit start
+            boolean result = super.hurt(damagesource, f);
+            if (!this.level().isClientSide && result) {
+                this.setOrderedToSit(false);
+            }
+            return result;
+            // CraftBukkit end
         }
     }
 
@@ -325,7 +335,7 @@
         super.setTame(flag);
         if (flag) {
             this.getAttribute(GenericAttributes.MAX_HEALTH).setBaseValue(20.0D);
-            this.setHealth(20.0F);
+            this.setHealth(this.getMaxHealth()); // CraftBukkit - 20.0 -> getMaxHealth()
         } else {
             this.getAttribute(GenericAttributes.MAX_HEALTH).setBaseValue(8.0D);
         }
@@ -348,7 +358,7 @@
                     itemstack.shrink(1);
                 }
 
-                this.heal((float) item.getFoodProperties().getNutrition());
+                this.heal((float) item.getFoodProperties().getNutrition(), EntityRegainHealthEvent.RegainReason.EATING); // CraftBukkit
                 return EnumInteractionResult.SUCCESS;
             } else {
                 if (item instanceof ItemDye) {
@@ -376,7 +386,7 @@
                     this.setOrderedToSit(!this.isOrderedToSit());
                     this.jumping = false;
                     this.navigation.stop();
-                    this.setTarget((EntityLiving) null);
+                    this.setTarget((EntityLiving) null, EntityTargetEvent.TargetReason.FORGOT_TARGET, true); // CraftBukkit - reason
                     return EnumInteractionResult.SUCCESS;
                 } else {
                     return enuminteractionresult;
@@ -387,7 +397,8 @@
                 itemstack.shrink(1);
             }
 
-            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.tame(entityhuman);
                 this.navigation.stop();
                 this.setTarget((EntityLiving) null);
