package magic.model.action; import magic.model.MagicGame; import magic.model.MagicLocationType; import magic.model.stack.MagicCardOnStack; import magic.model.stack.MagicItemOnStack; public class CounterItemOnStackAction extends MagicAction { private final MagicItemOnStack itemOnStack; private final MagicLocationType toLocation; public CounterItemOnStackAction(final MagicItemOnStack aItemOnStack,final MagicLocationType aToLocation) { itemOnStack = aItemOnStack; toLocation = aToLocation; } public CounterItemOnStackAction(final MagicItemOnStack itemOnStack) { this(itemOnStack, MagicLocationType.Stack); } @Override public void doAction(final MagicGame game) { if (game.getStack().contains(itemOnStack) && itemOnStack.canBeCountered()) { game.doAction(new RemoveItemFromStackAction(itemOnStack)); if (itemOnStack.isSpell()) { final MagicCardOnStack cardOnStack = (MagicCardOnStack)itemOnStack; final MagicLocationType destination = (toLocation == MagicLocationType.Stack) ? cardOnStack.getMoveLocation() : toLocation; game.doAction(new MoveCardAction( cardOnStack.getCard(), MagicLocationType.Stack, destination )); } game.setStateCheckRequired(); } } @Override public void undoAction(final MagicGame game) { } }