@Override public boolean checkInterveningIfClause(Game game) { Boolean activatedThisTurn = (Boolean) game.getState().getValue(this.originalId.toString() + "addMana"); if (activatedThisTurn == null) { return true; } else { return !activatedThisTurn; } }
@Override public boolean isInactive(Ability source, Game game) { Object object = game.getState().getValue(this.messageId.toString()); return object != null; }
@Override public boolean apply(Game game, Ability source) { Object tribute = game.getState().getValue("tributeValue" + source.getSourceId()); if (tribute != null) { return ((String) tribute).equals("no"); } return false; } }
public boolean canTrigger(Game game) { //20100716 - 603.8 Boolean triggered = (Boolean) game.getState().getValue(getSourceId().toString() + "triggered"); if (triggered == null) { triggered = Boolean.FALSE; } return !triggered; }
@SuppressWarnings("unchecked") private Set<UUID> getAlreadySelectedModes(Ability source, Game game) { Set<UUID> onceSelectedModes = new HashSet<>(); for (UUID modeId : this.keySet()) { Object exist = game.getState().getValue(getKey(source, game, modeId)); if (exist != null) { onceSelectedModes.add(modeId); } } return onceSelectedModes; }
public int calculate(Game game, UUID controllerId) { PlayerGainedLifeWatcher watcher = game.getState().getWatcher(PlayerGainedLifeWatcher.class); if (watcher != null) { return watcher.getLifeGained(controllerId); } return 0; }
public SourceHasRemainedInSameZoneCondition(UUID idToCheck, Game game) { this.idToCheck = idToCheck; this.timesChangedZones = -1; if (this.idToCheck != null && game != null && game.getCard(this.idToCheck) != null) { this.timesChangedZones = game.getState().getZoneChangeCounter(this.idToCheck); } }
@Override public boolean resolve(Game game) { //20100716 - 603.8 boolean result = super.resolve(game); game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); return result; }
@Override public void init(Ability source, Game game) { super.init(source, game); zoneChangeCounter = game.getState().getZoneChangeCounter(source.getId()); }
@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { PlayerLostLifeWatcher watcher = game.getState().getWatcher(PlayerLostLifeWatcher.class); if (watcher != null) { return watcher.getLifeLost(sourceAbility.getControllerId()); } return 0; }
@Override public boolean apply(Game game, Ability source) { PlayerAttackedStepWatcher watcher = game.getState().getWatcher(PlayerAttackedStepWatcher.class); return watcher != null && watcher.getNumberAttackingCurrentStep(source.getControllerId()) > 0; }
@Override public boolean applies(GameEvent event, Ability source, Game game) { if (event.getType() == GameEvent.EventType.CAST_SPELL && event.getSourceId().equals(source.getSourceId())) { CombatDamageStepStartedWatcher watcher = game.getState().getWatcher(CombatDamageStepStartedWatcher.class); return watcher == null || watcher.conditionMet(); } return false; }
@Override public boolean apply(Game game, Ability source) { UUID playerId = (UUID) game.getState().getValue(source.getSourceId() + ChooseOpponentEffect.VALUE_KEY); Player opponent = game.getPlayer(playerId); if (opponent != null) { opponent.setMaxHandSize(4); return true; } return false; } }
@Override public boolean checkTrigger(GameEvent event, Game game) { DamagedPlayerEvent damageEvent = (DamagedPlayerEvent) event; if (damageEvent.isCombatDamage()) { Permanent permanent = game.getPermanent(event.getSourceId()); if (damageEvent.getPlayerId().equals(getControllerId()) && permanent != null && permanent.isCreature()) { game.getState().setValue(getSourceId().toString(), permanent.getControllerId()); return true; } } return false; }
@Override public boolean checkTrigger(GameEvent event, Game game) { Spell spell = game.getStack().getSpell(event.getTargetId()); MageObject mageObject = game.getObject(sourceId); if (spell != null && mageObject != null) { game.getState().setValue("cabalShrine" + mageObject, spell); return true; } return false; }
@Override public boolean applies(GameEvent event, Ability source, Game game) { if (game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) { MageObject object = game.getObject(event.getSourceId()); String needName = (String) game.getState().getValue(source.getSourceId().toString() + ChooseACardNameEffect.INFO_KEY); return object != null && CardUtil.haveSameNames(object.getName(), needName); } return false; } }
@Override public boolean apply(Game game, Ability source) { new ChooseACardNameEffect(TypeOfName.ALL).apply(game, source); String cardName = (String) game.getState().getValue(source.getSourceId().toString() + ChooseACardNameEffect.INFO_KEY); FilterCard filter = new FilterCard(); filter.add(new NamePredicate(cardName)); ContinuousEffect effect = new SpellsCostReductionAllEffect(filter, 1); effect.setDuration(Duration.EndOfTurn); game.addEffect(effect, source); return true; } }
@Override public boolean apply(Game game, Ability source) { Player sourcePlayer = game.getPlayer(source.getControllerId()); for (UUID playerId : game.getState().getPlayersInRange(sourcePlayer.getId(), game)) { Player player = game.getPlayer(playerId); if (player != null) { player.moveCards(player.getLibrary().getTopCards(game, 5), Zone.GRAVEYARD, source, game); } } return true; } }
@Override public Permanent getSourcePermanentOrLKI(Game game) { if (getSourceObjectZoneChangeCounter() == 0 || getSourceObjectZoneChangeCounter() == game.getState().getZoneChangeCounter(getSourceId())) { return game.getPermanent(getSourceId()); } return (Permanent) game.getLastKnownInformation(getSourceId(), Zone.BATTLEFIELD, getSourceObjectZoneChangeCounter()); }
@Override public boolean apply(Game game, Ability source) { SpecialAction newAction = (SpecialAction) action.copy(); newAction.setSourceId(source.getSourceId()); newAction.setControllerId(source.getControllerId()); newAction.getTargets().addAll(source.getTargets()); game.getState().getSpecialActions().add(newAction); return true; }