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:
parent
55173733e6
commit
38c25eedb7
2 changed files with 101 additions and 0 deletions
Mage.Sets/src/mage
100
Mage.Sets/src/mage/cards/e/EscapedShapeshifter.java
Normal file
100
Mage.Sets/src/mage/cards/e/EscapedShapeshifter.java
Normal 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);
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
|
|
Loading…
Add table
Reference in a new issue