@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventEffectData = preventDamageAction(event, source, game); if (preventEffectData.getPreventedDamage() > 0) { used = true; Player player = game .getPlayer(source.getControllerId()); if(player != null){ player.gainLife(preventEffectData.getPreventedDamage(), game, source); } } return false; }
protected PreventionEffectData preventDamageAction(GameEvent event, Ability source, Game game) { PreventionEffectData preventionData = game.preventDamage(event, source, game, amountToPrevent); if (!preventionData.isError() && !preventionData.isReplaced()) { if (consumable) { amountToPrevent = preventionData.getRemainingAmount(); } if (amountToPrevent == 0) { this.discard(); } } return preventionData; }
@Override public PreventionEffectData preventDamage(GameEvent event, Ability source, Game game, int amountToPrevent) { PreventionEffectData result = new PreventionEffectData(amountToPrevent); if (!event.getFlag()) { // damage is not preventable return result; result.setError(true); return result; GameEvent preventEvent = new GameEvent(GameEvent.EventType.PREVENT_DAMAGE, damageEvent.getTargetId(), damageEvent.getSourceId(), source.getControllerId(), damageEvent.getAmount(), false); if (game.replaceEvent(preventEvent)) { result.setReplaced(true); return result; result.setPreventedDamage(amountToPrevent); damageEvent.setAmount(event.getAmount() - amountToPrevent); } else { result.setPreventedDamage(event.getAmount()); damageEvent.setAmount(0); result.setRemainingAmount(amountToPrevent -= result.getPreventedDamage()); message.append(result.getPreventedDamage()).append(" damage from ").append(damageSource.getLogName()); if (!targetName.isEmpty()) { message.append(" to ").append(targetName); game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, damageEvent.getTargetId(), source.getSourceId(), source.getControllerId(), result.getPreventedDamage())); return result;
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionEffectData = preventDamageAction(event, source, game); if (preventionEffectData.getPreventedDamage() > 0) { boolean passed = false; MageObject sourceOfDamage = game.getObject(event.getSourceId()); Player controllerOfSpell = game.getPlayer(spell.getControllerId()); if(controllerOfSpell != null) { controllerOfSpell.drawCards(preventionEffectData.getPreventedDamage(), game); passed = true; Player controllerOfPermanent = game.getPlayer(permanent.getControllerId()); if(controllerOfPermanent != null) { controllerOfPermanent.drawCards(preventionEffectData.getPreventedDamage(), game); passed = true; Player controllerOfEmblem = game.getPlayer(emblem.getControllerId()); if(controllerOfEmblem != null) { controllerOfEmblem.drawCards(preventionEffectData.getPreventedDamage(), game); Player owner = game.getPlayer(cardSource.getOwnerId()); if (owner != null) { owner.drawCards(preventionEffectData.getPreventedDamage(), game); return preventionEffectData.isReplaced();
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionEffectData = preventDamageAction(event, source, game); if (preventionEffectData.getPreventedDamage() > 0) { new CreateTokenEffect(new ElementalShamanToken(true), preventionEffectData.getPreventedDamage()).apply(game, source); } return true; } }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionData = preventDamageAction(event, source, game); this.used = true; this.discard(); // only one use if (preventionData.getPreventedDamage() > 0) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { player.gainLife(preventionData.getPreventedDamage(), game, source); } } return true; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionData = preventDamageAction(event, source, game); this.used = true; this.discard(); // only one use if (preventionData.getPreventedDamage() > 0) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { player.gainLife(preventionData.getPreventedDamage(), game, source); } } return true; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { Player sourceController = game.getPlayer(source.getControllerId()); PreventionEffectData preventionData = preventDamageAction(event, source, game); if (preventionData.getPreventedDamage() > 0) { Permanent targetCreature = game.getPermanent(source.getFirstTarget()); if (targetCreature != null) { if (sourceController != null && sourceController.chooseUse(outcome, "Would you like to have " + preventionData.getPreventedDamage() + " damage dealt to " + targetCreature.getLogName() + "?", source, game)) { targetCreature.damage(preventionData.getPreventedDamage(), source.getSourceId(), game, false, true); } } } return true; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionData = preventDamageAction(event, source, game); this.used = true; this.discard(); // only one use if (preventionData.getPreventedDamage() > 0) { UUID damageTarget = getTargetPointer().getFirst(game, source); Permanent permanent = game.getPermanent(damageTarget); if (permanent != null) { game.informPlayers("Dealing " + preventionData.getPreventedDamage() + " to " + permanent.getLogName()); permanent.damage(preventionData.getPreventedDamage(), source.getSourceId(), game, false, true); } Player player = game.getPlayer(damageTarget); if (player != null) { game.informPlayers("Dealing " + preventionData.getPreventedDamage() + " to " + player.getLogName()); player.damage(preventionData.getPreventedDamage(), source.getSourceId(), game, false, true); } } return false; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionData = preventDamageAction(event, source, game); Player player = game.getPlayer(source.getControllerId()); if (player != null) { player.gainLife(preventionData.getPreventedDamage(), game, source); } return true; }
@Override protected PreventionEffectData preventDamageAction(GameEvent event, Ability source, Game game) { PreventionEffectData preventionEffectData = super.preventDamageAction(event, source, game); int damage = preventionEffectData.getPreventedDamage(); if (damage > 0) { game.damagePlayerOrPlaneswalker(source.getFirstTarget(), damage, source.getSourceId(), game, false, true); } return preventionEffectData; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionEffectData = preventDamageAction(event, source, game); Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { controller.gainLife(preventionEffectData.getPreventedDamage(), game, source); } return true; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionData = preventDamageAction(event, source, game); Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { controller.gainLife(preventionData.getPreventedDamage(), game, source); } // damage amount is reduced or set to 0 so complete replacement of damage event is never neccessary return false; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionResult = preventDamageAction(event, source, game); if (preventionResult.getPreventedDamage() > 0) { Permanent redirectTo = game.getPermanent(getTargetPointer().getFirst(game, source)); if (redirectTo != null) { game.informPlayers("Dealing " + preventionResult.getPreventedDamage() + " to " + redirectTo.getLogName() + " instead."); DamageEvent damageEvent = (DamageEvent) event; redirectTo.damage(preventionResult.getPreventedDamage(), event.getSourceId(), game, damageEvent.isCombatDamage(), damageEvent.isPreventable(), event.getAppliedEffects()); } discard(); // (only once) } return false; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionData = preventDamageAction(event, source, game); Player player = game.getPlayer(source.getControllerId()); if (player != null) { player.gainLife(preventionData.getPreventedDamage(), game, source); } this.used = true; this.discard(); return true; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionData = preventDamageAction(event, source, game); if (preventionData.getPreventedDamage() > 0) { MageObject damageDealingObject = game.getObject(event.getSourceId()); UUID objectControllerId = null; if (damageDealingObject instanceof Permanent) { if (damageDealingObject.isCreature()) { ((Permanent) damageDealingObject).damage(preventionData.getPreventedDamage(), source.getSourceId(), game, false, true); } else { objectControllerId = ((Permanent) damageDealingObject).getControllerId(); } } else if (damageDealingObject instanceof Ability) { objectControllerId = ((Ability) damageDealingObject).getControllerId(); } else if (damageDealingObject instanceof Spell) { objectControllerId = ((Spell) damageDealingObject).getControllerId(); } if (objectControllerId != null) { Player objectController = game.getPlayer(objectControllerId); if (objectController != null) { objectController.damage(preventionData.getPreventedDamage(), source.getSourceId(), game, false, true); } } } return true; }
@Override protected PreventionEffectData preventDamageAction(GameEvent event, Ability source, Game game) { PreventionEffectData preventionEffectData = super.preventDamageAction(event, source, game); int damage = preventionEffectData.getPreventedDamage(); if (damage > 0) { Permanent attackingCreature = game.getPermanent(getTargetPointer().getFirst(game, source)); if (attackingCreature != null) { attackingCreature.damage(damage, source.getSourceId(), game, false, true); } } return preventionEffectData; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionData = preventDamageAction(event, source, game); this.used = true; this.discard(); // only one use if (preventionData.getPreventedDamage() > 0) { MageObject damageDealingObject = game.getObject(target.getFirstTarget()); UUID objectControllerId = null; if (damageDealingObject instanceof Permanent) { objectControllerId = ((Permanent) damageDealingObject).getControllerId(); } else if (damageDealingObject instanceof Ability) { objectControllerId = ((Ability) damageDealingObject).getControllerId(); } else if (damageDealingObject instanceof Spell) { objectControllerId = ((Spell) damageDealingObject).getControllerId(); } if (objectControllerId != null) { Player objectController = game.getPlayer(objectControllerId); if (objectController != null) { objectController.damage(preventionData.getPreventedDamage(), source.getSourceId(), game, false, true); } } } return true; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { PreventionEffectData preventionData = preventDamageAction(event, source, game); MageObject sourceObject = game.getObject(event.getSourceId()); if (sourceObject != null && (sourceObject.getColor(game).isBlack() || sourceObject.getColor(game).isRed())) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { player.gainLife(preventionData.getPreventedDamage(), game, source); } } return false; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { int damage = event.getAmount(); PreventionEffectData preventEffectData = preventDamageAction(event, source, game); if (preventEffectData.getPreventedDamage() > 0) { MageObject sourceObject = game.getObject(event.getSourceId()); if (sourceObject != null && sourceObject.getColor(game).isRed()) { UUID sourceControllerId = game.getControllerId(event.getSourceId()); if (sourceControllerId != null) { Player sourceController = game.getPlayer(sourceControllerId); if (sourceController != null) { sourceController.damage(damage, source.getSourceId(), game, false, true); } } } this.used = true; } return false; }