From 57c864446920f77a9dc126d21352f2dae0c13e6e Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sun, 27 Nov 2022 23:51:42 +0100 Subject: [PATCH] Clean up (#1978) --- .../main/java/forge/ai/ComputerUtilCard.java | 4 ++-- .../game/mana/ManaCostBeingPaidTest.java | 1 - .../forge/ai/simulation/SimulationTest.java | 1 - .../ComprehensiveRulesSection103.java | 2 +- .../ComprehensiveRulesSection104.java | 22 +++++++++---------- .../util/card/CardSpecification.java | 12 +++++----- .../util/card/CardSpecificationBuilder.java | 20 ++++++++--------- .../gamestate/GameStateSpecification.java | 6 ++--- .../GameStateSpecificationBuilder.java | 12 +++++----- .../util/player/PlayerSpecification.java | 10 ++++----- .../player/PlayerSpecificationBuilder.java | 12 +++++----- .../playeractions/ActionPreCondition.java | 6 ++--- .../playeractions/ActivateAbilityAction.java | 2 +- .../util/playeractions/BasePlayerAction.java | 8 +++---- .../playeractions/DeclareAttackersAction.java | 8 +++---- .../playeractions/DeclareBlockersAction.java | 6 ++--- .../util/playeractions/PlayerActions.java | 20 ++++++++--------- .../testactions/AssertAction.java | 4 ++-- .../testactions/CardAssertAction.java | 4 ++-- .../testactions/EndTestAction.java | 2 +- .../testactions/PlayerAssertAction.java | 4 ++-- .../playeractions/testactions/TestAction.java | 2 +- .../test/java/forge/item/DeckHintsTest.java | 3 +-- .../res/cardsfolder/g/grafted_exoskeleton.txt | 2 +- .../res/cardsfolder/g/grafted_wargear.txt | 2 +- .../res/cardsfolder/k/krovikan_vampire.txt | 5 ++--- forge-gui/res/cardsfolder/s/seraph.txt | 13 +++++------ .../res/cardsfolder/s/stitchers_graft.txt | 2 +- 28 files changed, 95 insertions(+), 100 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java index ce916292e2b..a20541c243b 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java @@ -1708,7 +1708,7 @@ public class ComputerUtilCard { pumped.addPTBoost(power + berserkPower, toughness, timestamp, 0); if (!kws.isEmpty()) { - pumped.addChangedCardKeywords(kws, null, false, timestamp, 0); + pumped.addChangedCardKeywords(kws, null, false, timestamp, 0, false); } if (!hiddenKws.isEmpty()) { pumped.addHiddenExtrinsicKeywords(timestamp, 0, hiddenKws); @@ -1729,7 +1729,7 @@ public class ComputerUtilCard { } } final long timestamp2 = c.getGame().getNextTimestamp(); //is this necessary or can the timestamp be re-used? - pumped.addChangedCardKeywordsInternal(toCopy, null, false, timestamp2, 0, true); + pumped.addChangedCardKeywordsInternal(toCopy, null, false, timestamp2, 0, false); applyStaticContPT(ai.getGame(), pumped, new CardCollection(c)); return pumped; } diff --git a/forge-game/src/test/java/forge/game/mana/ManaCostBeingPaidTest.java b/forge-game/src/test/java/forge/game/mana/ManaCostBeingPaidTest.java index 5f0fc78f7e3..1faae85f1c7 100644 --- a/forge-game/src/test/java/forge/game/mana/ManaCostBeingPaidTest.java +++ b/forge-game/src/test/java/forge/game/mana/ManaCostBeingPaidTest.java @@ -21,7 +21,6 @@ public class ManaCostBeingPaidTest { } private void runConvokeTest(String initialCost, byte[] colorsToPay, String[] expectedRemainder) { - ManaCostBeingPaid costBeingPaid = createManaCostBeingPaid(initialCost); for (int i = 0; i < colorsToPay.length; i++) { diff --git a/forge-gui-desktop/src/test/java/forge/ai/simulation/SimulationTest.java b/forge-gui-desktop/src/test/java/forge/ai/simulation/SimulationTest.java index 73abd646dfe..aaa3bb7e46b 100644 --- a/forge-gui-desktop/src/test/java/forge/ai/simulation/SimulationTest.java +++ b/forge-gui-desktop/src/test/java/forge/ai/simulation/SimulationTest.java @@ -34,7 +34,6 @@ public class SimulationTest { private static boolean initialized = false; protected Game initAndCreateGame() { - if (!initialized) { GuiBase.setInterface(new GuiDesktop()); FModel.initialize(null, new Function() { diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/comprehensiverules/ComprehensiveRulesSection103.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/comprehensiverules/ComprehensiveRulesSection103.java index eb92c09f361..673733edced 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/comprehensiverules/ComprehensiveRulesSection103.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/comprehensiverules/ComprehensiveRulesSection103.java @@ -28,7 +28,7 @@ public class ComprehensiveRulesSection103 extends BaseGameSimulationTest { ); runGame( gameWrapper, PlayerSpecification.PLAYER_2, 1 ); } - + @Test public void test_103_7a_first_player_skips_draw_step_of_first_turn() { GameWrapper gameWrapper = new GameWrapper( diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/comprehensiverules/ComprehensiveRulesSection104.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/comprehensiverules/ComprehensiveRulesSection104.java index 66892980740..43678cc1ea6 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/comprehensiverules/ComprehensiveRulesSection104.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/comprehensiverules/ComprehensiveRulesSection104.java @@ -35,7 +35,7 @@ public class ComprehensiveRulesSection104 extends BaseGameSimulationTest { ); runGame( gameWrapper, PlayerSpecification.PLAYER_1, 3 ); } - + @Test public void test_104_2b_effect_may_state_that_player_wins() { GameWrapper gameWrapper = new GameWrapper( @@ -47,7 +47,7 @@ public class ComprehensiveRulesSection104 extends BaseGameSimulationTest { ); runGame( gameWrapper, PlayerSpecification.PLAYER_2, 2 ); } - + @Test public void test_104_3b_player_with_zero_life_loses_the_game() { GameWrapper gameWrapper = new GameWrapper( @@ -58,7 +58,7 @@ public class ComprehensiveRulesSection104 extends BaseGameSimulationTest { ); runGame( gameWrapper, PlayerSpecification.PLAYER_1, 1 ); } - + @Test public void test_104_3b_player_with_less_than_zero_life_loses_the_game() { GameWrapper gameWrapper = new GameWrapper( @@ -69,7 +69,7 @@ public class ComprehensiveRulesSection104 extends BaseGameSimulationTest { ); runGame( gameWrapper, PlayerSpecification.PLAYER_1, 1 ); } - + @Test public void test_104_3b_player_with_less_than_zero_life_loses_the_game_only_when_a_player_receives_priority() { //The Lightning Helix targeting himself theoretically drops him to -1, but he's back up to 2 before he could lose @@ -88,7 +88,7 @@ public class ComprehensiveRulesSection104 extends BaseGameSimulationTest { ); runGame( gameWrapper, PlayerSpecification.PLAYER_1, 1 ); } - + @Test public void test_104_3b_player_with_less_than_zero_life_loses_the_game_only_when_a_player_receives_priority_variant_with_combat() { //Player 2 has 2 life, then takes 3 combat damage but also gains 2 life from lifelink @@ -113,13 +113,13 @@ public class ComprehensiveRulesSection104 extends BaseGameSimulationTest { ); runGame( gameWrapper, PlayerSpecification.PLAYER_2, 1 ); } - + @Test public void test_104_3c_player_who_draws_card_with_empty_library_loses() { GameWrapper gameWrapper = new GameWrapper( null, null ); runGame( gameWrapper, PlayerSpecification.PLAYER_1, 2 ); } - + @Test public void test_104_3c_player_who_draws_more_cards_than_library_contains_draw_as_much_as_possible_and_loses() { GameWrapper gameWrapper = new GameWrapper( @@ -137,7 +137,7 @@ public class ComprehensiveRulesSection104 extends BaseGameSimulationTest { new CardAssertAction( new CardSpecificationBuilder( "Mountain" ).owner( PlayerSpecification.PLAYER_1 ).hand() ) ); } - + @Test public void test_104_3d_player_with_ten_poison_counters_loses() { GameWrapper gameWrapper = new GameWrapper( @@ -148,7 +148,7 @@ public class ComprehensiveRulesSection104 extends BaseGameSimulationTest { ); runGame( gameWrapper, PlayerSpecification.PLAYER_1, 1 ); } - + @Test public void test_104_3d_player_with_more_than_ten_poison_counters_loses() { GameWrapper gameWrapper = new GameWrapper( @@ -159,7 +159,7 @@ public class ComprehensiveRulesSection104 extends BaseGameSimulationTest { ); runGame( gameWrapper, PlayerSpecification.PLAYER_1, 1 ); } - + @Test public void test_104_3e_effect_may_state_that_player_loses() { GameWrapper gameWrapper = new GameWrapper( @@ -176,7 +176,7 @@ public class ComprehensiveRulesSection104 extends BaseGameSimulationTest { ); runGame( gameWrapper, PlayerSpecification.PLAYER_2, 2 ); } - + @Test( enabled = false )//TODO fails, so disable for now. Note that it seems to really be an issue with Forge and this rule, as commenting out the Laboratory Maniac line below (so there's just a loss, not a win), correctly triggers the loss public void test_104_3f_if_a_player_would_win_and_lose_simultaneously_he_loses() { /* http://community.wizards.com/content/forum-topic/3199056 diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/card/CardSpecification.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/card/CardSpecification.java index 47232f61b28..4becea739b0 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/card/CardSpecification.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/card/CardSpecification.java @@ -14,7 +14,7 @@ public class CardSpecification implements Specification { private final PlayerSpecification owner; private final PlayerSpecification controller; private final CardSpecification target; - + /*package-local*/ CardSpecification( final String name, final ZoneType zoneType, final PlayerSpecification owner, final PlayerSpecification controller, final CardSpecification target ) { this.name = name; this.zoneType = zoneType; @@ -22,23 +22,23 @@ public class CardSpecification implements Specification { this.controller = controller; this.target = target; } - + public String getName() { return name; } - + public ZoneType getZoneType() { return zoneType; } - + public PlayerSpecification getOwner() { return owner; } - + public PlayerSpecification getController() { return controller; } - + public CardSpecification getTarget() { return target; } diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/card/CardSpecificationBuilder.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/card/CardSpecificationBuilder.java index 89c70484fe7..e4a7bdbcfe0 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/card/CardSpecificationBuilder.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/card/CardSpecificationBuilder.java @@ -11,47 +11,47 @@ public class CardSpecificationBuilder { private PlayerSpecification owner; private PlayerSpecification controller; private CardSpecification target; - + public CardSpecificationBuilder( final String name ) { this.name = name; } - + public CardSpecificationBuilder zone( final ZoneType zoneType ) { this.zoneType = zoneType; return this; } - + public CardSpecificationBuilder hand() { return zone( ZoneType.Hand ); } - + public CardSpecificationBuilder battlefield() { return zone( ZoneType.Battlefield ); } - + public CardSpecificationBuilder library() { return zone( ZoneType.Library ); } - + public CardSpecificationBuilder graveyard() { return zone( ZoneType.Graveyard ); } - + public CardSpecificationBuilder owner( final PlayerSpecification owner ) { this.owner = owner; return this; } - + public CardSpecificationBuilder controller( final PlayerSpecification controller ) { this.controller = controller; return this; } - + public CardSpecificationBuilder target( final CardSpecification target ) { this.target = target; return this; } - + public CardSpecification build() { if( StringUtils.isBlank( name ) ) { throw new IllegalStateException( "Must have a name [" + name + "]" ); diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/gamestate/GameStateSpecification.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/gamestate/GameStateSpecification.java index efd1182c169..be9865f8219 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/gamestate/GameStateSpecification.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/gamestate/GameStateSpecification.java @@ -10,16 +10,16 @@ import forge.gamesimulationtests.util.player.PlayerSpecification; public class GameStateSpecification { private final List cards; private final Map playerFacts; - + /*package*protected*/ GameStateSpecification( final List cards, final Map playerFacts ) { this.cards = cards; this.playerFacts = playerFacts; } - + public List getCards() { return cards; } - + public Collection getPlayerFacts() { return playerFacts.values(); } diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/gamestate/GameStateSpecificationBuilder.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/gamestate/GameStateSpecificationBuilder.java index 44139d7a262..b3db29187b0 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/gamestate/GameStateSpecificationBuilder.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/gamestate/GameStateSpecificationBuilder.java @@ -14,21 +14,21 @@ import forge.gamesimulationtests.util.player.PlayerSpecificationBuilder; public class GameStateSpecificationBuilder { private final List cards; private final Map playerFacts; - + public GameStateSpecificationBuilder() { cards = new ArrayList<>(); playerFacts = new HashMap<>(); } - + public GameStateSpecificationBuilder addCard( final CardSpecification cardSpecification ) { cards.add( cardSpecification ); return this; } - + public GameStateSpecificationBuilder addCard( final CardSpecificationBuilder cardSpecification ) { return addCard( cardSpecification.build() ); } - + public GameStateSpecificationBuilder addPlayerFact( final PlayerSpecification playerSpecification ) { if( playerFacts.containsKey( playerSpecification.getName() ) ) { throw new IllegalStateException( "If you want to specify multiple things about the same player, do it in 1 call" ); @@ -36,11 +36,11 @@ public class GameStateSpecificationBuilder { playerFacts.put( playerSpecification.getName(), playerSpecification ); return this; } - + public GameStateSpecificationBuilder addPlayerFact( final PlayerSpecificationBuilder playerSpecification ) { return addPlayerFact( playerSpecification.build() ); } - + public GameStateSpecification build() { return new GameStateSpecification( Collections.unmodifiableList( cards ), Collections.unmodifiableMap( playerFacts ) ); } diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/player/PlayerSpecification.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/player/PlayerSpecification.java index 0d0f5187cbc..1b271dc3a9e 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/player/PlayerSpecification.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/player/PlayerSpecification.java @@ -9,25 +9,25 @@ public class PlayerSpecification implements Specification { public static final String PLAYER_2_NAME = "Player 2"; public static final PlayerSpecification PLAYER_1 = PlayerSpecificationBuilder.player1().build(); public static final PlayerSpecification PLAYER_2 = PlayerSpecificationBuilder.player2().build(); - + private final String name; private final Integer life; private final Integer poison; - + /*package-local*/ PlayerSpecification( final String name, final Integer life, final Integer poison ) { this.name = name; this.life = life; this.poison = poison; } - + public String getName() { return name; } - + public Integer getLife() { return life; } - + public Integer getPoison() { return poison; } diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/player/PlayerSpecificationBuilder.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/player/PlayerSpecificationBuilder.java index 72250fdeece..131029a1668 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/player/PlayerSpecificationBuilder.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/player/PlayerSpecificationBuilder.java @@ -6,29 +6,29 @@ public class PlayerSpecificationBuilder { private final String name; private Integer life; private Integer poison; - + public PlayerSpecificationBuilder( final String name ) { this.name = name; } - + public static PlayerSpecificationBuilder player1() { return new PlayerSpecificationBuilder( PlayerSpecification.PLAYER_1_NAME ); } - + public static PlayerSpecificationBuilder player2() { return new PlayerSpecificationBuilder( PlayerSpecification.PLAYER_2_NAME ); } - + public PlayerSpecificationBuilder life( final Integer life ) { this.life = life; return this; } - + public PlayerSpecificationBuilder poison( final Integer poison ) { this.poison = poison; return this; } - + public PlayerSpecification build() { if( StringUtils.isBlank( name ) ) { throw new IllegalStateException( "Must have a name [" + name + "]" ); diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/ActionPreCondition.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/ActionPreCondition.java index 61629b5afed..ae3cc011a1f 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/ActionPreCondition.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/ActionPreCondition.java @@ -8,7 +8,7 @@ import forge.game.phase.PhaseType; public class ActionPreCondition { private Integer requiredTurn; private PhaseType requiredPhaseType; - + public boolean isApplicable( Game game ) { if( requiredTurn != null ) { if( requiredTurn != game.getPhaseHandler().getTurn() ) { @@ -21,12 +21,12 @@ public class ActionPreCondition { return requiredPhaseType == null || requiredPhaseType == game.getPhaseHandler().getPhase(); } - + public ActionPreCondition turn( int turn ) { requiredTurn = turn; return this; } - + public ActionPreCondition phase( PhaseType phaseType ) { requiredPhaseType = phaseType; return this; diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/ActivateAbilityAction.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/ActivateAbilityAction.java index a763b3159bf..680b6206ff3 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/ActivateAbilityAction.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/ActivateAbilityAction.java @@ -29,7 +29,7 @@ public class ActivateAbilityAction extends BasePlayerAction { if( abilities.size() > 1 ) { throw new IllegalStateException( "Multiple abilities found for " + actualCardWithAbility ); } - + SpellAbility ability = abilities.get( 0 ); game.getStack().add( ability ); } diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/BasePlayerAction.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/BasePlayerAction.java index 2be926b1614..9dc0847f0fb 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/BasePlayerAction.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/BasePlayerAction.java @@ -6,19 +6,19 @@ import forge.gamesimulationtests.util.player.PlayerSpecification; public abstract class BasePlayerAction { private final PlayerSpecification player; private ActionPreCondition preCondition; - + protected BasePlayerAction( PlayerSpecification player ) { this.player = player; } - + public PlayerSpecification getPlayer() { return player; } - + public boolean isApplicable( Game game ) { return preCondition == null || preCondition.isApplicable( game ); } - + public BasePlayerAction when( ActionPreCondition preCondition ) { this.preCondition = preCondition; return this; diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/DeclareAttackersAction.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/DeclareAttackersAction.java index dabe9d458c1..072281d5805 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/DeclareAttackersAction.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/DeclareAttackersAction.java @@ -9,13 +9,13 @@ import forge.gamesimulationtests.util.player.PlayerSpecification; public class DeclareAttackersAction extends BasePlayerAction { private final Map playerAttackAssignments; private final Map planeswalkerAttackAssignments; - + public DeclareAttackersAction( PlayerSpecification player ) { super( player ); playerAttackAssignments = new HashMap<>(); planeswalkerAttackAssignments = new HashMap<>(); } - + /** * Attack the only opponent */ @@ -23,12 +23,12 @@ public class DeclareAttackersAction extends BasePlayerAction { playerAttackAssignments.put( attacker, null ); return this; } - + public DeclareAttackersAction attack( CardSpecification attacker, PlayerSpecification player ) { playerAttackAssignments.put( attacker, player ); return this; } - + public DeclareAttackersAction attack( CardSpecification attacker, CardSpecification planeswalker ) { planeswalkerAttackAssignments.put( attacker, planeswalker ); return this; diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/DeclareBlockersAction.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/DeclareBlockersAction.java index 00b82dd92c4..0352150331c 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/DeclareBlockersAction.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/DeclareBlockersAction.java @@ -8,17 +8,17 @@ import forge.gamesimulationtests.util.player.PlayerSpecification; public class DeclareBlockersAction extends BasePlayerAction { private final Multimap blockingAssignments; - + public DeclareBlockersAction( PlayerSpecification player ) { super( player ); blockingAssignments = ArrayListMultimap.create(); } - + public DeclareBlockersAction block( CardSpecification attacker, CardSpecification blocker ) { blockingAssignments.put( attacker, blocker ); return this; } - + public Multimap getBlockingAssignments() { return blockingAssignments; } diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/PlayerActions.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/PlayerActions.java index 32f14d1c72d..970fbaf76ff 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/PlayerActions.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/PlayerActions.java @@ -13,48 +13,48 @@ import forge.gamesimulationtests.util.playeractions.testactions.TestAction; public class PlayerActions { private final List playerActions; - + public PlayerActions( List playerActions ) { this.playerActions = new LinkedList<>(playerActions); } - + public PlayerActions( BasePlayerAction... basePlayerActions ) { this( Arrays.asList( basePlayerActions ) ); } - + @SuppressWarnings("unchecked") public T getNextActionIfApplicable( Player player, Game game, Class actionType ) { if( playerActions.isEmpty() ) { return null; } final BasePlayerAction nextAction = playerActions.get( 0 ); - + if( nextAction instanceof TestAction && isRightPlayer( player, game, nextAction ) && isApplicable( nextAction, game ) ) { playerActions.remove( 0 ); ( ( TestAction ) nextAction ).perform( game, player ); return getNextActionIfApplicable( player, game, actionType ); } - + if( actionType.isAssignableFrom( nextAction.getClass() ) && isRightPlayer( player, game, nextAction ) && isApplicable( nextAction, game ) ) { playerActions.remove( 0 ); return ( T ) nextAction; } - + return null; } - + private boolean isApplicable( BasePlayerAction action, Game game ) { return action != null && action.isApplicable( game ); } - + private boolean isRightPlayer( Player player, Game game, BasePlayerAction action ) { return action.getPlayer() == null || player.equals( PlayerSpecificationHandler.INSTANCE.find( game, action.getPlayer() ) ); } - + public boolean isEmpty() { return playerActions.isEmpty(); } - + @Override public String toString() { return "PlayerActions : [" + StringUtils.join( playerActions, ", " ) + "]"; diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/AssertAction.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/AssertAction.java index c93a2cefb7b..c653742a905 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/AssertAction.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/AssertAction.java @@ -7,9 +7,9 @@ public abstract class AssertAction extends TestAction { public AssertAction() { super( null );//AssertActions may be about a player, but they're not really actions taken by a player... } - + public abstract void performAssertion( Game game ); - + @Override public void perform( Game game, Player player ) { performAssertion( game ); diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/CardAssertAction.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/CardAssertAction.java index 80eb738845f..2d07be4adcb 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/CardAssertAction.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/CardAssertAction.java @@ -11,11 +11,11 @@ import forge.gamesimulationtests.util.card.CardSpecificationHandler; public class CardAssertAction extends AssertAction { private final CardSpecification cardRequirements; - + public CardAssertAction( final CardSpecification cardRequirements ) { this.cardRequirements = cardRequirements; } - + public CardAssertAction( final CardSpecificationBuilder cardRequirements ) { this( cardRequirements.build() ); } diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/EndTestAction.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/EndTestAction.java index 0461004149a..1d331e53588 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/EndTestAction.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/EndTestAction.java @@ -8,7 +8,7 @@ public class EndTestAction extends TestAction { public EndTestAction( PlayerSpecification player ) { super( player ); } - + public void endTest( Player player ) { player.concede(); } diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/PlayerAssertAction.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/PlayerAssertAction.java index 0903e183cda..6d22dc5f0b4 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/PlayerAssertAction.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/PlayerAssertAction.java @@ -11,11 +11,11 @@ import forge.gamesimulationtests.util.player.PlayerSpecificationHandler; public class PlayerAssertAction extends AssertAction { private final PlayerSpecification playerRequirements; - + public PlayerAssertAction( final PlayerSpecification playerRequirements ) { this.playerRequirements = playerRequirements; } - + public PlayerAssertAction( final PlayerSpecificationBuilder playerRequirements ) { this( playerRequirements.build() ); } diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/TestAction.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/TestAction.java index 05e8c8281d0..01ba60b9511 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/TestAction.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/playeractions/testactions/TestAction.java @@ -9,6 +9,6 @@ public abstract class TestAction extends BasePlayerAction { public TestAction( PlayerSpecification player ) { super( player ); } - + public abstract void perform( Game game, Player player ); } diff --git a/forge-gui-desktop/src/test/java/forge/item/DeckHintsTest.java b/forge-gui-desktop/src/test/java/forge/item/DeckHintsTest.java index 777e6d68106..901c029d15b 100644 --- a/forge-gui-desktop/src/test/java/forge/item/DeckHintsTest.java +++ b/forge-gui-desktop/src/test/java/forge/item/DeckHintsTest.java @@ -28,7 +28,7 @@ public class DeckHintsTest { void setupTest() { GuiBase.setInterface(new GuiDesktop()); } - + /** * Card test. */ @@ -153,7 +153,6 @@ public class DeckHintsTest { Assert.assertEquals(1, hints.filter(list).size()); } - /** * Create a CardPrinted from the given filename. * diff --git a/forge-gui/res/cardsfolder/g/grafted_exoskeleton.txt b/forge-gui/res/cardsfolder/g/grafted_exoskeleton.txt index 1ebfe38ce42..be1ddc9397b 100644 --- a/forge-gui/res/cardsfolder/g/grafted_exoskeleton.txt +++ b/forge-gui/res/cardsfolder/g/grafted_exoskeleton.txt @@ -4,5 +4,5 @@ Types:Artifact Equipment K:Equip:2 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Infect | Description$ Equipped creature gets +2/+2 and has infect. (It deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) T:Mode$ Unattach | ValidAttachment$ Card.Self | ValidObject$ Permanent | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME becomes unattached from a permanent, sacrifice that permanent. -SVar:TrigSac:DB$ Sacrifice | Defined$ You | SacValid$ TriggeredObject +SVar:TrigSac:DB$ SacrificeAll | Defined$ TriggeredObjectLKICopy | Controller$ You Oracle:Equipped creature gets +2/+2 and has infect. (It deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)\nWhenever Grafted Exoskeleton becomes unattached from a permanent, sacrifice that permanent.\nEquip {2} diff --git a/forge-gui/res/cardsfolder/g/grafted_wargear.txt b/forge-gui/res/cardsfolder/g/grafted_wargear.txt index bf4dbe82530..1c3d00db6c6 100644 --- a/forge-gui/res/cardsfolder/g/grafted_wargear.txt +++ b/forge-gui/res/cardsfolder/g/grafted_wargear.txt @@ -4,5 +4,5 @@ Types:Artifact Equipment K:Equip:0 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 3 | AddToughness$ 2 | Description$ Equipped creature gets +3/+2. T:Mode$ Unattach | ValidAttachment$ Card.Self | ValidObject$ Permanent | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME becomes unattached from a permanent, sacrifice that permanent. -SVar:TrigSac:DB$ Sacrifice | Defined$ You | SacValid$ TriggeredObject | SacMessage$ equipped permanent +SVar:TrigSac:DB$ SacrificeAll | Defined$ TriggeredObjectLKICopy | Controller$ You Oracle:Equipped creature gets +3/+2.\nWhenever Grafted Wargear becomes unattached from a permanent, sacrifice that permanent.\nEquip {0} ({0}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/k/krovikan_vampire.txt b/forge-gui/res/cardsfolder/k/krovikan_vampire.txt index 6f1fae7df27..22837dfd8f8 100644 --- a/forge-gui/res/cardsfolder/k/krovikan_vampire.txt +++ b/forge-gui/res/cardsfolder/k/krovikan_vampire.txt @@ -7,12 +7,11 @@ SVar:TrigPump:DB$ Pump | RememberObjects$ TriggeredCard T:Mode$ ChangesZone | Origin$ Graveyard | Destination$ Any | ValidCard$ Card.IsRemembered | TriggerZones$ Battlefield | Execute$ LoseTrack | Static$ True SVar:LoseTrack:DB$ Pump | ForgetObjects$ TriggeredCard T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup | Static$ True -T:Mode$ ChangesController | ValidCard$ Card.Self | Execute$ DBCleanup | Static$ True T:Mode$ TurnBegin | Execute$ DBCleanup2 | Static$ True T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Player | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE1 | IsPresent$ Card.Self | Execute$ TrigChange | TriggerDescription$ At the beginning of each end step, if a creature dealt damage by CARDNAME this turn died, put that card onto the battlefield under your control. Sacrifice it when you lose control of CARDNAME. SVar:TrigChange:DB$ ChangeZoneAll | ChangeType$ Creature.IsRemembered+ThisTurnEnteredFrom_Battlefield | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ TrigDelay -SVar:TrigDelay:DB$ DelayedTrigger | Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | RememberObjects$ Remembered | Execute$ TrigSac | Secondary$ True | SubAbility$ TrigDelay2 | SpellDescription$ Sacrifice it when you lose control of CARDNAME. -SVar:TrigDelay2:DB$ DelayedTrigger | Mode$ ChangesController | ValidCard$ Card.Self | RememberObjects$ Remembered | Execute$ TrigSac | Secondary$ True | SubAbility$ DBCleanup2 | SpellDescription$ Sacrifice it when you lose control of CARDNAME. +SVar:TrigDelay:DB$ DelayedTrigger | Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.StrictlySelf | RememberObjects$ RememberedLKI | Execute$ TrigSac | SubAbility$ TrigDelay2 | SpellDescription$ Sacrifice it when you lose control of CARDNAME. +SVar:TrigDelay2:DB$ DelayedTrigger | Mode$ ChangesController | ValidCard$ Card.StrictlySelf | ValidOriginalController$ You | RememberObjects$ RememberedLKI | Execute$ TrigSac | SubAbility$ DBCleanup2 | SpellDescription$ Sacrifice it when you lose control of CARDNAME. SVar:TrigSac:DB$ SacrificeAll | Defined$ DelayTriggerRememberedLKI | Controller$ You SVar:DBCleanup:DB$ Cleanup | ClearTriggered$ True | SubAbility$ DBCleanup2 SVar:DBCleanup2:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/s/seraph.txt b/forge-gui/res/cardsfolder/s/seraph.txt index 23fbe1996fb..fe1bb3c4785 100644 --- a/forge-gui/res/cardsfolder/s/seraph.txt +++ b/forge-gui/res/cardsfolder/s/seraph.txt @@ -3,13 +3,12 @@ ManaCost:6 W Types:Creature Angel PT:4/4 K:Flying -T:Mode$ ChangesZone | ValidCard$ Creature.DamagedBy | Origin$ Battlefield | Destination$ Graveyard | Execute$ DelTrigReturn | TriggerZones$ Battlefield | TriggerDescription$ Whenever a creature dealt damage by CARDNAME this turn dies, put that card onto the battlefield under your control at the beginning of the next end step. +T:Mode$ ChangesZone | ValidCard$ Creature.DamagedBy | Origin$ Battlefield | Destination$ Graveyard | Execute$ DelTrigReturn | TriggerZones$ Battlefield | TriggerDescription$ Whenever a creature dealt damage by CARDNAME this turn dies, put that card onto the battlefield under your control at the beginning of the next end step. Sacrifice the creature when you lose control of CARDNAME. SVar:DelTrigReturn:DB$ DelayedTrigger | Mode$ Phase | Phase$ End Of Turn | Execute$ DBReturn | RememberObjects$ TriggeredNewCardLKICopy | TriggerDescription$ Return that card to the battlefield at the beginning of the next end step. -SVar:DBReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | RememberChanged$ True -#TODO make the sacrifice part as another delayed Trigger -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBForget -SVar:DBForget:DB$ Pump | ForgetObjects$ TriggeredCard -T:Mode$ ChangesController | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ Sacrifice | TriggerDescription$ Sacrifice the creature when you lose control of CARDNAME. -SVar:Sacrifice:DB$ SacrificeAll | ValidCards$ Card.IsRemembered | Controller$ You | SubAbility$ DBCleanup +SVar:DBReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | RememberChanged$ True | SubAbility$ TrigDelay +SVar:TrigDelay:DB$ DelayedTrigger | Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.StrictlySelf | RememberObjects$ RememberedLKI | Execute$ TrigSac | SubAbility$ TrigDelay2 | SpellDescription$ Sacrifice the creature when you lose control of CARDNAME. +SVar:TrigDelay2:DB$ DelayedTrigger | Mode$ ChangesController | ValidCard$ Card.StrictlySelf | ValidOriginalController$ You | RememberObjects$ RememberedLKI | Execute$ TrigSac | SubAbility$ DBCleanup | SpellDescription$ Sacrifice the creature when you lose control of CARDNAME. +SVar:TrigSac:DB$ SacrificeAll | Defined$ DelayTriggerRememberedLKI | Controller$ You | SubAbility$ DBCleanup2 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:DBCleanup2:DB$ Cleanup | ClearTriggered$ True Oracle:Flying\nWhenever a creature dealt damage by Seraph this turn dies, put that card onto the battlefield under your control at the beginning of the next end step. Sacrifice the creature when you lose control of Seraph. diff --git a/forge-gui/res/cardsfolder/s/stitchers_graft.txt b/forge-gui/res/cardsfolder/s/stitchers_graft.txt index b947555bad2..1ab16fd14bc 100644 --- a/forge-gui/res/cardsfolder/s/stitchers_graft.txt +++ b/forge-gui/res/cardsfolder/s/stitchers_graft.txt @@ -5,6 +5,6 @@ S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 3 | AddToughness$ T:Mode$ Attacks | ValidCard$ Card.EquippedBy | Execute$ StayTapped | TriggerDescription$ Whenever equipped creature attacks, it doesn't untap during its controller's next untap step. SVar:StayTapped:DB$ Pump | KW$ HIDDEN This card doesn't untap during your next untap step. | Defined$ TriggeredAttackerLKICopy | Duration$ Permanent T:Mode$ Unattach | ValidAttachment$ Card.Self | ValidObject$ Permanent | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME becomes unattached from a permanent, sacrifice that permanent. -SVar:TrigSac:DB$ Sacrifice | Defined$ You | SacValid$ TriggeredObject +SVar:TrigSac:DB$ SacrificeAll | Defined$ TriggeredObjectLKICopy | Controller$ You K:Equip:2 Oracle:Equipped creature gets +3/+3.\nWhenever equipped creature attacks, it doesn't untap during its controller's next untap step.\nWhenever Stitcher's Graft becomes unattached from a permanent, sacrifice that permanent.\nEquip {2}