Package mage.game.stack

Examples of mage.game.stack.StackObject


    super(effect);
  }

  @Override
  public boolean apply(Game game, Ability source) {
    StackObject stackObject = game.getStack().getStackObject(source.getFirstTarget());
    if (stackObject != null) {
      if (game.getBattlefield().countAll(filter, source.getControllerId()) > game.getBattlefield().countAll(filter, stackObject.getControllerId())) {
        return game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game);
      }
      return true;
    }
    return false;
View Full Code Here


    }
    return false;
  }

  private UUID getSourceControllerId(UUID sourceId, Game game) {
    StackObject source = game.getStack().getStackObject(sourceId);
    if (source != null)
      return source.getControllerId();
    Permanent permanent = game.getBattlefield().getPermanent(sourceId);
    if (permanent != null)
      return permanent.getControllerId();
    return null;
  }
View Full Code Here

   
    @Override
    public int calculate(Game game, Ability source, Effect effect) {
        int count = 0;
        if (!game.getStack().isEmpty()) {
            StackObject spell = game.getStack().getFirst();
            if (spell != null &&  spell instanceof Spell && ((Spell)spell).getSourceId().equals(source.getSourceId())) {
                Mana mana = ((Spell)spell).getSpellAbility().getManaCostsToPay().getPayment();
                if(mana.getBlack() > 0) {
                    count++;
                }
View Full Code Here

    public boolean apply(Game game, Ability source) {
        UUID objectId = source.getFirstTarget();
        UUID sourceId = source.getSourceId();
        Player controller = game.getPlayer(source.getControllerId());
        if (controller != null) {
            StackObject stackObject = game.getStack().getStackObject(objectId);
            if (stackObject != null && !game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.COUNTER, objectId, sourceId, stackObject.getControllerId()))) {
                boolean spell = false;
                if (stackObject instanceof Spell) {
                    game.rememberLKI(objectId, Zone.STACK, stackObject);
                    spell = true;
                }
                game.getStack().remove(stackObject);
                if (spell && !((Spell) stackObject).isCopiedSpell()) {
                    MageObject mageObject = game.getObject(stackObject.getSourceId());
                    if (mageObject instanceof Card) {
                        Card card = (Card) mageObject;
                        switch (targetZone) {
                            case HAND:
                                controller.moveCardToHandWithInfo(card, sourceId, game, Zone.STACK);
                                break;
                            case LIBRARY:
                                controller.moveCardToLibraryWithInfo(card, sourceId, game, Zone.STACK, flag, true);
                                break;
                            case EXILED:
                                controller.moveCardToExileWithInfo(card, null, "", sourceId, game, Zone.STACK);
                                break;
                            default:
                                card.moveToZone(targetZone, sourceId, game, flag);
                        }                       
                    } else {
                        return false;
                    }
                }
                game.fireEvent(GameEvent.getEvent(GameEvent.EventType.COUNTERED, objectId, sourceId, stackObject.getControllerId()));
                return true;
            }           
        }
        return false;
    }
View Full Code Here

        return true;
    }

    @Override
    public String getInfoMessage(Ability source, GameEvent event, Game game) {
        StackObject stackObject = game.getStack().getStackObject(event.getTargetId());
        MageObject sourceObject = game.getObject(source.getSourceId());
        if (stackObject != null && sourceObject != null) {
            return sourceObject.getLogName() + " can't be countered by " + stackObject.getName();
        }
        return staticText;
    }
View Full Code Here

    }

    @Override
    public boolean applies(GameEvent event, Ability source, Game game) {
        if (event.getType() == EventType.COUNTER) {
            StackObject stackObject = game.getStack().getStackObject(event.getTargetId());
            if (stackObject != null) {
                if (stackObject.getSourceId().equals(source.getSourceId())) {
                    return true;
                }
            }
        }
        return false;
View Full Code Here

    }

    @Override
    public boolean applies(GameEvent event, Ability source, Game game) {
        if (event.getType() == EventType.TARGET && event.getTargetId().equals(source.getSourceId())) {
            StackObject sourceObject = game.getStack().getStackObject(event.getSourceId());
            if (sourceObject != null && filterSource.match(sourceObject, source.getControllerId(), game)) {
                return true;
            }
        }
        return false;
View Full Code Here

        }
    }

    //resolve top StackObject
    protected void resolve() {
        StackObject top = null;
        try {
            top = state.getStack().peek();
            top.resolve(this);
        } finally {
            if (top != null) {
                state.getStack().remove(top);
                rememberLKI(top.getSourceId(), Zone.STACK, top);
                if (!getTurn().isEndTurnRequested()) {
                    while (state.hasSimultaneousEvents()) {
                        state.handleSimultaneousEvent(this);
                        checkTriggered();
                    }
View Full Code Here

            }
        }
        // Then, if that player controlled any objects on the stack not represented by cards, those objects cease to exist.
        this.getState().getContinuousEffects().removeInactiveEffects(this);
        for (Iterator<StackObject> it = getStack().iterator(); it.hasNext();) {
            StackObject object = it.next();
            if (object.getControllerId().equals(playerId)) {
                it.remove();
            }
        }
        // Then, if there are any objects still controlled by that player, those objects are exiled.
        List<Permanent> permanents = this.getBattlefield().getAllActivePermanents(playerId);
View Full Code Here

    public boolean checkTrigger(GameEvent event, Game game) {
        if (event.getType().equals(GameEvent.EventType.DAMAGED_PLAYER)
                && game.getOpponents(controllerId).contains(event.getTargetId())) {
            Permanent permanent = game.getPermanent(event.getSourceId());
            Player player = game.getPlayer(event.getSourceId());
            StackObject spell = game.getStack().getStackObject(event.getSourceId());
            if (permanent != null && permanent.getControllerId().equals(controllerId)) {
                return true;
            }
            if (player != null && player.getId().equals(controllerId)) {
                return true;
            }
            if (spell != null && spell.getControllerId().equals(controllerId)) {
                return true;
            }
            return false;
        }
        return false;
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.