@@ -0,0 +1,1707 @@
+package deterno.fight.tgm.damage.tracker.base;%0A%0Aimport com.google.common.base.Preconditions;%0Aimport deterno.fight.tgm.damage.tracker.Lifetime;%0Aimport deterno.fight.tgm.damage.tracker.LifetimeManager;%0Aimport org.bukkit.entity.LivingEntity;%0A%0Aimport javax.annotation.Nonnull;%0Aimport java.util.Map;%0Aimport java.util.WeakHashMap;%0A%0Apublic class SimpleLifetimeManager implements LifetimeManager %7B%0A    public @Nonnull%0A    Lifetime getLifetime(@Nonnull LivingEntity entity) %7B%0A        Preconditions.checkNotNull(entity, %22entity%22);%0A%0A        Lifetime lifetime = this.lifetimes.computeIfAbsent(entity, k -%3E new SimpleLifetime());%0A%0A        return lifetime;%0A    %7D%0A%0A    public @Nonnull%0A    Lifetime setLifetime(@Nonnull LivingEntity entity, @Nonnull Lifetime lifetime) %7B%0A        Preconditions.checkNotNull(entity, %22entity%22);%0A        Preconditions.checkNotNull(lifetime, %22lifetime%22);%0A%0A        Lifetime old = this.lifetimes.put(entity, lifetime);%0A        if(old != null) %7B%0A            return old;%0A        %7D else %7B%0A            return new SimpleLifetime();%0A        %7D%0A    %7D%0A%0A    public @Nonnull%0A    Lifetime newLifetime(@Nonnull LivingEntity entity) %7B%0A        Preconditions.checkNotNull(entity, %22entity%22);%0A%0A        Lifetime lifetime = new SimpleLifetime();%0A        this.lifetimes.put(entity, lifetime);%0A%0A        return lifetime;%0A    %7D%0A%0A    public @Nonnull%0A    Lifetime endLifetime(@Nonnull LivingEntity entity) %7B%0A        Preconditions.checkNotNull(entity, %22entity%22);%0A%0A        Lifetime old = this.lifetimes.remove(entity);%0A        if(old != null) %7B%0A            return old;%0A        %7D else %7B%0A            return new SimpleLifetime();%0A        %7D%0A    %7D%0A%0A    private final Map%3CLivingEntity, Lifetime%3E lifetimes = new WeakHashMap%3C%3E();%0A%7D%0A

Create SimpleLifetimeManager.java