From 403e7584569d225044cc1b3a114aefadf51fca42 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 20 Feb 2022 10:12:30 +0100 Subject: [PATCH] Reconfigure: use unattach command instead of Static Ability on Card --- .../src/main/java/forge/game/card/Card.java | 17 +++++++++++++++++ .../java/forge/game/card/CardFactoryUtil.java | 6 +----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index bf2b8866b5b..c149d1a71c4 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -3482,6 +3482,23 @@ public class Card extends GameEntity implements Comparable, IHasSVars { runParams.put(AbilityKey.AttachSource, this); runParams.put(AbilityKey.AttachTarget, entity); getController().getGame().getTriggerHandler().runTrigger(TriggerType.Attached, runParams, false); + + if (hasKeyword(Keyword.RECONFIGURE)) { + // need extra time stamp so it doesn't collide with existing ones + long ts = getGame().getNextTimestamp(); + // TODO make it use a Static Layer Effect instead + addChangedCardTypes(null, CardType.parse("Creature", true), false, false, false, false, false, false, false, false, ts, 0, true, false); + + GameCommand unattach = new GameCommand() { + private static final long serialVersionUID = 1L; + + @Override + public void run() { + removeChangedCardTypes(ts, 0); + } + }; + addUnattachCommand(unattach); + } } public final void unattachFromEntity(final GameEntity entity) { diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 00260158b33..e216ebfb222 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -3122,7 +3122,7 @@ public class CardFactoryUtil { attachStr.append("AB$ Attach | ValidTgts$ Creature.YouCtrl+Other | TgtPrompt$ Select target creature you "); attachStr.append("control | AILogic$ Pump | Secondary$ True | SpellDescription$ Attach ").append(bothStr); final StringBuilder unattachStr = new StringBuilder(); - unattachStr.append("AB$ Unattach | Defined$ Self | SpellDescription$ Unattach | Secondary$ True "); + unattachStr.append("AB$ Unattach | Defined$ Self | SpellDescription$ Unattach | Secondary$ True | IsPresent$ Card.Self+AttachedTo Creature"); unattachStr.append(bothStr); // instantiate attach ability SpellAbility attachSA = AbilityFactory.getAbility(attachStr.toString(), card); @@ -3606,10 +3606,6 @@ public class CardFactoryUtil { } effect += " | Description$ " + desc; inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); - } else if (keyword.startsWith("Reconfigure")) { - String effect = "Mode$ Continuous | Affected$ Card.Self | IsPresent$ Card.Self+AttachedTo Creature | " - + "RemoveType$ Creature | Secondary$ True | Description$ Reconfigure (" + inst.getReminderText() + ")"; - inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); } else if (keyword.equals("Shroud")) { String effect = "Mode$ CantTarget | Shroud$ True | ValidCard$ Card.Self | Secondary$ True" + " | Description$ Shroud (" + inst.getReminderText() + ")";