@Override public AbilitiesImpl<T> copy() { return new AbilitiesImpl<>(this); }
public AbilitiesImpl(final AbilitiesImpl<T> abilities) { for (T ability : abilities) { this.add((T) ability.copy()); } }
public AbilitiesImpl(T... abilities) { addAll(Arrays.asList(abilities)); }
@Override public Abilities<EvasionAbility> getEvasionAbilities() { return stream() .filter(ability -> ability instanceof EvasionAbility) .map(ability -> (EvasionAbility) ability) .collect(Collectors.toCollection(AbilitiesImpl::new)); }
@Override public List<String> getRules(String source) { return getRules(source, true); }
@Override public boolean contains(T ability) { for (Iterator<T> iterator = this.iterator(); iterator.hasNext();) { // simple loop can cause java.util.ConcurrentModificationException T test = iterator.next(); // Checking also by getRule() without other restrictions is a problem when a triggered ability will be copied to a permanent that had the same ability // already before the copy. Because then it keeps the triggered ability twice and it triggers twice. // e.g. 2 Biovisonary and one enchanted with Infinite Reflection if (ability.getId().equals(test.getId())) { return true; } if (ability.getOriginalId().equals(test.getId())) { return true; } if (ability instanceof MageSingleton && test instanceof MageSingleton && ability.getRule().equals(test.getRule())) { return true; } } return false; }
@Override public boolean containsClass(Class classObject) { return stream().anyMatch(ability -> ability.getClass().equals(classObject)); }
public String getRule() { if (ruleText != null) { return ruleText; } StringBuilder sb = new StringBuilder(); List<String> rules = super.getRules(null,false); for (int index = 0; index < rules.size(); index++) { if (index > 0) { if (index < rules.size() - 1) { sb.append(", "); } else { sb.append(" and "); } } sb.append(rules.get(index)); } // we can't simply cache it to this.ruleText as some cards may change abilities dynamically return sb.toString(); }
@Override public Abilities<Ability> getAbilities() { Abilities<Ability> abilities = new AbilitiesImpl<>(); abilities.add(ability); return abilities; }
@Override public Abilities<ProtectionAbility> getProtectionAbilities() { return stream() .filter(ability -> ability instanceof ProtectionAbility) .map(ability -> (ProtectionAbility) ability) .collect(Collectors.toCollection(AbilitiesImpl::new)); }
public CardState(final CardState state) { this.faceDown = state.faceDown; if (state.info != null) { info = new HashMap<>(); info.putAll(state.info); } counters = state.counters.copy(); if (state.abilities != null) { abilities = new AbilitiesImpl<>(); for (Ability ability : state.abilities) { abilities.add(ability.copy()); } } }
@Override public boolean containsKey(UUID abilityId) { return stream().anyMatch(ability -> abilityId.equals(ability.getId())); }
public void addAbility(Ability ability) { if (abilities == null) { abilities = new AbilitiesImpl<>(); } abilities.add(ability); abilities.addAll(ability.getSubAbilities()); }
public Optional<T> get(UUID abilityId) { return stream().filter(ability -> ability.getId().equals(abilityId)).findFirst(); }
public MageObjectImpl(UUID id) { objectId = id; power = new MageInt(0); toughness = new MageInt(0); color = new ObjectColor(); frameColor = new ObjectColor(); frameStyle = FrameStyle.M15_NORMAL; manaCost = new ManaCostsImpl<>(""); abilities = new AbilitiesImpl<>(); textParts = new ArrayList<>(); }
@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)); }
public PlayerImpl(String name, RangeOfInfluence range) { this(UUID.randomUUID()); this.name = name; this.range = range; hand = new CardsImpl(); graveyard = new Graveyard(); abilities = new AbilitiesImpl<>(); counters = new Counters(); manaPool = new ManaPool(playerId); library = new Library(playerId); sideboard = new CardsImpl(); }
@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)); }
public CaravanEscort(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.KNIGHT); this.color.setWhite(true); this.power = new MageInt(1); this.toughness = new MageInt(1); this.addAbility(new LevelUpAbility(new ManaCostsImpl("{2}"))); AbilitiesImpl<Ability> levelAbilities = new AbilitiesImpl<>(FirstStrikeAbility.getInstance()); this.addAbilities(LevelerCardBuilder.construct( new LevelerCardBuilder.LevelAbility(1, 4, new AbilitiesImpl<>(), 2, 2), new LevelerCardBuilder.LevelAbility(5, -1, levelAbilities, 5, 5) )); setMaxLevelCounters(5); }