From 1f7a7a10b0d177e236a7d47eaba599112aed93d6 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 11 Jan 2020 01:25:26 +0100 Subject: [PATCH] * Panopticon Plane - Fixed draw card abilities. --- .../java/mage/server/util/SystemUtil.java | 48 +++++++++++++------ .../BeginningOfDrawTriggeredAbility.java | 4 +- .../effects/common/RollPlanarDieEffect.java | 4 +- .../java/mage/constants/PlanarDieRoll.java | 6 +-- .../game/command/planes/PanopticonPlane.java | 12 +++-- 5 files changed, 47 insertions(+), 27 deletions(-) diff --git a/Mage.Server/src/main/java/mage/server/util/SystemUtil.java b/Mage.Server/src/main/java/mage/server/util/SystemUtil.java index 16789e46e6..73ecbb7b1b 100644 --- a/Mage.Server/src/main/java/mage/server/util/SystemUtil.java +++ b/Mage.Server/src/main/java/mage/server/util/SystemUtil.java @@ -1,6 +1,17 @@ package mage.server.util; +import java.io.File; +import java.lang.reflect.Constructor; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.Effect; import mage.cards.Card; import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; @@ -13,20 +24,12 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.game.Game; import mage.game.GameCommanderImpl; +import mage.game.command.CommandObject; +import mage.game.command.Plane; import mage.game.permanent.Permanent; import mage.players.Player; import mage.util.RandomUtil; -import java.io.File; -import java.lang.reflect.Constructor; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - /** * @author JayDi85 */ @@ -233,8 +236,8 @@ public final class SystemUtil { *
* Implementation note:
* 1. Read init.txt line by line
- * 2. Parse line using for searching groups like: [group 1] - * 3. Parse line using the following format: line ::= + * 2. Parse line using for searching groups like: [group 1] 3. Parse line + * using the following format: line ::= * :::
* 4. If zone equals to 'hand', add card to player's library
* 5a. Then swap added card with any card in player's hand
@@ -432,6 +435,23 @@ public final class SystemUtil { } } else if ("plane".equalsIgnoreCase(command.zone)) { // eg: plane:Human:BantPlane:1 + // Steps: 1) Remove the last plane and set its effects to discarded + for (CommandObject cobject : game.getState().getCommand()) { + if (cobject instanceof Plane) { + if (((Plane) cobject).getAbilities() != null) { + for (Ability ability : ((Plane) cobject).getAbilities()) { + for (Effect effect : ability.getEffects()) { + if (effect instanceof ContinuousEffect) { + ((ContinuousEffect) effect).discard(); + } + } + } + } + game.getState().removeTriggersOfSourceId(((Plane) cobject).getId()); + game.getState().getCommand().remove(cobject); + break; + } + } Class c = Class.forName("mage.game.command.planes." + command.cardName); Constructor cons = c.getConstructor(); Object plane = cons.newInstance(); @@ -609,8 +629,8 @@ public final class SystemUtil { /** * Get a diff between two dates * - * @param date1 the oldest date - * @param date2 the newest date + * @param date1 the oldest date + * @param date2 the newest date * @param timeUnit the unit in which you want the diff * @return the diff value, in the provided unit */ diff --git a/Mage/src/main/java/mage/abilities/common/BeginningOfDrawTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BeginningOfDrawTriggeredAbility.java index bb91497e55..b67b95b6f4 100644 --- a/Mage/src/main/java/mage/abilities/common/BeginningOfDrawTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/BeginningOfDrawTriggeredAbility.java @@ -1,4 +1,3 @@ - package mage.abilities.common; import mage.abilities.TriggeredAbilityImpl; @@ -86,6 +85,7 @@ public class BeginningOfDrawTriggeredAbility extends TriggeredAbilityImpl { } break; case ANY: + case ACTIVE: if (getTargets().isEmpty()) { this.getEffects().setTargetPointer(new FixedTarget(event.getPlayerId())); } @@ -97,6 +97,8 @@ public class BeginningOfDrawTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { switch (targetController) { + case ACTIVE: + return "At the beginning of your draw step, " + generateZoneString() + getEffects().getText(modes.getMode()); case YOU: return "At the beginning of your draw step, " + generateZoneString() + getEffects().getText(modes.getMode()); case OPPONENT: diff --git a/Mage/src/main/java/mage/abilities/effects/common/RollPlanarDieEffect.java b/Mage/src/main/java/mage/abilities/effects/common/RollPlanarDieEffect.java index 8defc46d6b..f6452f7d54 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/RollPlanarDieEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/RollPlanarDieEffect.java @@ -1,4 +1,3 @@ - package mage.abilities.effects.common; import java.util.List; @@ -102,7 +101,6 @@ public class RollPlanarDieEffect extends OneShotEffect { // Steps: 1) Remove the last plane and set its effects to discarded for (CommandObject cobject : game.getState().getCommand()) { if (cobject instanceof Plane) { - game.getState().addSeenPlane((Plane) cobject, game, id); if (((Plane) cobject).getAbilities() != null) { for (Ability ability : ((Plane) cobject).getAbilities()) { for (Effect effect : ability.getEffects()) { @@ -153,7 +151,7 @@ public class RollPlanarDieEffect extends OneShotEffect { for (int i = 0; i < chaosEffects.size(); i++) { Effect effect = chaosEffects.get(i); if (effect != null) { - try { + try { String emode = effect.getText(mode); emode = emode.substring(0, 1).toLowerCase() + emode.substring(1); sb.append(emode); diff --git a/Mage/src/main/java/mage/constants/PlanarDieRoll.java b/Mage/src/main/java/mage/constants/PlanarDieRoll.java index 344a67b593..db3ecfa274 100644 --- a/Mage/src/main/java/mage/constants/PlanarDieRoll.java +++ b/Mage/src/main/java/mage/constants/PlanarDieRoll.java @@ -1,15 +1,13 @@ - package mage.constants; /** * * @author spjspj */ - public enum PlanarDieRoll { - NIL_ROLL ("Nil Roll"), + NIL_ROLL("Blank Roll"), CHAOS_ROLL("Chaos Roll"), - PLANAR_ROLL ("Planar Roll"); + PLANAR_ROLL("Planar Roll"); private final String text; diff --git a/Mage/src/main/java/mage/game/command/planes/PanopticonPlane.java b/Mage/src/main/java/mage/game/command/planes/PanopticonPlane.java index 6fbb481414..3f2123ecfb 100644 --- a/Mage/src/main/java/mage/game/command/planes/PanopticonPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/PanopticonPlane.java @@ -1,4 +1,3 @@ - package mage.game.command.planes; import java.util.ArrayList; @@ -22,6 +21,7 @@ import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; import mage.players.Player; import mage.target.Target; +import mage.target.targetpointer.FixedTarget; import mage.watchers.common.PlanarRollWatcher; /** @@ -36,12 +36,14 @@ public class PanopticonPlane extends Plane { this.setName("Plane - Panopticon"); this.setExpansionSetCodeForImage("PCA"); - // At the beginning of your draw step, draw an additional card. - Ability ability = new BeginningOfDrawTriggeredAbility(new DrawCardTargetEffect(1), TargetController.ANY, false); - this.getAbilities().add(ability); + // When you planeswalk to Panopticon, draw a card Ability pwability = new PanopticonTriggeredAbility(new DrawCardTargetEffect(1)); this.getAbilities().add(pwability); + // At the beginning of your draw step, draw an additional card. + Ability ability = new BeginningOfDrawTriggeredAbility(Zone.COMMAND, new DrawCardTargetEffect(1), TargetController.ACTIVE, false); + this.getAbilities().add(ability); + // Active player can roll the planar die: Whenever you roll {CHAOS}, draw a card Effect chaosEffect = new DrawCardSourceControllerEffect(1); Target chaosTarget = null; @@ -84,7 +86,7 @@ class PanopticonTriggeredAbility extends TriggeredAbilityImpl { Player activePlayer = game.getPlayer(game.getActivePlayerId()); if (activePlayer != null) { - activePlayer.drawCards(1, game); + getEffects().setTargetPointer(new FixedTarget(activePlayer.getId())); return true; } return false;