mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
rework effects and abilities which care about controlling your own commander (fixes #13542)
This commit is contained in:
parent
c0c27c81fa
commit
d4954bf784
15 changed files with 128 additions and 203 deletions
|
|
@ -1,11 +1,9 @@
|
|||
|
||||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.abilityword.LieutenantAbility;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -13,16 +11,17 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public final class AngelicFieldMarshal extends CardImpl {
|
||||
|
||||
public AngelicFieldMarshal(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}");
|
||||
this.subtype.add(SubType.ANGEL);
|
||||
|
||||
this.power = new MageInt(3);
|
||||
|
|
@ -30,11 +29,12 @@ public final class AngelicFieldMarshal extends CardImpl {
|
|||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
|
||||
// Lieutenant - As long as you control your commander, Angelic Field Marshal gets +2/+2 and creatures you control have vigilance.
|
||||
ContinuousEffect effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, new FilterControlledCreaturePermanent());
|
||||
effect.setText("and creatures you control have vigilance");
|
||||
this.addAbility(new LieutenantAbility(effect));
|
||||
this.addAbility(new LieutenantAbility(new GainAbilityAllEffect(
|
||||
VigilanceAbility.getInstance(), Duration.WhileOnBattlefield,
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURES
|
||||
), "and creatures you control have vigilance"));
|
||||
}
|
||||
|
||||
private AngelicFieldMarshal(final AngelicFieldMarshal card) {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,9 @@
|
|||
|
||||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.abilityword.LieutenantAbility;
|
||||
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.common.SacrificeEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
|
|
@ -16,14 +13,15 @@ import mage.constants.CardType;
|
|||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public final class DemonOfWailingAgonies extends CardImpl {
|
||||
|
||||
public DemonOfWailingAgonies(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}");
|
||||
this.subtype.add(SubType.DEMON);
|
||||
|
||||
this.power = new MageInt(4);
|
||||
|
|
@ -31,12 +29,13 @@ public final class DemonOfWailingAgonies extends CardImpl {
|
|||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
|
||||
// Lieutenant - As long as you control your commander, Demon of Wailing Agonies gets +2/+2 and has "Whenever Demon of Wailing Agonies deals combat damage to a player, that player sacrifices a creature."
|
||||
Ability gainedAbility = new DealsCombatDamageToAPlayerTriggeredAbility(new SacrificeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, "that player"), false, true);
|
||||
ContinuousEffect effect = new GainAbilitySourceEffect(gainedAbility);
|
||||
effect.setText("and has \"Whenever {this} deals combat damage to a player, that player sacrifices a creature.\"");
|
||||
this.addAbility(new LieutenantAbility(effect));
|
||||
this.addAbility(new LieutenantAbility(new GainAbilitySourceEffect(
|
||||
new DealsCombatDamageToAPlayerTriggeredAbility(new SacrificeEffect(
|
||||
StaticFilters.FILTER_PERMANENT_CREATURE, 1, "that player"
|
||||
), false, true)
|
||||
), "and has \"Whenever {this} deals combat damage to a player, that player sacrifices a creature.\""));
|
||||
}
|
||||
|
||||
private DemonOfWailingAgonies(final DemonOfWailingAgonies card) {
|
||||
|
|
|
|||
|
|
@ -2,12 +2,11 @@ package mage.cards.l;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
||||
import mage.abilities.decorator.ConditionalTriggeredAbility;
|
||||
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
|
|
@ -16,9 +15,7 @@ import mage.game.permanent.token.ThopterColorlessToken;
|
|||
import mage.game.permanent.token.Token;
|
||||
import mage.target.targetpointer.FixedTargets;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
|
|
@ -37,14 +34,9 @@ public final class LoyalApprentice extends CardImpl {
|
|||
this.addAbility(HasteAbility.getInstance());
|
||||
|
||||
// Lieutenant — At the beginning of combat on your turn, if you control your commander, create a 1/1 colorless Thopter artifact creature token with flying. That token gains haste until end of turn.
|
||||
this.addAbility(new ConditionalTriggeredAbility(
|
||||
new BeginningOfCombatTriggeredAbility(
|
||||
new LoyalApprenticeEffect()
|
||||
), CommanderInPlayCondition.instance, "<i>Lieutenant</i> — " +
|
||||
"At the beginning of combat on your turn, if you control your commander, " +
|
||||
"create a 1/1 colorless Thopter artifact creature token with flying. " +
|
||||
"That token gains haste until end of turn."
|
||||
));
|
||||
this.addAbility(new BeginningOfCombatTriggeredAbility(new LoyalApprenticeEffect())
|
||||
.withInterveningIf(ControlYourCommanderCondition.instance)
|
||||
.setAbilityWord(AbilityWord.LIEUTENANT));
|
||||
}
|
||||
|
||||
private LoyalApprentice(final LoyalApprentice card) {
|
||||
|
|
@ -78,13 +70,7 @@ class LoyalApprenticeEffect extends OneShotEffect {
|
|||
token.putOntoBattlefield(1, game, source, source.getControllerId());
|
||||
game.addEffect(new GainAbilityTargetEffect(
|
||||
HasteAbility.getInstance(), Duration.EndOfTurn
|
||||
).setTargetPointer(new FixedTargets(
|
||||
token.getLastAddedTokenIds()
|
||||
.stream()
|
||||
.map(game::getPermanent)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList()), game
|
||||
)), source);
|
||||
).setTargetPointer(new FixedTargets(token, game)), source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
package mage.cards.l;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
||||
import mage.abilities.decorator.ConditionalTriggeredAbility;
|
||||
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityWord;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class LoyalDrake extends CardImpl {
|
||||
|
|
@ -29,13 +29,9 @@ public final class LoyalDrake extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Lieutenant — At the beginning of combat on your turn, if you control your commander, draw a card.
|
||||
this.addAbility(new ConditionalTriggeredAbility(
|
||||
new BeginningOfCombatTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1)
|
||||
), CommanderInPlayCondition.instance,
|
||||
"<i>Lieutenant</i> — At the beginning of combat "
|
||||
+ "on your turn, if you control your commander, draw a card."
|
||||
));
|
||||
this.addAbility(new BeginningOfCombatTriggeredAbility(new DrawCardSourceControllerEffect(1))
|
||||
.withInterveningIf(ControlYourCommanderCondition.instance)
|
||||
.setAbilityWord(AbilityWord.LIEUTENANT));
|
||||
}
|
||||
|
||||
private LoyalDrake(final LoyalDrake card) {
|
||||
|
|
|
|||
|
|
@ -1,21 +1,21 @@
|
|||
package mage.cards.l;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
||||
import mage.abilities.decorator.ConditionalTriggeredAbility;
|
||||
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||
import mage.abilities.effects.common.counter.AddCountersAllEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityWord;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class LoyalGuardian extends CardImpl {
|
||||
|
|
@ -31,17 +31,9 @@ public final class LoyalGuardian extends CardImpl {
|
|||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// Lieutenant — At the beginning of combat on your turn, if you control your commander, put a +1/+1 counter on each creature you control.
|
||||
this.addAbility(new ConditionalTriggeredAbility(
|
||||
new BeginningOfCombatTriggeredAbility(
|
||||
new AddCountersAllEffect(
|
||||
CounterType.P1P1.createInstance(),
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURE
|
||||
)
|
||||
), CommanderInPlayCondition.instance,
|
||||
"<i>Lieutenant</i> — At the beginning of combat "
|
||||
+ "on your turn, if you control your commander, "
|
||||
+ "put a +1/+1 counter on each creature you control."
|
||||
));
|
||||
this.addAbility(new BeginningOfCombatTriggeredAbility(new AddCountersAllEffect(
|
||||
CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE
|
||||
)).withInterveningIf(ControlYourCommanderCondition.instance).setAbilityWord(AbilityWord.LIEUTENANT));
|
||||
}
|
||||
|
||||
private LoyalGuardian(final LoyalGuardian card) {
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
package mage.cards.l;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
||||
import mage.abilities.decorator.ConditionalTriggeredAbility;
|
||||
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityWord;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class LoyalSubordinate extends CardImpl {
|
||||
|
|
@ -29,14 +29,9 @@ public final class LoyalSubordinate extends CardImpl {
|
|||
this.addAbility(new MenaceAbility(false));
|
||||
|
||||
// Lieutenant — At the beginning of combat on your turn, if you control your commander, each opponent loses 3 life.
|
||||
this.addAbility(new ConditionalTriggeredAbility(
|
||||
new BeginningOfCombatTriggeredAbility(
|
||||
new LoseLifeOpponentsEffect(3)
|
||||
), CommanderInPlayCondition.instance,
|
||||
"<i>Lieutenant</i> — At the beginning of combat "
|
||||
+ "on your turn, if you control your commander, "
|
||||
+ "each opponent loses 3 life."
|
||||
));
|
||||
this.addAbility(new BeginningOfCombatTriggeredAbility(new LoseLifeOpponentsEffect(3))
|
||||
.withInterveningIf(ControlYourCommanderCondition.instance)
|
||||
.setAbilityWord(AbilityWord.LIEUTENANT));
|
||||
}
|
||||
|
||||
private LoyalSubordinate(final LoyalSubordinate card) {
|
||||
|
|
|
|||
|
|
@ -1,23 +1,23 @@
|
|||
package mage.cards.l;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
||||
import mage.abilities.decorator.ConditionalTriggeredAbility;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||
import mage.abilities.effects.common.PreventAllDamageToAllEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityWord;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class LoyalUnicorn extends CardImpl {
|
||||
|
|
@ -33,25 +33,14 @@ public final class LoyalUnicorn extends CardImpl {
|
|||
this.addAbility(VigilanceAbility.getInstance());
|
||||
|
||||
// Lieutenant — At the beginning of combat on your turn, if you control your commander, prevent all combat damage that would be dealt to creatures you control this turn. Other creatures you control gain vigilance until end of turn.
|
||||
TriggeredAbility ability = new BeginningOfCombatTriggeredAbility(
|
||||
new PreventAllDamageToAllEffect(
|
||||
Duration.EndOfTurn,
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURES,
|
||||
true
|
||||
)
|
||||
);
|
||||
Ability ability = new BeginningOfCombatTriggeredAbility(new PreventAllDamageToAllEffect(
|
||||
Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES, true
|
||||
)).withInterveningIf(ControlYourCommanderCondition.instance);
|
||||
ability.addEffect(new GainAbilityAllEffect(
|
||||
VigilanceAbility.getInstance(), Duration.EndOfTurn,
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURES, true
|
||||
));
|
||||
this.addAbility(new ConditionalTriggeredAbility(
|
||||
ability, CommanderInPlayCondition.instance,
|
||||
"<i>Lieutenant</i> — At the beginning of combat "
|
||||
+ "on your turn, if you control your commander, "
|
||||
+ "prevent all combat damage that would be dealt "
|
||||
+ "to creatures you control this turn. "
|
||||
+ "Other creatures you control gain vigilance until end of turn."
|
||||
));
|
||||
this.addAbility(ability.setAbilityWord(AbilityWord.LIEUTENANT));
|
||||
}
|
||||
|
||||
private LoyalUnicorn(final LoyalUnicorn card) {
|
||||
|
|
|
|||
|
|
@ -2,19 +2,21 @@ package mage.cards.s;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
||||
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.constants.AbilityWord;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.token.GoblinToken;
|
||||
|
|
@ -40,13 +42,9 @@ public final class SiegeGangLieutenant extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// Lieutenant -- At the beginning of combat on your turn, if you control your commander, create two 1/1 red Goblin creature tokens. Those tokens gain haste until end of turn.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfCombatTriggeredAbility(
|
||||
new SiegeGangLieutenantEffect()
|
||||
), CommanderInPlayCondition.instance, "At the beginning of combat on your turn, " +
|
||||
"if you control your commander, create two 1/1 red Goblin creature tokens. " +
|
||||
"Those tokens gain haste until end of turn."
|
||||
).setAbilityWord(AbilityWord.LIEUTENANT));
|
||||
this.addAbility(new BeginningOfCombatTriggeredAbility(new SiegeGangLieutenantEffect())
|
||||
.withInterveningIf(ControlYourCommanderCondition.instance)
|
||||
.setAbilityWord(AbilityWord.LIEUTENANT));
|
||||
|
||||
// {2}, Sacrifice a Goblin: Siege-Gang Lieutenant deals 1 damage to any target.
|
||||
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new GenericManaCost(2));
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package mage.cards.s;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
||||
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
|
|
@ -41,7 +41,7 @@ public final class SkyhunterStrikeForce extends CardImpl {
|
|||
new GainAbilityControlledEffect(
|
||||
new MeleeAbility(), Duration.WhileOnBattlefield,
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURES, true
|
||||
), CommanderInPlayCondition.instance, "as long as you control your commander, " +
|
||||
), ControlYourCommanderCondition.instance, "as long as you control your commander, " +
|
||||
"other creatures you control have melee"
|
||||
)).setAbilityWord(AbilityWord.LIEUTENANT));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,28 +1,27 @@
|
|||
|
||||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.abilityword.LieutenantAbility;
|
||||
import mage.abilities.common.BecomesBlockedSourceTriggeredAbility;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.HexproofAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class StormsurgeKraken extends CardImpl {
|
||||
|
||||
public StormsurgeKraken(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}");
|
||||
this.subtype.add(SubType.KRAKEN);
|
||||
|
||||
this.power = new MageInt(5);
|
||||
|
|
@ -30,11 +29,13 @@ public final class StormsurgeKraken extends CardImpl {
|
|||
|
||||
// Hexproof
|
||||
this.addAbility(HexproofAbility.getInstance());
|
||||
|
||||
|
||||
// Lieutenant - As long as you control your commander, Stormsurge Kraken gets +2/+2 and has "Whenever Stormsurge Kraken becomes blocked, you may draw two cards."
|
||||
ContinuousEffect effect = new GainAbilitySourceEffect(new BecomesBlockedSourceTriggeredAbility(new DrawCardSourceControllerEffect(2), true), Duration.WhileOnBattlefield);
|
||||
effect.setText("and has \"Whenever Stormsurge Kraken becomes blocked, you may draw two cards.\"");
|
||||
this.addAbility(new LieutenantAbility(effect));
|
||||
this.addAbility(new LieutenantAbility(new GainAbilitySourceEffect(
|
||||
new BecomesBlockedSourceTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(2), true
|
||||
), Duration.WhileOnBattlefield
|
||||
), "and has \"Whenever {this} becomes blocked, you may draw two cards.\""));
|
||||
}
|
||||
|
||||
private StormsurgeKraken(final StormsurgeKraken card) {
|
||||
|
|
|
|||
|
|
@ -1,29 +1,27 @@
|
|||
|
||||
package mage.cards.t;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.abilityword.LieutenantAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.Effects;
|
||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public final class ThunderfootBaloth extends CardImpl {
|
||||
|
||||
public ThunderfootBaloth(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}{G}");
|
||||
this.subtype.add(SubType.BEAST);
|
||||
|
||||
this.power = new MageInt(5);
|
||||
|
|
@ -31,16 +29,14 @@ public final class ThunderfootBaloth extends CardImpl {
|
|||
|
||||
// Trample
|
||||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
|
||||
// Lieutenant - As long as you control your commander, Thunderfoot Baloth gets +2/+2 and other creatures you control get +2/+2 and have trample.
|
||||
Effects effects = new Effects();
|
||||
Effect effect = new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, true);
|
||||
effect.setText("and other creatures you control get +2/+2");
|
||||
effects.add(effect);
|
||||
effect = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, true);
|
||||
effect.setText("and have trample");
|
||||
effects.add(effect);
|
||||
this.addAbility(new LieutenantAbility(effects));
|
||||
this.addAbility(new LieutenantAbility(new BoostControlledEffect(
|
||||
2, 2, Duration.WhileOnBattlefield, true
|
||||
), "and other creature you control get +2/+2").addLieutenantEffect(new GainAbilityAllEffect(
|
||||
TrampleAbility.getInstance(), Duration.WhileOnBattlefield,
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURES, true
|
||||
), "and have trample"));
|
||||
}
|
||||
|
||||
private ThunderfootBaloth(final ThunderfootBaloth card) {
|
||||
|
|
|
|||
|
|
@ -1,13 +1,10 @@
|
|||
|
||||
package mage.cards.t;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.abilityword.LieutenantAbility;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
|
|
@ -20,6 +17,8 @@ import mage.filter.FilterPermanent;
|
|||
import mage.filter.predicate.permanent.DefendingPlayerControlsSourceAttackingPredicate;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author emerald000
|
||||
*/
|
||||
|
|
@ -46,11 +45,14 @@ public final class TyrantsFamiliar extends CardImpl {
|
|||
this.addAbility(HasteAbility.getInstance());
|
||||
|
||||
// Lieutenant - As long as you control your commander, Tyrant's Familiar gets +2/+2 and has "Whenever Tyrant's Familiar attacks, it deals 7 damage to target creature defending player controls."
|
||||
Ability gainedAbility = new AttacksTriggeredAbility(new DamageTargetEffect(7, "it"), false);
|
||||
gainedAbility.addTarget(new TargetPermanent(filter));
|
||||
ContinuousEffect effect = new GainAbilitySourceEffect(gainedAbility);
|
||||
effect.setText("and has \"Whenever {this} attacks, it deals 7 damage to target creature defending player controls.\"");
|
||||
this.addAbility(new LieutenantAbility(effect));
|
||||
Ability ability = new AttacksTriggeredAbility(
|
||||
new DamageTargetEffect(7, "it"), false
|
||||
);
|
||||
ability.addTarget(new TargetPermanent(filter));
|
||||
this.addAbility(new LieutenantAbility(
|
||||
new GainAbilitySourceEffect(ability), "and has \"Whenever {this} attacks, " +
|
||||
"it deals 7 damage to target creature defending player controls.\""
|
||||
));
|
||||
}
|
||||
|
||||
private TyrantsFamiliar(final TyrantsFamiliar card) {
|
||||
|
|
|
|||
|
|
@ -1,14 +1,11 @@
|
|||
|
||||
|
||||
package mage.abilities.abilityword;
|
||||
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
||||
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.Effects;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.constants.AbilityWord;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
|
||||
|
|
@ -18,16 +15,19 @@ import mage.constants.Zone;
|
|||
|
||||
public class LieutenantAbility extends SimpleStaticAbility {
|
||||
|
||||
public LieutenantAbility(ContinuousEffect effect) {
|
||||
super(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), CommanderInPlayCondition.instance, "<i>Lieutenant</i> — As long as you control your commander, {this} gets +2/+2"));
|
||||
this.addEffect(new ConditionalContinuousEffect(effect, CommanderInPlayCondition.instance, effect.getText(null)));
|
||||
public LieutenantAbility(ContinuousEffect effect, String text) {
|
||||
super(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
|
||||
new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield),
|
||||
ControlYourCommanderCondition.instance,
|
||||
"as long as you control your commander, {this} gets +2/+2"
|
||||
));
|
||||
this.setAbilityWord(AbilityWord.LIEUTENANT);
|
||||
this.addLieutenantEffect(effect, text);
|
||||
}
|
||||
|
||||
public LieutenantAbility(Effects effects) {
|
||||
super(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), CommanderInPlayCondition.instance, "<i>Lieutenant</i> — As long as you control your commander, {this} gets +2/+2"));
|
||||
for (Effect effect : effects) {
|
||||
this.addEffect(new ConditionalContinuousEffect((ContinuousEffect) effect, CommanderInPlayCondition.instance, effect.getText(null)));
|
||||
}
|
||||
public LieutenantAbility addLieutenantEffect(ContinuousEffect effect, String text) {
|
||||
this.addEffect(new ConditionalContinuousEffect(effect, ControlYourCommanderCondition.instance, text));
|
||||
return this;
|
||||
}
|
||||
|
||||
protected LieutenantAbility(final LieutenantAbility ability) {
|
||||
|
|
@ -38,4 +38,4 @@ public class LieutenantAbility extends SimpleStaticAbility {
|
|||
public LieutenantAbility copy() {
|
||||
return new LieutenantAbility(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,26 +0,0 @@
|
|||
package mage.abilities.condition.common;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.game.Game;
|
||||
|
||||
/**
|
||||
* Checks if the player has its commander in play and controls it
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public enum CommanderInPlayCondition implements Condition {
|
||||
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return ControlYourCommanderCondition.instance.apply(game, source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "As long as you control your commander";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -3,10 +3,10 @@ package mage.abilities.condition.common;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.constants.CommanderCardType;
|
||||
import mage.game.Controllable;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
|
|
@ -19,21 +19,18 @@ public enum ControlYourCommanderCondition implements Condition {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return game.getPlayerList()
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
return player != null && game
|
||||
.getCommandersIds(player, CommanderCardType.COMMANDER_OR_OATHBREAKER, true)
|
||||
.stream()
|
||||
.map(game::getPlayer)
|
||||
.filter(Objects::nonNull)
|
||||
.map(player -> game.getCommandersIds(player, CommanderCardType.COMMANDER_OR_OATHBREAKER, true)) // must search all card parts (example: mdf commander on battlefield)
|
||||
.flatMap(Collection::stream)
|
||||
.map(game::getPermanent)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(Permanent::isPhasedIn)
|
||||
.map(Permanent::getOwnerId)
|
||||
.anyMatch(source.getControllerId()::equals);
|
||||
.map(Controllable::getControllerId)
|
||||
.anyMatch(source::isControlledBy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "If you control your commander";
|
||||
return "you control your commander";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue