diff --git a/Mage.Sets/src/mage/cards/d/DrJuliusJumblemorph.java b/Mage.Sets/src/mage/cards/d/DrJuliusJumblemorph.java
index 91aeeab5fc..ad413e81a6 100644
--- a/Mage.Sets/src/mage/cards/d/DrJuliusJumblemorph.java
+++ b/Mage.Sets/src/mage/cards/d/DrJuliusJumblemorph.java
@@ -2,15 +2,13 @@ package mage.cards.d;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
-import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.InfoEffect;
-import mage.abilities.effects.common.continuous.IsAllCreatureTypesSourceEffect;
+import mage.abilities.keyword.ChangelingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SuperType;
-import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.ConvertedManaCostPredicate;
@@ -34,7 +32,7 @@ public final class DrJuliusJumblemorph extends CardImpl {
this.toughness = new MageInt(4);
// Dr. Julius Jumblemorph is every creature type (even if this card isn't on the battlefield).
- this.addAbility(new SimpleStaticAbility(Zone.ALL, new IsAllCreatureTypesSourceEffect()));
+ this.addAbility(new ChangelingAbility(false));
// Whenever a host enters the battlefield under your control, you may search your library and/or graveyard for a card with augment and combine it with that host. If you search your library this way, shuffle it.
// TODO: Host currently isn't implemented, so this ability currently would never trigger
diff --git a/Mage.Sets/src/mage/cards/k/KaheeraTheOrphanguard.java b/Mage.Sets/src/mage/cards/k/KaheeraTheOrphanguard.java
index 08e50fa704..5220c04e96 100644
--- a/Mage.Sets/src/mage/cards/k/KaheeraTheOrphanguard.java
+++ b/Mage.Sets/src/mage/cards/k/KaheeraTheOrphanguard.java
@@ -93,7 +93,7 @@ enum KaheeraTheOrphanguardCompanionCondition implements CompanionCondition {
);
private static boolean checkTypes(Card card) {
- return subtypes.stream().anyMatch(subtype -> card.getSubtype().contains(subtype));
+ return subtypes.stream().anyMatch(subtype -> card.hasSubtype(subtype, null));
}
@Override
diff --git a/Mage.Sets/src/mage/cards/m/MistformUltimus.java b/Mage.Sets/src/mage/cards/m/MistformUltimus.java
index 11090369dd..d4e8c44122 100644
--- a/Mage.Sets/src/mage/cards/m/MistformUltimus.java
+++ b/Mage.Sets/src/mage/cards/m/MistformUltimus.java
@@ -1,14 +1,12 @@
package mage.cards.m;
import mage.MageInt;
-import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.effects.common.continuous.IsAllCreatureTypesSourceEffect;
+import mage.abilities.keyword.ChangelingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
-import mage.constants.Zone;
import java.util.UUID;
@@ -26,7 +24,7 @@ public final class MistformUltimus extends CardImpl {
this.toughness = new MageInt(3);
// Mistform Ultimus is every creature type.
- this.addAbility(new SimpleStaticAbility(Zone.ALL, new IsAllCreatureTypesSourceEffect()));
+ this.addAbility(new ChangelingAbility(false));
}
private MistformUltimus(final MistformUltimus card) {
diff --git a/Mage/src/main/java/mage/MageObjectImpl.java b/Mage/src/main/java/mage/MageObjectImpl.java
index 0e77ca1074..4673d1f160 100644
--- a/Mage/src/main/java/mage/MageObjectImpl.java
+++ b/Mage/src/main/java/mage/MageObjectImpl.java
@@ -9,6 +9,7 @@ import mage.abilities.costs.mana.ManaCosts;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.Effect;
+import mage.abilities.keyword.ChangelingAbility;
import mage.abilities.mana.ActivatedManaAbilityImpl;
import mage.abilities.text.TextPart;
import mage.abilities.text.TextPartSubType;
@@ -291,6 +292,9 @@ public abstract class MageObjectImpl implements MageObject {
@Override
public boolean isAllCreatureTypes(Game game) {
+ if (game == null) {
+ return this.getAbilities().containsClass(ChangelingAbility.class);
+ }
return this.getSubtype(game).isAllCreatureTypes();
}
diff --git a/Mage/src/main/java/mage/abilities/keyword/ChangelingAbility.java b/Mage/src/main/java/mage/abilities/keyword/ChangelingAbility.java
index 2be76663b5..e83311c586 100644
--- a/Mage/src/main/java/mage/abilities/keyword/ChangelingAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/ChangelingAbility.java
@@ -4,7 +4,6 @@ import mage.abilities.StaticAbility;
import mage.abilities.effects.common.continuous.IsAllCreatureTypesSourceEffect;
import mage.constants.Zone;
-
/**
* October 1, 2012
* 702.71. Changeling
@@ -16,17 +15,25 @@ import mage.constants.Zone;
*/
public class ChangelingAbility extends StaticAbility {
+ private final boolean changelingText;
+
public ChangelingAbility() {
+ this(true);
+ }
+
+ public ChangelingAbility(boolean changelingText) {
super(Zone.ALL, new IsAllCreatureTypesSourceEffect());
+ this.changelingText = changelingText;
}
private ChangelingAbility(final ChangelingAbility ability) {
super(ability);
+ this.changelingText = ability.changelingText;
}
@Override
public String getRule() {
- return "Changeling (This card is every creature type.)";
+ return changelingText ? "Changeling (This card is every creature type.)" : super.getRule();
}
@Override