@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { for (Cost cost : sourceAbility.getCosts()) { if (cost.isPaid() && cost instanceof ExileFromHandCost) { int xValue = 0; for (Card card : ((ExileFromHandCost) cost).getCards()) { xValue += card.getConvertedManaCost(); } return xValue; } } return sourceAbility.getManaCostsToPay().getX(); }
@Override public boolean apply(Game game, Ability source) { Card card = game.getCard(source.getFirstTarget()); if (card != null && game.getState().getZone(card.getId()) == Zone.GRAVEYARD) { for (Cost cost : source.getCosts()) { if (cost instanceof ExileFromHandCost) { List<CardType> cardtypes = new ArrayList<>(); ExileFromHandCost exileCost = (ExileFromHandCost) cost; for (CardType cardtype : exileCost.getCards().get(0).getCardType()) { cardtypes.add(cardtype); } for (CardType cardtype : card.getCardType()) { if (cardtypes.contains(cardtype)) { Effect effect = new ReturnToHandTargetEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); return effect.apply(game, source); } } } } } return false; } }
private boolean isConvertedManaCostEqual(Ability sourceAbility, int amount) { for (Cost cost : sourceAbility.getCosts()) { if (cost.isPaid() && cost instanceof ExileFromHandCost) { for (Card card : ((ExileFromHandCost) cost).getCards()) { if (card instanceof SplitCard) { if (((SplitCard) card).getLeftHalfCard().getConvertedManaCost() == amount) { return true; } if (((SplitCard) card).getRightHalfCard().getConvertedManaCost() == amount) { return true; } } else if (card.getConvertedManaCost() == amount) { return true; } } return false; } } // No alternate costs payed so compare to X value return sourceAbility.getManaCostsToPay().getX() == amount; }
for (Cost cost : source.getCosts()) { if (cost instanceof ExileFromHandCost) { cards = ((ExileFromHandCost) cost).getCards();