package tc.oc.pgm.tracker.damage; import java.util.Optional; import javax.annotation.Nullable; import org.bukkit.event.entity.EntityDamageEvent; import tc.oc.commons.core.inspect.Inspectable; import tc.oc.pgm.match.ParticipantState; import static com.google.common.base.Preconditions.checkNotNull; public class GenericDamageInfo extends Inspectable.Impl implements DamageInfo, CauseInfo { @Inspect private final @Nullable PhysicalInfo damager; @Inspect private final EntityDamageEvent.DamageCause damageType; public GenericDamageInfo(EntityDamageEvent.DamageCause damageType, @Nullable PhysicalInfo damager) { this.damageType = checkNotNull(damageType); this.damager = damager; } public GenericDamageInfo(EntityDamageEvent.DamageCause damageType) { this(damageType, null); } public Optional<PhysicalInfo> damager() { return Optional.ofNullable(damager); } @Override public @Nullable PhysicalInfo getCause() { return damager; } public EntityDamageEvent.DamageCause getDamageType() { return damageType; } @Override public @Nullable ParticipantState getAttacker() { return damager == null ? null : damager.getOwner(); } }