mirror of
https://github.com/magefree/mage.git
synced 2026-01-10 04:42:07 -08:00
Implemented Allosaurus Shepherd and Blessed Sanctuary (#6711)
* added allosaurus shepherd and blessed sanctuary * fixed nonascii apostrophes * added continuous effect dependency
This commit is contained in:
parent
785be83484
commit
40036271da
10 changed files with 264 additions and 24 deletions
68
Mage.Sets/src/mage/cards/a/AllosaurusShepherd.java
Normal file
68
Mage.Sets/src/mage/cards/a/AllosaurusShepherd.java
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
package mage.cards.a;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.CantBeCounteredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.CantBeCounteredControlledEffect;
|
||||
import mage.abilities.effects.common.continuous.CreaturesBecomeOtherTypeEffect;
|
||||
import mage.abilities.effects.common.continuous.SetPowerToughnessAllEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.FilterSpell;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class AllosaurusShepherd extends CardImpl {
|
||||
|
||||
private static final FilterSpell greenSpellsFilter = new FilterSpell("green spells");
|
||||
private static final FilterPermanent elvesFilter = new FilterControlledCreaturePermanent("each Elf creature you control");
|
||||
|
||||
static {
|
||||
greenSpellsFilter.add(new ColorPredicate(ObjectColor.GREEN));
|
||||
elvesFilter.add(SubType.ELF.getPredicate());
|
||||
}
|
||||
|
||||
public AllosaurusShepherd(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}");
|
||||
this.subtype.add(SubType.ELF);
|
||||
this.subtype.add(SubType.SHAMAN);
|
||||
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
//Allosaurus Shepherd can't be countered.
|
||||
this.addAbility(new CantBeCounteredAbility());
|
||||
|
||||
//Green spells you control can't be countered.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
|
||||
new CantBeCounteredControlledEffect(greenSpellsFilter, null, Duration.WhileOnBattlefield)));
|
||||
|
||||
//4GG: Until end of turn, each Elf creature you control has base power and toughness 5/5 and becomes a Dinosaur in addition to its other creature types.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||
new SetPowerToughnessAllEffect(5, 5, Duration.EndOfTurn, elvesFilter, true)
|
||||
.setText("Until end of turn, each Elf creature you control has base power and toughness 5/5"),
|
||||
new ManaCostsImpl("{4}{G}{G}"));
|
||||
ability.addEffect(new CreaturesBecomeOtherTypeEffect(elvesFilter, SubType.DINOSAUR, Duration.EndOfTurn)
|
||||
.setText("and becomes a Dinosaur in addition to its other creature types"));
|
||||
this.addAbility(ability);
|
||||
|
||||
}
|
||||
|
||||
public AllosaurusShepherd(final AllosaurusShepherd card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AllosaurusShepherd copy() {
|
||||
return new AllosaurusShepherd(this);
|
||||
}
|
||||
|
||||
}
|
||||
49
Mage.Sets/src/mage/cards/b/BlessedSanctuary.java
Normal file
49
Mage.Sets/src/mage/cards/b/BlessedSanctuary.java
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.PreventAllNonCombatDamageToAllEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.permanent.TokenPredicate;
|
||||
import mage.game.permanent.token.UnicornToken;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class BlessedSanctuary extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filterYourCreatures = new FilterControlledCreaturePermanent("creatures you control");
|
||||
private static final FilterControlledCreaturePermanent filterNontoken = new FilterControlledCreaturePermanent("nontoken creature");
|
||||
|
||||
static {
|
||||
filterNontoken.add(Predicates.not(TokenPredicate.instance));
|
||||
}
|
||||
|
||||
public BlessedSanctuary(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W}{W}");
|
||||
|
||||
//Prevent all noncombat damage that would be dealt to you and creatures you control.
|
||||
this.addAbility(new SimpleStaticAbility(new PreventAllNonCombatDamageToAllEffect(
|
||||
Duration.WhileOnBattlefield, filterYourCreatures, true)));
|
||||
|
||||
//Whenever a nontoken creature enters the battlefield under your control, create a 2/2 white Unicorn creature token.
|
||||
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
|
||||
new CreateTokenEffect(new UnicornToken()), filterNontoken, false));
|
||||
}
|
||||
|
||||
public BlessedSanctuary(final BlessedSanctuary card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlessedSanctuary copy() {
|
||||
return new BlessedSanctuary(this);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,13 +3,15 @@ package mage.cards.d;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.common.BecomesTargetTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.common.SacrificeSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.CreaturesBecomeOtherTypeEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
|
@ -20,13 +22,18 @@ import mage.game.permanent.Permanent;
|
|||
*/
|
||||
public final class DismissIntoDream extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Each creature your opponents control");
|
||||
static {
|
||||
filter.add(TargetController.OPPONENT.getControllerPredicate());
|
||||
}
|
||||
|
||||
public DismissIntoDream(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{6}{U}");
|
||||
|
||||
|
||||
// Each creature your opponents control is an Illusion in addition to its other types
|
||||
// and has "When this creature becomes the target of a spell or ability, sacrifice it."
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DismissIntoDreamEffect()));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DismissIntoDreamEffect(filter)));
|
||||
}
|
||||
|
||||
public DismissIntoDream(final DismissIntoDream card) {
|
||||
|
|
@ -39,16 +46,11 @@ public final class DismissIntoDream extends CardImpl {
|
|||
}
|
||||
}
|
||||
|
||||
class DismissIntoDreamEffect extends ContinuousEffectImpl {
|
||||
class DismissIntoDreamEffect extends CreaturesBecomeOtherTypeEffect {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent();
|
||||
static {
|
||||
filter.add(TargetController.OPPONENT.getControllerPredicate());
|
||||
}
|
||||
|
||||
DismissIntoDreamEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
||||
this.staticText = "Each creature your opponents control is an Illusion in addition to its other types and has \"When this creature becomes the target of a spell or ability, sacrifice it.\"";
|
||||
DismissIntoDreamEffect(FilterPermanent filter) {
|
||||
super(filter, SubType.ILLUSION, Duration.WhileOnBattlefield);
|
||||
this.outcome = Outcome.Detriment;
|
||||
}
|
||||
|
||||
DismissIntoDreamEffect(final DismissIntoDreamEffect effect) {
|
||||
|
|
@ -67,23 +69,24 @@ class DismissIntoDreamEffect extends ContinuousEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) {
|
||||
for (Permanent object: game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) {
|
||||
switch (layer) {
|
||||
case AbilityAddingRemovingEffects_6:
|
||||
object.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect()), source.getSourceId(), game);
|
||||
break;
|
||||
case TypeChangingEffects_4:
|
||||
if (!object.hasSubtype(SubType.ILLUSION, game)) {
|
||||
object.getSubtype(game).add(SubType.ILLUSION);
|
||||
}
|
||||
break;
|
||||
super.apply(layer, sublayer, source, game);
|
||||
|
||||
if (layer == Layer.AbilityAddingRemovingEffects_6) {
|
||||
for (Permanent object: game.getBattlefield().getActivePermanents(this.filter, source.getControllerId(), game)) {
|
||||
object.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect()), source.getSourceId(), game);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasLayer(Layer layer) {
|
||||
return layer == Layer.AbilityAddingRemovingEffects_6 || layer == Layer.TypeChangingEffects_4;
|
||||
return super.hasLayer(layer) || layer == Layer.AbilityAddingRemovingEffects_6;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
return super.getText(mode) + " and has \"When this creature becomes the target of a spell or ability, sacrifice it.\"";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ public final class Jumpstart extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Agonizing Syphon", 199, Rarity.COMMON, mage.cards.a.AgonizingSyphon.class));
|
||||
cards.add(new SetCardInfo("Ajani's Chosen", 82, Rarity.RARE, mage.cards.a.AjanisChosen.class));
|
||||
cards.add(new SetCardInfo("Alabaster Mage", 83, Rarity.UNCOMMON, mage.cards.a.AlabasterMage.class));
|
||||
cards.add(new SetCardInfo("Allosaurus Shepherd", 28, Rarity.MYTHIC, mage.cards.a.AllosaurusShepherd.class));
|
||||
cards.add(new SetCardInfo("Alloy Myr", 457, Rarity.COMMON, mage.cards.a.AlloyMyr.class));
|
||||
cards.add(new SetCardInfo("Ambassador Oak", 375, Rarity.COMMON, mage.cards.a.AmbassadorOak.class));
|
||||
cards.add(new SetCardInfo("Ancestral Statue", 458, Rarity.COMMON, mage.cards.a.AncestralStatue.class));
|
||||
|
|
@ -63,6 +64,7 @@ public final class Jumpstart extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Black Cat", 203, Rarity.COMMON, mage.cards.b.BlackCat.class));
|
||||
cards.add(new SetCardInfo("Black Market", 204, Rarity.RARE, mage.cards.b.BlackMarket.class));
|
||||
cards.add(new SetCardInfo("Blessed Spirits", 92, Rarity.UNCOMMON, mage.cards.b.BlessedSpirits.class));
|
||||
cards.add(new SetCardInfo("Blessed Sanctuary", 1, Rarity.RARE, mage.cards.b.BlessedSanctuary.class));
|
||||
cards.add(new SetCardInfo("Blighted Bat", 205, Rarity.COMMON, mage.cards.b.BlightedBat.class));
|
||||
cards.add(new SetCardInfo("Blindblast", 295, Rarity.COMMON, mage.cards.b.Blindblast.class));
|
||||
cards.add(new SetCardInfo("Blood Artist", 206, Rarity.UNCOMMON, mage.cards.b.BloodArtist.class));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue