@@ -0,0 +1,1464 @@
+package deterno.fight.tgm.damage.tracker.damage.resolvers;%0A%0Aimport com.google.common.base.Preconditions;%0Aimport deterno.fight.tgm.damage.tracker.DamageInfo;%0Aimport deterno.fight.tgm.damage.tracker.DamageResolver;%0Aimport deterno.fight.tgm.damage.tracker.Lifetime;%0Aimport deterno.fight.tgm.damage.tracker.damage.GravityDamageInfo;%0Aimport deterno.fight.tgm.damage.tracker.trackers.base.gravity.Fall;%0Aimport deterno.fight.tgm.damage.tracker.trackers.base.gravity.SimpleGravityKillTracker;%0Aimport org.bukkit.entity.LivingEntity;%0Aimport org.bukkit.entity.Player;%0Aimport org.bukkit.event.entity.EntityDamageEvent;%0A%0Aimport javax.annotation.Nonnull;%0Aimport javax.annotation.Nullable;%0A%0Apublic class GravityDamageResolver implements DamageResolver %7B%0A    public GravityDamageResolver(@Nonnull SimpleGravityKillTracker tracker) %7B%0A        Preconditions.checkNotNull(tracker, %22tracker%22);%0A        this.tracker = tracker;%0A    %7D%0A%0A    public @Nullable%0A    DamageInfo resolve(@Nonnull LivingEntity entity, @Nonnull Lifetime lifetime, @Nonnull EntityDamageEvent damageEvent) %7B%0A        if(!(entity instanceof Player)) return null;%0A        Player victim = (Player) entity;%0A        Fall fall = this.tracker.getCausingFall(victim, damageEvent.getCause());%0A        if(fall != null) %7B%0A            return new GravityDamageInfo(fall.attacker, fall.cause, fall.from);%0A        %7D else %7B%0A            return null;%0A        %7D%0A    %7D%0A%0A    private final @Nonnull%0A    SimpleGravityKillTracker tracker;%0A%7D%0A

Create GravityDamageResolver.java