* Kira, Great Glass-Spinner - Fixed that targeting objects that later changed to creatures was ignored (related to #3041).

This commit is contained in:
LevelX2 2017-04-03 10:30:28 +02:00
parent b5dc463789
commit e88613da5c

View file

@ -27,6 +27,9 @@
*/
package mage.cards.k;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import mage.MageInt;
import mage.MageObjectReference;
import mage.abilities.TriggeredAbilityImpl;
@ -46,10 +49,6 @@ import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget;
import mage.watchers.Watcher;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
*
* @author LevelX2
@ -70,8 +69,10 @@ public class KiraGreatGlassSpinner extends CardImpl {
// Creatures you control have "Whenever this creature becomes the target of a spell or ability for the first time in a turn, counter that spell or ability."
Effect effect = new CounterTargetEffect();
effect.setText("counter that spell or ability");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(new KiraGreatGlassSpinnerAbility(effect), Duration.WhileOnBattlefield, new FilterCreaturePermanent("creatures"))),
new CreatureWasTargetedThisTurnWatcher());
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new GainAbilityControlledEffect(new KiraGreatGlassSpinnerAbility(effect), Duration.WhileOnBattlefield,
new FilterCreaturePermanent("creatures"))),
new KiraGreatGlassSpinnerWatcher());
}
@ -110,7 +111,7 @@ class KiraGreatGlassSpinnerAbility extends TriggeredAbilityImpl {
if (event.getTargetId().equals(this.getSourceId())) {
Permanent permanent = game.getPermanent(event.getTargetId());
if (permanent != null && permanent.isCreature()) {
CreatureWasTargetedThisTurnWatcher watcher = (CreatureWasTargetedThisTurnWatcher) game.getState().getWatchers().get("CreatureWasTargetedThisTurn");
KiraGreatGlassSpinnerWatcher watcher = (KiraGreatGlassSpinnerWatcher) game.getState().getWatchers().get(KiraGreatGlassSpinnerWatcher.class.getName());
if (watcher != null && watcher.notMoreThanOnceTargetedThisTurn(permanent, game)) {
for (Effect effect : getEffects()) {
effect.setTargetPointer(new FixedTarget(event.getSourceId()));
@ -129,15 +130,15 @@ class KiraGreatGlassSpinnerAbility extends TriggeredAbilityImpl {
}
class CreatureWasTargetedThisTurnWatcher extends Watcher {
class KiraGreatGlassSpinnerWatcher extends Watcher {
private final Map<MageObjectReference, Integer> creaturesTargeted = new HashMap<>();
public CreatureWasTargetedThisTurnWatcher() {
super("CreatureWasTargetedThisTurn", WatcherScope.GAME);
public KiraGreatGlassSpinnerWatcher() {
super(KiraGreatGlassSpinnerWatcher.class.getName(), WatcherScope.GAME);
}
public CreatureWasTargetedThisTurnWatcher(final CreatureWasTargetedThisTurnWatcher watcher) {
public KiraGreatGlassSpinnerWatcher(final KiraGreatGlassSpinnerWatcher watcher) {
super(watcher);
this.creaturesTargeted.putAll(creaturesTargeted);
}
@ -146,7 +147,7 @@ class CreatureWasTargetedThisTurnWatcher extends Watcher {
public void watch(GameEvent event, Game game) {
if (event.getType() == GameEvent.EventType.TARGETED) {
Permanent permanent = game.getPermanent(event.getTargetId());
if (permanent != null && permanent.isCreature()) {
if (permanent != null) {
MageObjectReference mor = new MageObjectReference(permanent, game);
int amount = 0;
if (creaturesTargeted.containsKey(mor)) {
@ -171,7 +172,7 @@ class CreatureWasTargetedThisTurnWatcher extends Watcher {
}
@Override
public CreatureWasTargetedThisTurnWatcher copy() {
return new CreatureWasTargetedThisTurnWatcher(this);
public KiraGreatGlassSpinnerWatcher copy() {
return new KiraGreatGlassSpinnerWatcher(this);
}
}