Fix various 'deals damage to a creature' abilities triggering on damage to planeswalkers

This commit is contained in:
Alex W. Jackson 2022-07-09 20:37:06 -04:00
parent 7ca7e10d80
commit 79234b4059
4 changed files with 41 additions and 47 deletions

View file

@ -16,7 +16,7 @@ import mage.target.targetpointer.FixedTarget;
*/
public class DealsDamageToACreatureAllTriggeredAbility extends TriggeredAbilityImpl {
private final boolean combatDamageOnly;
private final boolean combatOnly;
private final FilterPermanent filterPermanent;
private final SetTargetPointer setTargetPointer;
@ -32,19 +32,19 @@ public class DealsDamageToACreatureAllTriggeredAbility extends TriggeredAbilityI
* - PLAYER = player controlling the damage source.<br>
* - PERMANENT = source permanent.<br>
* - PERMANENT_TARGET = damaged creature.
* @param combatDamageOnly The flag to determine if only combat damage has
* @param combatOnly The flag to determine if only combat damage has
* to trigger
*/
public DealsDamageToACreatureAllTriggeredAbility(Effect effect, boolean optional, FilterPermanent filterPermanent, SetTargetPointer setTargetPointer, boolean combatDamageOnly) {
public DealsDamageToACreatureAllTriggeredAbility(Effect effect, boolean optional, FilterPermanent filterPermanent, SetTargetPointer setTargetPointer, boolean combatOnly) {
super(Zone.BATTLEFIELD, effect, optional);
this.combatDamageOnly = combatDamageOnly;
this.combatOnly = combatOnly;
this.setTargetPointer = setTargetPointer;
this.filterPermanent = filterPermanent;
}
public DealsDamageToACreatureAllTriggeredAbility(final DealsDamageToACreatureAllTriggeredAbility ability) {
super(ability);
this.combatDamageOnly = ability.combatDamageOnly;
this.combatOnly = ability.combatOnly;
this.filterPermanent = ability.filterPermanent;
this.setTargetPointer = ability.setTargetPointer;
}
@ -65,7 +65,7 @@ public class DealsDamageToACreatureAllTriggeredAbility extends TriggeredAbilityI
if (permanent == null || !permanent.isCreature(game)) {
return false;
}
if (combatDamageOnly && !((DamagedEvent) event).isCombatDamage()) {
if (combatOnly && !((DamagedEvent) event).isCombatDamage()) {
return false;
}
permanent = game.getPermanentOrLKIBattlefield(event.getSourceId());
@ -94,6 +94,6 @@ public class DealsDamageToACreatureAllTriggeredAbility extends TriggeredAbilityI
@Override
public String getTriggerPhrase() {
return "Whenever " + filterPermanent.getMessage() + " deals "
+ (combatDamageOnly ? "combat " : "") + "damage to a creature, ";
+ (combatOnly ? "combat " : "") + "damage to a creature, ";
}
}

View file

@ -22,14 +22,15 @@ public class DealsDamageToACreatureAttachedTriggeredAbility extends TriggeredAbi
public DealsDamageToACreatureAttachedTriggeredAbility(Effect effect, boolean combatOnly, String attachedDescription, boolean optional, boolean setTargetPointer) {
super(Zone.BATTLEFIELD, effect, optional);
this.combatOnly = combatOnly;
this.setTargetPointer = setTargetPointer;
this.attachedDescription = attachedDescription;
}
public DealsDamageToACreatureAttachedTriggeredAbility(final DealsDamageToACreatureAttachedTriggeredAbility ability) {
super(ability);
this.setTargetPointer = ability.setTargetPointer;
this.combatOnly = ability.combatOnly;
this.setTargetPointer = ability.setTargetPointer;
this.attachedDescription = ability.attachedDescription;
}
@ -45,29 +46,29 @@ public class DealsDamageToACreatureAttachedTriggeredAbility extends TriggeredAbi
@Override
public boolean checkTrigger(GameEvent event, Game game) {
if (!combatOnly || ((DamagedEvent) event).isCombatDamage()) {
Permanent attachment = game.getPermanent(this.getSourceId());
if (attachment != null
&& attachment.isAttachedTo(event.getSourceId())) {
if (setTargetPointer) {
for (Effect effect : this.getEffects()) {
effect.setTargetPointer(new FixedTarget(event.getTargetId(), game));
effect.setValue("damage", event.getAmount());
}
}
return true;
}
Permanent permanent = game.getPermanent(event.getTargetId());
if (permanent == null || !permanent.isCreature(game)) {
return false;
}
return false;
if (combatOnly && !((DamagedEvent) event).isCombatDamage()) {
return false;
}
Permanent attachment = game.getPermanent(this.getSourceId());
if (attachment == null || !attachment.isAttachedTo(event.getSourceId())) {
return false;
}
if (setTargetPointer) {
for (Effect effect : this.getEffects()) {
effect.setTargetPointer(new FixedTarget(event.getTargetId(), game));
effect.setValue("damage", event.getAmount());
}
}
return true;
}
@Override
public String getTriggerPhrase() {
return new StringBuilder("Whenever ").append(attachedDescription)
.append(" deals ")
.append(combatOnly ? "combat " : "")
.append("damage to a creature, ").toString();
return "Whenever " + attachedDescription + " deals "
+ (combatOnly ? "combat " : "") + "damage to a creature, ";
}
}

View file

@ -4,6 +4,7 @@ package mage.abilities.common;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.events.DamagedEvent;
@ -16,12 +17,12 @@ import mage.target.targetpointer.FixedTarget;
*/
public class DealsDamageToACreatureTriggeredAbility extends TriggeredAbilityImpl {
private boolean combatOnly;
protected boolean combatOnly;
private final boolean setTargetPointer;
private FilterCreaturePermanent filter;
public DealsDamageToACreatureTriggeredAbility(Effect effect, boolean combatOnly, boolean optional, boolean setTargetPointer) {
this(effect, combatOnly, optional, setTargetPointer, null);
this(effect, combatOnly, optional, setTargetPointer, StaticFilters.FILTER_PERMANENT_A_CREATURE);
}
public DealsDamageToACreatureTriggeredAbility(Effect effect, boolean combatOnly, boolean optional, boolean setTargetPointer, FilterCreaturePermanent filter) {
@ -52,12 +53,12 @@ public class DealsDamageToACreatureTriggeredAbility extends TriggeredAbilityImpl
public boolean checkTrigger(GameEvent event, Game game) {
if (event.getSourceId().equals(this.sourceId)
&& (!combatOnly || ((DamagedEvent) event).isCombatDamage())) {
if (filter != null) {
Permanent creature = game.getPermanentOrLKIBattlefield(event.getTargetId());
if (!filter.match(creature, getControllerId(), this, game)) {
return false;
}
Permanent creature = game.getPermanentOrLKIBattlefield(event.getTargetId());
if (!filter.match(creature, getControllerId(), this, game)) {
return false;
}
if (setTargetPointer) {
this.getEffects().setTargetPointer(new FixedTarget(event.getTargetId(), game));
this.getEffects().setValue("damage", event.getAmount());
@ -69,18 +70,6 @@ public class DealsDamageToACreatureTriggeredAbility extends TriggeredAbilityImpl
@Override
public String getTriggerPhrase() {
StringBuilder sb = new StringBuilder("Whenever {this} deals ");
if (combatOnly) {
sb.append("combat ");
}
sb.append("damage to ");
if (filter == null) {
sb.append("a creature, ");
} else {
sb.append(filter.getMessage());
sb.append(", ");
}
return sb.toString();
return "Whenever {this} deals " + (combatOnly ? "combat " : "") + "damage to " + filter.getMessage() + ", ";
}
}

View file

@ -46,4 +46,8 @@ public class DealsDamageToOneOrMoreCreaturesTriggeredAbility extends DealsDamage
return new DealsDamageToOneOrMoreCreaturesTriggeredAbility(this);
}
@Override
public String getTriggerPhrase() {
return "Whenever {this} deals " + (combatOnly ? "combat " : "") + "damage to one or more creatures, ";
}
}