Search in sources :

Example 1 with ZoneChangeGroupEvent

use of mage.game.events.ZoneChangeGroupEvent in project mage by magefree.

the class SefrisOfTheHiddenWaysTriggeredAbility method checkTrigger.

@Override
public boolean checkTrigger(GameEvent event, Game game) {
    Boolean applies = false;
    /*
        Sefris of the Hidden Ways must be on the battlefield for its first ability to trigger. 
        It does not trigger when Sefris goes to the graveyard from the battlefield, even if other 
        creature cards also went to the graveyard at the same time.
         */
    Permanent sourceCard = game.getPermanent(sourceId);
    if (((ZoneChangeGroupEvent) event).getToZone() != Zone.GRAVEYARD || sourceCard == null) {
        return false;
    }
    ZoneChangeGroupEvent zEvent = (ZoneChangeGroupEvent) event;
    Set<Card> cards = zEvent.getCards();
    for (Card card : cards) {
        if (card.isCreature(game) && // 603.6c, 603.10a, and 603.10.
        (Card) sourceCard != card && !card.isCopy() && card.isOwnedBy(controllerId)) {
            applies = true;
        }
    }
    return applies;
}
Also used : Permanent(mage.game.permanent.Permanent) ZoneChangeGroupEvent(mage.game.events.ZoneChangeGroupEvent) Card(mage.cards.Card)

Example 2 with ZoneChangeGroupEvent

use of mage.game.events.ZoneChangeGroupEvent in project mage by magefree.

the class LaeliaTheBladeReforgedAddCountersTriggeredAbility method checkTrigger.

@Override
public boolean checkTrigger(GameEvent event, Game game) {
    ZoneChangeGroupEvent zEvent = (ZoneChangeGroupEvent) event;
    final int numberExiled = zEvent.getCards().size();
    if (zEvent.getToZone() != Zone.EXILED || numberExiled == 0) {
        return false;
    }
    switch(zEvent.getFromZone()) {
        case LIBRARY:
            if (zEvent.getCards().stream().filter(Objects::nonNull).map(Card::getOwnerId).anyMatch(this::isControlledBy) && numberExiled > 0) {
                this.getEffects().clear();
                this.getEffects().add(new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
                return true;
            }
        case GRAVEYARD:
            if (zEvent.getCards().stream().filter(Objects::nonNull).map(Card::getOwnerId).anyMatch(this::isControlledBy) && numberExiled > 0) {
                this.getEffects().clear();
                this.getEffects().add(new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
                return true;
            }
    }
    return false;
}
Also used : AddCountersSourceEffect(mage.abilities.effects.common.counter.AddCountersSourceEffect) ZoneChangeGroupEvent(mage.game.events.ZoneChangeGroupEvent) Card(mage.cards.Card)

Example 3 with ZoneChangeGroupEvent

use of mage.game.events.ZoneChangeGroupEvent in project mage by magefree.

the class RakshasaVizierTriggeredAbility method checkTrigger.

@Override
public boolean checkTrigger(GameEvent event, Game game) {
    ZoneChangeGroupEvent zEvent = (ZoneChangeGroupEvent) event;
    if (zEvent != null && Zone.GRAVEYARD == zEvent.getFromZone() && Zone.EXILED == zEvent.getToZone() && zEvent.getCards() != null) {
        int cardCount = 0;
        for (Card card : zEvent.getCards()) {
            if (card != null && card.isOwnedBy(getControllerId())) {
                cardCount++;
            }
        }
        if (cardCount == 0) {
            return false;
        }
        this.getEffects().clear();
        this.getEffects().add(new AddCountersSourceEffect(CounterType.P1P1.createInstance(cardCount)));
        return true;
    }
    return false;
}
Also used : AddCountersSourceEffect(mage.abilities.effects.common.counter.AddCountersSourceEffect) ZoneChangeGroupEvent(mage.game.events.ZoneChangeGroupEvent) Card(mage.cards.Card)

Example 4 with ZoneChangeGroupEvent

use of mage.game.events.ZoneChangeGroupEvent in project mage by magefree.

the class RanarTheEverWatchfulTriggeredAbility method checkTrigger.

@Override
public boolean checkTrigger(GameEvent event, Game game) {
    ZoneChangeGroupEvent zEvent = (ZoneChangeGroupEvent) event;
    final int numberExiled = zEvent.getCards().size() + zEvent.getTokens().size();
    if (zEvent.getToZone() != Zone.EXILED || numberExiled == 0) {
        return false;
    }
    switch(zEvent.getFromZone()) {
        case BATTLEFIELD:
            return // source ability/spell that exiled the permanent
            zEvent.getSource() != null && controllerId.equals(zEvent.getSource().getControllerId()) && // must include both card permanents and tokens on the battlefield
            numberExiled > 0;
        case HAND:
            return zEvent.getCards().stream().filter(Objects::nonNull).map(Card::getOwnerId).anyMatch(this::isControlledBy);
    }
    return false;
}
Also used : Objects(java.util.Objects) ZoneChangeGroupEvent(mage.game.events.ZoneChangeGroupEvent)

Example 5 with ZoneChangeGroupEvent

use of mage.game.events.ZoneChangeGroupEvent in project mage by magefree.

the class MysticReflectionGainAbilityEffect method watch.

@Override
public void watch(GameEvent event, Game game) {
    if (event.getType() != GameEvent.EventType.ZONE_CHANGE_GROUP) {
        return;
    }
    ZoneChangeGroupEvent zEvent = (ZoneChangeGroupEvent) event;
    if (zEvent.getToZone() != Zone.BATTLEFIELD) {
        return;
    }
    Set<Card> cards = new HashSet<>();
    cards.addAll(zEvent.getCards());
    cards.addAll(zEvent.getTokens());
    if (cards.stream().filter(Objects::nonNull).map(MageItem::getId).map(game::getPermanent).filter(Objects::nonNull).anyMatch(p -> p.isPlaneswalker(game) || p.isCreature(game))) {
        enteredThisTurn++;
    }
}
Also used : Objects(java.util.Objects) ZoneChangeGroupEvent(mage.game.events.ZoneChangeGroupEvent) Card(mage.cards.Card) HashSet(java.util.HashSet)

Aggregations

ZoneChangeGroupEvent (mage.game.events.ZoneChangeGroupEvent)8 Card (mage.cards.Card)5 AddCountersSourceEffect (mage.abilities.effects.common.counter.AddCountersSourceEffect)4 Objects (java.util.Objects)2 HashSet (java.util.HashSet)1 UUID (java.util.UUID)1 MageInt (mage.MageInt)1 TriggeredAbilityImpl (mage.abilities.TriggeredAbilityImpl)1 CardImpl (mage.cards.CardImpl)1 CardSetInfo (mage.cards.CardSetInfo)1 CardType (mage.constants.CardType)1 SubType (mage.constants.SubType)1 Zone (mage.constants.Zone)1 CounterType (mage.counters.CounterType)1 FilterCard (mage.filter.FilterCard)1 Game (mage.game.Game)1 GameEvent (mage.game.events.GameEvent)1 Permanent (mage.game.permanent.Permanent)1 PermanentCard (mage.game.permanent.PermanentCard)1 PermanentToken (mage.game.permanent.PermanentToken)1