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;
}
}