package tc.oc.pgm.events; import java.util.Optional; import java.util.UUID; import java.util.stream.Stream; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; import org.bukkit.event.entity.EntityDamageEvent; import tc.oc.commons.core.util.Streams; import tc.oc.pgm.match.MatchPlayer; import tc.oc.pgm.match.ParticipantState; import tc.oc.pgm.tracker.damage.DamageInfo; public class MatchPlayerDamageEvent extends MatchEvent implements MatchPlayerEvent { private final EntityDamageEvent cause; private final MatchPlayer victim; private final DamageInfo info; public MatchPlayerDamageEvent(EntityDamageEvent cause, MatchPlayer victim, DamageInfo info) { super(victim.getMatch()); this.cause = cause; this.victim = victim; this.info = info; } @Override public Stream<UUID> users() { return Streams.compact1(victim().getUniqueId(), attacker().map(ParticipantState::getUniqueId)); } @Override public Stream<MatchPlayer> players() { return Streams.compact1(victim, onlineAttacker()); } public EntityDamageEvent cause() { return cause; } public DamageInfo info() { return info; } public MatchPlayer victim() { return victim; } public Optional<ParticipantState> attacker() { return Optional.ofNullable(info.getAttacker()); } public Optional<MatchPlayer> onlineAttacker() { return attacker().flatMap(state -> Optional.ofNullable(state.getMatchPlayer())); } public boolean isAttacker(MatchPlayer player) { final ParticipantState attacker = info.getAttacker(); return attacker != null && attacker.isPlayer(player); } public boolean isAttacker(Player entity) { final ParticipantState attacker = info.getAttacker(); return attacker != null && attacker.isEntity(entity); } private static final HandlerList handlers = new HandlerList(); @Override public HandlerList getHandlers() { return handlers; } public static HandlerList getHandlerList() { return handlers; } }