@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; }
public TargetAddressIterator(Card card) { this.lastSpellAbilityIndex = 0; this.spellAbilityIterator = null; this.modes = card.getSpellAbility().getModes(); this.modeIterator = this.modes.getSelectedModes().iterator(); calcNext(); }
private boolean hasTargets(SpellAbility spellAbility, Game game) { if (spellAbility.getModes().getSelectedModes().size() > 1) { for (UUID modeId : spellAbility.getModes().getSelectedModes()) { Mode mode = spellAbility.getModes().get(modeId); if (!mode.getTargets().isEmpty()) { return true; } } return false; } else { return !spellAbility.getTargets().isEmpty(); } }
@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; }
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) { 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; }
@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; }
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) { 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 boolean resolve(Game game) { boolean result = true; //20100716 - 117.12 if (checkIfClause(game)) { if (this instanceof TriggeredAbility) { for (UUID modeId : this.getModes().getSelectedModes()) { this.getModes().setActiveMode(modeId); result = resolveMode(game); } } else { result = resolveMode(game); } } return result; }
@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 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 apply(ObjectPlayer<StackObject> input, Game game) { UUID controllerId = input.getPlayerId(); if (controllerId == null) { return false; } for (UUID modeId : input.getObject().getStackAbility().getModes().getSelectedModes()) { Mode mode = input.getObject().getStackAbility().getModes().get(modeId); for (Target target : mode.getTargets()) { for (UUID targetId : target.getTargets()) { if (controllerId.equals(targetId)) { return true; } } } } return false; }
@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()) { Permanent permanent = game.getPermanent(targetUUID); if (permanent != null && permanent.isControlledBy(source.getControllerId())) { return true; } } } } } } 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 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()) { if (target.getTargets().size() == 1) { // only one player targeted Player player = game.getPlayer(target.getFirstTarget()); 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()) { 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; }