@Override public boolean containsClass(Class classObject) { return stream().anyMatch(ability -> ability.getClass().equals(classObject)); }
@Override public Abilities<ProtectionAbility> getProtectionAbilities() { return stream() .filter(ability -> ability instanceof ProtectionAbility) .map(ability -> (ProtectionAbility) ability) .collect(Collectors.toCollection(AbilitiesImpl::new)); }
@Override public Abilities<EvasionAbility> getEvasionAbilities() { return stream() .filter(ability -> ability instanceof EvasionAbility) .map(ability -> (EvasionAbility) ability) .collect(Collectors.toCollection(AbilitiesImpl::new)); }
@Override public boolean containsKey(UUID abilityId) { return stream().anyMatch(ability -> abilityId.equals(ability.getId())); }
public Optional<T> get(UUID abilityId) { return stream().filter(ability -> ability.getId().equals(abilityId)).findFirst(); }
@Override public Abilities<ActivatedManaAbilityImpl> getActivatedManaAbilities(Zone zone) { return stream() .filter(ability -> ability instanceof ActivatedManaAbilityImpl) .filter(ability -> ability.getZone().match(zone)) .map(ability -> (ActivatedManaAbilityImpl) ability) .collect(Collectors.toCollection(AbilitiesImpl::new)); }
@Override public Abilities<ActivatedAbility> getPlayableAbilities(Zone zone) { return stream() .filter(ability -> (ability instanceof ActivatedAbility)) .filter(ability -> ability.getZone().match(zone)) .map(ability -> (ActivatedAbility) ability) .collect(Collectors.toCollection(AbilitiesImpl::new)); }
@Override public Abilities<ActivatedAbility> getActivatedAbilities(Zone zone) { return stream() .filter(ability -> ability instanceof ActivatedAbility) .filter(ability -> ability.getZone().match(zone)) .map(ability -> (ActivatedAbility) ability) .collect(Collectors.toCollection(AbilitiesImpl::new)); }
@Override public Abilities<StaticAbility> getStaticAbilities(Zone zone) { return stream() .filter(ability -> ability instanceof StaticAbility) .filter(ability -> ability.getZone().match(zone)) .map(ability -> (StaticAbility) ability) .collect(Collectors.toCollection(AbilitiesImpl::new)); }
@Override public Abilities<Ability> getManaAbilities(Zone zone) { return stream() .filter(ability -> ability.getAbilityType() == AbilityType.MANA) .filter(ability -> ability.getZone().match(zone)) .collect(Collectors.toCollection(AbilitiesImpl::new)); }
@Override public boolean containsRule(T ability) { return stream().anyMatch(rule -> rule.getRule().equals(ability.getRule())); }
@Override public int getOutcomeTotal() { return stream().mapToInt(ability -> ability.getEffects().getOutcomeTotal()).sum(); }
@Override public Abilities<ActivatedManaAbilityImpl> getAvailableActivatedManaAbilities(Zone zone, Game game) { return stream() .filter(ability -> ability instanceof ActivatedManaAbilityImpl) .filter(ability -> ability.getZone().match(zone)) .filter(ability -> (((ActivatedManaAbilityImpl) ability).canActivate(ability.getControllerId(), game).canActivate())) .map(ability -> (ActivatedManaAbilityImpl) ability) .collect(Collectors.toCollection(AbilitiesImpl::new)); }