--- a/net/minecraft/world/entity/TamableAnimal.java
+++ b/net/minecraft/world/entity/TamableAnimal.java
@@ -68,7 +68,7 @@
         }
 
         this.orderedToSit = nbt.getBoolean("Sitting");
-        this.setInSittingPose(this.orderedToSit);
+        this.setInSittingPose(this.orderedToSit, false); // Paper - Add EntityToggleSitEvent
     }
 
     @Override
@@ -126,6 +126,12 @@
     }
 
     public void setInSittingPose(boolean inSittingPose) {
+    // Paper start - Add EntityToggleSitEvent
+        this.setInSittingPose(inSittingPose, true);
+    }
+    public void setInSittingPose(boolean inSittingPose, boolean callEvent) {
+        if (callEvent && !new io.papermc.paper.event.entity.EntityToggleSitEvent(this.getBukkitEntity(), inSittingPose).callEvent()) return;
+    // Paper end - Add EntityToggleSitEvent
         byte b = this.entityData.get(DATA_FLAGS_ID);
         if (inSittingPose) {
             this.entityData.set(DATA_FLAGS_ID, (byte)(b | 1));
@@ -196,7 +202,12 @@
     @Override
     public void die(DamageSource damageSource) {
         if (!this.level().isClientSide && this.level().getGameRules().getBoolean(GameRules.RULE_SHOWDEATHMESSAGES) && this.getOwner() instanceof ServerPlayer) {
-            this.getOwner().sendSystemMessage(this.getCombatTracker().getDeathMessage());
+            // Paper start - Add TameableDeathMessageEvent
+            io.papermc.paper.event.entity.TameableDeathMessageEvent event = new io.papermc.paper.event.entity.TameableDeathMessageEvent((org.bukkit.entity.Tameable) getBukkitEntity(), io.papermc.paper.adventure.PaperAdventure.asAdventure(this.getCombatTracker().getDeathMessage()));
+            if (event.callEvent()) {
+                this.getOwner().sendSystemMessage(io.papermc.paper.adventure.PaperAdventure.asVanilla(event.deathMessage()));
+            }
+            // Paper end - Add TameableDeathMessageEvent
         }
 
         super.die(damageSource);
