fixed Ugin, the Ineffable putting cards into hand incorrectly, also fixed implementation for when multiple tokens are created (Doubling Season, etc)

This commit is contained in:
Evan Kranzler 2019-04-24 12:36:46 -04:00
parent 619096cbbd
commit ec9d465432

View file

@ -29,6 +29,8 @@ import mage.players.Player;
import mage.target.TargetPermanent;
import mage.target.targetpointer.FixedTarget;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import static mage.constants.Outcome.Benefit;
@ -108,8 +110,12 @@ class UginTheIneffableEffect extends OneShotEffect {
card.turnFaceDown(game, source.getControllerId());
Token token = new UginTheIneffableToken();
token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId());
Set<MageObjectReference> tokenObjs = new HashSet<>();
for (UUID tokenId : token.getLastAddedTokenIds()) {
tokenObjs.add(new MageObjectReference(tokenId, game));
}
game.addDelayedTriggeredAbility(new UginTheIneffableDelayedTriggeredAbility(
new MageObjectReference(token.getLastAddedToken(), game), new MageObjectReference(card, game)
tokenObjs, new MageObjectReference(card, game)
), source);
return true;
}
@ -117,18 +123,18 @@ class UginTheIneffableEffect extends OneShotEffect {
class UginTheIneffableDelayedTriggeredAbility extends DelayedTriggeredAbility {
private final MageObjectReference tokenRef;
private final Set<MageObjectReference> tokenRefs;
private final MageObjectReference cardRef;
UginTheIneffableDelayedTriggeredAbility(MageObjectReference token, MageObjectReference card) {
UginTheIneffableDelayedTriggeredAbility(Set<MageObjectReference> tokens, MageObjectReference card) {
super(null, Duration.Custom, true);
this.tokenRef = token;
this.tokenRefs = tokens;
this.cardRef = card;
}
private UginTheIneffableDelayedTriggeredAbility(final UginTheIneffableDelayedTriggeredAbility ability) {
super(ability);
this.tokenRef = ability.tokenRef;
this.tokenRefs = ability.tokenRefs;
this.cardRef = ability.cardRef;
}
@ -140,8 +146,8 @@ class UginTheIneffableDelayedTriggeredAbility extends DelayedTriggeredAbility {
@Override
public boolean checkTrigger(GameEvent event, Game game) {
ZoneChangeEvent zEvent = ((ZoneChangeEvent) event);
if (!(zEvent.getFromZone() == Zone.BATTLEFIELD)
|| !tokenRef.refersTo(zEvent.getTarget(), game)) {
if (zEvent.getToZone() == Zone.BATTLEFIELD
|| tokenRefs.stream().noneMatch(tokenRef -> tokenRef.refersTo(zEvent.getTarget(), game))) {
return false;
}
this.getEffects().clear();