diff --git a/Mage.Sets/src/mage/cards/a/AKillerAmongUs.java b/Mage.Sets/src/mage/cards/a/AKillerAmongUs.java index 9922e9ebc15..b11b7952303 100644 --- a/Mage.Sets/src/mage/cards/a/AKillerAmongUs.java +++ b/Mage.Sets/src/mage/cards/a/AKillerAmongUs.java @@ -191,7 +191,7 @@ class AKillerAmongUsEffect extends OneShotEffect { return false; } SubType creatureType = ChooseHumanMerfolkOrGoblinEffect.getSecretCreatureType(source, game); - if (creatureType != null && creature.getSubtype().contains(creatureType)) { + if (creatureType != null && creature.hasSubtype(creatureType, game)) { creature.addCounters(CounterType.P1P1.createInstance(3), source, game); game.addEffect(new GainAbilityTargetEffect( DeathtouchAbility.getInstance(), Duration.EndOfTurn diff --git a/Mage.Sets/src/mage/cards/a/AlaniaDivergentStorm.java b/Mage.Sets/src/mage/cards/a/AlaniaDivergentStorm.java index 9edcef7913c..25aaa3ed729 100644 --- a/Mage.Sets/src/mage/cards/a/AlaniaDivergentStorm.java +++ b/Mage.Sets/src/mage/cards/a/AlaniaDivergentStorm.java @@ -168,7 +168,7 @@ class AlaniaDivergentStormWatcher extends Watcher { if (spell.getCardType(game).contains(CardType.SORCERY)) { playerFirstSorceryCast.putIfAbsent(spellControllerID, spellMOR); } - if (spell.getSubtype(game).contains(SubType.OTTER)){ + if (spell.hasSubtype(SubType.OTTER, game)) { if (playerFirstOtterCast.containsKey(spellControllerID)) { // We already cast an otter this turn, put it on the second otter list playerSecondOtterCast.putIfAbsent(spellControllerID, spellMOR); diff --git a/Mage.Sets/src/mage/cards/b/BladegraftAspirant.java b/Mage.Sets/src/mage/cards/b/BladegraftAspirant.java index 0bbc3ff48e5..2517e1981b6 100644 --- a/Mage.Sets/src/mage/cards/b/BladegraftAspirant.java +++ b/Mage.Sets/src/mage/cards/b/BladegraftAspirant.java @@ -96,7 +96,7 @@ class BladegraftAspirantCostReductionEffect extends CostModificationEffectImpl { Permanent permanent = game.getPermanentOrLKIBattlefield(abilityToModify.getSourceId()); - if (!(permanent != null && permanent.getSubtype(game).contains(SubType.EQUIPMENT) && permanent.isControlledBy(source.getControllerId()))) { + if (!(permanent != null && permanent.hasSubtype(SubType.EQUIPMENT, game) && permanent.isControlledBy(source.getControllerId()))) { return false; } diff --git a/Mage.Sets/src/mage/cards/b/BloodlineShaman.java b/Mage.Sets/src/mage/cards/b/BloodlineShaman.java index 81c61082952..549aa1bb86d 100644 --- a/Mage.Sets/src/mage/cards/b/BloodlineShaman.java +++ b/Mage.Sets/src/mage/cards/b/BloodlineShaman.java @@ -89,7 +89,7 @@ class BloodlineShamanEffect extends OneShotEffect { if (card != null) { // If that card is a creature card of the chosen type, put it into your hand. - if (card.isCreature(game) && subType != null && card.getSubtype(game).contains(subType)) { + if (card.isCreature(game) && subType != null && card.hasSubtype(subType, game)) { controller.moveCards(card, Zone.HAND, source, game); // Otherwise, put it into your graveyard. } else { diff --git a/Mage.Sets/src/mage/cards/c/CircleOfSolace.java b/Mage.Sets/src/mage/cards/c/CircleOfSolace.java index 02513f84e0c..ff520c81ead 100644 --- a/Mage.Sets/src/mage/cards/c/CircleOfSolace.java +++ b/Mage.Sets/src/mage/cards/c/CircleOfSolace.java @@ -60,7 +60,7 @@ class CircleOfSolaceEffect extends PreventionEffectImpl { Permanent perm = game.getPermanent(event.getSourceId()); if (perm != null) { SubType subType = ChooseCreatureTypeEffect.getChosenCreatureType(source.getSourceId(), game); - return perm.getCardType().contains(CardType.CREATURE) && perm.getSubtype().contains(subType); + return perm.isCreature() && perm.hasSubtype(subType, game); } } } diff --git a/Mage.Sets/src/mage/cards/c/CodsworthHandyHelper.java b/Mage.Sets/src/mage/cards/c/CodsworthHandyHelper.java index e49386eff30..6ad04dd7aba 100644 --- a/Mage.Sets/src/mage/cards/c/CodsworthHandyHelper.java +++ b/Mage.Sets/src/mage/cards/c/CodsworthHandyHelper.java @@ -118,7 +118,7 @@ class CodsworthHandyHelperManaCondition implements Condition { if (source instanceof SpellAbility) { Card card = game.getCard(source.getSourceId()); return card != null && ( - card.getSubtype(game).contains(SubType.AURA) || card.getSubtype(game).contains(SubType.EQUIPMENT) + card.hasSubtype(SubType.AURA, game) || card.hasSubtype(SubType.EQUIPMENT, game) ); } return false; diff --git a/Mage.Sets/src/mage/cards/g/GeralfTheFleshwright.java b/Mage.Sets/src/mage/cards/g/GeralfTheFleshwright.java index c51a6f279e9..a9073c08a54 100644 --- a/Mage.Sets/src/mage/cards/g/GeralfTheFleshwright.java +++ b/Mage.Sets/src/mage/cards/g/GeralfTheFleshwright.java @@ -116,7 +116,7 @@ class GeralfTheFleshwrightWatcher extends Watcher { } Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId()); - if (permanent == null || !permanent.getSubtype().contains(SubType.ZOMBIE)) { + if (permanent == null || !permanent.hasSubtype(SubType.ZOMBIE, game)) { return; } diff --git a/Mage.Sets/src/mage/cards/j/JurassicPark.java b/Mage.Sets/src/mage/cards/j/JurassicPark.java index b2581a4bede..7024769e637 100644 --- a/Mage.Sets/src/mage/cards/j/JurassicPark.java +++ b/Mage.Sets/src/mage/cards/j/JurassicPark.java @@ -90,7 +90,7 @@ class JurassicParkEffect extends ContinuousEffectImpl { .stream() .filter(Objects::nonNull) .filter(card -> !card.getManaCost().getText().isEmpty()) // card must have a mana cost - .filter(card -> card.getSubtype().contains(SubType.DINOSAUR)) + .filter(card -> card.hasSubtype(SubType.DINOSAUR, game)) .forEach(card -> { Ability ability = new EscapeAbility(card, card.getManaCost().getText(), 3); ability.setSourceId(card.getId()); diff --git a/Mage.Sets/src/mage/cards/m/MotivatedPony.java b/Mage.Sets/src/mage/cards/m/MotivatedPony.java index 041329efe47..3c74d4df841 100644 --- a/Mage.Sets/src/mage/cards/m/MotivatedPony.java +++ b/Mage.Sets/src/mage/cards/m/MotivatedPony.java @@ -69,7 +69,7 @@ class MotivatedPonyWatcher extends Watcher { @Override public void watch(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD - && ((EntersTheBattlefieldEvent) event).getTarget().getSubtype(game).contains(SubType.FOOD)) { + && ((EntersTheBattlefieldEvent) event).getTarget().hasSubtype(SubType.FOOD, game)) { players.add(event.getPlayerId()); } } @@ -129,4 +129,4 @@ class MotivatedPonyEffect extends OneShotEffect { return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/p/ProgenitorsIcon.java b/Mage.Sets/src/mage/cards/p/ProgenitorsIcon.java index 2b74e7b4430..58711a9d2f8 100644 --- a/Mage.Sets/src/mage/cards/p/ProgenitorsIcon.java +++ b/Mage.Sets/src/mage/cards/p/ProgenitorsIcon.java @@ -91,11 +91,11 @@ class ProgenitorsIconAsThoughEffect extends AsThoughEffectImpl { return false; } Card card = game.getCard(sourceId); - if (card == null){ + if (card == null) { return false; } - return card.getSubtype().contains(subType); + return card.hasSubtype(subType, game); } } diff --git a/Mage.Sets/src/mage/cards/s/ShilgengarSireOfFamine.java b/Mage.Sets/src/mage/cards/s/ShilgengarSireOfFamine.java index 1059de8297a..6849c2ad15f 100644 --- a/Mage.Sets/src/mage/cards/s/ShilgengarSireOfFamine.java +++ b/Mage.Sets/src/mage/cards/s/ShilgengarSireOfFamine.java @@ -97,7 +97,7 @@ enum ShilgengarSireOfFamineCondition implements Condition { .castStream(source.getCosts().stream(), SacrificeTargetCost.class) .map(SacrificeTargetCost::getPermanents) .flatMap(Collection::stream) - .anyMatch(p -> p.getSubtype(game).contains(SubType.ANGEL)); + .anyMatch(p -> p.hasSubtype(SubType.ANGEL, game)); } @Override diff --git a/Mage.Sets/src/mage/cards/s/Spelunking.java b/Mage.Sets/src/mage/cards/s/Spelunking.java index 626206733ba..12cf3e1fe55 100644 --- a/Mage.Sets/src/mage/cards/s/Spelunking.java +++ b/Mage.Sets/src/mage/cards/s/Spelunking.java @@ -77,7 +77,7 @@ class SpelunkingEffect extends OneShotEffect { Card landInHand = game.getCard(target.getFirstTarget()); if (landInHand != null) { controller.moveCards(landInHand, Zone.BATTLEFIELD, source, game); - if (landInHand.getSubtype(game).contains(SubType.CAVE)) { + if (landInHand.hasSubtype(SubType.CAVE, game)) { // If you put a Cave onto the battlefield this way, you gain 4 life controller.gainLife(4, game, source); } diff --git a/Mage/src/main/java/mage/MageObject.java b/Mage/src/main/java/mage/MageObject.java index 660759e8ab5..4fdc1aa7fcd 100644 --- a/Mage/src/main/java/mage/MageObject.java +++ b/Mage/src/main/java/mage/MageObject.java @@ -77,16 +77,12 @@ public interface MageObject extends MageItem, Serializable, Copyable /** * Return original object's subtypes - * - * @return */ SubTypes getSubtype(); /** - * Return full subtypes list (from object, from effects) - * - * @param game - * @return + * Return full subtypes list (from object, from effects). + * Don't use this to check if an object has a subtype, use hasSubtype for that which accounts for changelings */ SubTypes getSubtype(Game game);