public void init(Game game) { for (Effect effect : this.getEffects()) { effect.getTargetPointer().init(game, this); } }
@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { UUID targetOpponentId = effect.getTargetPointer().getFirst(game, sourceAbility); if (targetOpponentId != null) { int value = game.getBattlefield().countAll(filter, targetOpponentId, game); return multiplier * value; } else { return 0; } }
@Override public boolean checkTrigger(GameEvent event, Game game) { return event.getPlayerId().equals(controllerId) && event.getSourceId().equals(this.getEffects().get(0).getTargetPointer().getFirst(game, this)); }
@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { UUID attackerId = effect.getTargetPointer().getFirst(game, sourceAbility); for (CombatGroup combatGroup : game.getCombat().getGroups()) { if (combatGroup.getAttackers().contains(attackerId)) { return combatGroup.getBlockers().size(); } } return 0; }
@Override public boolean apply(Game game, Ability source) { for (Effect effect : source.getEffects()) { if (effect.getTargetPointer().getFirst(game, source) != null) { permanent = game.getPermanentOrLKIBattlefield(effect.getTargetPointer().getFirst(game, source)); } } if (permanent != null) { return permanent.getCounters(game).containsKey(CounterType.M1M1); } return false; } }
@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { Permanent permanent = game.getPermanentOrLKIBattlefield(effect.getTargetPointer().getFirst(game, sourceAbility)); if (permanent != null) { return permanent.getCounters(game).getCount(CounterType.FUNGUS); } return 0; }
@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { Player player = game.getPlayer(effect.getTargetPointer().getFirst(game, sourceAbility)); if (player != null) { return player.getHand().size(); } return 0; }
@Override public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(effect.getTargetPointer().getFirst(game, source)); return permanent != null && permanent.getCounters(game).getCount(CounterType.FLOOD) > 0; } }
@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { if (effect.getTargetPointer().getFirst(game, sourceAbility) == null) { return 0; } FilterArtifactPermanent filter = new FilterArtifactPermanent(); filter.add(new ControllerIdPredicate(effect.getTargetPointer().getFirst(game, sourceAbility))); return game.getBattlefield().count(filter, sourceAbility.getSourceId(), sourceAbility.getControllerId(), game); }
@Override public boolean checkTrigger(GameEvent event, Game game) { Permanent permanent = game.getPermanent(((FixedTarget) getEffects().get(0).getTargetPointer()).getTarget()); return permanent != null && permanent.getZoneChangeCounter(game) == ((FixedTarget) getEffects().get(0).getTargetPointer()).getZoneChangeCounter() && permanent.getConvertedManaCost() <= 3; }
@Override public void adjustTargets(Ability ability, Game game) { UUID creatureId = ability.getEffects().get(0).getTargetPointer().getFirst(game, ability); Permanent creature = game.getPermanent(creatureId); if (creature != null) { ability.getTargets().get(0).setTargetController(creature.getControllerId()); } } }
@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { Player player = game.getPlayer(effect.getTargetPointer().getFirst(game, sourceAbility)); if (player != null) { if (filter == null) { return player.getGraveyard().size(); } else { return player.getGraveyard().count(filter, sourceAbility.getControllerId(), sourceAbility.getSourceId(), game); } } return 0; }
@Override public void adjustTargets(Ability ability, Game game) { UUID creatureId = ability.getEffects().get(0).getTargetPointer().getFirst(game, ability); Permanent creature = game.getPermanentOrLKIBattlefield(creatureId); if (creature != null) { ability.getEffects().get(0).setTargetPointer(new FixedTarget(creature.getControllerId())); } } }
@Override public boolean checkInterveningIfClause(Game game) { StackObject stackObject = null; for (Effect effect : this.getEffects()) { stackObject = game.getStack().getStackObject(effect.getTargetPointer().getFirst(game, this)); } if (stackObject != null) { int numberOfTargets = 0; for (UUID modeId : stackObject.getStackAbility().getModes().getSelectedModes()) { Mode mode = stackObject.getStackAbility().getModes().get(modeId); for (Target target : mode.getTargets()) { numberOfTargets += target.getTargets().size(); } } return numberOfTargets == 1; } return false; }
@Override public void adjustTargets(Ability ability, Game game) { UUID controllerId = ability.getEffects().get(0).getTargetPointer().getFirst(game, ability); if (controllerId != null) { ability.getTargets().get(0).setTargetController(controllerId); ability.getEffects().get(0).setTargetPointer(new FirstTargetPointer()); } } }
@Override public void adjustTargets(Ability ability, Game game) { FilterCreaturePermanent filterDefender = new FilterCreaturePermanent("creature defending player controls"); for (Effect effect : ability.getEffects()) { if (effect instanceof NazahnTapEffect) { filterDefender.add(new ControllerIdPredicate(game.getCombat().getDefendingPlayerId(effect.getTargetPointer().getFirst(game, ability), game))); break; } } ability.getTargets().clear(); TargetCreaturePermanent target = new TargetCreaturePermanent(filterDefender); ability.addTarget(target); } }
@Override public void adjustTargets(Ability ability, Game game) { Player opponent = game.getPlayer(ability.getEffects().get(0).getTargetPointer().getFirst(game, ability)); if (opponent != null) { FilterCreaturePermanent filter = new FilterCreaturePermanent("creature controlled by " + opponent.getLogName()); filter.add(new ControllerIdPredicate(opponent.getId())); ability.getTargets().add(new TargetCreaturePermanent(filter)); } } }
@Override public void adjustTargets(Ability ability, Game game) { Spell spell = game.getStack().getSpell(ability.getEffects().get(0).getTargetPointer().getFirst(game, ability)); if (spell != null) { int cmc = spell.getConvertedManaCost(); ability.getTargets().clear(); FilterPermanent filter = new FilterCreaturePermanent("creature with converted mana cost " + cmc); filter.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, cmc)); ability.addTarget(new TargetPermanent(filter)); } } }
@Override public void adjustTargets(Ability ability, Game game) { UUID playerId = ability.getEffects().get(0).getTargetPointer().getFirst(game, ability); if (playerId != null) { FilterCreaturePermanent filter = new FilterCreaturePermanent("creature that player controls"); filter.add(new ControllerIdPredicate(playerId)); Target target = new TargetCreaturePermanent(filter); ability.getTargets().clear(); ability.addTarget(target); ability.getEffects().get(0).setTargetPointer(new FirstTargetPointer()); } } }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); MageObject sourceObject = game.getObject(source.getSourceId()); if (controller != null && sourceObject != null) { if (controller.chooseUse(outcome, "Exile " + sourceObject.getLogName() + " to return Spirit cards?", source, game)) { Effect effect = new ReturnToHandTargetEffect(); effect.setTargetPointer(getTargetPointer()); effect.getTargetPointer().init(game, source); new ExileSourceEffect().apply(game, source); return effect.apply(game, source); } return true; } return false; } }