@@ -0,0 +1,1291 @@
+package deterno.fight.tgm.damage.tracker;%0A%0Aimport org.joda.time.Instant;%0A%0Aimport javax.annotation.Nonnull;%0Aimport javax.annotation.Nullable;%0Aimport java.util.List;%0Aimport java.util.ListIterator;%0A%0A/**%0A * Represents the lifetime of an entity.%0A *%0A * Provides a convenient way to record damage objects pertaining to the victim.%0A */%0Apublic interface Lifetime %7B%0A    @Nullable%0A    Instant getStart();%0A%0A    void setStart(@Nonnull Instant start);%0A%0A    @Nullable%0A    Instant getEnd();%0A%0A    void setEnd(@Nonnull Instant end);%0A%0A    @Nonnull%0A    List%3CDamage%3E getDamage();%0A%0A    @Nonnull%0A    ListIterator%3CDamage%3E getDamageFirst();%0A%0A    @Nonnull%0A    ListIterator%3CDamage%3E getDamageLast();%0A%0A    @Nullable%0A    Damage getFirstDamage();%0A%0A    @Nullable%0A    Damage getLastDamage();%0A%0A    /**%0A     * Gets the last damage instance where the info object is an instance of%0A     * the specified class. Uses %7B@link Class#isInstance(Object)%7D to check info%0A     * objects.%0A     *%0A     * @param damageInfoClass DamageInfo class to check for%0A     * @return Last damage that matched or null if none matched%0A     *%0A     * @throws NullPointerException if damageInfoClass is null%0A     */%0A    @Nullable%0A    Damage getLastDamage(@Nonnull Class%3C? extends DamageInfo%3E damageInfoClass);%0A%0A    void addDamage(@Nonnull Damage damage);%0A%7D%0A

Create Lifetime.java