diff --git a/Mage.Sets/src/mage/cards/s/Soulflayer.java b/Mage.Sets/src/mage/cards/s/Soulflayer.java index 62a492f3576..2195981e797 100644 --- a/Mage.Sets/src/mage/cards/s/Soulflayer.java +++ b/Mage.Sets/src/mage/cards/s/Soulflayer.java @@ -1,44 +1,26 @@ - package mage.cards.s; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; import mage.MageInt; import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.common.continuous.SourceEffect; -import mage.abilities.keyword.DeathtouchAbility; -import mage.abilities.keyword.DelveAbility; -import mage.abilities.keyword.DoubleStrikeAbility; -import mage.abilities.keyword.FirstStrikeAbility; -import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.HasteAbility; -import mage.abilities.keyword.HexproofAbility; -import mage.abilities.keyword.IndestructibleAbility; -import mage.abilities.keyword.LifelinkAbility; -import mage.abilities.keyword.ReachAbility; -import mage.abilities.keyword.TrampleAbility; -import mage.abilities.keyword.VigilanceAbility; +import mage.abilities.keyword.*; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.cards.Cards; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.constants.Zone; +import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; import mage.util.CardUtil; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class Soulflayer extends CardImpl { @@ -82,7 +64,9 @@ class SoulflayerEffect extends ContinuousEffectImpl implements SourceEffect { super(effect); if (effect.abilitiesToAdd != null) { this.abilitiesToAdd = new HashSet<>(); - this.abilitiesToAdd.addAll(effect.abilitiesToAdd); + for (Ability a : effect.abilitiesToAdd) { + this.abilitiesToAdd.add(a.copy()); + } } this.objectReference = effect.objectReference; } @@ -96,6 +80,7 @@ class SoulflayerEffect extends ContinuousEffectImpl implements SourceEffect { public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { + // one time abilities collect if (objectReference == null || !objectReference.refersTo(permanent, game)) { abilitiesToAdd = new HashSet<>(); this.objectReference = new MageObjectReference(permanent, game); @@ -144,6 +129,8 @@ class SoulflayerEffect extends ContinuousEffectImpl implements SourceEffect { } } } + + // all time abilities apply for (Ability ability : abilitiesToAdd) { permanent.addAbility(ability, source.getSourceId(), game); } diff --git a/Mage/src/main/java/mage/abilities/abilityword/KinshipAbility.java b/Mage/src/main/java/mage/abilities/abilityword/KinshipAbility.java index f6b952bbfb5..6c28ca572f9 100644 --- a/Mage/src/main/java/mage/abilities/abilityword/KinshipAbility.java +++ b/Mage/src/main/java/mage/abilities/abilityword/KinshipAbility.java @@ -1,5 +1,3 @@ - - package mage.abilities.abilityword; import mage.abilities.Ability; @@ -21,28 +19,27 @@ import mage.players.Player; import mage.target.targetpointer.FixedTarget; /** - * * @author LevelX2 */ public class KinshipAbility extends TriggeredAbilityImpl { - + public KinshipAbility(Effect kinshipEffect) { - super(Zone.BATTLEFIELD, new KinshipBaseEffect(kinshipEffect), true); + super(Zone.BATTLEFIELD, new KinshipBaseEffect(kinshipEffect), true); } - + public KinshipAbility(final KinshipAbility ability) { - super(ability); + super(ability); } public void addKinshipEffect(Effect kinshipEffect) { - for (Effect effect: this.getEffects()) { + for (Effect effect : this.getEffects()) { if (effect instanceof KinshipBaseEffect) { - ((KinshipBaseEffect) effect).addEffect(kinshipEffect); - break; + ((KinshipBaseEffect) effect).addEffect(kinshipEffect); + break; } - } + } } - + @Override public KinshipAbility copy() { return new KinshipAbility(this); @@ -62,33 +59,33 @@ public class KinshipAbility extends TriggeredAbilityImpl { public String getRule() { return new StringBuilder("Kinship — At the beginning of your upkeep, ").append(super.getRule()).toString(); } - + } class KinshipBaseEffect extends OneShotEffect { - + private final Effects kinshipEffects = new Effects(); - + public KinshipBaseEffect(Effect kinshipEffect) { super(kinshipEffect.getOutcome()); this.kinshipEffects.add(kinshipEffect); this.staticText = "you may look at the top card of your library. If it shares a creature type with {this}, you may reveal it. If you do, "; } - + public KinshipBaseEffect(final KinshipBaseEffect effect) { super(effect); - this.kinshipEffects.addAll(effect.kinshipEffects); + this.kinshipEffects.addAll(effect.kinshipEffects.copy()); } - + public void addEffect(Effect kinshipEffect) { this.kinshipEffects.add(kinshipEffect); } - + @Override public KinshipBaseEffect copy() { return new KinshipBaseEffect(this); } - + @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); @@ -100,22 +97,22 @@ class KinshipBaseEffect extends OneShotEffect { Cards cards = new CardsImpl(card); controller.lookAtCards(sourcePermanent.getName(), cards, game); if (sourcePermanent.shareSubtypes(card, game)) { - if (controller.chooseUse(outcome,new StringBuilder("Kinship - Reveal ").append(card.getLogName()).append('?').toString(), source, game)) { + if (controller.chooseUse(outcome, new StringBuilder("Kinship - Reveal ").append(card.getLogName()).append('?').toString(), source, game)) { controller.revealCards(sourcePermanent.getName(), cards, game); - for (Effect effect: kinshipEffects) { + for (Effect effect : kinshipEffects) { effect.setTargetPointer(new FixedTarget(card.getId())); if (effect.getEffectType() == EffectType.ONESHOT) { effect.apply(game, source); } else { if (effect instanceof ContinuousEffect) { - game.addEffect((ContinuousEffect)effect, source); + game.addEffect((ContinuousEffect) effect, source); } else { throw new UnsupportedOperationException("This kind of effect is not supported"); } } - } + } } - } + } } } return true; @@ -125,7 +122,7 @@ class KinshipBaseEffect extends OneShotEffect { @Override public String getText(Mode mode) { - return new StringBuilder(super.getText(mode)).append(kinshipEffects.getText(mode)).toString(); + return new StringBuilder(super.getText(mode)).append(kinshipEffects.getText(mode)).toString(); } - + }