public boolean attackedLastTurn(UUID playerId, UUID otherPlayerId) { if (playersAttackedInLastTurn.get(playerId) != null) { return playersAttackedInLastTurn.get(playerId).contains(otherPlayerId); } return false; } }
@Override public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { Set<UUID> possibleTargets = new HashSet<>(); for (StackObject stackObject: game.getStack()) { if (game.getState().getPlayersInRange(sourceControllerId, game).contains(stackObject.getControllerId()) && filter.match(stackObject, sourceId, sourceControllerId, game)) { possibleTargets.add(stackObject.getId()); } } return possibleTargets; }
private boolean canBeChosen(StackObject stackObject, UUID sourceID, UUID sourceControllerId, Game game) { return stackObject instanceof Spell && game.getState().getPlayersInRange(sourceControllerId, game).contains(stackObject.getControllerId()) && filter.match(stackObject, sourceID, sourceControllerId, game); }
@Override public boolean applies(Ability abilityToModify, Ability source, Game game) { return (abilityToModify.getAbilityType() == AbilityType.ACTIVATED || abilityToModify instanceof SpellAbility) && game.getState().getPlayersInRange(source.getControllerId(), game).contains(abilityToModify.getControllerId()); }
@Override public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { Player controller = game.getPlayer(source.getControllerId()); return controller != null && game.getState().getPlayersInRange(controller.getId(), game).contains(affectedControllerId); }
@Override public boolean applies(GameEvent event, Ability source, Game game) { if (event.getType() == GameEvent.EventType.GAIN_LIFE) { return game.getState().getPlayersInRange(source.getControllerId(), game).contains(event.getPlayerId()); } return false; } }
@Override public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { int count = 0; for (StackObject stackObject: game.getStack()) { if (game.getState().getPlayersInRange(sourceControllerId, game).contains(stackObject.getControllerId()) && filter.match(stackObject, sourceId, sourceControllerId, game)) { count++; if (count >= this.minNumberOfTargets) { return true; } } } return false; }
public MageObjectReference(UUID sourceId, Game game) { this.sourceId = sourceId; MageObject mageObject = game.getObject(sourceId); if (mageObject != null) { this.zoneChangeCounter = mageObject.getZoneChangeCounter(game); } else { if (game.getPlayerList().contains(sourceId)) { this.zoneChangeCounter = 0; } else { logger.error("The provided sourceId is not connected to an object in the game id: " + sourceId); for (StackObject stackObject : game.getStack()) { logger.error("StackObject: " + stackObject.getId() + " sourceId " + stackObject.getSourceId() + " name " + stackObject.getName()); } mageObject = game.getLastKnownInformation(sourceId, Zone.STACK); if (mageObject != null) { this.zoneChangeCounter = mageObject.getZoneChangeCounter(game); logger.error("SourceId found in LKI"); } else { logger.error("SourceId NOT found in LKI"); this.zoneChangeCounter = 0; } } } }
@Override public Set<UUID> possibleTargets(UUID sourceControllerId, Game game) { Set<UUID> possibleTargets = new HashSet<>(); for (StackObject stackObject : game.getStack()) { if (stackObject.getStackAbility().getAbilityType() == AbilityType.ACTIVATED && game.getState().getPlayersInRange(sourceControllerId, game).contains(stackObject.getStackAbility().getControllerId()) && filter.match(((StackAbility) stackObject), game)) { possibleTargets.add(stackObject.getStackAbility().getId()); } } return possibleTargets; }
@Override public boolean applies(GameEvent event, Ability source, Game game) { MageObject object = game.getObject(event.getSourceId()); Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId()); if (ability.isPresent() && object != null) { if (game.getState().getPlayersInRange(source.getControllerId(), game).contains(event.getPlayerId()) // controller in range && ability.get().getAbilityType() != AbilityType.MANA && object.getName().equals(game.getState().getValue(source.getSourceId().toString() + ChooseACardNameEffect.INFO_KEY))) { return true; } } return false; } }
@Override public boolean applies(GameEvent event, Ability source, Game game) { MageObject object = game.getObject(event.getSourceId()); Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId()); if (ability.isPresent() && object != null) { if (game.getState().getPlayersInRange(source.getControllerId(), game).contains(event.getPlayerId()) // controller in range && ability.get().getAbilityType() != AbilityType.MANA && object.getName().equals(game.getState().getValue(source.getSourceId().toString() + ChooseACardNameEffect.INFO_KEY))) { return true; } } return false; } }
@Override public boolean applies(GameEvent event, Ability source, Game game) { Player controller = game.getPlayer(source.getControllerId()); return controller != null && game.getState().getPlayersInRange(controller.getId(), game).contains(event.getPlayerId()); } }
@Override public boolean applies(GameEvent event, Ability source, Game game) { Player controller = game.getPlayer(source.getControllerId()); return event.getType() == GameEvent.EventType.UNTAP_STEP && controller != null && game.getState().getPlayersInRange(controller.getId(), game).contains(event.getPlayerId()); } }
@Override public boolean applies(GameEvent event, Ability source, Game game) { MageObject object = game.getObject(event.getSourceId()); Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId()); if (ability.isPresent() && object != null && object.isCreature() && object.getAbilities().contains(FlyingAbility.getInstance()) && game.getState().getPlayersInRange(source.getControllerId(), game).contains(event.getPlayerId())) { if (ability.get().getCosts().stream().anyMatch((cost) -> (cost instanceof TapSourceCost))) { return true; } } return false; }
@Override public boolean canChoose(UUID sourceControllerId, Game game) { for (StackObject stackObject : game.getStack()) { if (stackObject.getStackAbility() != null && stackObject.getStackAbility().getAbilityType() == AbilityType.ACTIVATED && game.getState().getPlayersInRange(sourceControllerId, game).contains(stackObject.getStackAbility().getControllerId())) { return true; } } return false; }
@Override public boolean applies(GameEvent event, Ability source, Game game) { if (super.applies(event, source, game) && event.getType() == GameEvent.EventType.DAMAGE_PLAYER) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null && game.getState().getPlayersInRange(controller.getId(), game).contains(event.getTargetId())) { return true; } } return false; }
@Override public boolean applies(GameEvent event, Ability source, Game game) { Permanent enchantment = game.getPermanentOrLKIBattlefield(source.getSourceId()); if (enchantment == null) { return false; } Permanent enchantedCreature = game.getPermanent(enchantment.getAttachedTo()); if (enchantedCreature == null) { return false; } MageObject object = game.getObject(event.getSourceId()); Optional<Ability> ability = game.getAbility(event.getTargetId(), event.getSourceId()); if (ability.isPresent() && object != null && object.isCreature() && object.getId().equals(enchantedCreature.getId()) && game.getState().getPlayersInRange(source.getControllerId(), game).contains(event.getPlayerId())) { if (ability.get().getCosts().stream().anyMatch((cost) -> (cost instanceof TapSourceCost))) { return true; } } return false; }
@Override public Set<UUID> possibleTargets(UUID sourceControllerId, Game game) { Set<UUID> possibleTargets = new HashSet<>(); for (StackObject stackObject: game.getStack()) { if (game.getState().getPlayersInRange(sourceControllerId, game).contains(stackObject.getControllerId()) && filter.match(stackObject, game)) { possibleTargets.add(stackObject.getId()); } } for (Permanent permanent: game.getBattlefield().getActivePermanents(sourceControllerId, game)) { if (filter.match(permanent, game)) { possibleTargets.add(permanent.getId()); } } for (Player player : game.getPlayers().values()) { for (Card card : player.getGraveyard().getCards(game)) { if (filter.match(card, game)) { possibleTargets.add(card.getId()); } } } for (Card card : game.getExile().getAllCards(game)) { if (filter.match(card, game)) { possibleTargets.add(card.getId()); } } return possibleTargets; }
@Override public boolean applies(GameEvent event, Ability source, Game game) { if (game.getPhase().getType() == TurnPhase.COMBAT && super.applies(event, source, game) && event.getType() == GameEvent.EventType.DAMAGE_PLAYER) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null && game.getState().getPlayersInRange(controller.getId(), game).contains(event.getTargetId())) { return true; } } return false; } }
@Override public boolean apply(Game game, Ability source) { Spell spell = game.getSpellOrLKIStack(this.getTargetPointer().getFirst(game, source)); Player player = game.getPlayer(source.getControllerId()); if (spell != null && player != null) { PlayerList range = game.getState().getPlayersInRange(player.getId(), game); for (UUID playerId : game.getState().getPlayerList(spell.getControllerId())) { if (!playerId.equals(spell.getControllerId()) && range.contains(playerId)) { spell.createCopyOnStack(game, source, playerId, true); } } return true; } return false; } }