diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java index 45036bc992..210ebd5f5c 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java @@ -48,8 +48,8 @@ import mage.filter.FilterMana; public class Commander extends DeckValidator { - protected List<String> banned = new ArrayList<String>(); - protected List<String> bannedCommander = new ArrayList<String>(); + protected List<String> banned = new ArrayList<>(); + protected List<String> bannedCommander = new ArrayList<>(); private static final String regexBlack = ".*\\x7b.{0,2}B.{0,2}\\x7d.*"; private static final String regexBlue = ".*\\x7b.{0,2}U.{0,2}\\x7d.*"; diff --git a/Mage.Sets/src/mage/sets/commander/PollenLullaby.java b/Mage.Sets/src/mage/sets/commander/PollenLullaby.java index 3d9726d980..63b19fe66e 100644 --- a/Mage.Sets/src/mage/sets/commander/PollenLullaby.java +++ b/Mage.Sets/src/mage/sets/commander/PollenLullaby.java @@ -28,10 +28,8 @@ package mage.sets.commander; import java.util.UUID; -import mage.MageObject; import mage.abilities.Ability; import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.ContinuousRuleModifiyingEffectImpl; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DoIfClashWonEffect; import mage.abilities.effects.common.PreventAllDamageByAllEffect; @@ -40,12 +38,9 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; -import mage.constants.PhaseStep; import mage.constants.Rarity; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.targetpointer.FixedTarget; diff --git a/Mage.Sets/src/mage/sets/darkascension/ClingingMists.java b/Mage.Sets/src/mage/sets/darkascension/ClingingMists.java index 9e904ebac8..6ecdedbf5c 100644 --- a/Mage.Sets/src/mage/sets/darkascension/ClingingMists.java +++ b/Mage.Sets/src/mage/sets/darkascension/ClingingMists.java @@ -45,6 +45,9 @@ import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import java.util.UUID; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.common.SkipNextUntapTargetEffect; +import mage.target.targetpointer.FixedTarget; /** * @@ -94,7 +97,9 @@ class ClingingMistsEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { for (Permanent creature: game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { creature.tap(game); - game.addEffect(new ClingingMistsEffect2(creature.getId()), source); + ContinuousEffect effect = new SkipNextUntapTargetEffect(); + effect.setTargetPointer(new FixedTarget(creature.getId())); + game.addEffect(effect, source); } return true; } @@ -105,45 +110,3 @@ class ClingingMistsEffect extends OneShotEffect { } } - -class ClingingMistsEffect2 extends ReplacementEffectImpl { - - protected UUID creatureId; - - public ClingingMistsEffect2(UUID creatureId) { - super(Duration.OneUse, Outcome.Detriment); - this.creatureId = creatureId; - } - - public ClingingMistsEffect2(final ClingingMistsEffect2 effect) { - super(effect); - creatureId = effect.creatureId; - } - - @Override - public ClingingMistsEffect2 copy() { - return new ClingingMistsEffect2(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - used = true; - return true; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if (game.getTurn().getStepType() == PhaseStep.UNTAP && - event.getType() == GameEvent.EventType.UNTAP && - event.getTargetId().equals(creatureId)) { - return true; - } - return false; - } - -} diff --git a/Mage.Sets/src/mage/sets/elspethvstezzeret/BlindingBeam.java b/Mage.Sets/src/mage/sets/elspethvstezzeret/BlindingBeam.java index fc1eabb4a4..5d68bbbe44 100644 --- a/Mage.Sets/src/mage/sets/elspethvstezzeret/BlindingBeam.java +++ b/Mage.Sets/src/mage/sets/elspethvstezzeret/BlindingBeam.java @@ -30,8 +30,8 @@ package mage.sets.elspethvstezzeret; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.Mode; +import mage.abilities.effects.ContinuousRuleModifiyingEffectImpl; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.ReplacementEffectImpl; import mage.abilities.effects.common.TapTargetEffect; import mage.abilities.keyword.EntwineAbility; import mage.cards.CardImpl; @@ -102,7 +102,7 @@ class BlindingBeamEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); - if (player != null) { + if (player != null) { game.addEffect(new BlindingBeamEffect2(player.getId()), source); return true; } @@ -116,11 +116,11 @@ class BlindingBeamEffect extends OneShotEffect { } -class BlindingBeamEffect2 extends ReplacementEffectImpl { +class BlindingBeamEffect2 extends ContinuousRuleModifiyingEffectImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); - private UUID targetPlayerId; + private final UUID targetPlayerId; public BlindingBeamEffect2(UUID targetPlayerId) { super(Duration.Custom, Outcome.Detriment); @@ -142,15 +142,10 @@ class BlindingBeamEffect2 extends ReplacementEffectImpl { return false; } - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - return true; - } - @Override public boolean isInactive(Ability source, Game game) { - if (game.getPhase().getStep().getType() == PhaseStep.UNTAP && game.getStep().getStepPart() == Step.StepPart.PRE) - { + // the PRE step part is directly after the UNTAP events for permanents + if (game.getPhase().getStep().getType() == PhaseStep.UNTAP && game.getStep().getStepPart() == Step.StepPart.PRE) { if (game.getActivePlayerId().equals(targetPlayerId) || game.getPlayer(source.getControllerId()).hasReachedNextTurnAfterLeaving()) { return true; } @@ -160,8 +155,8 @@ class BlindingBeamEffect2 extends ReplacementEffectImpl { @Override public boolean applies(GameEvent event, Ability source, Game game) { - // replace untap event of creatures of target player - if (game.getTurn().getStepType() == PhaseStep.UNTAP && event.getType() == EventType.UNTAP) { + // prevent untap event of creatures of target player + if (game.getTurn().getStepType().equals(PhaseStep.UNTAP) && event.getType().equals(EventType.UNTAP)) { Permanent permanent = game.getPermanent(event.getTargetId()); if (permanent != null && permanent.getControllerId().equals(targetPlayerId) && filter.match(permanent, game)) { return true; diff --git a/Mage.Sets/src/mage/sets/magic2010/Sleep.java b/Mage.Sets/src/mage/sets/magic2010/Sleep.java index 30138fe893..793cb1cbb1 100644 --- a/Mage.Sets/src/mage/sets/magic2010/Sleep.java +++ b/Mage.Sets/src/mage/sets/magic2010/Sleep.java @@ -30,21 +30,19 @@ package mage.sets.magic2010; import java.util.UUID; import mage.constants.CardType; -import mage.constants.Duration; import mage.constants.Outcome; -import mage.constants.PhaseStep; import mage.constants.Rarity; import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.effects.common.SkipNextUntapTargetEffect; import mage.cards.CardImpl; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetPlayer; +import mage.target.targetpointer.FixedTarget; /** * @@ -87,7 +85,9 @@ class SleepEffect extends OneShotEffect { if (player != null) { for (Permanent creature: game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), player.getId(), game)) { creature.tap(game); - game.addEffect(new SleepEffect2(creature.getId()), source); + ContinuousEffect effect = new SkipNextUntapTargetEffect(); + effect.setTargetPointer(new FixedTarget(creature.getId())); + game.addEffect(effect, source); } return true; } @@ -100,45 +100,3 @@ class SleepEffect extends OneShotEffect { } } - -class SleepEffect2 extends ReplacementEffectImpl { - - protected UUID creatureId; - - public SleepEffect2(UUID creatureId) { - super(Duration.OneUse, Outcome.Detriment); - this.creatureId = creatureId; - } - - public SleepEffect2(final SleepEffect2 effect) { - super(effect); - creatureId = effect.creatureId; - } - - @Override - public SleepEffect2 copy() { - return new SleepEffect2(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - used = true; - return true; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if (game.getTurn().getStepType() == PhaseStep.UNTAP && - event.getType() == EventType.UNTAP && - event.getTargetId().equals(creatureId)) { - return true; - } - return false; - } - -} diff --git a/Mage.Sets/src/mage/sets/portalthreekingdoms/Exhaustion.java b/Mage.Sets/src/mage/sets/portalthreekingdoms/Exhaustion.java index 4697f8c1ee..883faeeeec 100644 --- a/Mage.Sets/src/mage/sets/portalthreekingdoms/Exhaustion.java +++ b/Mage.Sets/src/mage/sets/portalthreekingdoms/Exhaustion.java @@ -29,22 +29,21 @@ package mage.sets.portalthreekingdoms; import java.util.UUID; import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.effects.common.SkipNextUntapTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; -import mage.constants.Duration; import mage.constants.Outcome; -import mage.constants.PhaseStep; import mage.constants.Rarity; import mage.filter.FilterPermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; import mage.game.Game; -import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetOpponent; +import mage.target.targetpointer.FixedTarget; /** * @@ -100,49 +99,12 @@ class ExhaustionEffect extends OneShotEffect { Player player = game.getPlayer(source.getFirstTarget()); if (player != null) { for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, player.getId(), game)) { - game.addEffect(new ExhaustionReplacementEffect(permanent.getId()), source); + ContinuousEffect effect = new SkipNextUntapTargetEffect(); + effect.setTargetPointer(new FixedTarget(permanent.getId())); + game.addEffect(effect, source); } return true; } return false; } } - -class ExhaustionReplacementEffect extends ReplacementEffectImpl { - - protected UUID permanentId; - - ExhaustionReplacementEffect(UUID permanentId) { - super(Duration.OneUse, Outcome.Detriment); - this.permanentId = permanentId; - } - - ExhaustionReplacementEffect(final ExhaustionReplacementEffect effect) { - super(effect); - permanentId = effect.permanentId; - } - - @Override - public ExhaustionReplacementEffect copy() { - return new ExhaustionReplacementEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - used = true; - return true; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - return game.getTurn().getStepType() == PhaseStep.UNTAP && - event.getType() == GameEvent.EventType.UNTAP && - event.getTargetId().equals(permanentId); - } - -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/worldwake/PermafrostTrap.java b/Mage.Sets/src/mage/sets/worldwake/PermafrostTrap.java index 3fde1e339c..14f43ce4b2 100644 --- a/Mage.Sets/src/mage/sets/worldwake/PermafrostTrap.java +++ b/Mage.Sets/src/mage/sets/worldwake/PermafrostTrap.java @@ -35,9 +35,7 @@ import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.costs.AlternativeCostImpl; import mage.abilities.costs.mana.ColoredManaCost; -import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.ReplacementEffectImpl; import mage.abilities.effects.common.SkipNextUntapTargetEffect; import mage.cards.CardImpl; import mage.constants.*; diff --git a/Mage/src/mage/abilities/effects/common/SkipNextUntapTargetEffect.java b/Mage/src/mage/abilities/effects/common/SkipNextUntapTargetEffect.java index 7d29dc5452..736bf72ed3 100644 --- a/Mage/src/mage/abilities/effects/common/SkipNextUntapTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/SkipNextUntapTargetEffect.java @@ -89,8 +89,8 @@ public class SkipNextUntapTargetEffect extends ContinuousRuleModifiyingEffectImp @Override public boolean applies(GameEvent event, Ability source, Game game) { - // the check for turn number is needed if multiple effects are added to prevent untap in next untap step - // if we don't check for turn number, every turn only one effect would be used instead of correctly only one time + // the check for turn number is needed if multiple effects are added to prevent untap in next untap step of controller + // if we don't check for turn number, every untap step of a turn only one effect would be used instead of correctly only one time // to skip the untap effect. // Discard effect if related to previous turn