rewrote some streams and optionals

This commit is contained in:
ingmargoudt 2017-04-01 22:45:12 +02:00
parent d0bf77cedf
commit 594ffa2754
29 changed files with 199 additions and 273 deletions

View file

@ -41,6 +41,7 @@ import mage.game.Game;
import mage.game.events.GameEvent;
import mage.target.TargetPlayer;
import java.util.Optional;
import java.util.UUID;
/**
@ -110,8 +111,8 @@ class AbeyanceEffect extends ContinuousRuleModifyingEffectImpl {
}
}
if (event.getType() == GameEvent.EventType.ACTIVATE_ABILITY) {
Ability ability = game.getAbility(event.getTargetId(), event.getSourceId());
if (ability != null && !(ability instanceof ActivatedManaAbilityImpl)) {
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
if (ability.isPresent() && !(ability.get() instanceof ActivatedManaAbilityImpl)) {
return true;
}
}

View file

@ -46,6 +46,7 @@ import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import java.util.Optional;
import java.util.UUID;
/**
@ -108,8 +109,8 @@ class DampingMatrixEffect extends ReplacementEffectImpl {
public boolean applies(GameEvent event, Ability source, Game game) {
MageObject object = game.getObject(event.getSourceId());
if (object instanceof Permanent && filter.match((Permanent)object, game)) {
Ability ability = object.getAbilities().get(event.getTargetId());
if (ability != null && !(ability instanceof ActivatedManaAbilityImpl)) {
Optional<Ability> ability = object.getAbilities().get(event.getTargetId());
if (ability.isPresent() && !(ability.get() instanceof ActivatedManaAbilityImpl)) {
return true;
}
}

View file

@ -44,16 +44,16 @@ import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import java.util.Optional;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public class FaithsFetters extends CardImpl {
public FaithsFetters(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W}");
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}");
this.subtype.add("Aura");
// Enchant permanent
@ -114,12 +114,11 @@ class FaithsFettersEffect extends ContinuousRuleModifyingEffectImpl {
public boolean applies(GameEvent event, Ability source, Game game) {
Permanent enchantment = game.getPermanent(source.getSourceId());
if (enchantment != null && enchantment.getAttachedTo().equals(event.getSourceId())) {
Ability ability = game.getAbility(event.getTargetId(), event.getSourceId());
if (ability != null) {
if (ability.getAbilityType() != AbilityType.MANA) {
return true;
}
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
if (ability.isPresent() && ability.get().getAbilityType() != AbilityType.MANA) {
return true;
}
}
return false;
}

View file

@ -27,7 +27,6 @@
*/
package mage.cards.h;
import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
@ -35,14 +34,13 @@ import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
import mage.abilities.mana.ActivatedManaAbilityImpl;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.TurnPhase;
import mage.constants.Zone;
import mage.constants.*;
import mage.game.Game;
import mage.game.events.GameEvent;
import java.util.Optional;
import java.util.UUID;
/**
*
* @author fireshoes
@ -106,8 +104,8 @@ class HandToHandEffect extends ContinuousRuleModifyingEffectImpl {
}
}
if (event.getType() == GameEvent.EventType.ACTIVATE_ABILITY) {
Ability ability = game.getAbility(event.getTargetId(), event.getSourceId());
if (ability != null && !(ability instanceof ActivatedManaAbilityImpl)) {
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
if (ability.isPresent() && !(ability.get() instanceof ActivatedManaAbilityImpl)) {
return true;
}
}

View file

@ -27,7 +27,6 @@
*/
package mage.cards.m;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.KickedCondition;
@ -50,6 +49,9 @@ import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.players.Player;
import java.util.Optional;
import java.util.UUID;
/**
*
* @author LevelX2
@ -109,8 +111,8 @@ class MoltenDisasterSplitSecondEffect extends ContinuousRuleModifyingEffectImpl
}
}
if (event.getType() == GameEvent.EventType.ACTIVATE_ABILITY) {
Ability ability = game.getAbility(event.getTargetId(), event.getSourceId());
if (ability != null && !(ability instanceof ActivatedManaAbilityImpl)) {
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
if (ability.isPresent() && !(ability.get() instanceof ActivatedManaAbilityImpl)) {
if (KickedCondition.instance.apply(game, source)) {
return true;
}

View file

@ -27,7 +27,6 @@
*/
package mage.cards.p;
import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.AsEntersBattlefieldAbility;
@ -36,14 +35,13 @@ import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
import mage.abilities.effects.common.NameACardEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityType;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.constants.*;
import mage.game.Game;
import mage.game.events.GameEvent;
import java.util.Optional;
import java.util.UUID;
/**
*
* @author jeffwadsworth, nox
@ -99,9 +97,9 @@ class PithingNeedleEffect extends ContinuousRuleModifyingEffectImpl {
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
MageObject object = game.getObject(event.getSourceId());
Ability ability = game.getAbility(event.getTargetId(), event.getSourceId());
if (ability != null && object != null) {
if (ability.getAbilityType() != AbilityType.MANA
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
if (ability.isPresent() && object != null) {
if (ability.get().getAbilityType() != AbilityType.MANA
&& object.getName().equals(game.getState().getValue(source.getSourceId().toString() + NameACardEffect.INFO_KEY))) {
return true;
}

View file

@ -0,0 +1,37 @@
package org.mage.test.cards.watchers;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import mage.game.permanent.Permanent;
import org.junit.Assert;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
/**
* Created by IGOUDT on 30-3-2017.
*/
public class KiraGreatGlassSpinnerTest extends CardTestPlayerBase {
private final String kira = "Kira, Great Glass-Spinner";
private final String shock = "Shock";
@Test
public void counterFirst(){
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 4);
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 4);
addCard(Zone.BATTLEFIELD, playerA, "Ugin, the Spirit Dragon"); // starts with 7 Loyality counters
addCard(Zone.BATTLEFIELD, playerA, kira);
addCard(Zone.HAND, playerA, shock);
addCard(Zone.HAND, playerA, shock);
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+2: {source} deals 3 damage to target creature or player.", kira);
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
Permanent _kira = getPermanent(kira, playerA.getId());
Assert.assertNotNull(_kira);
}
}

View file

@ -29,6 +29,7 @@ package mage.abilities;
import java.io.Serializable;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import mage.abilities.keyword.ProtectionAbility;
import mage.abilities.mana.ActivatedManaAbilityImpl;
@ -245,7 +246,7 @@ public interface Abilities<T extends Ability> extends List<T>, Serializable {
* @param abilityId
* @return
*/
T get(UUID abilityId);
Optional<T> get(UUID abilityId);
/**
* TODO The usage of this method seems redundant to that of

View file

@ -27,13 +27,6 @@
*/
package mage.abilities;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import mage.abilities.common.ZoneChangeTriggeredAbility;
import mage.abilities.costs.Cost;
import mage.abilities.keyword.ProtectionAbility;
@ -44,6 +37,8 @@ import mage.game.Game;
import mage.util.ThreadLocalStringBuilder;
import org.apache.log4j.Logger;
import java.util.*;
/**
* @param <T>
* @author BetaSteward_at_googlemail.com
@ -277,12 +272,7 @@ public class AbilitiesImpl<T extends Ability> extends ArrayList<T> implements Ab
@Override
public boolean containsRule(T ability) {
for (T test : this) {
if (ability.getRule().equals(test.getRule())) {
return true;
}
}
return false;
return stream().anyMatch(rule -> rule.getRule().equals(ability.getRule()));
}
@Override
@ -301,32 +291,16 @@ public class AbilitiesImpl<T extends Ability> extends ArrayList<T> implements Ab
@Override
public boolean containsKey(UUID abilityId) {
for (T ability : this) {
if (ability.getId().equals(abilityId)) {
return true;
}
}
return false;
return stream().anyMatch(ability -> ability.getId().equals(abilityId));
}
@Override
public boolean containsClass(Class classObject) {
for (T ability : this) {
if (ability.getClass().equals(classObject)) {
return true;
}
}
return false;
return stream().anyMatch(ability -> ability.getClass().equals(classObject));
}
@Override
public T get(UUID abilityId) {
for (T ability : this) {
if (ability.getId().equals(abilityId)) {
return ability;
}
}
return null;
public Optional<T> get(UUID abilityId) {
return stream().filter(ability -> ability.getId().equals(abilityId)).findFirst();
}
@Override

View file

@ -27,9 +27,6 @@
*/
package mage.abilities;
import java.io.Serializable;
import java.util.List;
import java.util.UUID;
import mage.MageObject;
import mage.abilities.costs.Cost;
import mage.abilities.costs.Costs;
@ -49,6 +46,11 @@ import mage.target.Target;
import mage.target.Targets;
import mage.watchers.Watcher;
import java.io.Serializable;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
/**
* Practically everything in the game is started from an Ability. This interface
* describes what an Ability is composed of at the highest level.

View file

@ -28,20 +28,21 @@
package mage.abilities;
import java.util.Iterator;
import mage.constants.Duration;
import mage.game.Game;
import mage.game.events.GameEvent;
import java.util.Iterator;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public class DelayedTriggeredAbilities extends AbilitiesImpl<DelayedTriggeredAbility> {
public class DelayedTriggeredAbilities extends AbilitiesImpl<DelayedTriggeredAbility> {
public DelayedTriggeredAbilities() {}
public DelayedTriggeredAbilities() {
}
public DelayedTriggeredAbilities(final DelayedTriggeredAbilities abilities) {
public DelayedTriggeredAbilities(final DelayedTriggeredAbilities abilities) {
super(abilities);
}
@ -52,9 +53,9 @@ import mage.game.events.GameEvent;
public void checkTriggers(GameEvent event, Game game) {
if (this.size() > 0) {
for (Iterator<DelayedTriggeredAbility> it = this.iterator();it.hasNext();) {
for (Iterator<DelayedTriggeredAbility> it = this.iterator(); it.hasNext(); ) {
DelayedTriggeredAbility ability = it.next();
if (ability.getDuration()== Duration.Custom){
if (ability.getDuration() == Duration.Custom) {
if (ability.isInactive(game)) {
it.remove();
continue;

View file

@ -10,6 +10,8 @@ import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import java.util.Optional;
/**
* Split Second
*
@ -66,8 +68,8 @@ class SplitSecondEffect extends ContinuousRuleModifyingEffectImpl {
return true;
}
if (event.getType() == GameEvent.EventType.ACTIVATE_ABILITY) {
Ability ability = game.getAbility(event.getTargetId(), event.getSourceId());
if (ability != null && !(ability instanceof ActivatedManaAbilityImpl)) {
Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId());
if (ability != null && !(ability.get() instanceof ActivatedManaAbilityImpl)) {
return true;
}
}

View file

@ -34,6 +34,7 @@ import mage.util.ThreadLocalStringBuilder;
import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author BetaSteward_at_googlemail.com
@ -109,13 +110,7 @@ public class CardsImpl extends LinkedHashSet<UUID> implements Cards, Serializabl
@Override
public int count(FilterCard filter, Game game) {
int result = 0;
for (UUID cardId : this) {
if (filter.match(game.getCard(cardId), game)) {
result++;
}
}
return result;
return (int) stream().filter(cardId -> filter.match(game.getCard(cardId), game)).count();
}
@Override
@ -150,14 +145,7 @@ public class CardsImpl extends LinkedHashSet<UUID> implements Cards, Serializabl
@Override
public Set<Card> getCards(FilterCard filter, Game game) {
Set<Card> cards = new LinkedHashSet<>();
for (UUID card : this) {
boolean match = filter.match(game.getCard(card), game);
if (match) {
cards.add(game.getCard(card));
}
}
return cards;
return stream().map(game::getCard).filter(card -> filter.match(card, game)).collect(Collectors.toSet());
}
@Override

View file

@ -36,6 +36,7 @@ import mage.util.RandomUtil;
import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author BetaSteward_at_googlemail.com
@ -160,13 +161,7 @@ public abstract class ExpansionSet implements Serializable {
}
public List<SetCardInfo> findCardInfoByClass(Class<?> clazz) {
ArrayList<SetCardInfo> result = new ArrayList<>();
for (SetCardInfo info : cards) {
if (info.getCardClass().equals(clazz)) {
result.add(info);
}
}
return result;
return cards.stream().filter(info -> info.getCardClass().equals(clazz)).collect(Collectors.toList());
}
public List<Card> create15CardBooster() {

View file

@ -28,10 +28,10 @@
package mage.counters;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author BetaSteward_at_googlemail.com
@ -122,12 +122,9 @@ public class Counters extends HashMap<String, Counter> implements Serializable {
}
public List<BoostCounter> getBoostCounters() {
List<BoostCounter> boosters = new ArrayList<>();
for (Counter counter : this.values()) {
if (counter instanceof BoostCounter) {
boosters.add((BoostCounter) counter);
}
}
return boosters;
return values().stream().
filter(counter -> counter instanceof BoostCounter).
map(counter -> (BoostCounter) counter).
collect(Collectors.toList());
}
}

View file

@ -27,14 +27,6 @@
*/
package mage.game;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import mage.MageItem;
import mage.MageObject;
import mage.abilities.Ability;
@ -50,11 +42,7 @@ import mage.cards.Cards;
import mage.cards.MeldCard;
import mage.cards.decks.Deck;
import mage.choices.Choice;
import mage.constants.Duration;
import mage.constants.MultiplayerAttackOption;
import mage.constants.PlayerAction;
import mage.constants.RangeOfInfluence;
import mage.constants.Zone;
import mage.constants.*;
import mage.counters.Counters;
import mage.game.combat.Combat;
import mage.game.command.Commander;
@ -77,6 +65,9 @@ import mage.players.Players;
import mage.util.MessageToClient;
import mage.util.functions.ApplyToPermanent;
import java.io.Serializable;
import java.util.*;
public interface Game extends MageItem, Serializable {
MatchType getGameType();
@ -128,7 +119,7 @@ public interface Game extends MageItem, Serializable {
Card getCard(UUID cardId);
Ability getAbility(UUID abilityId, UUID sourceId);
Optional<Ability> getAbility(UUID abilityId, UUID sourceId);
void setZone(UUID objectId, Zone zone);

View file

@ -503,12 +503,12 @@ public abstract class GameImpl implements Game, Serializable {
}
@Override
public Ability getAbility(UUID abilityId, UUID sourceId) {
public Optional<Ability> getAbility(UUID abilityId, UUID sourceId) {
MageObject object = getObject(sourceId);
if (object != null) {
return object.getAbilities().get(abilityId);
}
return null;
return Optional.empty();
}
// @Override
@ -2336,10 +2336,10 @@ public abstract class GameImpl implements Game, Serializable {
}
}
Iterator it = gameCards.entrySet().iterator();
Iterator<Entry<UUID, Card>> it = gameCards.entrySet().iterator();
while (it.hasNext()) {
Entry<UUID, Card> entry = (Entry<UUID, Card>) it.next();
Entry<UUID, Card> entry = it.next();
Card card = entry.getValue();
if (card.getOwnerId().equals(playerId)) {
it.remove();

View file

@ -27,10 +27,6 @@
*/
package mage.game.command;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Abilities;
@ -48,18 +44,22 @@ import mage.game.Game;
import mage.game.events.ZoneChangeEvent;
import mage.util.GameLog;
import java.util.EnumSet;
import java.util.List;
import java.util.UUID;
public class Commander implements CommandObject {
private final Card sourceObject;
private final Abilities<Ability> abilites = new AbilitiesImpl<>();
private final Abilities<Ability> abilities = new AbilitiesImpl<>();
public Commander(Card card) {
this.sourceObject = card;
abilites.add(new CastCommanderAbility(card));
abilities.add(new CastCommanderAbility(card));
for (Ability ability : card.getAbilities()) {
if (!(ability instanceof SpellAbility)) {
Ability newAbility = ability.copy();
abilites.add(newAbility);
abilities.add(newAbility);
}
}
}
@ -134,7 +134,7 @@ public class Commander implements CommandObject {
@Override
public Abilities<Ability> getAbilities() {
return abilites;
return abilities;
}
@Override

View file

@ -27,8 +27,6 @@
*/
package mage.game.command;
import java.util.*;
import mage.MageInt;
import mage.MageObject;
import mage.ObjectColor;
@ -46,6 +44,11 @@ import mage.game.Game;
import mage.game.events.ZoneChangeEvent;
import mage.util.GameLog;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.UUID;
/**
* @author nantuko
*/
@ -92,7 +95,7 @@ public class Emblem implements CommandObject {
this.sourceObject = sourceObject;
if (sourceObject instanceof Card) {
if (name.isEmpty()) {
name = ((Card) sourceObject).getSubtype(null).toString();
name = sourceObject.getSubtype(null).toString();
}
if (expansionSetCodeForImage.isEmpty()) {
expansionSetCodeForImage = ((Card) sourceObject).getExpansionSetCode();

View file

@ -103,22 +103,20 @@ public class Battlefield implements Serializable {
* @return count
*/
public int count(FilterPermanent filter, UUID sourceId, UUID sourcePlayerId, Game game) {
int count;
if (game.getRangeOfInfluence() == RangeOfInfluence.ALL) {
count = (int) field.values()
return (int) field.values()
.stream()
.filter(permanent -> filter.match(permanent, sourceId, sourcePlayerId, game)
&& permanent.isPhasedIn())
.count();
} else {
Set<UUID> range = game.getPlayer(sourcePlayerId).getInRange();
count = (int) field.values()
return (int) field.values()
.stream()
.filter(permanent -> range.contains(permanent.getControllerId())
&& filter.match(permanent, sourceId, sourcePlayerId, game)
&& permanent.isPhasedIn()).count();
}
return count;
}
/**
@ -319,20 +317,18 @@ public class Battlefield implements Serializable {
* @see Permanent
*/
public List<Permanent> getActivePermanents(FilterPermanent filter, UUID sourcePlayerId, UUID sourceId, Game game) {
List<Permanent> active = new ArrayList<>();
if (game.getRangeOfInfluence() == RangeOfInfluence.ALL) {
active = field.values()
return field.values()
.stream()
.filter(perm -> perm.isPhasedIn() && filter.match(perm, sourceId, sourcePlayerId, game))
.collect(Collectors.toList());
} else {
Set<UUID> range = game.getPlayer(sourcePlayerId).getInRange();
active = field.values()
return field.values()
.stream()
.filter(perm -> perm.isPhasedIn() && range.contains(perm.getControllerId())
&& filter.match(perm, sourceId, sourcePlayerId, game)).collect(Collectors.toList());
}
return active;
}
/**

View file

@ -27,8 +27,6 @@
*/
package mage.game.stack;
import java.util.*;
import mage.MageInt;
import mage.MageObject;
import mage.Mana;
@ -60,6 +58,11 @@ import mage.game.permanent.PermanentCard;
import mage.players.Player;
import mage.util.GameLog;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.UUID;
/**
*
* @author BetaSteward_at_googlemail.com
@ -331,8 +334,8 @@ public class Spell extends StackObjImpl implements Card {
* determine whether card was kicked or not. E.g. Desolation Angel
*/
private void updateOptionalCosts(int index) {
Ability abilityOrig = spellCards.get(index).getAbilities().get(spellAbilities.get(index).getId());
if (abilityOrig != null) {
spellCards.get(index).getAbilities().get(spellAbilities.get(index).getId()).ifPresent(abilityOrig ->
{
for (Object object : spellAbilities.get(index).getOptionalCosts()) {
Cost cost = (Cost) object;
for (Cost costOrig : abilityOrig.getOptionalCosts()) {
@ -346,7 +349,7 @@ public class Spell extends StackObjImpl implements Card {
}
}
}
}
});
}
@Override

View file

@ -27,26 +27,16 @@
*/
package mage.players;
import java.io.Serializable;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import mage.cards.Card;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.game.Game;
import mage.util.RandomUtil;
import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author BetaSteward_at_googlemail.com
*/
@ -182,11 +172,7 @@ public class Library implements Serializable {
}
public List<Card> getCards(Game game) {
List<Card> cards = new ArrayList<>();
for (UUID cardId : library) {
cards.add(game.getCard(cardId));
}
return cards;
return library.stream().map(game::getCard).collect(Collectors.toList());
}
public Set<Card> getTopCards(Game game, int amount) {
@ -214,13 +200,7 @@ public class Library implements Serializable {
}
public int count(FilterCard filter, Game game) {
int result = 0;
for (UUID card : library) {
if (filter.match(game.getCard(card), game)) {
result++;
}
}
return result;
return (int) library.stream().filter(cardId -> filter.match(game.getCard(cardId), game)).count();
}
public boolean isEmptyDraw() {

View file

@ -34,6 +34,7 @@ import mage.abilities.dynamicvalue.common.StaticValue;
import mage.constants.Outcome;
import mage.game.Game;
import java.util.*;
import java.util.stream.Collectors;
/**
*
@ -142,12 +143,7 @@ public abstract class TargetAmount extends TargetImpl {
t.addTarget(targetId, n, source, game, true);
if (t.remainingAmount > 0) {
if (targets.size() > 1) {
Set<UUID> newTargets = new HashSet<>();
for (UUID newTarget: targets) {
if (!newTarget.equals(targetId)) {
newTargets.add(newTarget);
}
}
Set<UUID> newTargets = targets.stream().filter(newTarget -> !newTarget.equals(targetId)).collect(Collectors.toSet());
addTargets(t, newTargets, options, source, game);
}
}

View file

@ -27,9 +27,7 @@
*/
package mage.target;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import mage.MageItem;
import mage.cards.Card;
import mage.cards.Cards;
import mage.constants.Zone;
@ -38,6 +36,11 @@ import mage.game.Game;
import mage.game.events.GameEvent;
import mage.players.Player;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
/**
*
* @author BetaSteward_at_googlemail.com
@ -200,11 +203,7 @@ public class TargetCard extends TargetObject {
}
public Set<UUID> possibleTargets(UUID sourceControllerId, Cards cards, Game game) {
Set<UUID> possibleTargets = new HashSet<>();
for (Card card : cards.getCards(filter, game)) {
possibleTargets.add(card.getId());
}
return possibleTargets;
return cards.getCards(filter,game).stream().map(MageItem::getId).collect(Collectors.toSet());
}
@Override

View file

@ -27,15 +27,16 @@
*/
package mage.target;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.filter.FilterPlayer;
import mage.game.Game;
import mage.players.Player;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
/**
*
* @author BetaSteward_at_googlemail.com
@ -158,12 +159,7 @@ public class TargetPlayer extends TargetImpl {
if (getNumberOfTargets() == 0 && targets.isEmpty()) {
return true; // 0 targets selected is valid
}
for (UUID playerId : targets.keySet()) {
if (canTarget(playerId, source, game)) {
return true;
}
}
return false;
return targets.keySet().stream().anyMatch(playerId -> canTarget(playerId, source, game));
}
@Override

View file

@ -27,9 +27,6 @@
*/
package mage.target;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import mage.abilities.Ability;
import mage.constants.Zone;
import mage.filter.FilterSpell;
@ -37,6 +34,11 @@ import mage.game.Game;
import mage.game.stack.Spell;
import mage.game.stack.StackObject;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
/**
*
* @author BetaSteward_at_googlemail.com
@ -112,13 +114,10 @@ public class TargetSpell extends TargetObject {
@Override
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
Set<UUID> possibleTargets = new HashSet<>();
for (StackObject stackObject : game.getStack()) {
if (canBeChosen(stackObject, sourceId, sourceControllerId, game)) {
possibleTargets.add(stackObject.getId());
}
}
return possibleTargets;
return game.getStack().stream()
.filter(stackObject -> canBeChosen(stackObject, sourceId, sourceControllerId, game))
.map(StackObject::getId)
.collect(Collectors.toSet());
}
@Override

View file

@ -27,14 +27,16 @@
*/
package mage.target;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.events.GameEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
/**
*
* @author BetaSteward_at_googlemail.com
@ -51,13 +53,7 @@ public class Targets extends ArrayList<Target> {
}
public List<Target> getUnchosen() {
List<Target> unchosen = new ArrayList<>();
for (Target target : this) {
if (!target.isChosen()) {
unchosen.add(target);
}
}
return unchosen;
return stream().filter(target -> !target.isChosen()).collect(Collectors.toList());
}
public void clearChosen() {
@ -67,12 +63,7 @@ public class Targets extends ArrayList<Target> {
}
public boolean isChosen() {
for (Target target : this) {
if (!target.isChosen()) {
return false;
}
}
return true;
return stream().allMatch(Target::isChosen);
}
public boolean choose(Outcome outcome, UUID playerId, UUID sourceId, Game game) {
@ -122,12 +113,8 @@ public class Targets extends ArrayList<Target> {
public boolean stillLegal(Ability source, Game game) {
// 608.2
// The spell or ability is countered if all its targets, for every instance of the word "target," are now illegal
int illegalCount = 0;
for (Target target : this) {
if (!target.isLegal(source, game)) {
illegalCount++;
}
}
int illegalCount = (int) stream().filter(target -> !target.isLegal(source, game)).count();
// it is legal when either there is no target or not all targets are illegal
return this.isEmpty() || this.size() != illegalCount;
}
@ -142,12 +129,7 @@ public class Targets extends ArrayList<Target> {
* @return - true if enough valid targets exist
*/
public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) {
for (Target target : this) {
if (!target.canChoose(sourceId, sourceControllerId, game)) {
return false;
}
}
return true;
return stream().allMatch(target -> target.canChoose(sourceId, sourceControllerId, game));
}
/**
@ -160,12 +142,7 @@ public class Targets extends ArrayList<Target> {
* @return - true if enough valid objects exist
*/
public boolean canChoose(UUID sourceControllerId, Game game) {
for (Target target : this) {
if (!target.canChoose(sourceControllerId, game)) {
return false;
}
}
return true;
return stream().allMatch(target -> target.canChoose(sourceControllerId, game));
}
public UUID getFirstTarget() {
@ -174,7 +151,6 @@ public class Targets extends ArrayList<Target> {
}
return null;
}
public Targets copy() {
return new Targets(this);
}

View file

@ -28,27 +28,27 @@
package mage.target.common;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import mage.constants.Zone;
import mage.abilities.Ability;
import mage.constants.AbilityType;
import mage.constants.Zone;
import mage.filter.Filter;
import mage.filter.FilterAbility;
import mage.game.Game;
import mage.game.stack.StackObject;
import mage.target.TargetObject;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
/**
*
* @author LevelX2
*/
public class TargetActivatedOrTriggeredAbility extends TargetObject {
public TargetActivatedOrTriggeredAbility() {
public TargetActivatedOrTriggeredAbility() {
this.minNumberOfTargets = 1;
this.maxNumberOfTargets = 1;
this.zone = Zone.STACK;
@ -78,12 +78,9 @@ public class TargetActivatedOrTriggeredAbility extends TargetObject {
@Override
public boolean canChoose(UUID sourceControllerId, Game game) {
for (StackObject stackObject : game.getStack()) {
if (isActivatedOrTriggeredAbility(stackObject)) {
return true;
}
}
return false;
return game.getStack()
.stream()
.anyMatch(TargetActivatedOrTriggeredAbility::isActivatedOrTriggeredAbility);
}
@Override
@ -93,13 +90,10 @@ public class TargetActivatedOrTriggeredAbility extends TargetObject {
@Override
public Set<UUID> possibleTargets(UUID sourceControllerId, Game game) {
Set<UUID> possibleTargets = new HashSet<>();
for (StackObject stackObject : game.getStack()) {
if (isActivatedOrTriggeredAbility(stackObject)) {
possibleTargets.add(stackObject.getStackAbility().getId());
}
}
return possibleTargets;
return game.getStack().stream()
.filter(TargetActivatedOrTriggeredAbility::isActivatedOrTriggeredAbility)
.map(stackObject -> stackObject.getStackAbility().getId())
.collect(Collectors.toSet());
}
@Override
@ -117,9 +111,9 @@ public class TargetActivatedOrTriggeredAbility extends TargetObject {
return false;
}
if (stackObject instanceof Ability) {
Ability ability = (Ability)stackObject;
Ability ability = (Ability) stackObject;
return ability.getAbilityType() == AbilityType.TRIGGERED
|| ability.getAbilityType() == AbilityType.ACTIVATED;
|| ability.getAbilityType() == AbilityType.ACTIVATED;
}
return false;
}

View file

@ -27,8 +27,6 @@
*/
package mage.target.common;
import java.util.Set;
import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.cards.Card;
@ -39,8 +37,10 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.TargetCard;
import java.util.Set;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public class TargetCardInGraveyardOrBattlefield extends TargetCard {
@ -82,8 +82,7 @@ public class TargetCardInGraveyardOrBattlefield extends TargetCard {
}
@Override
public boolean canTarget(UUID id, Ability source, Game game
) {
public boolean canTarget(UUID id, Ability source, Game game) {
Permanent permanent = game.getPermanent(id);
if (permanent != null) {
return filter.match(permanent, game);
@ -93,8 +92,7 @@ public class TargetCardInGraveyardOrBattlefield extends TargetCard {
}
@Override
public Set<UUID> possibleTargets(UUID sourceControllerId, Game game
) {
public Set<UUID> possibleTargets(UUID sourceControllerId, Game game) {
//return super.possibleTargets(sourceControllerId, game); //To change body of generated methods, choose Tools | Templates.
Set<UUID> possibleTargets = super.possibleTargets(sourceControllerId, game);
for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterPermanent(), sourceControllerId, game)) {
@ -106,8 +104,7 @@ public class TargetCardInGraveyardOrBattlefield extends TargetCard {
}
@Override
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game
) {
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
Set<UUID> possibleTargets = super.possibleTargets(sourceId, sourceControllerId, game);
MageObject targetSource = game.getObject(sourceId);
for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterPermanent(), sourceControllerId, game)) {