--- a/net/minecraft/world/damagesource/CombatTracker.java
+++ b/net/minecraft/world/damagesource/CombatTracker.java
@@ -22,22 +_,31 @@
     private static final Style INTENTIONAL_GAME_DESIGN_STYLE = Style.EMPTY
         .withClickEvent(new ClickEvent.OpenUrl(CommonLinks.INTENTIONAL_GAME_DESIGN_BUG))
         .withHoverEvent(new HoverEvent.ShowText(Component.literal("MCPE-28723")));
-    private final List<CombatEntry> entries = Lists.newArrayList();
-    private final LivingEntity mob;
+    public final List<CombatEntry> entries = Lists.newArrayList();
+    public final LivingEntity mob;
     private int lastDamageTime;
     private int combatStartTime;
     private int combatEndTime;
-    private boolean inCombat;
-    private boolean takingDamage;
+    public boolean inCombat;
+    public boolean takingDamage;
+    public final io.papermc.paper.world.damagesource.PaperCombatTrackerWrapper paperCombatTracker; // Paper - Combat tracker API
 
     public CombatTracker(LivingEntity mob) {
         this.mob = mob;
+        this.paperCombatTracker = new io.papermc.paper.world.damagesource.PaperCombatTrackerWrapper(this); // Paper - Combat tracker API
     }
 
     public void recordDamage(DamageSource source, float damage) {
         this.recheckStatus();
         FallLocation currentFallLocation = FallLocation.getCurrentFallLocation(this.mob);
         CombatEntry combatEntry = new CombatEntry(source, damage, currentFallLocation, (float)this.mob.fallDistance);
+    // Paper start - Combat tracker API
+        recordDamageAndCheckCombatState(combatEntry);
+    }
+
+    public void recordDamageAndCheckCombatState(final CombatEntry combatEntry) {
+        final DamageSource source = combatEntry.source();
+    // Paper end - Combat tracker API
         this.entries.add(combatEntry);
         this.lastDamageTime = this.mob.tickCount;
         this.takingDamage = true;
@@ -105,7 +_,7 @@
     }
 
     @Nullable
-    private CombatEntry getMostSignificantFall() {
+    public CombatEntry getMostSignificantFall() {
         CombatEntry combatEntry = null;
         CombatEntry combatEntry1 = null;
         float f = 0.0F;
@@ -147,6 +_,13 @@
     public void recheckStatus() {
         int i = this.inCombat ? 300 : 100;
         if (this.takingDamage && (!this.mob.isAlive() || this.mob.tickCount - this.lastDamageTime > i)) {
+    // Paper start - Combat tracker API
+            resetCombatState();
+        }
+    }
+
+    public void resetCombatState() {{
+    // Paper end - Combat tracker API
             boolean flag = this.inCombat;
             this.takingDamage = false;
             this.inCombat = false;
