Merge origin/master

This commit is contained in:
LevelX2 2020-06-29 18:03:12 +02:00
commit 92d1a6b9d8
353 changed files with 786 additions and 705 deletions

View file

@ -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;
}
}

View file

@ -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";
}

View file

@ -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;

View file

@ -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;

View file

@ -1,4 +1,3 @@
package mage.abilities.keyword;
import mage.abilities.Ability;

View file

@ -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");

View file

@ -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);

View file

@ -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());

View file

@ -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;

View file

@ -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;

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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) {

View file

@ -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
));
}

View file

@ -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) {

View file

@ -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) {

View file

@ -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) {

View file

@ -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) {