mirror of
https://github.com/magefree/mage.git
synced 2025-12-25 21:12:04 -08:00
- Refactored DiesTriggeredAbility to DiesSourceTriggeredAbility
This commit is contained in:
parent
a5d10d6a5d
commit
d1cbfc51e1
353 changed files with 786 additions and 705 deletions
|
|
@ -0,0 +1,79 @@
|
|||
package mage.abilities.common;
|
||||
|
||||
import mage.MageObject;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.ZoneChangeEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.PermanentToken;
|
||||
|
||||
/**
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class DiesSourceTriggeredAbility extends ZoneChangeTriggeredAbility {
|
||||
|
||||
public DiesSourceTriggeredAbility(Effect effect, boolean optional) {
|
||||
super(Zone.BATTLEFIELD, Zone.GRAVEYARD, effect, "When {this} dies, ", optional);
|
||||
}
|
||||
|
||||
public DiesSourceTriggeredAbility(Effect effect) {
|
||||
this(effect, false);
|
||||
}
|
||||
|
||||
public DiesSourceTriggeredAbility(DiesSourceTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInUseableZone(Game game, MageObject source, GameEvent event) {
|
||||
// check it was previously on battlefield
|
||||
Permanent before = ((ZoneChangeEvent) event).getTarget();
|
||||
if (before == null) {
|
||||
return false;
|
||||
}
|
||||
if (!this.hasSourceObjectAbility(game, before, event)) { // the permanent does not have the ability so no trigger
|
||||
return false;
|
||||
}
|
||||
// check now it is in graveyard if it is no token
|
||||
if (!(before instanceof PermanentToken) && before.getZoneChangeCounter(game) + 1 == game.getState().getZoneChangeCounter(sourceId)) {
|
||||
Zone after = game.getState().getZone(sourceId);
|
||||
return after != null && Zone.GRAVEYARD.match(after);
|
||||
} else {
|
||||
// Already moved to another zone, so guess it's ok
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
if (super.checkEventType(event, game)) {
|
||||
return ((ZoneChangeEvent) event).getFromZone() == Zone.BATTLEFIELD && ((ZoneChangeEvent) event).getToZone() == Zone.GRAVEYARD;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DiesSourceTriggeredAbility copy() {
|
||||
return new DiesSourceTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (super.checkTrigger(event, game)) {
|
||||
ZoneChangeEvent zEvent = (ZoneChangeEvent) event;
|
||||
if (zEvent.getTarget().isTransformable()) {
|
||||
if (!zEvent.getTarget().getAbilities().contains(this)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (Effect effect : getEffects()) {
|
||||
effect.setValue("permanentLeftBattlefield", zEvent.getTarget());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -52,7 +52,7 @@ public class ReturnToBattlefieldUnderOwnerControlTargetEffect extends OneShotEff
|
|||
}
|
||||
|
||||
private void updateText() {
|
||||
this.staticText = "return " + this.returnName
|
||||
this.staticText = "then return " + this.returnName
|
||||
+ " to the battlefield" + (tapped ? " tapped" : "")
|
||||
+ " under " + this.returnUnderControlName + " control";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.common.BecomesBlockedTriggeredAbility;
|
||||
import mage.abilities.common.BecomesBlockedSourceTriggeredAbility;
|
||||
import mage.abilities.effects.common.LoseLifeTargetEffect;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
public class AfflictAbility extends BecomesBlockedTriggeredAbility {
|
||||
public class AfflictAbility extends BecomesBlockedSourceTriggeredAbility {
|
||||
|
||||
private final int lifeLoss;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.game.permanent.token.WhiteBlackSpiritToken;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
public class AfterlifeAbility extends DiesTriggeredAbility {
|
||||
public class AfterlifeAbility extends DiesSourceTriggeredAbility {
|
||||
|
||||
private final int tokenCount;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import java.util.List;
|
|||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.StaticAbility;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.EntersBattlefieldEffect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
|
|
@ -38,7 +38,7 @@ import mage.util.CardUtil;
|
|||
*
|
||||
* @author Loki, LevelX2
|
||||
*/
|
||||
public class ModularAbility extends DiesTriggeredAbility {
|
||||
public class ModularAbility extends DiesSourceTriggeredAbility {
|
||||
|
||||
private static final FilterArtifactPermanent filter = new FilterArtifactPermanent("artifact creature");
|
||||
|
||||
|
|
|
|||
|
|
@ -126,7 +126,8 @@ public class MorphAbility extends StaticAbility implements AlternativeSourceCost
|
|||
|
||||
ruleText = sb.toString();
|
||||
|
||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BecomesFaceDownCreatureEffect(morphCosts, (megamorph ? FaceDownType.MEGAMORPHED : FaceDownType.MORPHED)));
|
||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BecomesFaceDownCreatureEffect(
|
||||
morphCosts, (megamorph ? FaceDownType.MEGAMORPHED : FaceDownType.MORPHED)));
|
||||
ability.setWorksFaceDown(true);
|
||||
ability.setRuleVisible(false);
|
||||
addSubAbility(ability);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect;
|
||||
import mage.constants.Outcome;
|
||||
|
|
@ -13,7 +13,7 @@ import mage.game.events.GameEvent;
|
|||
import mage.game.events.ZoneChangeEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
public class PersistAbility extends DiesTriggeredAbility {
|
||||
public class PersistAbility extends DiesSourceTriggeredAbility {
|
||||
|
||||
public PersistAbility() {
|
||||
super(new PersistEffect());
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BecomesBlockedTriggeredAbility;
|
||||
import mage.abilities.common.BecomesBlockedSourceTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
|
|
@ -13,7 +13,7 @@ import mage.game.combat.CombatGroup;
|
|||
*
|
||||
* @author LoneFox
|
||||
*/
|
||||
public class RampageAbility extends BecomesBlockedTriggeredAbility {
|
||||
public class RampageAbility extends BecomesBlockedSourceTriggeredAbility {
|
||||
|
||||
private final String rule;
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import java.util.UUID;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.condition.common.SourceHasCounterCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
|
|
@ -30,7 +30,7 @@ import mage.game.events.GameEvent;
|
|||
*
|
||||
* @author Styxo
|
||||
*/
|
||||
public class RepairAbility extends DiesTriggeredAbility {
|
||||
public class RepairAbility extends DiesSourceTriggeredAbility {
|
||||
|
||||
private String ruleText;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
|
|
@ -27,7 +27,7 @@ import java.util.UUID;
|
|||
*
|
||||
* @author Loki, LevelX2
|
||||
*/
|
||||
public class SoulshiftAbility extends DiesTriggeredAbility {
|
||||
public class SoulshiftAbility extends DiesSourceTriggeredAbility {
|
||||
|
||||
private final DynamicValue amount;
|
||||
|
||||
|
|
@ -57,7 +57,7 @@ public class SoulshiftAbility extends DiesTriggeredAbility {
|
|||
}
|
||||
|
||||
@Override
|
||||
public DiesTriggeredAbility copy() {
|
||||
public DiesSourceTriggeredAbility copy() {
|
||||
return new SoulshiftAbility(this);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect;
|
||||
import mage.constants.Outcome;
|
||||
|
|
@ -15,7 +15,7 @@ import mage.game.permanent.Permanent;
|
|||
/**
|
||||
* @author Loki
|
||||
*/
|
||||
public class UndyingAbility extends DiesTriggeredAbility {
|
||||
public class UndyingAbility extends DiesSourceTriggeredAbility {
|
||||
|
||||
public UndyingAbility() {
|
||||
super(new UndyingEffect());
|
||||
|
|
@ -27,7 +27,7 @@ public class UndyingAbility extends DiesTriggeredAbility {
|
|||
}
|
||||
|
||||
@Override
|
||||
public DiesTriggeredAbility copy() {
|
||||
public DiesSourceTriggeredAbility copy() {
|
||||
return new UndyingAbility(this);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ package mage.game.permanent.token;
|
|||
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
|
||||
/**
|
||||
|
|
@ -19,7 +19,7 @@ public final class ATATToken extends TokenImpl {
|
|||
cardType.add(CardType.CREATURE);
|
||||
cardType.add(CardType.ARTIFACT);
|
||||
color.setWhite(true);
|
||||
addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new TrooperToken(), 2)));
|
||||
addAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new TrooperToken(), 2)));
|
||||
subtype.add(SubType.ATAT);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import java.util.Collections;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -29,7 +29,7 @@ public final class DevilToken extends TokenImpl {
|
|||
toughness = new MageInt(1);
|
||||
Effect effect = new DamageTargetEffect(1);
|
||||
effect.setText("it deals 1 damage to any target");
|
||||
Ability ability = new DiesTriggeredAbility(effect);
|
||||
Ability ability = new DiesSourceTriggeredAbility(effect);
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.SubType;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.constants.Duration;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
|
@ -26,7 +26,7 @@ public final class FesteringGoblinToken extends TokenImpl {
|
|||
power = new MageInt(1);
|
||||
toughness = new MageInt(1);
|
||||
|
||||
Ability ability = new DiesTriggeredAbility(new BoostTargetEffect(-1, -1, Duration.EndOfTurn), false);
|
||||
Ability ability = new DiesSourceTriggeredAbility(new BoostTargetEffect(-1, -1, Duration.EndOfTurn), false);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.game.permanent.token;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.common.counter.AddCountersAllEffect;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
|
@ -26,7 +26,7 @@ public final class GarrukCursedHuntsmanToken extends TokenImpl {
|
|||
power = new MageInt(2);
|
||||
toughness = new MageInt(2);
|
||||
|
||||
this.addAbility(new DiesTriggeredAbility(new AddCountersAllEffect(CounterType.LOYALTY.createInstance(), filter)));
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new AddCountersAllEffect(CounterType.LOYALTY.createInstance(), filter)));
|
||||
}
|
||||
|
||||
public GarrukCursedHuntsmanToken(final GarrukCursedHuntsmanToken token) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.game.permanent.token;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.keyword.DefenderAbility;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -30,7 +30,7 @@ public final class NestingDragonToken extends TokenImpl {
|
|||
power = new MageInt(0);
|
||||
toughness = new MageInt(2);
|
||||
addAbility(DefenderAbility.getInstance());
|
||||
this.addAbility(new DiesTriggeredAbility(
|
||||
this.addAbility(new DiesSourceTriggeredAbility(
|
||||
new CreateTokenEffect(new DragonEggDragonToken()), false
|
||||
));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ package mage.game.permanent.token;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
|
||||
/**
|
||||
|
|
@ -20,7 +20,7 @@ public final class Ooze2Token extends TokenImpl {
|
|||
color.setGreen(true);
|
||||
power = new MageInt(2);
|
||||
toughness = new MageInt(2);
|
||||
this.addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new OozeToken(1, 1), 2), false));
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new OozeToken(1, 1), 2), false));
|
||||
}
|
||||
|
||||
public Ooze2Token(final Ooze2Token token) {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ package mage.game.permanent.token;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
|
||||
/**
|
||||
|
|
@ -22,7 +22,7 @@ public final class ReefWormFishToken extends TokenImpl {
|
|||
power = new MageInt(3);
|
||||
toughness = new MageInt(3);
|
||||
|
||||
addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new ReefWormWhaleToken())));
|
||||
addAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new ReefWormWhaleToken())));
|
||||
}
|
||||
|
||||
public ReefWormFishToken(final ReefWormFishToken token) {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ package mage.game.permanent.token;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
|
||||
/**
|
||||
|
|
@ -22,7 +22,7 @@ public final class ReefWormWhaleToken extends TokenImpl {
|
|||
power = new MageInt(6);
|
||||
toughness = new MageInt(6);
|
||||
|
||||
addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new ReefWormKrakenToken())));
|
||||
addAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new ReefWormKrakenToken())));
|
||||
}
|
||||
|
||||
public ReefWormWhaleToken(final ReefWormWhaleToken token) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.game.permanent.token;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.DiesTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
|
@ -19,7 +19,7 @@ public final class WolfsQuarryToken extends TokenImpl {
|
|||
power = new MageInt(1);
|
||||
toughness = new MageInt(1);
|
||||
|
||||
this.addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new FoodToken())));
|
||||
this.addAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new FoodToken())));
|
||||
}
|
||||
|
||||
private WolfsQuarryToken(final WolfsQuarryToken token) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue