fixed Yidaro, Wandering Monster

This commit is contained in:
Evan Kranzler 2020-04-21 21:56:38 -04:00
parent 74a81c6f18
commit 599c5cf742
2 changed files with 16 additions and 10 deletions

View file

@ -4,6 +4,8 @@ import mage.MageInt;
import mage.MageObjectReference; import mage.MageObjectReference;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.CycleTriggeredAbility; import mage.abilities.common.CycleTriggeredAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.Costs;
import mage.abilities.costs.common.CyclingDiscardCost; import mage.abilities.costs.common.CyclingDiscardCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
@ -48,7 +50,7 @@ public final class YidaroWanderingMonster extends CardImpl {
this.addAbility(new CyclingAbility(new ManaCostsImpl("{1}{R}"))); this.addAbility(new CyclingAbility(new ManaCostsImpl("{1}{R}")));
// When you cycle Yidaro, Wandering Monster, shuffle it into your library from your graveyard. If you've cycled a card named Yidaro, Wandering Monster four or more times this game, put it onto the battlefield from your graveyard instead. // When you cycle Yidaro, Wandering Monster, shuffle it into your library from your graveyard. If you've cycled a card named Yidaro, Wandering Monster four or more times this game, put it onto the battlefield from your graveyard instead.
this.addAbility(new CycleTriggeredAbility(new YidaroWanderingMonsterEffect())); this.addAbility(new CycleTriggeredAbility(new YidaroWanderingMonsterEffect()), new YidaroWanderingMonsterWatcher());
} }
private YidaroWanderingMonster(final YidaroWanderingMonster card) { private YidaroWanderingMonster(final YidaroWanderingMonster card) {
@ -85,8 +87,11 @@ class YidaroWanderingMonsterEffect extends OneShotEffect {
if (player == null) { if (player == null) {
return false; return false;
} }
MageObjectReference cycledCard = source Costs<Cost> costs = (Costs) this.getValue("cycleCosts");
.getCosts() if (costs == null) {
return false;
}
MageObjectReference cycledCard = costs
.stream() .stream()
.filter(CyclingDiscardCost.class::isInstance) .filter(CyclingDiscardCost.class::isInstance)
.map(CyclingDiscardCost.class::cast) .map(CyclingDiscardCost.class::cast)
@ -122,6 +127,9 @@ class YidaroWanderingMonsterWatcher extends Watcher {
@Override @Override
public void watch(GameEvent event, Game game) { public void watch(GameEvent event, Game game) {
if (event.getType() != GameEvent.EventType.ACTIVATED_ABILITY) {
return;
}
StackObject object = game.getStack().getStackObject(event.getSourceId()); StackObject object = game.getStack().getStackObject(event.getSourceId());
if (object == null || !(object.getStackAbility() instanceof CyclingAbility)) { if (object == null || !(object.getStackAbility() instanceof CyclingAbility)) {
return; return;

View file

@ -1,5 +1,3 @@
package mage.abilities.common; package mage.abilities.common;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
@ -10,7 +8,6 @@ import mage.game.events.GameEvent;
import mage.game.stack.StackObject; import mage.game.stack.StackObject;
/** /**
*
* @author Plopman * @author Plopman
*/ */
public class CycleTriggeredAbility extends ZoneChangeTriggeredAbility { public class CycleTriggeredAbility extends ZoneChangeTriggeredAbility {
@ -26,7 +23,7 @@ public class CycleTriggeredAbility extends ZoneChangeTriggeredAbility {
public CycleTriggeredAbility(CycleTriggeredAbility ability) { public CycleTriggeredAbility(CycleTriggeredAbility ability) {
super(ability); super(ability);
} }
@Override @Override
public boolean checkEventType(GameEvent event, Game game) { public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.ACTIVATED_ABILITY; return event.getType() == GameEvent.EventType.ACTIVATED_ABILITY;
@ -34,10 +31,11 @@ public class CycleTriggeredAbility extends ZoneChangeTriggeredAbility {
@Override @Override
public boolean checkTrigger(GameEvent event, Game game) { public boolean checkTrigger(GameEvent event, Game game) {
if(event.getSourceId().equals(this.getSourceId())) { if (event.getSourceId().equals(this.getSourceId())) {
StackObject object = game.getStack().getStackObject(event.getSourceId()); StackObject object = game.getStack().getStackObject(event.getSourceId());
if(object != null && object.getStackAbility() instanceof CyclingAbility){ if (object != null && object.getStackAbility() instanceof CyclingAbility) {
return true; this.getEffects().setValue("cycleCosts", object.getStackAbility().getCosts());
return true;
} }
} }
return false; return false;