public boolean hasOutcome(Outcome outcome) { for (Effect effect : this) { if (effect.getOutcome() == outcome) { return true; } } return false; }
public void init(Game game) { for (Effect effect : this.getEffects()) { effect.getTargetPointer().init(game, this); } }
@Override public boolean apply(Game game, Ability source) { Effect effect = new BecomesColorOrColorsTargetEffect(Duration.Custom); effect.setTargetPointer(new FixedTarget(source.getSourceId(), source.getSourceObjectZoneChangeCounter())); return effect.apply(game, source); } }
for (Effect effect : this) { String endString = ""; String nextRule = effect.getText(mode); String concatPrefix = effect.getConcatPrefix(); if (effectNum > 1 && !concatPrefix.isEmpty() && !concatPrefix.equals(".")) { nextRule = concatPrefix + " " + nextRule;
private static int isEffectRemoval(Card card, Ability ability, Effect effect) { if (effect.getOutcome() == Outcome.Removal) { log.debug("Found removal: " + card.getName()); return 1; String text = effect.getText(null); if (text.contains("/-")) { return 1; if (effect.getOutcome() == Outcome.Damage || effect instanceof DamageTargetEffect) { for (Target target : ability.getTargets()) { if (!(target instanceof TargetPlayerOrPlaneswalker)) { if (effect.getOutcome() == Outcome.DestroyPermanent || effect instanceof DestroyTargetEffect || effect instanceof ExileTargetEffect ||
@Override public boolean apply(Game game, Ability source) { // Create delayed triggered ability Effect effect = new ReturnToHandTargetEffect(); effect.setText("return {this} to its owner's hand"); effect.setTargetPointer(new FixedTarget(source.getSourceId(), source.getSourceObjectZoneChangeCounter())); DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); game.addDelayedTriggeredAbility(delayedAbility, source); return true; }
@Override public boolean checkTrigger(GameEvent event, Game game) { if (event.getPlayerId().equals(this.controllerId)) { this.getEffects().get(0).setValue("amount", event.getAmount()); return true; } return false; }
@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())); } } }
public DarkProphecy(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}{B}{B}"); // Whenever a creature you control dies, you draw a card and you lose 1 life. Effect effect = new DrawCardSourceControllerEffect(1, "you"); Ability ability = new DiesCreatureTriggeredAbility(effect, false, filter); effect = new LoseLifeSourceControllerEffect(1); ability.addEffect(effect.concatBy("and")); this.addAbility(ability); }
/** * Emblem with "Whenever a creature attacks you, it gets +5/+5 and gains * trample until end of turn." */ public GarrukApexPredatorEmblem() { setName("Emblem Garruk"); Effect effect = new BoostTargetEffect(-1, 0, Duration.EndOfTurn); effect.setText("it gets -1/-0"); Ability ability = new AttackedByCreatureTriggeredAbility(Zone.COMMAND, effect, false, SetTargetPointer.PERMANENT); effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn); ability.addEffect(effect.concatBy("and")); this.getAbilities().add(ability); } }
public BriarPatch(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}{G}"); // Whenever a creature attacks you, it gets -1/-0 until end of turn. Effect effect = new BoostTargetEffect(-1, 0, Duration.EndOfTurn); effect.setText("it gets -1/-0"); Ability ability = new AttackedByCreatureTriggeredAbility(Zone.BATTLEFIELD, effect, false, SetTargetPointer.PERMANENT); addAbility(ability); }
@Override public int calculate(Game game, Ability source, Effect effect) { Object object = effect.getValue(valueKey); if (object instanceof Integer) { return (Integer) object; } return 0; }
@Override public boolean checkTrigger(GameEvent event, Game game) { Set<UUID> opponents = game.getOpponents(this.getControllerId()); if (opponents.contains(event.getPlayerId())) { for (Effect effect : this.getEffects()) { effect.setValue("lostLife", event.getAmount()); effect.setTargetPointer(new FixedTarget(event.getPlayerId())); } return true; } return false; }
@Override public String getText(Mode mode) { if (!staticText.isEmpty()) { return staticText; } return new StringBuilder("clash with an opponent. If you win, ").append(executingEffect.getText(mode)).toString(); }
private void setControllerForEffect(ContinuousEffectsList<?> effects, UUID sourceId, UUID controllerId) { for (Effect effect : effects) { Set<Ability> abilities = effects.getAbility(effect.getId()); for (Ability ability : abilities) { if (ability.getSourceId() != null) { if (ability.getSourceId().equals(sourceId)) { ability.setControllerId(controllerId); } } else if (ability.getZone() != Zone.COMMAND) { logger.fatal("Continuous effect for ability with no sourceId Ability: " + ability); } } } }
@Override public boolean apply(Game game, Ability source) { Permanent imminentDoom = game.getPermanent(source.getSourceId()); if (imminentDoom != null) { Effect effect = new DamageTargetEffect((int) game.getState().getValue("ImminentDoomCount" + source.getSourceId().toString())); effect.apply(game, source); imminentDoom.addCounters(CounterType.DOOM.createInstance(), source, game); return true; } return false; }
@Override public boolean apply(Game game, Ability source) { // Create delayed triggered ability Effect effect = new ReturnToHandTargetEffect(); effect.setText("return {this} to its owner's hand"); effect.setTargetPointer(new FixedTarget(source.getSourceId(), source.getSourceObjectZoneChangeCounter())); DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); game.addDelayedTriggeredAbility(delayedAbility, source); return true; }
@Override public boolean checkTrigger(GameEvent event, Game game) { if (game.getOpponents(this.controllerId).contains(event.getPlayerId())) { this.getEffects().get(0).setValue("gainedLife", new Integer(event.getAmount())); return true; } 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()); } } }