@Override protected Player getPlayer(Game game, Ability source) { Spell spell = getSpell(game, source); if (spell != null) { return game.getPlayer(spell.getControllerId()); } return null; }
@Override protected boolean okUUIDToCopyFor(UUID potentialTarget, Game game, Ability source, Spell spell) { Permanent permanent = game.getPermanent(potentialTarget); if (permanent == null || !permanent.isControlledBy(spell.getControllerId())) { return false; } return true; }
@Override protected void modifyCopy(Spell copy, Game game, Ability source) { Spell spell = getSpell(game, source); copy.setControllerId(spell.getControllerId()); }
@Override public void watch(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); if (spell == null || !spell.isInstantOrSorcery()) { return; } this.instantSorceryCount.putIfAbsent(spell.getControllerId(), 0); this.instantSorceryCount.compute( spell.getControllerId(), (k, a) -> a + 1 ); } }
@Override public void watch(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = (Spell) game.getObject(event.getTargetId()); if (!spell.isCreature()) { playerIds.add(spell.getControllerId()); } } }
@Override public void watch(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = (Spell) game.getObject(event.getTargetId()); if (spell.isCreature()) { playerIds.add(spell.getControllerId()); } } }
@Override public boolean checkTrigger(GameEvent event, Game game) { Spell spell = game.getStack().getSpell(event.getTargetId()); return spell != null && filter.match(spell,game) && game.getOpponents(this.getControllerId()).contains(spell.getControllerId()) && game.isActivePlayer(this.getControllerId()); }
@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; } }
@Override public boolean checkTrigger(GameEvent event, Game game) { Spell spell = game.getStack().getSpell(event.getTargetId()); if (spell != null && game.getOpponents(this.getControllerId()).contains(spell.getControllerId())) { this.getEffects().get(0).setTargetPointer(new FixedTarget(event.getPlayerId())); return true; } return false; }
@Override public boolean checkTrigger(GameEvent event, Game game) { if (event.getZone() == Zone.GRAVEYARD) { Spell spell = game.getStack().getSpell(event.getTargetId()); if (spell != null) { for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(spell.getControllerId())); } return true; } } return false; }
@Override public boolean apply(MageObject input, Game game) { Spell spell = game.getStack().getSpell(input.getId()); if (spell != null) { Player controller = game.getPlayer(spell.getControllerId()); if (controller != null) { if (spell.getConvertedManaCost() > controller.getCounters().getCount(CounterType.EXPERIENCE)) { return true; } } } return false; }
@Override public boolean apply(Game game, Ability source) { boolean countered = false; for (UUID targetId : targetPointer.getTargets(game, source)) { Spell spell = game.getStack().getSpell(targetId); if (game.getStack().counter(targetId, source.getSourceId(), game)) { countered = true; } if (spell != null) { Token token = new SwanSongBirdToken(); token.putOntoBattlefield(1, game, source.getSourceId(), spell.getControllerId()); } } return countered; } }
@Override public boolean apply(Game game, Ability source) { Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source)); if (spell != null) { Player player = game.getPlayer(spell.getControllerId()); if (player != null && player.getCounters().containsKey(CounterType.POISON)) return game.getStack().counter(targetPointer.getFirst(game, source), source.getSourceId(), game); } return false; }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Spell spell = game.getStack().getSpell(source.getFirstTarget()); if (spell != null) { Player spellController = game.getPlayer(spell.getControllerId()); if (spellController != null) { spellController.damage(spell.getConvertedManaCost(), source.getSourceId(), game, false, true); return true; } } } return false; } }
@Override public boolean checkTrigger(GameEvent event, Game game) { Permanent enchantment = game.getPermanent(getSourceId()); Spell spell = game.getStack().getSpell(event.getSourceId()); if (enchantment != null && spell != null && enchantment.isAttachedTo(spell.getControllerId())) { this.getEffects().get(0).setTargetPointer(new FixedTarget(getSourceId())); return true; } return false; }
@Override public boolean apply(Game game, Ability source) { boolean result = false; Spell spell = game.getStack().getSpell(source.getFirstTarget()); if (spell != null) { Player spellController = game.getPlayer(spell.getControllerId()); result = game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game); if (spellController != null) { spellController.damage(2, source.getSourceId(), game, false, true); } } return result; } }
@Override public boolean apply(Game game, Ability source) { Spell spell = game.getStack().getSpell(source.getFirstTarget()); if (spell != null) { source.getEffects().get(1).setTargetPointer(new FixedTarget(spell.getControllerId())); return game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game); } return false; }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Spell spell = game.getStack().getSpell(getTargetPointer().getFirst(game, source)); if (spell != null) { Player spellController = game.getPlayer(spell.getControllerId()); if (spellController != null) { spellController.damage(spell.getConvertedManaCost(), source.getSourceId(), game, false, true); return true; } } } return false; } }
@Override public boolean apply(Game game, Ability source) { boolean result = false; Spell spell = game.getStack().getSpell(source.getFirstTarget()); if (spell != null) { Player spellController = game.getPlayer(spell.getControllerId()); result = game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game); if (spellController != null) { spellController.damage(spell.getPower().getValue(), source.getSourceId(), game, false, true); } } return result; } }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { Player controller = game.getPlayer(source.getControllerId()); DamageEvent damageEvent = (DamageEvent) event; if (controller != null) { Spell targetSpell = game.getStack().getSpell(source.getFirstTarget()); if (targetSpell != null) { Player targetsController = game.getPlayer(targetSpell.getControllerId()); if (targetsController != null) { targetsController.damage(damageEvent.getAmount(), damageEvent.getSourceId(), game, damageEvent.isCombatDamage(), damageEvent.isPreventable(), damageEvent.getAppliedEffects()); return true; } } } return false; }