Package mage.game.stack

Examples of mage.game.stack.StackObject


    }

    @Override
    public boolean replaceEvent(GameEvent event, Ability source, Game game) {
        UUID eventObject = ((ZoneChangeEvent) event).getTargetId();
        StackObject card = game.getStack().getStackObject(eventObject);
        if (card instanceof Spell) {
            game.rememberLKI(card.getId(), Zone.STACK, (Spell) card);
        }
        if (card instanceof Card && card != null && eventObject == cardid) {
            ((Card) card).moveToExile(id, "Diluvian Primordial", id, game);
            return true;
        }
View Full Code Here


        return new SpellRuptureCounterUnlessPaysEffect(this);
    }

    @Override
    public boolean apply(Game game, Ability source) {
        StackObject spell = game.getStack().getStackObject(targetPointer.getFirst(game, source));
        if (spell != null) {
            Player player = game.getPlayer(spell.getControllerId());
            Player controller = game.getPlayer(source.getControllerId());
            MageObject sourceObject = game.getObject(source.getSourceId());
            if (player != null && controller != null && sourceObject != null) {
                int amount = new greatestPowerCountCreatureYouControl().calculate(game, source, this);
                GenericManaCost cost = new GenericManaCost(amount);
                StringBuilder sb = new StringBuilder("Pay {").append(amount).append("}? (otherwise ").append(spell.getName()).append(" will be countered)");
                if (player.chooseUse(Outcome.Benefit, sb.toString(), game)) {
                    cost.pay(source, game, source.getSourceId(), player.getId(), false);
                }
                if (!cost.isPaid()) {
                    if (game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game)) {
                        game.informPlayers(new StringBuilder(sourceObject.getName()).append(": cost wasn't payed - countering ").append(spell.getName()).toString());
                        return true;
                    }
                }

            }
View Full Code Here

    @Override
    public boolean apply(Game game, Ability source) {
        UUID objectId = source.getFirstTarget();
        UUID sourceId = source.getSourceId();
        // counter code from SpellStack
        StackObject stackObject = game.getStack().getStackObject(objectId);
        MageObject sourceObject = game.getObject(sourceId);
        if (stackObject != null && sourceObject != null) {
            if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.COUNTER, objectId, sourceId, stackObject.getControllerId()))) {
                if ( stackObject instanceof Spell ) {
                    game.rememberLKI(objectId, Zone.STACK, (Spell)stackObject);
                }               
                // Spell Crumple specific code
                ReplacementEffectImpl effect = new SpellCrumpleReplacementEffect();
                effect.setTargetPointer(new FixedTarget(stackObject.getId()));
                game.addEffect(effect, source);
                // Spell Crumple specific code end
                game.informPlayers(new StringBuilder(stackObject.getName()).append(" is countered by ").append(sourceObject.getLogName()).toString());
                game.getStack().remove(stackObject);
                stackObject.counter(sourceId, game); // tries to move to graveyard               
                game.fireEvent(GameEvent.getEvent(GameEvent.EventType.COUNTERED, objectId, sourceId, stackObject.getControllerId()));
            } else {
                game.informPlayers(new StringBuilder(stackObject.getName()).append(" could not be countered by ").append(sourceObject.getLogName()).toString());
            }
            return true;
        }
        return false;       
        // counter code from SpellStack end
View Full Code Here

    @Override
    public boolean applies(GameEvent event, Ability source, Game game) {
        switch (event.getType()) {
            case GAIN_LIFE:
                if (!game.getStack().isEmpty()) {
                    StackObject stackObject = game.getStack().getFirst();
                    if (stackObject != null) {
                        return stackObject.getControllerId().equals(event.getPlayerId());
                    }
                }
        }
        return false;
    }
View Full Code Here

        return new CounterlashEffect(this);
    }

    @Override
    public boolean apply(Game game, Ability source) {
        StackObject stackObject = game.getStack().getStackObject(source.getFirstTarget());
        Player player = game.getPlayer(source.getControllerId());
        if (stackObject != null && player != null) {
            game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game);
            if (player.chooseUse(Outcome.PutCardInPlay, "Cast a nonland card in your hand that shares a card type with that spell without paying its mana cost?", game)) {
                FilterCard filter = new FilterCard();
                ArrayList<Predicate<MageObject>> types = new ArrayList<Predicate<MageObject>>();
                for (CardType type: stackObject.getCardType()) {
                    if (type != CardType.LAND) {
                        types.add(new CardTypePredicate(type));
                    }
                }
                filter.add(Predicates.or(types));
View Full Code Here

                    UUID sourceControllerId = null;
                    Permanent permanent = game.getPermanent(event.getSourceId());
                    if (permanent != null) {
                        sourceControllerId = permanent.getControllerId();
                    } else {
                        StackObject sourceStackObject = game.getStack().getStackObject(event.getSourceId());
                        if (sourceStackObject != null) {
                            sourceControllerId = sourceStackObject.getControllerId();
                        }
                    }
                    if (sourceControllerId != null && sourceControllerId == this.getControllerId()) {
                        // save amount of damage to effect
                        this.getEffects().get(0).setValue("damageAmount", event.getAmount());
View Full Code Here

            return possibleTargets;
        }


        private boolean targetsCreature(UUID id, Game game) {
            StackObject spell = game.getStack().getStackObject(id);
            if (spell != null) {
                Ability ability = spell.getStackAbility();
                if (ability != null && !ability.getTargets().isEmpty()) {
                    for (Target target : ability.getTargets()) {
                        for (UUID targetId : target.getTargets()) {
                            Permanent permanent = game.getPermanent(targetId);
                            if (permanent != null && permanent.getCardType().contains(CardType.CREATURE)) {
View Full Code Here

    @Override
    public boolean applies(GameEvent event, Ability source, Game game) {
        if (event.getType() == GameEvent.EventType.ZONE_CHANGE && event.getTargetId().equals(source.getSourceId())) {
            ZoneChangeEvent zcEvent = (ZoneChangeEvent) event;
            if (zcEvent.getFromZone() == Zone.HAND && zcEvent.getToZone() == Zone.GRAVEYARD) {
                StackObject spell = game.getStack().getStackObject(event.getSourceId());
                if (spell != null && game.getOpponents(source.getControllerId()).contains(spell.getControllerId())) {
                    return true;
                }
            }
        }
        return false;
View Full Code Here

        return new SyncopateCounterUnlessPaysEffect(this);
    }

    @Override
    public boolean apply(Game game, Ability source) {
        StackObject spell = game.getStack().getStackObject(targetPointer.getFirst(game, source));
        if (spell != null) {
            Player player = game.getPlayer(spell.getControllerId());
            Player controller = game.getPlayer(source.getControllerId());
            if (player != null && controller != null) {
               
                int amount = source.getManaCostsToPay().getX();
                if (amount > 0) {
                    GenericManaCost cost = new GenericManaCost(amount);
                    if (!cost.pay(source, game, spell.getControllerId(), spell.getControllerId(), false)) {
                       
                        StackObject stackObject = game.getStack().getStackObject(source.getFirstTarget());
                        if (stackObject != null && !game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.COUNTER, source.getFirstTarget(), source.getSourceId(), stackObject.getControllerId()))) {
                            game.informPlayers("Syncopate: cost wasn't payed - countering " + stackObject.getName());
                            if (stackObject instanceof Spell) {
                                game.rememberLKI(source.getFirstTarget(), Zone.STACK, (Spell) stackObject);
                            }
                            game.getStack().remove(stackObject);
                            MageObject card = game.getObject(stackObject.getSourceId());
                            if (card instanceof Card) {
                                ((Card) card).moveToZone(Zone.EXILED, source.getSourceId(), game, false);
                            }
                            game.fireEvent(GameEvent.getEvent(GameEvent.EventType.COUNTERED, source.getFirstTarget(), source.getSourceId(), stackObject.getControllerId()));
                            return true;
                        }
                        return false;
                    }
                }
View Full Code Here

        return new FoldIntoAEtherEffect(this);
    }

    @Override
    public boolean apply(Game game, Ability source) {
        StackObject stackObject = game.getStack().getStackObject(source.getFirstTarget());
        Player player = null;
        if (stackObject != null) {
            player = game.getPlayer(stackObject.getControllerId());
        }
        if (game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game)) {
            TargetCardInHand target = new TargetCardInHand(new FilterCreatureCard());
            if (player != null
                    && player.chooseUse(Outcome.Neutral, "Put a creature card from your hand in play?", game)
View Full Code Here

TOP

Related Classes of mage.game.stack.StackObject

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.