public static boolean isChapterAbility(StackObject stackObject) { if (stackObject instanceof StackAbility) { return ((StackAbility) stackObject).getStackAbility() instanceof ChapterTriggeredAbility; } return false; }
@Override public boolean apply(MageObject input, Game game) { if (input instanceof Spell) { if (((Spell) input).getFromZone() == Zone.GRAVEYARD) { return true; } } return false; } }
boolean isCastFromPlayersLibrary(Game game, UUID playerId) { if (!game.getStack().isEmpty()) { StackObject stackObject = game.getStack().getLast(); return stackObject instanceof Spell && !((Spell) stackObject).isDoneActivatingManaAbilities() && Zone.LIBRARY.equals(((Spell) stackObject).getFromZone()); } return false; }
@Override public boolean apply(Game game, Ability source) { if (!game.getStack().isEmpty()) { StackObject stackObject = game.getStack().getFirst(); if (stackObject != null) { return !stackObject.getCardType().contains(CardType.CREATURE); } } return true; }
@Override public boolean applies(GameEvent event, Ability source, Game game) { Spell spell = game.getStack().getSpell(event.getTargetId()); if (spell != null && spell.isCreature()) { return true; } return false; }
@Override public boolean apply(Game game, Ability source) { StackObject stackObject = game.getStack().getStackObject(source.getFirstTarget()); if (stackObject != null) { return stackObject.chooseNewTargets(game, source.getControllerId(), forceChange, onlyOneTarget, filterNewTarget); } return false; }
@Override public boolean applies(GameEvent event, Ability source, Game game) { Spell spell = game.getStack().getSpell(event.getTargetId()); if (spell != null && spell.hasSubtype(SubType.SLIVER, game)) { MageObject sourceObject = game.getObject(event.getSourceId()); if (sourceObject instanceof StackObject) { return true; } } return false; }
@Override public StackAbility copy() { return new StackAbility(this); }
protected SearchEffect getSearchEffect(StackAbility ability) { for (Effect effect: ability.getEffects()) { if (effect instanceof SearchEffect) { return (SearchEffect) effect; } } return null; }
@Override public void counter(UUID sourceId, Game game) { this.counter(sourceId, game, Zone.GRAVEYARD, false, ZoneDetail.NONE); }
@Override public Spell copy() { return new Spell(this); }
@Override public boolean moveToExile(UUID exileId, String name, UUID sourceId, Game game) { return moveToExile(exileId, name, sourceId, game, null); }
@Override public boolean turnFaceDown(Game game, UUID playerId) { setFaceDown(true, game); return true; }
@Override public void counter(UUID sourceId, Game game) { // zone, owner, top ignored this.counter(sourceId, game, Zone.GRAVEYARD, true, ZoneDetail.TOP); }
/** * Choose new targets for a stack Object * * @param game * @param playerId Player UUID who changes the targets. * @return */ public boolean chooseNewTargets(Game game, UUID playerId) { return chooseNewTargets(game, playerId, false, false, null); }
@Override public boolean moveToZone(Zone zone, UUID sourceId, Game game, boolean flag) { return moveToZone(zone, sourceId, game, flag, null); }
public SpellStack copy() { return new SpellStack(this); }
protected SearchEffect getSearchEffect(StackAbility ability) { for (Effect effect : ability.getEffects()) { if (effect instanceof SearchEffect) { return (SearchEffect) effect; } } return null; }
@Override public boolean turnFaceUp(Game game, UUID playerId) { setFaceDown(false, game); return true; }