From b572e8c7d62b85eb7a40705975eaa26fa825eae1 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 24 May 2014 19:21:33 +0200 Subject: [PATCH] Some changes to prevention effects. --- .../src/mage/sets/magic2014/PayNoHeed.java | 27 ++++------ .../mage/sets/mirage/EtherealChampion.java | 4 +- .../mage/sets/visions/ResistanceFighter.java | 2 +- .../common/PreventDamageByTargetEffect.java | 51 ++----------------- ....java => PreventDamageToSourceEffect.java} | 10 ++-- Mage/src/mage/target/TargetSource.java | 14 +++-- 6 files changed, 31 insertions(+), 77 deletions(-) rename Mage/src/mage/abilities/effects/common/{PreventDamageSourceEffect.java => PreventDamageToSourceEffect.java} (88%) diff --git a/Mage.Sets/src/mage/sets/magic2014/PayNoHeed.java b/Mage.Sets/src/mage/sets/magic2014/PayNoHeed.java index a30caaf4600..0e2cf6b4ba2 100644 --- a/Mage.Sets/src/mage/sets/magic2014/PayNoHeed.java +++ b/Mage.Sets/src/mage/sets/magic2014/PayNoHeed.java @@ -29,7 +29,9 @@ package mage.sets.magic2014; import java.util.UUID; import mage.abilities.Ability; +import mage.abilities.effects.Effect; import mage.abilities.effects.PreventionEffectImpl; +import mage.abilities.effects.common.PreventDamageByTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; @@ -51,8 +53,12 @@ public class PayNoHeed extends CardImpl { this.color.setWhite(true); // Prevent all damage a source of your choice would deal this turn. - this.getSpellAbility().addEffect(new PayNoHeedEffect()); - this.getSpellAbility().addTarget(new TargetSource()); + Effect effect = new PreventDamageByTargetEffect(Duration.EndOfTurn, Integer.MAX_VALUE, false); + effect.setText("Prevent all damage a source of your choice would deal this turn"); + this.getSpellAbility().addEffect(effect); + TargetSource targetSource = new TargetSource(); + targetSource.setRequired(true); + this.getSpellAbility().addTarget(targetSource); } @@ -69,7 +75,7 @@ public class PayNoHeed extends CardImpl { class PayNoHeedEffect extends PreventionEffectImpl { public PayNoHeedEffect() { - super(Duration.EndOfTurn); + super(Duration.EndOfTurn, Integer.MAX_VALUE, false); staticText = "Prevent all damage a source of your choice would deal this turn"; } @@ -87,21 +93,6 @@ class PayNoHeedEffect extends PreventionEffectImpl { return true; } - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - preventDamage(event, source, event.getSourceId(), game); - return true; - } - - private void preventDamage(GameEvent event, Ability source, UUID target, Game game) { - GameEvent preventEvent = new GameEvent(GameEvent.EventType.PREVENT_DAMAGE, target, source.getSourceId(), source.getControllerId(), event.getAmount(), false); - if (!game.replaceEvent(preventEvent)) { - int damage = event.getAmount(); - event.setAmount(0); - game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, target, source.getSourceId(), source.getControllerId(), damage)); - } - } - @Override public boolean applies(GameEvent event, Ability source, Game game) { if (super.applies(event, source, game)) { diff --git a/Mage.Sets/src/mage/sets/mirage/EtherealChampion.java b/Mage.Sets/src/mage/sets/mirage/EtherealChampion.java index 87376ef837f..7b87a8cfe62 100644 --- a/Mage.Sets/src/mage/sets/mirage/EtherealChampion.java +++ b/Mage.Sets/src/mage/sets/mirage/EtherealChampion.java @@ -32,7 +32,7 @@ import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.PayLifeCost; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.PreventDamageSourceEffect; +import mage.abilities.effects.common.PreventDamageToSourceEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; @@ -55,7 +55,7 @@ public class EtherealChampion extends CardImpl { this.toughness = new MageInt(4); // Pay 1 life: Prevent the next 1 damage that would be dealt to Ethereal Champion this turn. - Effect effect = new PreventDamageSourceEffect(Duration.EndOfTurn, 1); + Effect effect = new PreventDamageToSourceEffect(Duration.EndOfTurn, 1); effect.setText("Pay 1 life: Prevent the next 1 damage that would be dealt to {source} this turn"); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new PayLifeCost(1))); } diff --git a/Mage.Sets/src/mage/sets/visions/ResistanceFighter.java b/Mage.Sets/src/mage/sets/visions/ResistanceFighter.java index 211e0352318..75e1ebbb229 100644 --- a/Mage.Sets/src/mage/sets/visions/ResistanceFighter.java +++ b/Mage.Sets/src/mage/sets/visions/ResistanceFighter.java @@ -58,7 +58,7 @@ public class ResistanceFighter extends CardImpl { // Sacrifice Resistance Fighter: Prevent all combat damage target creature would deal this turn. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageByTargetEffect(Duration.EndOfTurn, true), new SacrificeSourceCost()); - ability.addTarget(new TargetCreaturePermanent()); + ability.addTarget(new TargetCreaturePermanent(true)); this.addAbility(ability); } diff --git a/Mage/src/mage/abilities/effects/common/PreventDamageByTargetEffect.java b/Mage/src/mage/abilities/effects/common/PreventDamageByTargetEffect.java index 6bd1960719c..720359c6e14 100644 --- a/Mage/src/mage/abilities/effects/common/PreventDamageByTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/PreventDamageByTargetEffect.java @@ -28,15 +28,12 @@ package mage.abilities.effects.common; -import mage.constants.Duration; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.effects.PreventionEffectImpl; +import mage.constants.Duration; import mage.game.Game; import mage.game.events.GameEvent; -import mage.target.Target; - -import java.util.UUID; /** * @author nantuko @@ -68,57 +65,19 @@ public class PreventDamageByTargetEffect extends PreventionEffectImpl= amountToPrevent) { - int damage = amountToPrevent; - event.setAmount(event.getAmount() - amountToPrevent); - this.used = true; - game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, target, source.getId(), source.getControllerId(), damage)); - } else { - int damage = event.getAmount(); - event.setAmount(0); - amountToPrevent -= damage; - game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, target, source.getId(), source.getControllerId(), damage)); - } - } - } - } - @Override public boolean applies(GameEvent event, Ability source, Game game) { if (!this.used && super.applies(event, source, game)) { - for (Target target : source.getTargets()) { - for (UUID chosen : target.getTargets()) { - if (event.getSourceId().equals(chosen)) { - return true; - } - } - } + return this.getTargetPointer().getTargets(game, source).contains(event.getSourceId()); } return false; } @Override public String getText(Mode mode) { + if (staticText != null && !staticText.isEmpty()) { + return staticText; + } if (amountToPrevent == Integer.MAX_VALUE) { StringBuilder sb = new StringBuilder(); sb.append("Prevent all damage target "); diff --git a/Mage/src/mage/abilities/effects/common/PreventDamageSourceEffect.java b/Mage/src/mage/abilities/effects/common/PreventDamageToSourceEffect.java similarity index 88% rename from Mage/src/mage/abilities/effects/common/PreventDamageSourceEffect.java rename to Mage/src/mage/abilities/effects/common/PreventDamageToSourceEffect.java index dbfb2d24aa4..f3505020505 100644 --- a/Mage/src/mage/abilities/effects/common/PreventDamageSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/PreventDamageToSourceEffect.java @@ -38,19 +38,19 @@ import mage.game.events.GameEvent; * * @author Quercitron */ -public class PreventDamageSourceEffect extends PreventionEffectImpl { +public class PreventDamageToSourceEffect extends PreventionEffectImpl { - public PreventDamageSourceEffect(Duration duration, int amountToPrevent) { + public PreventDamageToSourceEffect(Duration duration, int amountToPrevent) { super(duration, amountToPrevent, false); } - public PreventDamageSourceEffect(final PreventDamageSourceEffect effect) { + public PreventDamageToSourceEffect(final PreventDamageToSourceEffect effect) { super(effect); } @Override - public PreventDamageSourceEffect copy() { - return new PreventDamageSourceEffect(this); + public PreventDamageToSourceEffect copy() { + return new PreventDamageToSourceEffect(this); } @Override diff --git a/Mage/src/mage/target/TargetSource.java b/Mage/src/mage/target/TargetSource.java index c6f9a06cfe3..fa3f8046020 100644 --- a/Mage/src/mage/target/TargetSource.java +++ b/Mage/src/mage/target/TargetSource.java @@ -112,31 +112,35 @@ public class TargetSource extends TargetObject { for (StackObject stackObject: game.getStack()) { if (game.getPlayer(sourceControllerId).getInRange().contains(stackObject.getControllerId()) && filter.match(stackObject, game)) { count++; - if (count >= this.minNumberOfTargets) + if (count >= this.minNumberOfTargets) { return true; + } } } for (Permanent permanent: game.getBattlefield().getActivePermanents(sourceControllerId, game)) { if (filter.match(permanent, game)) { count++; - if (count >= this.minNumberOfTargets) + if (count >= this.minNumberOfTargets) { return true; + } } } for (Player player : game.getPlayers().values()) { for (Card card : player.getGraveyard().getCards(game)) { if (filter.match(card, game)) { count++; - if (count >= this.minNumberOfTargets) + if (count >= this.minNumberOfTargets) { return true; + } } } } for (Card card : game.getExile().getAllCards(game)) { if (filter.match(card, game)) { count++; - if (count >= this.minNumberOfTargets) + if (count >= this.minNumberOfTargets) { return true; + } } } return false; @@ -149,7 +153,7 @@ public class TargetSource extends TargetObject { @Override public Set possibleTargets(UUID sourceControllerId, Game game) { - Set possibleTargets = new HashSet(); + Set possibleTargets = new HashSet<>(); for (StackObject stackObject: game.getStack()) { if (game.getPlayer(sourceControllerId).getInRange().contains(stackObject.getControllerId()) && filter.match(stackObject, game)) { possibleTargets.add(stackObject.getId());