diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java index b28fa87f45f..3c08e0d3180 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java @@ -27,7 +27,6 @@ */ package mage.abilities.effects.common.continuous; -import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.effects.ContinuousEffectImpl; import mage.cards.repository.CardRepository; @@ -77,105 +76,86 @@ public class BecomesCreatureAttachedEffect extends ContinuousEffectImpl { return new BecomesCreatureAttachedEffect(this); } - @Override - public void init(Ability source, Game game) { - super.init(source, game); - Permanent attachedPermanent = game.getPermanent(source.getSourceId()); - if (attachedPermanent != null) { - Permanent permanentAttachedTo = game.getPermanent(attachedPermanent.getAttachedTo()); - if (permanentAttachedTo != null) { - affectedObjectList.add(new MageObjectReference(permanentAttachedTo, game)); - } - } - } - @Override public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - boolean attachedExists = false; Permanent enchantment = game.getPermanent(source.getSourceId()); if (enchantment != null) { - for (MageObjectReference mageObjectReference : affectedObjectList) { - Permanent permanentAttachedTo = mageObjectReference.getPermanent(game); - if (permanentAttachedTo != null) { - attachedExists = true; - switch (layer) { - case TypeChangingEffects_4: - if (sublayer == SubLayer.NA) { - for (String superType : token.getSupertype()) { - if (!permanentAttachedTo.getSupertype().contains(superType)) { - permanentAttachedTo.getSupertype().add(superType); - } - } - // card type - switch (loseType) { - case ALL: - case ALL_BUT_COLOR: - permanentAttachedTo.getCardType().clear(); - break; - } - for (CardType cardType : token.getCardType()) { - permanentAttachedTo.getCardType().add(cardType); + Permanent permanent = game.getPermanent(enchantment.getAttachedTo()); + if (permanent != null) { + switch (layer) { + case TypeChangingEffects_4: + if (sublayer == SubLayer.NA) { + for (String t : token.getSupertype()) { + if (!permanent.getSupertype().contains(t)) { + permanent.getSupertype().add(t); } + } + // card type + switch (loseType) { + case ALL: + case ALL_BUT_COLOR: + permanent.getCardType().clear(); + break; + } + for (CardType t : token.getCardType()) { + permanent.getCardType().add(t); + } - // sub type - switch (loseType) { - case ALL: - case ALL_BUT_COLOR: - case ABILITIES_SUBTYPE_AND_PT: - permanentAttachedTo.getSubtype(game).retainAll(CardRepository.instance.getLandTypes()); - break; - } - for (String subType : token.getSubtype(game)) { - if (!permanentAttachedTo.getSubtype(game).contains(subType)) { - permanentAttachedTo.getSubtype(game).add(subType); - } + // sub type + switch (loseType) { + case ALL: + case ALL_BUT_COLOR: + case ABILITIES_SUBTYPE_AND_PT: + permanent.getSubtype(game).retainAll(CardRepository.instance.getLandTypes()); + break; + } + for (String t : token.getSubtype(game)) { + if (!permanent.getSubtype(game).contains(t)) { + permanent.getSubtype(game).add(t); } + } + } + break; + case ColorChangingEffects_5: + if (sublayer == SubLayer.NA) { + if (loseType == LoseType.ALL) { + permanent.getColor(game).setBlack(false); + permanent.getColor(game).setGreen(false); + permanent.getColor(game).setBlue(false); + permanent.getColor(game).setWhite(false); + permanent.getColor(game).setRed(false); } - break; - case ColorChangingEffects_5: - if (sublayer == SubLayer.NA) { - if (loseType == LoseType.ALL) { - permanentAttachedTo.getColor(game).setBlack(false); - permanentAttachedTo.getColor(game).setGreen(false); - permanentAttachedTo.getColor(game).setBlue(false); - permanentAttachedTo.getColor(game).setWhite(false); - permanentAttachedTo.getColor(game).setRed(false); - } - if (token.getColor(game).hasColor()) { - permanentAttachedTo.getColor(game).setColor(token.getColor(game)); - } + if (token.getColor(game).hasColor()) { + permanent.getColor(game).setColor(token.getColor(game)); + } + } + break; + case AbilityAddingRemovingEffects_6: + if (sublayer == SubLayer.NA) { + switch (loseType) { + case ALL: + case ALL_BUT_COLOR: + case ABILITIES: + case ABILITIES_SUBTYPE_AND_PT: + permanent.removeAllAbilities(source.getSourceId(), game); + break; + } + for (Ability ability : token.getAbilities()) { + permanent.addAbility(ability, source.getSourceId(), game); } - break; - case AbilityAddingRemovingEffects_6: - if (sublayer == SubLayer.NA) { - switch (loseType) { - case ALL: - case ALL_BUT_COLOR: - case ABILITIES: - case ABILITIES_SUBTYPE_AND_PT: - permanentAttachedTo.removeAllAbilities(source.getSourceId(), game); - break; - } - for (Ability ability : token.getAbilities()) { - permanentAttachedTo.addAbility(ability, source.getSourceId(), game); - } - } + } + break; + case PTChangingEffects_7: + if (sublayer == SubLayer.SetPT_7b) { + permanent.getPower().setValue(token.getPower().getValue()); + permanent.getToughness().setValue(token.getToughness().getValue()); break; - case PTChangingEffects_7: - if (sublayer == SubLayer.SetPT_7b) { - permanentAttachedTo.getPower().setValue(token.getPower().getValue()); - permanentAttachedTo.getToughness().setValue(token.getToughness().getValue()); - break; - } - } + } } - if (!attachedExists) { - discard(); - } - return true; } + return true; } return false; } @@ -187,9 +167,9 @@ public class BecomesCreatureAttachedEffect extends ContinuousEffectImpl { @Override public boolean hasLayer(Layer layer) { - return layer == Layer.PTChangingEffects_7 - || layer == Layer.AbilityAddingRemovingEffects_6 - || layer == Layer.ColorChangingEffects_5 + return layer == Layer.PTChangingEffects_7 + || layer == Layer.AbilityAddingRemovingEffects_6 + || layer == Layer.ColorChangingEffects_5 || layer == Layer.TypeChangingEffects_4; }