diff --git a/build-data/paper.at b/build-data/paper.at index 6e0efb1ce2fa..6f612aa3135c 100644 --- a/build-data/paper.at +++ b/build-data/paper.at @@ -135,6 +135,7 @@ public net.minecraft.world.SimpleContainer items public net.minecraft.world.damagesource.CombatTracker entries public net.minecraft.world.damagesource.CombatTracker getMostSignificantFall()Lnet/minecraft/world/damagesource/CombatEntry; public net.minecraft.world.damagesource.CombatTracker inCombat +public net.minecraft.world.damagesource.CombatTracker lastDamageTime public net.minecraft.world.damagesource.CombatTracker mob public net.minecraft.world.damagesource.CombatTracker takingDamage public net.minecraft.world.damagesource.DamageSource (Lnet/minecraft/core/Holder;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/Vec3;)V diff --git a/paper-api/src/main/java/io/papermc/paper/world/damagesource/CombatTracker.java b/paper-api/src/main/java/io/papermc/paper/world/damagesource/CombatTracker.java index 22c6d9732072..721da75d4c4f 100644 --- a/paper-api/src/main/java/io/papermc/paper/world/damagesource/CombatTracker.java +++ b/paper-api/src/main/java/io/papermc/paper/world/damagesource/CombatTracker.java @@ -107,4 +107,11 @@ public interface CombatTracker { * @return the fall location type */ @Nullable FallLocationType calculateFallLocationType(); + + /** + * Returns time since last damage in ticks + * + * @return ticks since last damage + */ + int getLastDamageTime(); } diff --git a/paper-server/src/main/java/io/papermc/paper/world/damagesource/PaperCombatTrackerWrapper.java b/paper-server/src/main/java/io/papermc/paper/world/damagesource/PaperCombatTrackerWrapper.java index f5ce9f4b8df8..40b4917e1775 100644 --- a/paper-server/src/main/java/io/papermc/paper/world/damagesource/PaperCombatTrackerWrapper.java +++ b/paper-server/src/main/java/io/papermc/paper/world/damagesource/PaperCombatTrackerWrapper.java @@ -79,6 +79,11 @@ public FallLocationType calculateFallLocationType() { return Optionull.map(fallLocation, PaperCombatTrackerWrapper::minecraftToPaper); } + @Override + public int getLastDamageTime() { + return this.handle.mob.tickCount - this.handle.lastDamageTime; + } + private static final BiMap FALL_LOCATION_MAPPING = Util.make(() -> { final BiMap map = HashBiMap.create(8); map.put(FallLocation.GENERIC, FallLocationType.GENERIC);