From b66d73162a1f189dffed5cd32abb6de80c9bbd25 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Wed, 25 May 2022 22:02:14 -0400 Subject: [PATCH] Player - create, has, remove for InitiativeEffect --- .../main/java/forge/game/player/Player.java | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index cb5a347c9a0..12988f1b423 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -240,6 +240,7 @@ public class Player extends GameEntity implements Comparable { private Deque paidForStack = new ArrayDeque<>(); private Card monarchEffect; + private Card initiativeEffect; private Card blessingEffect; private Card keywordEffect; @@ -3187,6 +3188,76 @@ public class Player extends GameEntity implements Comparable { return !StaticAbilityCantBecomeMonarch.anyCantBecomeMonarch(this); } + public void createInitiativeEffect(final String set) { + final PlayerZone com = getZone(ZoneType.Command); + if (initiativeEffect == null) { + initiativeEffect = new Card(game.nextCardId(), null, game); + initiativeEffect.setOwner(this); + initiativeEffect.setImmutable(true); + if (set != null) { + initiativeEffect.setImageKey("t:initiative_" + set.toLowerCase()); + initiativeEffect.setSetCode(set); + } else { + initiativeEffect.setImageKey("t:initiative"); + } + initiativeEffect.setName("The Initiative"); + + //Set up damage trigger + final String damageTrig = "Mode$ DamageDone | ValidSource$ Creature | ValidTarget$ You | " + + "CombatDamage$ True | TriggerZones$ Command | TriggerDescription$ Whenever one or more " + + "creatures a player controls deal combat damage to you, that player takes the initiative."; + final String damageEff = "DB$ TakeInitiative | Defined$ TriggeredSourceController"; + + final Trigger damageTrigger = TriggerHandler.parseTrigger(damageTrig, initiativeEffect, true); + + damageTrigger.setOverridingAbility(AbilityFactory.getAbility(damageEff, initiativeEffect)); + initiativeEffect.addTrigger(damageTrigger); + + //Set up triggers to venture into Undercity + final String ventureTakeTrig = "Mode$ TakesInitiative | ValidPlayer$ You | TriggerZones$ Command | " + + "TriggerDescription$ Whenever you take the initiative and at the beginning of your upkeep, " + + "venture into Undercity. (If you're in a dungeon, advance to the next room. If not, enter " + + "Undercity. You can take the initiative even if you already have it.)"; + + final String ventureUpkpTrig = "Mode$ Phase | Phase$ Upkeep | TriggerZones$ Command | ValidPlayer$ You " + + "| TriggerDescription$ Whenever you take the initiative and at the beginning of your upkeep, " + + "venture into Undercity. (If you're in a dungeon, advance to the next room. If not, enter " + + "Undercity. You can take the initiative even if you already have it.) | Secondary$ True"; + + final String ventureEff = "DB$ Venture | Dungeon$ Undercity"; + + final Trigger ventureUTrigger = TriggerHandler.parseTrigger(ventureUpkpTrig, initiativeEffect, true); + ventureUTrigger.setOverridingAbility(AbilityFactory.getAbility(ventureEff, initiativeEffect)); + initiativeEffect.addTrigger(ventureUTrigger); + + final Trigger ventureTTrigger = TriggerHandler.parseTrigger(ventureTakeTrig, initiativeEffect, true); + ventureTTrigger.setOverridingAbility(AbilityFactory.getAbility(ventureEff, initiativeEffect)); + initiativeEffect.addTrigger(ventureTTrigger); + + initiativeEffect.updateStateForView(); + } + + game.getTriggerHandler().suppressMode(TriggerType.ChangesZone); + game.getAction().moveTo(ZoneType.Command, initiativeEffect, null, null); + game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); + + //com.add(initiativeEffect); + + this.updateZoneForView(com); + } + + public boolean hasInitiative() { + return equals(game.getHasInitiative()); + } + + public void removeInitiativeEffect() { + final PlayerZone com = getZone(ZoneType.Command); + if (initiativeEffect != null) { + com.remove(initiativeEffect); + this.updateZoneForView(com); + } + } + public void updateKeywordCardAbilityText() { if (getKeywordCard() == null) return;