mirror of
https://github.com/magefree/mage.git
synced 2025-12-21 02:52:02 -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;
|
package mage.cards.a;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.abilityword.LieutenantAbility;
|
import mage.abilities.abilityword.LieutenantAbility;
|
||||||
import mage.abilities.effects.ContinuousEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.abilities.keyword.VigilanceAbility;
|
import mage.abilities.keyword.VigilanceAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
|
@ -13,10 +11,11 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author emerald000
|
* @author emerald000
|
||||||
*/
|
*/
|
||||||
public final class AngelicFieldMarshal extends CardImpl {
|
public final class AngelicFieldMarshal extends CardImpl {
|
||||||
|
|
@ -32,9 +31,10 @@ public final class AngelicFieldMarshal extends CardImpl {
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
// Lieutenant - As long as you control your commander, Angelic Field Marshal gets +2/+2 and creatures you control have vigilance.
|
// 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());
|
this.addAbility(new LieutenantAbility(new GainAbilityAllEffect(
|
||||||
effect.setText("and creatures you control have vigilance");
|
VigilanceAbility.getInstance(), Duration.WhileOnBattlefield,
|
||||||
this.addAbility(new LieutenantAbility(effect));
|
StaticFilters.FILTER_CONTROLLED_CREATURES
|
||||||
|
), "and creatures you control have vigilance"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private AngelicFieldMarshal(final AngelicFieldMarshal card) {
|
private AngelicFieldMarshal(final AngelicFieldMarshal card) {
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
|
|
||||||
package mage.cards.d;
|
package mage.cards.d;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.abilityword.LieutenantAbility;
|
import mage.abilities.abilityword.LieutenantAbility;
|
||||||
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||||
import mage.abilities.effects.ContinuousEffect;
|
|
||||||
import mage.abilities.effects.common.SacrificeEffect;
|
import mage.abilities.effects.common.SacrificeEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
|
@ -16,8 +13,9 @@ import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author emerald000
|
* @author emerald000
|
||||||
*/
|
*/
|
||||||
public final class DemonOfWailingAgonies extends CardImpl {
|
public final class DemonOfWailingAgonies extends CardImpl {
|
||||||
|
|
@ -33,10 +31,11 @@ public final class DemonOfWailingAgonies extends CardImpl {
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
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."
|
// 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);
|
this.addAbility(new LieutenantAbility(new GainAbilitySourceEffect(
|
||||||
ContinuousEffect effect = new GainAbilitySourceEffect(gainedAbility);
|
new DealsCombatDamageToAPlayerTriggeredAbility(new SacrificeEffect(
|
||||||
effect.setText("and has \"Whenever {this} deals combat damage to a player, that player sacrifices a creature.\"");
|
StaticFilters.FILTER_PERMANENT_CREATURE, 1, "that player"
|
||||||
this.addAbility(new LieutenantAbility(effect));
|
), false, true)
|
||||||
|
), "and has \"Whenever {this} deals combat damage to a player, that player sacrifices a creature.\""));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DemonOfWailingAgonies(final DemonOfWailingAgonies card) {
|
private DemonOfWailingAgonies(final DemonOfWailingAgonies card) {
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,11 @@ package mage.cards.l;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
|
||||||
import mage.abilities.decorator.ConditionalTriggeredAbility;
|
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||||
import mage.abilities.keyword.HasteAbility;
|
import mage.abilities.keyword.HasteAbility;
|
||||||
|
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
|
|
@ -16,9 +15,7 @@ import mage.game.permanent.token.ThopterColorlessToken;
|
||||||
import mage.game.permanent.token.Token;
|
import mage.game.permanent.token.Token;
|
||||||
import mage.target.targetpointer.FixedTargets;
|
import mage.target.targetpointer.FixedTargets;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
|
|
@ -37,14 +34,9 @@ public final class LoyalApprentice extends CardImpl {
|
||||||
this.addAbility(HasteAbility.getInstance());
|
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.
|
// 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(
|
this.addAbility(new BeginningOfCombatTriggeredAbility(new LoyalApprenticeEffect())
|
||||||
new BeginningOfCombatTriggeredAbility(
|
.withInterveningIf(ControlYourCommanderCondition.instance)
|
||||||
new LoyalApprenticeEffect()
|
.setAbilityWord(AbilityWord.LIEUTENANT));
|
||||||
), 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."
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private LoyalApprentice(final LoyalApprentice card) {
|
private LoyalApprentice(final LoyalApprentice card) {
|
||||||
|
|
@ -78,13 +70,7 @@ class LoyalApprenticeEffect extends OneShotEffect {
|
||||||
token.putOntoBattlefield(1, game, source, source.getControllerId());
|
token.putOntoBattlefield(1, game, source, source.getControllerId());
|
||||||
game.addEffect(new GainAbilityTargetEffect(
|
game.addEffect(new GainAbilityTargetEffect(
|
||||||
HasteAbility.getInstance(), Duration.EndOfTurn
|
HasteAbility.getInstance(), Duration.EndOfTurn
|
||||||
).setTargetPointer(new FixedTargets(
|
).setTargetPointer(new FixedTargets(token, game)), source);
|
||||||
token.getLastAddedTokenIds()
|
|
||||||
.stream()
|
|
||||||
.map(game::getPermanent)
|
|
||||||
.filter(Objects::nonNull)
|
|
||||||
.collect(Collectors.toList()), game
|
|
||||||
)), source);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,19 @@
|
||||||
package mage.cards.l;
|
package mage.cards.l;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
|
||||||
import mage.abilities.decorator.ConditionalTriggeredAbility;
|
|
||||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class LoyalDrake extends CardImpl {
|
public final class LoyalDrake extends CardImpl {
|
||||||
|
|
@ -29,13 +29,9 @@ public final class LoyalDrake extends CardImpl {
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
// Lieutenant — At the beginning of combat on your turn, if you control your commander, draw a card.
|
// Lieutenant — At the beginning of combat on your turn, if you control your commander, draw a card.
|
||||||
this.addAbility(new ConditionalTriggeredAbility(
|
this.addAbility(new BeginningOfCombatTriggeredAbility(new DrawCardSourceControllerEffect(1))
|
||||||
new BeginningOfCombatTriggeredAbility(
|
.withInterveningIf(ControlYourCommanderCondition.instance)
|
||||||
new DrawCardSourceControllerEffect(1)
|
.setAbilityWord(AbilityWord.LIEUTENANT));
|
||||||
), CommanderInPlayCondition.instance,
|
|
||||||
"<i>Lieutenant</i> — At the beginning of combat "
|
|
||||||
+ "on your turn, if you control your commander, draw a card."
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private LoyalDrake(final LoyalDrake card) {
|
private LoyalDrake(final LoyalDrake card) {
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,21 @@
|
||||||
package mage.cards.l;
|
package mage.cards.l;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
|
||||||
import mage.abilities.decorator.ConditionalTriggeredAbility;
|
|
||||||
import mage.abilities.effects.common.counter.AddCountersAllEffect;
|
import mage.abilities.effects.common.counter.AddCountersAllEffect;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.abilities.keyword.TrampleAbility;
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
|
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class LoyalGuardian extends CardImpl {
|
public final class LoyalGuardian extends CardImpl {
|
||||||
|
|
@ -31,17 +31,9 @@ public final class LoyalGuardian extends CardImpl {
|
||||||
this.addAbility(TrampleAbility.getInstance());
|
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.
|
// 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(
|
this.addAbility(new BeginningOfCombatTriggeredAbility(new AddCountersAllEffect(
|
||||||
new BeginningOfCombatTriggeredAbility(
|
CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE
|
||||||
new AddCountersAllEffect(
|
)).withInterveningIf(ControlYourCommanderCondition.instance).setAbilityWord(AbilityWord.LIEUTENANT));
|
||||||
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."
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private LoyalGuardian(final LoyalGuardian card) {
|
private LoyalGuardian(final LoyalGuardian card) {
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,19 @@
|
||||||
package mage.cards.l;
|
package mage.cards.l;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
|
||||||
import mage.abilities.decorator.ConditionalTriggeredAbility;
|
|
||||||
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
|
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.abilities.keyword.MenaceAbility;
|
import mage.abilities.keyword.MenaceAbility;
|
||||||
|
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class LoyalSubordinate extends CardImpl {
|
public final class LoyalSubordinate extends CardImpl {
|
||||||
|
|
@ -29,14 +29,9 @@ public final class LoyalSubordinate extends CardImpl {
|
||||||
this.addAbility(new MenaceAbility(false));
|
this.addAbility(new MenaceAbility(false));
|
||||||
|
|
||||||
// Lieutenant — At the beginning of combat on your turn, if you control your commander, each opponent loses 3 life.
|
// Lieutenant — At the beginning of combat on your turn, if you control your commander, each opponent loses 3 life.
|
||||||
this.addAbility(new ConditionalTriggeredAbility(
|
this.addAbility(new BeginningOfCombatTriggeredAbility(new LoseLifeOpponentsEffect(3))
|
||||||
new BeginningOfCombatTriggeredAbility(
|
.withInterveningIf(ControlYourCommanderCondition.instance)
|
||||||
new LoseLifeOpponentsEffect(3)
|
.setAbilityWord(AbilityWord.LIEUTENANT));
|
||||||
), CommanderInPlayCondition.instance,
|
|
||||||
"<i>Lieutenant</i> — At the beginning of combat "
|
|
||||||
+ "on your turn, if you control your commander, "
|
|
||||||
+ "each opponent loses 3 life."
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private LoyalSubordinate(final LoyalSubordinate card) {
|
private LoyalSubordinate(final LoyalSubordinate card) {
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,23 @@
|
||||||
package mage.cards.l;
|
package mage.cards.l;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.TriggeredAbility;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
import mage.abilities.condition.common.ControlYourCommanderCondition;
|
||||||
import mage.abilities.condition.common.CommanderInPlayCondition;
|
|
||||||
import mage.abilities.decorator.ConditionalTriggeredAbility;
|
|
||||||
import mage.abilities.effects.common.PreventAllDamageToAllEffect;
|
import mage.abilities.effects.common.PreventAllDamageToAllEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.abilities.keyword.VigilanceAbility;
|
import mage.abilities.keyword.VigilanceAbility;
|
||||||
|
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.SubType;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class LoyalUnicorn extends CardImpl {
|
public final class LoyalUnicorn extends CardImpl {
|
||||||
|
|
@ -33,25 +33,14 @@ public final class LoyalUnicorn extends CardImpl {
|
||||||
this.addAbility(VigilanceAbility.getInstance());
|
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.
|
// 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(
|
Ability ability = new BeginningOfCombatTriggeredAbility(new PreventAllDamageToAllEffect(
|
||||||
new PreventAllDamageToAllEffect(
|
Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES, true
|
||||||
Duration.EndOfTurn,
|
)).withInterveningIf(ControlYourCommanderCondition.instance);
|
||||||
StaticFilters.FILTER_CONTROLLED_CREATURES,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
);
|
|
||||||
ability.addEffect(new GainAbilityAllEffect(
|
ability.addEffect(new GainAbilityAllEffect(
|
||||||
VigilanceAbility.getInstance(), Duration.EndOfTurn,
|
VigilanceAbility.getInstance(), Duration.EndOfTurn,
|
||||||
StaticFilters.FILTER_CONTROLLED_CREATURES, true
|
StaticFilters.FILTER_CONTROLLED_CREATURES, true
|
||||||
));
|
));
|
||||||
this.addAbility(new ConditionalTriggeredAbility(
|
this.addAbility(ability.setAbilityWord(AbilityWord.LIEUTENANT));
|
||||||
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."
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private LoyalUnicorn(final LoyalUnicorn card) {
|
private LoyalUnicorn(final LoyalUnicorn card) {
|
||||||
|
|
|
||||||
|
|
@ -2,19 +2,21 @@ package mage.cards.s;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
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.common.SacrificeTargetCost;
|
||||||
import mage.abilities.costs.mana.GenericManaCost;
|
import mage.abilities.costs.mana.GenericManaCost;
|
||||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.DamageTargetEffect;
|
import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||||
import mage.abilities.keyword.HasteAbility;
|
import mage.abilities.keyword.HasteAbility;
|
||||||
|
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
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.filter.common.FilterControlledPermanent;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.token.GoblinToken;
|
import mage.game.permanent.token.GoblinToken;
|
||||||
|
|
@ -40,13 +42,9 @@ public final class SiegeGangLieutenant extends CardImpl {
|
||||||
this.toughness = new MageInt(2);
|
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.
|
// 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(
|
this.addAbility(new BeginningOfCombatTriggeredAbility(new SiegeGangLieutenantEffect())
|
||||||
new BeginningOfCombatTriggeredAbility(
|
.withInterveningIf(ControlYourCommanderCondition.instance)
|
||||||
new SiegeGangLieutenantEffect()
|
.setAbilityWord(AbilityWord.LIEUTENANT));
|
||||||
), 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));
|
|
||||||
|
|
||||||
// {2}, Sacrifice a Goblin: Siege-Gang Lieutenant deals 1 damage to any target.
|
// {2}, Sacrifice a Goblin: Siege-Gang Lieutenant deals 1 damage to any target.
|
||||||
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new GenericManaCost(2));
|
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new GenericManaCost(2));
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ package mage.cards.s;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
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.decorator.ConditionalContinuousEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
|
@ -41,7 +41,7 @@ public final class SkyhunterStrikeForce extends CardImpl {
|
||||||
new GainAbilityControlledEffect(
|
new GainAbilityControlledEffect(
|
||||||
new MeleeAbility(), Duration.WhileOnBattlefield,
|
new MeleeAbility(), Duration.WhileOnBattlefield,
|
||||||
StaticFilters.FILTER_CONTROLLED_CREATURES, true
|
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"
|
"other creatures you control have melee"
|
||||||
)).setAbilityWord(AbilityWord.LIEUTENANT));
|
)).setAbilityWord(AbilityWord.LIEUTENANT));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,21 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.abilityword.LieutenantAbility;
|
import mage.abilities.abilityword.LieutenantAbility;
|
||||||
import mage.abilities.common.BecomesBlockedSourceTriggeredAbility;
|
import mage.abilities.common.BecomesBlockedSourceTriggeredAbility;
|
||||||
import mage.abilities.effects.ContinuousEffect;
|
|
||||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||||
import mage.abilities.keyword.HexproofAbility;
|
import mage.abilities.keyword.HexproofAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class StormsurgeKraken extends CardImpl {
|
public final class StormsurgeKraken extends CardImpl {
|
||||||
|
|
@ -32,9 +31,11 @@ public final class StormsurgeKraken extends CardImpl {
|
||||||
this.addAbility(HexproofAbility.getInstance());
|
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."
|
// 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);
|
this.addAbility(new LieutenantAbility(new GainAbilitySourceEffect(
|
||||||
effect.setText("and has \"Whenever Stormsurge Kraken becomes blocked, you may draw two cards.\"");
|
new BecomesBlockedSourceTriggeredAbility(
|
||||||
this.addAbility(new LieutenantAbility(effect));
|
new DrawCardSourceControllerEffect(2), true
|
||||||
|
), Duration.WhileOnBattlefield
|
||||||
|
), "and has \"Whenever {this} becomes blocked, you may draw two cards.\""));
|
||||||
}
|
}
|
||||||
|
|
||||||
private StormsurgeKraken(final StormsurgeKraken card) {
|
private StormsurgeKraken(final StormsurgeKraken card) {
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,21 @@
|
||||||
|
|
||||||
package mage.cards.t;
|
package mage.cards.t;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.abilityword.LieutenantAbility;
|
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.BoostControlledEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||||
import mage.abilities.keyword.TrampleAbility;
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
|
import mage.constants.SubType;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author emerald000
|
* @author emerald000
|
||||||
*/
|
*/
|
||||||
public final class ThunderfootBaloth extends CardImpl {
|
public final class ThunderfootBaloth extends CardImpl {
|
||||||
|
|
@ -33,14 +31,12 @@ public final class ThunderfootBaloth extends CardImpl {
|
||||||
this.addAbility(TrampleAbility.getInstance());
|
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.
|
// 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();
|
this.addAbility(new LieutenantAbility(new BoostControlledEffect(
|
||||||
Effect effect = new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, true);
|
2, 2, Duration.WhileOnBattlefield, true
|
||||||
effect.setText("and other creatures you control get +2/+2");
|
), "and other creature you control get +2/+2").addLieutenantEffect(new GainAbilityAllEffect(
|
||||||
effects.add(effect);
|
TrampleAbility.getInstance(), Duration.WhileOnBattlefield,
|
||||||
effect = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, true);
|
StaticFilters.FILTER_CONTROLLED_CREATURES, true
|
||||||
effect.setText("and have trample");
|
), "and have trample"));
|
||||||
effects.add(effect);
|
|
||||||
this.addAbility(new LieutenantAbility(effects));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ThunderfootBaloth(final ThunderfootBaloth card) {
|
private ThunderfootBaloth(final ThunderfootBaloth card) {
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,10 @@
|
||||||
|
|
||||||
package mage.cards.t;
|
package mage.cards.t;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.abilityword.LieutenantAbility;
|
import mage.abilities.abilityword.LieutenantAbility;
|
||||||
import mage.abilities.common.AttacksTriggeredAbility;
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
import mage.abilities.effects.ContinuousEffect;
|
|
||||||
import mage.abilities.effects.common.DamageTargetEffect;
|
import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
|
|
@ -20,6 +17,8 @@ import mage.filter.FilterPermanent;
|
||||||
import mage.filter.predicate.permanent.DefendingPlayerControlsSourceAttackingPredicate;
|
import mage.filter.predicate.permanent.DefendingPlayerControlsSourceAttackingPredicate;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author emerald000
|
* @author emerald000
|
||||||
*/
|
*/
|
||||||
|
|
@ -46,11 +45,14 @@ public final class TyrantsFamiliar extends CardImpl {
|
||||||
this.addAbility(HasteAbility.getInstance());
|
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."
|
// 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);
|
Ability ability = new AttacksTriggeredAbility(
|
||||||
gainedAbility.addTarget(new TargetPermanent(filter));
|
new DamageTargetEffect(7, "it"), false
|
||||||
ContinuousEffect effect = new GainAbilitySourceEffect(gainedAbility);
|
);
|
||||||
effect.setText("and has \"Whenever {this} attacks, it deals 7 damage to target creature defending player controls.\"");
|
ability.addTarget(new TargetPermanent(filter));
|
||||||
this.addAbility(new LieutenantAbility(effect));
|
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) {
|
private TyrantsFamiliar(final TyrantsFamiliar card) {
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,11 @@
|
||||||
|
|
||||||
|
|
||||||
package mage.abilities.abilityword;
|
package mage.abilities.abilityword;
|
||||||
|
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
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.decorator.ConditionalContinuousEffect;
|
||||||
import mage.abilities.effects.ContinuousEffect;
|
import mage.abilities.effects.ContinuousEffect;
|
||||||
import mage.abilities.effects.Effect;
|
|
||||||
import mage.abilities.effects.Effects;
|
|
||||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
|
|
||||||
|
|
@ -18,16 +15,19 @@ import mage.constants.Zone;
|
||||||
|
|
||||||
public class LieutenantAbility extends SimpleStaticAbility {
|
public class LieutenantAbility extends SimpleStaticAbility {
|
||||||
|
|
||||||
public LieutenantAbility(ContinuousEffect effect) {
|
public LieutenantAbility(ContinuousEffect effect, String text) {
|
||||||
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"));
|
super(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
|
||||||
this.addEffect(new ConditionalContinuousEffect(effect, CommanderInPlayCondition.instance, effect.getText(null)));
|
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) {
|
public LieutenantAbility addLieutenantEffect(ContinuousEffect effect, String text) {
|
||||||
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, ControlYourCommanderCondition.instance, text));
|
||||||
for (Effect effect : effects) {
|
return this;
|
||||||
this.addEffect(new ConditionalContinuousEffect((ContinuousEffect) effect, CommanderInPlayCondition.instance, effect.getText(null)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected LieutenantAbility(final LieutenantAbility ability) {
|
protected LieutenantAbility(final LieutenantAbility ability) {
|
||||||
|
|
|
||||||
|
|
@ -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.Ability;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.constants.CommanderCardType;
|
import mage.constants.CommanderCardType;
|
||||||
|
import mage.game.Controllable;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.players.Player;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -19,21 +19,18 @@ public enum ControlYourCommanderCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
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()
|
.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)
|
.map(game::getPermanent)
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.filter(Permanent::isPhasedIn)
|
.map(Controllable::getControllerId)
|
||||||
.map(Permanent::getOwnerId)
|
.anyMatch(source::isControlledBy);
|
||||||
.anyMatch(source.getControllerId()::equals);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
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