package mage.target.targetpointer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import mage.abilities.Ability; import mage.cards.Card; import mage.game.Game; import mage.target.Target; public class FirstTargetPointer implements TargetPointer { private Map zoneChangeCounter = new HashMap(); public static FirstTargetPointer getInstance() { return new FirstTargetPointer(); } public FirstTargetPointer() { } public FirstTargetPointer(FirstTargetPointer firstTargetPointer) { this.zoneChangeCounter = new HashMap(); for (Map.Entry entry : firstTargetPointer.zoneChangeCounter.entrySet()) { this.zoneChangeCounter.put(entry.getKey(), entry.getValue()); } } @Override public void init(Game game, Ability source) { if (source.getTargets().size() > 0) { for (UUID target : source.getTargets().get(0).getTargets()) { Card card = game.getCard(target); if (card != null) { this.zoneChangeCounter.put(target, card.getZoneChangeCounter()); } } } } @Override public List getTargets(Game game, Ability source) { ArrayList target = new ArrayList(); if (source.getTargets().size() > 0) { for (UUID targetId : source.getTargets().get(0).getTargets()) { Card card = game.getCard(targetId); if (card != null && zoneChangeCounter.containsKey(targetId) && card.getZoneChangeCounter() != zoneChangeCounter.get(targetId)) { continue; } target.add(targetId); } } return target; } @Override public UUID getFirst(Game game, Ability source) { UUID targetId = source.getFirstTarget(); if (zoneChangeCounter.containsKey(targetId)) { Card card = game.getCard(targetId); if (card != null && zoneChangeCounter.containsKey(targetId) && card.getZoneChangeCounter() != zoneChangeCounter.get(targetId)) { return null; } } return targetId; } @Override public TargetPointer copy() { return new FirstTargetPointer(this); } }