mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
remove custom multitarget handling from DamageTargetEffect
This commit is contained in:
parent
1a1f7ec588
commit
0ae2c2b86e
16 changed files with 19 additions and 62 deletions
|
|
@ -65,7 +65,7 @@ public final class AvalancheOfSector7 extends CardImpl {
|
|||
class AvalancheOfSector7TriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
AvalancheOfSector7TriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that player", true));
|
||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that player"));
|
||||
setTriggerPhrase("Whenever an opponent activates an ability of an artifact they control, ");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ public final class BarretWallace extends CardImpl {
|
|||
|
||||
// Whenever Barret Wallace attacks, it deals damage equal to the number of equipped creatures you control to defending player.
|
||||
this.addAbility(new AttacksTriggeredAbility(
|
||||
new DamageTargetEffect(xValue, true, "it", true)
|
||||
new DamageTargetEffect(xValue, true, "it")
|
||||
.setText("it deals damage equal to the number of equipped creatures you control to defending player"),
|
||||
false, null, SetTargetPointer.PLAYER
|
||||
).withRuleTextReplacement(true).addHint(hint));
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
|
|
@ -75,9 +74,9 @@ class BedazzleEffect extends OneShotEffect {
|
|||
if (permanent != null) {
|
||||
permanent.destroy(source, game, false);
|
||||
}
|
||||
Effect effect = new DamageTargetEffect(StaticValue.get(2), true, "", true);
|
||||
Effect effect = new DamageTargetEffect(2);
|
||||
effect.setTargetPointer(new FixedTarget(source.getTargets().get(1).getFirstTarget(), game));
|
||||
effect.apply(game, source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ public final class BurningTreeShaman extends CardImpl {
|
|||
class BurningTreeShamanTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
BurningTreeShamanTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(1), true, "that player", true));
|
||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(1), true, "that player"));
|
||||
}
|
||||
|
||||
private BurningTreeShamanTriggeredAbility(final BurningTreeShamanTriggeredAbility ability) {
|
||||
|
|
|
|||
|
|
@ -22,11 +22,7 @@ public final class CutIn extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}");
|
||||
|
||||
// Cut In deals 4 damage to target creature.
|
||||
this.getSpellAbility().addEffect(
|
||||
new DamageTargetEffect(4)
|
||||
.setUseOnlyTargetPointer(true)
|
||||
.setTargetPointer(new FirstTargetPointer())
|
||||
);
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(4));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
|
||||
// Create a Young Hero Role token attached to up to one target creature you control.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package mage.cards.e;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.CopyTargetStackObjectEffect;
|
||||
|
|
@ -82,7 +81,7 @@ class ExplosionEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
int xValue = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
Effect effect = new DamageTargetEffect(StaticValue.get(xValue), true, "", true);
|
||||
Effect effect = new DamageTargetEffect(xValue);
|
||||
effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game));
|
||||
effect.apply(game, source);
|
||||
Player player = game.getPlayer(source.getTargets().get(1).getFirstTarget());
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ public final class FieryAnnihilation extends CardImpl {
|
|||
|
||||
// Fiery Annihilation deals 5 damage to target creature. Exile up to one target Equipment attached to that creature. If that creature would die this turn, exile it instead.
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(
|
||||
5, true, "target creature", true
|
||||
5, true, "target creature"
|
||||
));
|
||||
this.getSpellAbility().addEffect(new ExileTargetEffect()
|
||||
.setTargetPointer(new SecondTargetPointer())
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ public final class FlamescrollCelebrant extends ModalDoubleFacedCard {
|
|||
class FlamescrollCelebrantTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
FlamescrollCelebrantTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(1), true, "that player", true));
|
||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(1), true, "that player"));
|
||||
}
|
||||
|
||||
private FlamescrollCelebrantTriggeredAbility(final FlamescrollCelebrantTriggeredAbility ability) {
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ public final class HarshMentor extends CardImpl {
|
|||
class HarshMentorTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
HarshMentorTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(2), true, "that player", true));
|
||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(2), true, "that player"));
|
||||
}
|
||||
|
||||
private HarshMentorTriggeredAbility(final HarshMentorTriggeredAbility ability) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.cards.i;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
|
@ -50,8 +49,8 @@ public final class IchneumonDruid extends CardImpl {
|
|||
|
||||
class IchneumonDruidAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public IchneumonDruidAbility() {
|
||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(4), false, "that player", true));
|
||||
IchneumonDruidAbility() {
|
||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(4), false, "that player"));
|
||||
}
|
||||
|
||||
private IchneumonDruidAbility(final IchneumonDruidAbility ability) {
|
||||
|
|
@ -95,7 +94,7 @@ class IchneumonDruidWatcher extends Watcher {
|
|||
|
||||
private final Map<UUID, Integer> playerInstantCount = new HashMap<>();
|
||||
|
||||
public IchneumonDruidWatcher() {
|
||||
IchneumonDruidWatcher() {
|
||||
super(WatcherScope.GAME);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ public final class ImmolationShaman extends CardImpl {
|
|||
class ImmolationShamanTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
ImmolationShamanTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(1), true, "that player", true));
|
||||
super(Zone.BATTLEFIELD, new DamageTargetEffect(StaticValue.get(1), true, "that player"));
|
||||
setTriggerPhrase("Whenever an opponent activates an ability of an artifact, creature, or land that isn't a mana ability, ");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ public final class JeskaiRevelation extends CardImpl {
|
|||
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
||||
this.getSpellAbility().addTarget(new TargetSpellOrPermanent());
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(
|
||||
4, true, "any target", true
|
||||
4, true, "any target"
|
||||
).setTargetPointer(new SecondTargetPointer()));
|
||||
this.getSpellAbility().addTarget(new TargetAnyTarget());
|
||||
this.getSpellAbility().addEffect(new CreateTokenEffect(new MonasteryMentorToken(), 2));
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
|
||||
package mage.cards.m;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
|
|
@ -37,7 +35,7 @@ public final class ManticoreOfTheGauntlet extends CardImpl {
|
|||
counters.setText("put a -1/-1 counter on target creature you control");
|
||||
counters.setTargetPointer(new FirstTargetPointer());
|
||||
|
||||
Effect damage = new DamageTargetEffect(StaticValue.get(3), true, "", true);
|
||||
Effect damage = new DamageTargetEffect(3);
|
||||
damage.setText("{this} deals 3 damage to target opponent or planeswalker.");
|
||||
damage.setTargetPointer(new SecondTargetPointer());
|
||||
|
||||
|
|
|
|||
|
|
@ -52,7 +52,6 @@ public final class NivMizzetGuildpact extends CardImpl {
|
|||
// Whenever Niv-Mizzet, Guildpact deals combat damage to a player, it deals X damage to any target, target player draws X cards, and you gain X life, where X is the number of different color pairs among permanents you control that are exactly two colors.
|
||||
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(
|
||||
new DamageTargetEffect(NivMizzetGuildpactCount.instance)
|
||||
.setUseOnlyTargetPointer(true)
|
||||
.setText("it deals X damage to any target"), false);
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
ability.addEffect(new DrawCardTargetEffect(NivMizzetGuildpactCount.instance)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -27,7 +26,7 @@ public final class Simulacrum extends CardImpl {
|
|||
// You gain life equal to the damage dealt to you this turn. Simulacrum deals damage to target creature you control equal to the damage dealt to you this turn.
|
||||
this.getSpellAbility().addEffect(new GainLifeEffect(new SimulacrumAmount(), "You gain life equal to the damage dealt to you this turn."));
|
||||
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
||||
Effect effect = new DamageTargetEffect(new SimulacrumAmount(), true, "target creature you control", true);
|
||||
Effect effect = new DamageTargetEffect(new SimulacrumAmount(), true, "target creature you control");
|
||||
effect.setText(" {this} deals damage to target creature you control equal to the damage dealt to you this turn.");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
this.getSpellAbility().addWatcher(new AmountOfDamageAPlayerReceivedThisTurnWatcher());
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.Mode;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
|
|
@ -24,7 +23,6 @@ public class DamageTargetEffect extends OneShotEffect {
|
|||
protected DynamicValue amount;
|
||||
protected boolean preventable;
|
||||
protected String targetDescription;
|
||||
protected boolean useOnlyTargetPointer; // TODO: investigate why do we ignore targetPointer by default??
|
||||
protected String sourceName = "{this}";
|
||||
|
||||
public DamageTargetEffect(int amount) {
|
||||
|
|
@ -44,10 +42,6 @@ public class DamageTargetEffect extends OneShotEffect {
|
|||
this(StaticValue.get(amount), preventable, targetDescription);
|
||||
}
|
||||
|
||||
public DamageTargetEffect(int amount, boolean preventable, String targetDescription, boolean useOnlyTargetPointer) {
|
||||
this(StaticValue.get(amount), preventable, targetDescription, useOnlyTargetPointer);
|
||||
}
|
||||
|
||||
public DamageTargetEffect(int amount, boolean preventable, String targetDescription, String whoDealDamageName) {
|
||||
this(StaticValue.get(amount), preventable, targetDescription);
|
||||
this.sourceName = whoDealDamageName;
|
||||
|
|
@ -67,15 +61,10 @@ public class DamageTargetEffect extends OneShotEffect {
|
|||
}
|
||||
|
||||
public DamageTargetEffect(DynamicValue amount, boolean preventable, String targetDescription) {
|
||||
this(amount, preventable, targetDescription, false);
|
||||
}
|
||||
|
||||
public DamageTargetEffect(DynamicValue amount, boolean preventable, String targetDescription, boolean useOnlyTargetPointer) {
|
||||
super(Outcome.Damage);
|
||||
this.amount = amount;
|
||||
this.preventable = preventable;
|
||||
this.targetDescription = targetDescription;
|
||||
this.useOnlyTargetPointer = useOnlyTargetPointer;
|
||||
}
|
||||
|
||||
public int getAmount() {
|
||||
|
|
@ -95,21 +84,15 @@ public class DamageTargetEffect extends OneShotEffect {
|
|||
this.amount = effect.amount.copy();
|
||||
this.preventable = effect.preventable;
|
||||
this.targetDescription = effect.targetDescription;
|
||||
this.useOnlyTargetPointer = effect.useOnlyTargetPointer;
|
||||
this.sourceName = effect.sourceName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DamageTargetEffect withTargetDescription(String targetDescription) {
|
||||
this.targetDescription = targetDescription;
|
||||
return this;
|
||||
}
|
||||
|
||||
// TODO: this should most likely be refactored to not be needed and always use target pointer.
|
||||
public Effect setUseOnlyTargetPointer(boolean useOnlyTargetPointer) {
|
||||
this.useOnlyTargetPointer = useOnlyTargetPointer;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DamageTargetEffect copy() {
|
||||
return new DamageTargetEffect(this);
|
||||
|
|
@ -117,21 +100,6 @@ public class DamageTargetEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
if (!useOnlyTargetPointer && source.getTargets().size() > 1) {
|
||||
for (Target target : source.getTargets()) {
|
||||
for (UUID targetId : target.getTargets()) {
|
||||
Permanent permanent = game.getPermanent(targetId);
|
||||
if (permanent != null) {
|
||||
permanent.damage(amount.calculate(game, source, this), source.getSourceId(), source, game, false, preventable);
|
||||
}
|
||||
Player player = game.getPlayer(targetId);
|
||||
if (player != null) {
|
||||
player.damage(amount.calculate(game, source, this), source.getSourceId(), source, game, false, preventable);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
for (UUID targetId : this.getTargetPointer().getTargets(game, source)) {
|
||||
Permanent permanent = game.getPermanent(targetId);
|
||||
if (permanent != null) {
|
||||
|
|
@ -154,7 +122,7 @@ public class DamageTargetEffect extends OneShotEffect {
|
|||
StringBuilder sb = new StringBuilder();
|
||||
String message = amount.getMessage();
|
||||
sb.append(this.sourceName).append(" deals ");
|
||||
if (message.isEmpty() || !message.equals("1")) {
|
||||
if (!message.equals("1")) {
|
||||
sb.append(amount);
|
||||
}
|
||||
if (!sb.toString().endsWith(" ")) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue