1
0
Fork 0
mirror of https://github.com/correl/mage.git synced 2025-04-02 03:18:09 -09:00

Implemented Escaped Shapeshifter

This commit is contained in:
Evan Kranzler 2019-10-03 18:12:28 -04:00
parent 55173733e6
commit 38c25eedb7
2 changed files with 101 additions and 0 deletions
Mage.Sets/src/mage

View file

@ -0,0 +1,100 @@
package mage.cards.e;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.ProtectionAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.StaticFilters;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import java.util.Collection;
import java.util.Objects;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class EscapedShapeshifter extends CardImpl {
public EscapedShapeshifter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}");
this.subtype.add(SubType.SHAPESHIFTER);
this.power = new MageInt(3);
this.toughness = new MageInt(4);
// As long as an opponent controls a creature with flying not named Escaped Shapeshifter, Escaped Shapeshifter has flying. The same is true for first strike, trample, and protection from any color.
this.addAbility(new SimpleStaticAbility(new EscapedShapeshifterEffect()));
}
private EscapedShapeshifter(final EscapedShapeshifter card) {
super(card);
}
@Override
public EscapedShapeshifter copy() {
return new EscapedShapeshifter(this);
}
}
class EscapedShapeshifterEffect extends ContinuousEffectImpl {
EscapedShapeshifterEffect() {
super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
this.addDependedToType(DependencyType.AddingAbility);
staticText = "As long as an opponent controls a creature with flying not named Escaped Shapeshifter, " +
"{this} has flying. The same is true for first strike, trample, and protection from any color.";
}
private EscapedShapeshifterEffect(final EscapedShapeshifterEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent sourcePermanent = game.getPermanent(source.getSourceId());
if (sourcePermanent == null) {
return false;
}
game.getBattlefield()
.getActivePermanents(
StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE,
source.getControllerId(), source.getSourceId(), game
).stream()
.filter(Objects::nonNull)
.filter(permanent -> permanent.getName() != "Escaped Shapeshifter")
.map(Permanent::getAbilities)
.flatMap(Collection::stream).filter(EscapedShapeshifterEffect::checkAbility)
.forEach(ability -> sourcePermanent.addAbility(ability, source.getSourceId(), game));
return true;
}
private static boolean checkAbility(Ability ability) {
if (ability instanceof FlyingAbility
|| ability instanceof FirstStrikeAbility
|| ability instanceof TrampleAbility) {
return true;
}
return ability instanceof ProtectionAbility
&& ((ProtectionAbility) ability)
.getFilter()
.getPredicates()
.stream()
.anyMatch(ColorPredicate.class::isInstance);
}
@Override
public EscapedShapeshifterEffect copy() {
return new EscapedShapeshifterEffect(this);
}
}

View file

@ -112,6 +112,7 @@ public final class Tempest extends ExpansionSet {
cards.add(new SetCardInfo("Energizer", 285, Rarity.RARE, mage.cards.e.Energizer.class));
cards.add(new SetCardInfo("Enfeeblement", 133, Rarity.COMMON, mage.cards.e.Enfeeblement.class));
cards.add(new SetCardInfo("Enraging Licid", 171, Rarity.UNCOMMON, mage.cards.e.EnragingLicid.class));
cards.add(new SetCardInfo("Escaped Shapeshifter", 62, Rarity.RARE, mage.cards.e.EscapedShapeshifter.class));
cards.add(new SetCardInfo("Essence Bottle", 286, Rarity.UNCOMMON, mage.cards.e.EssenceBottle.class));
cards.add(new SetCardInfo("Evincar's Justice", 134, Rarity.COMMON, mage.cards.e.EvincarsJustice.class));
cards.add(new SetCardInfo("Excavator", 287, Rarity.UNCOMMON, mage.cards.e.Excavator.class));