@Override public boolean apply(Permanent input, Game game) { return input.getControllerId().equals(game.getActivePlayerId()); } }
@Override public void watch(GameEvent event, Game game) { lastActivePlayer = game.getActivePlayerId(); if (event.getType() == GameEvent.EventType.SPELL_CAST) { UUID playerId = event.getPlayerId(); if (playerId != null && playerId.equals(lastActivePlayer)) { amountOfSpellsCastOnCurrentTurn.putIfAbsent(playerId, 0); amountOfSpellsCastOnCurrentTurn.compute(playerId, (k, a) -> a + 1); } } }
@Override protected int getInputValue(Game game, Ability source) { return new DomainValue(1, game.getActivePlayerId()).calculate(game, source, null); } }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(game.getActivePlayerId()); if (player == null) { return false; } return player.getLife() < 6; } }
@Override public boolean apply(Game game, Ability source) { PlayerList playerList = game.getPlayerList().copy(); playerList.setCurrent(game.getActivePlayerId()); Player player = game.getPlayer(game.getActivePlayerId()); do { processPlayer(game, source, player); player = playerList.getNext(game); } while (!player.getId().equals(game.getActivePlayerId())); return true; }
@Override public boolean applies(Permanent permanent, Ability source, Game game) { Player controller = game.getPlayer(source.getControllerId()); return controller != null && controller.hasOpponent(game.getActivePlayerId(), game); }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(game.getActivePlayerId()); return player != null && player.getHand().size() <= 2; } }
@Override protected int getInputValue(Game game, Ability source) { Player activePlayer = game.getPlayer(game.getActivePlayerId()); if (activePlayer != null) { return activePlayer.getHand().size(); } return 0; } }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(game.getActivePlayerId()); return player != null && player.getHand().size() <= 2; } }
@Override public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { int lifeToPayAmount = amount.calculate(game, ability, null); return game.getPlayer(game.getActivePlayerId()).getLife() >= lifeToPayAmount; }
@Override public boolean checkInterveningIfClause(Game game) { Player player = game.getPlayer(game.getActivePlayerId()); return player != null && player.getHand().size() >= 7; }
@Override public boolean apply(Game game, Ability source) { BurningCinderFuryOfCrimsonChaosFireWatcher watcher = game.getState().getWatcher(BurningCinderFuryOfCrimsonChaosFireWatcher.class); if (watcher != null) { return !watcher.tappedNonlandThisTurn(game.getActivePlayerId()); } return false; }
@Override public boolean apply(Game game, Ability source) { AttackedThisTurnWatcher watcher = game.getState().getWatcher(AttackedThisTurnWatcher.class); return source.isControlledBy(game.getActivePlayerId()) && watcher != null && !watcher.getAttackedThisTurnCreatures().isEmpty(); } }
@Override public void watch(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.BEGINNING_PHASE_PRE && game.getPhase() != null) { untappedLandCount = game.getBattlefield().countAll(filter, game.getActivePlayerId(), game); } }
private void setPlayer() { if (game.getStep().getStepPart() == StepPart.PRIORITY) { playerId = game.getPriorityPlayerId(); } else { if (game.getStep().getType() == PhaseStep.DECLARE_BLOCKERS) { playerId = game.getCombat().getDefenders().iterator().next(); } else { playerId = game.getActivePlayerId(); } } }
@Override public boolean applies(GameEvent event, Ability source, Game game) { if (game.getTurn().getStepType() == PhaseStep.UNTAP && event.getTargetId().equals(source.getSourceId())) { Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null && permanent.isControlledBy(game.getActivePlayerId())) { return true; } } return false; }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(game.getActivePlayerId()); if (player != null) { Set<Card> cardsInExile = game.getExile().getExileZone(source.getSourceId()).getCards(game); if (cardsInExile != null) { player.moveCardsToGraveyardWithInfo(cardsInExile, source, game, Zone.EXILED); return true; } } return false; }
@Override public boolean apply(Game game, Ability source) { Player activePlayer = game.getPlayer(game.getActivePlayerId()); return activePlayer != null && activePlayer.hasOpponent(source.getControllerId(), game) && game.getPhase().getStep().getType().getIndex() < 5; }
@Override public void adjustTargets(Ability ability, Game game) { Player activePlayer = game.getPlayer(game.getActivePlayerId()); if (activePlayer != null) { ability.getTargets().clear(); TargetPlayer target = new TargetPlayer(1, 1, false, filter); target.setTargetController(activePlayer.getId()); ability.getTargets().add(target); } } }
@Override public void adjustTargets(Ability ability, Game game) { Player activePlayer = game.getPlayer(game.getActivePlayerId()); if (activePlayer != null) { ability.getTargets().clear(); TargetPlayer target = new TargetPlayer(1, 1, false, FILTER); target.setTargetController(activePlayer.getId()); ability.getTargets().add(target); } } }