mirror of
https://github.com/magefree/mage.git
synced 2026-01-24 04:09:54 -08:00
refactor Friends Forever ability to be a Partner variant
This commit is contained in:
parent
ab885be2d5
commit
c2ba51af88
11 changed files with 14 additions and 73 deletions
|
|
@ -28,7 +28,6 @@ public abstract class AbstractCommander extends Constructed {
|
|||
private static List<CommanderValidator> validators = Arrays.asList(
|
||||
PartnerValidator.instance,
|
||||
PartnerVariantValidator.instance,
|
||||
FriendsForeverValidator.instance,
|
||||
PartnerWithValidator.instance,
|
||||
ChooseABackgroundValidator.instance,
|
||||
DoctorsCompanionValidator.instance
|
||||
|
|
|
|||
|
|
@ -7,14 +7,13 @@ import mage.abilities.costs.common.SacrificeTargetCost;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.combat.GoadTargetEffect;
|
||||
import mage.abilities.keyword.FriendsForeverAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.PartnerVariantType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -40,7 +39,7 @@ public final class BjornaNightfallAlchemist extends CardImpl {
|
|||
this.addAbility(ability);
|
||||
|
||||
// Friends forever
|
||||
this.addAbility(FriendsForeverAbility.getInstance());
|
||||
this.addAbility(PartnerVariantType.FRIENDS_FOREVER.makeAbility());
|
||||
}
|
||||
|
||||
private BjornaNightfallAlchemist(final BjornaNightfallAlchemist card) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import mage.abilities.common.AttacksTriggeredAbility;
|
|||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.MaximumHandSizeControllerEffect;
|
||||
import mage.abilities.keyword.FriendsForeverAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
|
|
@ -40,7 +39,7 @@ public final class CecilyHauntedMage extends CardImpl {
|
|||
this.addAbility(new AttacksTriggeredAbility(new CecilyHauntedMageEffect()));
|
||||
|
||||
// Friends forever
|
||||
this.addAbility(FriendsForeverAbility.getInstance());
|
||||
this.addAbility(PartnerVariantType.FRIENDS_FOREVER.makeAbility());
|
||||
}
|
||||
|
||||
private CecilyHauntedMage(final CecilyHauntedMage card) {
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.CastSecondSpellTriggeredAbility;
|
||||
import mage.abilities.effects.common.UntapTargetEffect;
|
||||
import mage.abilities.effects.keyword.InvestigateEffect;
|
||||
import mage.abilities.keyword.FriendsForeverAbility;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.PartnerVariantType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
|
@ -39,7 +39,7 @@ public final class ElmarUlvenwaldInformant extends CardImpl {
|
|||
this.addAbility(ability);
|
||||
|
||||
// Friends forever
|
||||
this.addAbility(FriendsForeverAbility.getInstance());
|
||||
this.addAbility(PartnerVariantType.FRIENDS_FOREVER.makeAbility());
|
||||
}
|
||||
|
||||
private ElmarUlvenwaldInformant(final ElmarUlvenwaldInformant card) {
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@ import mage.Mana;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.keyword.FriendsForeverAbility;
|
||||
import mage.abilities.mana.ConditionalColorlessManaAbility;
|
||||
import mage.abilities.mana.builder.ConditionalManaBuilder;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.PartnerVariantType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.game.Game;
|
||||
|
|
@ -38,7 +38,7 @@ public final class HargildeKindlyRunechanter extends CardImpl {
|
|||
));
|
||||
|
||||
// Friends forever
|
||||
this.addAbility(FriendsForeverAbility.getInstance());
|
||||
this.addAbility(PartnerVariantType.FRIENDS_FOREVER.makeAbility());
|
||||
}
|
||||
|
||||
private HargildeKindlyRunechanter(final HargildeKindlyRunechanter card) {
|
||||
|
|
|
|||
|
|
@ -6,10 +6,10 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
|
||||
import mage.abilities.keyword.FriendsForeverAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.PartnerVariantType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.FilterCard;
|
||||
|
|
@ -54,7 +54,7 @@ public final class OthelmSigardianOutcast extends CardImpl {
|
|||
this.addAbility(ability, new CardsPutIntoGraveyardWatcher());
|
||||
|
||||
// Friends forever
|
||||
this.addAbility(FriendsForeverAbility.getInstance());
|
||||
this.addAbility(PartnerVariantType.FRIENDS_FOREVER.makeAbility());
|
||||
}
|
||||
|
||||
private OthelmSigardianOutcast(final OthelmSigardianOutcast card) {
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ import mage.abilities.common.AttacksTriggeredAbility;
|
|||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.effects.keyword.InvestigateEffect;
|
||||
import mage.abilities.keyword.FriendsForeverAbility;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.PartnerVariantType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.FilterPermanent;
|
||||
|
|
@ -48,7 +48,7 @@ public final class SophinaSpearsageDeserter extends CardImpl {
|
|||
.setText("investigate once for each nontoken attacking creature")));
|
||||
|
||||
// Friends forever
|
||||
this.addAbility(FriendsForeverAbility.getInstance());
|
||||
this.addAbility(PartnerVariantType.FRIENDS_FOREVER.makeAbility());
|
||||
}
|
||||
|
||||
private SophinaSpearsageDeserter(final SophinaSpearsageDeserter card) {
|
||||
|
|
|
|||
|
|
@ -6,13 +6,9 @@ import mage.abilities.common.EntersBattlefieldOrLeavesSourceTriggeredAbility;
|
|||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.keyword.InvestigateEffect;
|
||||
import mage.abilities.effects.keyword.InvestigateTargetEffect;
|
||||
import mage.abilities.keyword.FriendsForeverAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
|
@ -36,7 +32,7 @@ public final class WernogRidersChaplain extends CardImpl {
|
|||
this.addAbility(new EntersBattlefieldOrLeavesSourceTriggeredAbility(new WernogRidersChaplainEffect(), false));
|
||||
|
||||
// Friends forever
|
||||
this.addAbility(FriendsForeverAbility.getInstance());
|
||||
this.addAbility(PartnerVariantType.FRIENDS_FOREVER.makeAbility());
|
||||
}
|
||||
|
||||
private WernogRidersChaplain(final WernogRidersChaplain card) {
|
||||
|
|
|
|||
|
|
@ -1,37 +0,0 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
import mage.constants.Zone;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public class FriendsForeverAbility extends StaticAbility implements MageSingleton {
|
||||
|
||||
private static final FriendsForeverAbility instance = new FriendsForeverAbility();
|
||||
|
||||
private Object readResolve() throws ObjectStreamException {
|
||||
return instance;
|
||||
}
|
||||
|
||||
public static FriendsForeverAbility getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private FriendsForeverAbility() {
|
||||
super(Zone.BATTLEFIELD, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Friends forever <i>(You can have two commanders if both have friends forever.)</i>";
|
||||
}
|
||||
|
||||
@Override
|
||||
public FriendsForeverAbility copy() {
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
|
|
@ -12,6 +12,7 @@ import java.util.stream.Collectors;
|
|||
*/
|
||||
public enum PartnerVariantType {
|
||||
FATHER_AND_SON("Father & son"),
|
||||
FRIENDS_FOREVER("Friends forever"),
|
||||
SURVIVORS("Survivors"),
|
||||
CHARACTER_SELECT("Character select");
|
||||
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
package mage.util.validation;
|
||||
|
||||
import mage.abilities.keyword.FriendsForeverAbility;
|
||||
import mage.cards.Card;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public enum FriendsForeverValidator implements CommanderValidator {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public boolean checkPartner(Card commander1, Card commander2) {
|
||||
return commander1.getAbilities().containsClass(FriendsForeverAbility.class);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue