@Override public Modes getModes() { return ability.getModes(); }
@Override public boolean applies(Ability abilityToModify, Ability source, Game game) { if (abilityToModify.getSourceId().equals(source.getSourceId()) && (abilityToModify instanceof SpellAbility)) { return abilityToModify.getModes().getSelectedModes().size() > 1; } return false; }
@Override public boolean apply(Game game, Ability source, Ability abilityToModify) { int numCosts = abilityToModify.getModes().getSelectedModes().size() - 1; for (int i = 0; i < numCosts; i++) { abilityToModify.addCost(cost.copy()); } return true; }
private static boolean canChooseTargetAbility(Ability ability, Game game, UUID controllerId) { int found = 0; for (Mode mode : ability.getModes().values()) { if (mode.getTargets().canChoose(ability.getSourceId(), ability.getControllerId(), game)) { found++; if (ability.getModes().isEachModeMoreThanOnce()) { return true; } if (found >= ability.getModes().getMinModes()) { return true; } } } return false; }
@Override public boolean applies(Ability abilityToModify, Ability source, Game game) { if (abilityToModify instanceof SpellAbility) { for (UUID modeId : abilityToModify.getModes().getSelectedModes()) { Mode mode = abilityToModify.getModes().get(modeId); for (Target target : mode.getTargets()) { for (UUID targetUUID : target.getTargets()) { if (targetUUID.equals(source.getSourceId())) { return true; } } } } } return false; }
public void addAbility(Ability ability, MageObject attachedTo) { if (ability instanceof StaticAbility) { for (UUID modeId : ability.getModes().getSelectedModes()) { Mode mode = ability.getModes().get(modeId); for (Effect effect : mode.getEffects()) { if (effect instanceof ContinuousEffect) { addEffect((ContinuousEffect) effect, ability); } } } } else if (ability instanceof TriggeredAbility) { this.triggers.add((TriggeredAbility) ability, attachedTo); } }
@Override public boolean applies(Ability abilityToModify, Ability source, Game game) { if (abilityToModify instanceof SpellAbility) { for (UUID modeId : abilityToModify.getModes().getSelectedModes()) { Mode mode = abilityToModify.getModes().get(modeId); for (Target target : mode.getTargets()) { for (UUID targetId : target.getTargets()) { if (targetId.equals(source.getSourceObject(game).getId())) { return true; } } } } } return false; }
private void addModeOptions(List<Ability> options, Ability option, Game game) { // TODO: Support modal spells with more than one selectable mode for (Mode mode : option.getModes().values()) { Ability newOption = option.copy(); newOption.getModes().getSelectedModes().clear(); newOption.getModes().getSelectedModes().add(mode.getId()); newOption.getModes().setActiveMode(mode); if (!newOption.getTargets().getUnchosen().isEmpty()) { if (!newOption.getManaCosts().getVariableCosts().isEmpty()) { addVariableXOptions(options, newOption, 0, game); } else { addTargetOptions(options, newOption, 0, game); } } else if (!newOption.getCosts().getTargets().getUnchosen().isEmpty()) { addCostTargetOptions(options, newOption, 0, game); } else { options.add(newOption); } } }
@Override public boolean applies(Ability abilityToModify, Ability source, Game game) { if (abilityToModify instanceof SpellAbility) { if (game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) { for (UUID modeId : abilityToModify.getModes().getSelectedModes()) { Mode mode = abilityToModify.getModes().get(modeId); for (Target target : mode.getTargets()) { for (UUID targetUUID : target.getTargets()) { if (targetUUID.equals(source.getSourceId())) { return true; } } } } } } return false; }
@Override public boolean applies(Ability abilityToModify, Ability source, Game game) { if (abilityToModify instanceof SpellAbility) { if (abilityToModify.isControlledBy(source.getControllerId())) { for (UUID modeId : abilityToModify.getModes().getSelectedModes()) { Mode mode = abilityToModify.getModes().get(modeId); for (Target target : mode.getTargets()) { for (UUID targetUUID : target.getTargets()) { if (targetUUID.equals(source.getSourceId())) { return true; } } } } } } return false; }
@Override public void changeModes(Ability ability, Game game) { if (ability instanceof SpellAbility) { Player player = game.getPlayer(controllerId); if (player != null) { this.resetCosts(); if (additionalCost != null) { if (additionalCost.canPay(ability, ability.getSourceId(), ability.getControllerId(), game) && player.chooseUse(Outcome.Benefit, "Pay " + additionalCost.getText(false) + " ?", ability, game)) { additionalCost.activate(); ability.getModes().setAdditionalCost(this); ability.getModes().setMinModes(2); ability.getModes().setMaxModes(2); } } } } }
@Override public boolean applies(Ability abilityToModify, Ability source, Game game) { if (abilityToModify instanceof SpellAbility) { if (game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) { for (UUID modeId : abilityToModify.getModes().getSelectedModes()) { Mode mode = abilityToModify.getModes().get(modeId); for (Target target : mode.getTargets()) { for (UUID targetUUID : target.getTargets()) { Player player = game.getPlayer(targetUUID); if (player != null && player.getId().equals(source.getControllerId())) { return true; } } } } } } return false; }
@Override public boolean applies(Ability abilityToModify, Ability source, Game game) { if (!(abilityToModify instanceof SpellAbility) || !game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) { return false; } for (UUID modeId : abilityToModify.getModes().getSelectedModes()) { Mode mode = abilityToModify.getModes().get(modeId); for (Target target : mode.getTargets()) { for (UUID targetUUID : target.getTargets()) { Permanent permanent = game.getPermanent(targetUUID); if (permanent != null && permanent.getId().equals(source.getSourceId())) { return true; } } } } return false; }
@Override public boolean apply(ObjectSourcePlayer<MageObject> input, Game game) { StackObject object = game.getStack().getStackObject(input.getObject().getId()); if (object != null) { for (UUID modeId : object.getStackAbility().getModes().getSelectedModes()) { Mode mode = object.getStackAbility().getModes().get(modeId); for (Target target : mode.getTargets()) { if (target.getTargets().size() == 1) { // only one player targeted Player player = game.getPlayer(target.getFirstTarget()); return player != null; } } } } return false; }
@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 boolean apply(ObjectSourcePlayer<MageObject> input, Game game) { StackObject object = game.getStack().getStackObject(input.getObject().getId()); if (object != null) { for (UUID modeId : object.getStackAbility().getModes().getSelectedModes()) { Mode mode = object.getStackAbility().getModes().get(modeId); for (Target target : mode.getTargets()) { for (UUID targetId : target.getTargets()) { Player player = game.getPlayer(targetId); return player != null; } } } } return false; }
@Override public boolean apply(ObjectSourcePlayer<MageObject> input, Game game) { StackObject object = game.getStack().getStackObject(input.getObject().getId()); if (object != null) { for (UUID modeId : object.getStackAbility().getModes().getSelectedModes()) { Mode mode = object.getStackAbility().getModes().get(modeId); for (Target target : mode.getTargets()) { for (UUID targetId : target.getTargets()) { Permanent permanent = game.getPermanentOrLKIBattlefield(targetId); if (permanent != null && targetFilter.match(permanent, input.getSourceId(), input.getPlayerId(), game)) { return true; } } } } } return false; }
@Override public void adjustCosts(Ability ability, Game game) { if (ability instanceof SimpleActivatedAbility && ability.getModes().size() == 3) { Permanent sourcePermanent = game.getPermanent(ability.getSourceId()); if (sourcePermanent != null) { int amount = sourcePermanent.getCounters(game).getCount(CounterType.P1P1); if (amount > 0) { for (VariableCost cost : ability.getManaCostsToPay().getVariableCosts()) { if (cost instanceof VariableManaCost) { ((VariableManaCost) cost).setMaxX(amount); break; } } } } } }
private static int isRemoval(Card card) { if (card.isEnchantment() || card.isInstant() || card.isSorcery()) { for (Ability ability : card.getAbilities()) { for (Effect effect : ability.getEffects()) { if (isEffectRemoval(card, ability, effect) == 1) { return 1; } } for (Mode mode : ability.getModes().values()) { for (Effect effect : mode.getEffects()) { if (isEffectRemoval(card, ability, effect) == 1) { return 1; } } } } } return 0; }
public CaptiveAudience(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{5}{B}{R}"); // Captive Audience enters the battlefield under the control of an opponent of your choice. this.addAbility(new EntersBattlefieldAbility(new CaptiveAudienceETBEffect())); // At the beginning of your upkeep, choose one that hasn't been chosen — // • Your life total becomes 4. Ability ability = new BeginningOfUpkeepTriggeredAbility( new SetPlayerLifeSourceEffect(4), TargetController.YOU, false ); ability.getModes().setEachModeOnlyOnce(true); // • Discard your hand. ability.addMode(new Mode(new DiscardHandControllerEffect())); // • Each opponent creates five 2/2 black Zombie creature tokens. ability.addMode(new Mode(new CaptiveAudienceCreateTokensEffect())); this.addAbility(ability); }