diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index f48434d3021..68b31e9609f 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -1,9 +1,22 @@ package forge.card.trigger; -import forge.*; +import forge.Card; +import forge.AllZone; +import forge.AllZoneUtil; +import forge.Player; +import forge.CardList; +import forge.Command; +import forge.CommandArgs; +import forge.GameActionUtil; +import forge.ComputerUtil; import forge.card.abilityFactory.AbilityFactory; import forge.card.cost.Cost; -import forge.card.spellability.*; +import forge.card.spellability.Ability; +import forge.card.spellability.Ability_Sub; +import forge.card.spellability.SpellAbility; +import forge.card.spellability.Ability_Mana; +import forge.card.spellability.SpellAbility_Restriction; +import forge.card.spellability.Target; import forge.gui.input.Input; import java.util.ArrayList; @@ -29,7 +42,7 @@ public class TriggerHandler { * * @param mode a {@link java.lang.String} object. */ - public void suppressMode(String mode) { + public final void suppressMode(final String mode) { suppressedModes.add(mode); } @@ -38,7 +51,7 @@ public class TriggerHandler { * * @param mode a {@link java.lang.String} object. */ - public void clearSuppression(String mode) { + public final void clearSuppression(final String mode) { suppressedModes.remove(mode); } @@ -48,9 +61,12 @@ public class TriggerHandler { * @param name a {@link java.lang.String} object. * @param trigParse a {@link java.lang.String} object. * @param host a {@link forge.Card} object. + * @param intrinsic a boolean. * @return a {@link forge.card.trigger.Trigger} object. */ - public static Trigger parseTrigger(String name, String trigParse, Card host, boolean intrinsic) { + public static Trigger parseTrigger(final String name, final String trigParse, + final Card host, final boolean intrinsic) + { Trigger ret = TriggerHandler.parseTrigger(trigParse, host, intrinsic); ret.setName(name); return ret; @@ -61,9 +77,11 @@ public class TriggerHandler { * * @param trigParse a {@link java.lang.String} object. * @param host a {@link forge.Card} object. + * @param intrinsic a boolean. * @return a {@link forge.card.trigger.Trigger} object. */ - public static Trigger parseTrigger(String trigParse, Card host, boolean intrinsic) { + public static Trigger parseTrigger(final String trigParse, final Card host, final boolean intrinsic) + { HashMap mapParams = parseParams(trigParse); return parseTrigger(mapParams, host, intrinsic); } @@ -73,9 +91,12 @@ public class TriggerHandler { * * @param mapParams a {@link java.util.HashMap} object. * @param host a {@link forge.Card} object. + * @param intrinsic a boolean. * @return a {@link forge.card.trigger.Trigger} object. */ - public static Trigger parseTrigger(HashMap mapParams, Card host, boolean intrinsic) { + public static Trigger parseTrigger(final HashMap mapParams, + final Card host, final boolean intrinsic) + { Trigger ret = null; String mode = mapParams.get("Mode"); @@ -146,13 +167,14 @@ public class TriggerHandler { * @param trigParse a {@link java.lang.String} object. * @return a {@link java.util.HashMap} object. */ - private static HashMap parseParams(String trigParse) { + private static HashMap parseParams(final String trigParse) { HashMap mapParams = new HashMap(); - if (trigParse.length() == 0) + if (trigParse.length() == 0) { throw new RuntimeException("TriggerFactory : registerTrigger -- trigParse too short"); + } - String params[] = trigParse.split("\\|"); + String[] params = trigParse.split("\\|"); for (int i = 0; i < params.length; i++) { params[i] = params[i].trim(); @@ -182,12 +204,13 @@ public class TriggerHandler { * * @param trig a {@link forge.card.trigger.Trigger} object. */ - public void registerDelayedTrigger(Trigger trig) { + public final void registerDelayedTrigger(final Trigger trig) { delayedTriggers.add(trig); String mode = trig.getMapParams().get("Mode"); - if (!registeredModes.contains(mode)) + if (!registeredModes.contains(mode)) { registeredModes.add(mode); + } } /** @@ -195,18 +218,19 @@ public class TriggerHandler { * * @param trig a {@link forge.card.trigger.Trigger} object. */ - public void registerTrigger(Trigger trig) { + public final void registerTrigger(final Trigger trig) { registeredTriggers.add(trig); String mode = trig.getMapParams().get("Mode"); - if (!registeredModes.contains(mode)) + if (!registeredModes.contains(mode)) { registeredModes.add(mode); + } } /** *

clearRegistered.

*/ - public void clearRegistered() { + public final void clearRegistered() { delayedTriggers.clear(); registeredTriggers.clear(); registeredModes.clear(); @@ -217,17 +241,22 @@ public class TriggerHandler { * * @param trig a {@link forge.card.trigger.Trigger} object. */ - public void removeRegisteredTrigger(Trigger trig) { + public final void removeRegisteredTrigger(final Trigger trig) { for (int i = 0; i < registeredTriggers.size(); i++) { - if (registeredTriggers.get(i).equals(trig)) + if (registeredTriggers.get(i).equals(trig)) { registeredTriggers.remove(i); + } } } - - public void removeTemporaryTriggers() { - for (int i = 0; i < registeredTriggers.size(); i++) { + + /** + *

removeTemporaryTriggers.

+ * + */ + public final void removeTemporaryTriggers() { + for (int i = 0; i < registeredTriggers.size(); i++) { if (registeredTriggers.get(i).isTemporary()) { - registeredTriggers.get(i).hostCard.removeTrigger(registeredTriggers.get(i)); + registeredTriggers.get(i).hostCard.removeTrigger(registeredTriggers.get(i)); registeredTriggers.remove(i); } } @@ -238,7 +267,7 @@ public class TriggerHandler { * * @return a {@link java.util.ArrayList} object. */ - public ArrayList getRegisteredTriggers() { + public final ArrayList getRegisteredTriggers() { return registeredTriggers; } @@ -247,7 +276,7 @@ public class TriggerHandler { * * @param crd a {@link forge.Card} object. */ - public void removeAllFromCard(Card crd) { + public final void removeAllFromCard(final Card crd) { for (int i = 0; i < registeredTriggers.size(); i++) { if (registeredTriggers.get(i).getHostCard().equals(crd)) { registeredTriggers.remove(i); @@ -262,19 +291,22 @@ public class TriggerHandler { * @param mode a {@link java.lang.String} object. * @param runParams a {@link java.util.Map} object. */ - public void runTrigger(String mode, Map runParams) { + public final void runTrigger(final String mode, final Map runParams) { if (suppressedModes.contains(mode) || !registeredModes.contains(mode)) { return; } + + Player playerAP = AllZone.getPhase().getPlayerTurn(); + //AP - for (int i=0;i runParams) { - if(!regtrig.getMapParams().get("Mode").equals(mode)) - { + if (!regtrig.getMapParams().get("Mode").equals(mode)) { return false; //Not the right mode. } if (!regtrig.zonesCheck()) { @@ -326,32 +357,30 @@ public class TriggerHandler { if (regtrig.getHostCard().isFaceDown() && regtrig.getIsIntrinsic()) { return false; //Morphed cards only have pumped triggers go off. } - if(regtrig instanceof Trigger_Always) { - if(AllZone.getStack().hasStateTrigger(regtrig.ID)) - { + if (regtrig instanceof Trigger_Always) { + if (AllZone.getStack().hasStateTrigger(regtrig.ID)) { return false; //State triggers that are already on the stack don't trigger again. } } - if (!regtrig.performTest(runParams)) - { + if (!regtrig.performTest(runParams)) { return false; //Test failed. } - + //Torpor Orb check CardList torporOrbs = AllZoneUtil.getCardsInPlay("Torpor Orb"); - - if(torporOrbs.size() != 0 && mode.equals("ChangesZone") && regtrig.getMapParams().get("ValidCard").contains("Creature")) + + if (torporOrbs.size() != 0 && mode.equals("ChangesZone") && regtrig.getMapParams().get("ValidCard").contains("Creature")) { return false; } - if(torporOrbs.size() != 0 && regtrig.getMapParams().containsKey("Destination")) + if (torporOrbs.size() != 0 && regtrig.getMapParams().containsKey("Destination")) { - if(!regtrig.getMapParams().get("Destination").equals("Battlefield")) + if (!regtrig.getMapParams().get("Destination").equals("Battlefield")) { return false; } } - + HashMap trigParams = regtrig.getMapParams(); final Player[] decider = new Player[1]; @@ -363,16 +392,19 @@ public class TriggerHandler { //All tests passed, execute ability. if (regtrig instanceof Trigger_TapsForMana) { Ability_Mana abMana = (Ability_Mana) runParams.get("Ability_Mana"); - if (null != abMana) abMana.setUndoable(false); + if (null != abMana) { + abMana.setUndoable(false); + } } - AbilityFactory AF = new AbilityFactory(); + AbilityFactory abilityFactory = new AbilityFactory(); final SpellAbility[] sa = new SpellAbility[1]; Card host = AllZoneUtil.getCardState(regtrig.getHostCard()); - if (host == null) + if (host == null) { host = regtrig.getHostCard(); + } // This will fix the Oblivion Ring issue, but is this the right fix? for (Object o : regtrig.getHostCard().getRemembered()) { if (!host.getRemembered().contains(o)) { @@ -389,7 +421,7 @@ public class TriggerHandler { } }; } else { - sa[0] = AF.getAbility(host.getSVar(trigParams.get("Execute")), host); + sa[0] = abilityFactory.getAbility(host.getSVar(trigParams.get("Execute")), host); } } sa[0].setTrigger(true); @@ -409,13 +441,13 @@ public class TriggerHandler { mand = true; SpellAbility ability = sa[0]; - while(ability != null){ - Target tgt = ability.getTarget(); + while (ability != null) { + Target tgt = ability.getTarget(); - if (tgt != null) { - tgt.setMandatory(true); - } - ability = ability.getSubAbility(); + if (tgt != null) { + tgt.setMandatory(true); + } + ability = ability.getSubAbility(); } } final boolean isMandatory = mand; @@ -886,7 +918,7 @@ public class TriggerHandler { //////////////////////////////////////// @Override public void resolve() { - if(!(regtrig instanceof Trigger_Always)) //State triggers don't do the whole "Intervening If" thing. + if (!(regtrig instanceof Trigger_Always)) //State triggers don't do the whole "Intervening If" thing. { if (!regtrig.requirementsCheck()) { return; @@ -923,8 +955,8 @@ public class TriggerHandler { //Add eventual delayed trigger. if (regtrig.getMapParams().containsKey("DelayedTrigger")) { - String SVarName = regtrig.getMapParams().get("DelayedTrigger"); - Trigger deltrig = parseTrigger(regtrig.getHostCard().getSVar(SVarName), regtrig.getHostCard(),true); + String sVarName = regtrig.getMapParams().get("DelayedTrigger"); + Trigger deltrig = parseTrigger(regtrig.getHostCard().getSVar(sVarName), regtrig.getHostCard(), true); deltrig.setStoredTriggeredObjects(this.getTriggeringObjects()); registerDelayedTrigger(deltrig); } @@ -948,19 +980,15 @@ public class TriggerHandler { //Card src = (Card)(sa[0].getSourceCard().getTriggeringObject("Card")); //System.out.println("Trigger going on stack for "+mode+". Card = "+src); - if(regtrig.getMapParams().containsKey("Static")) - { - if(regtrig.getMapParams().get("Static").equals("True")) - { - AllZone.getGameAction().playSpellAbility_NoStack(wrapperAbility,false); + if (regtrig.getMapParams().containsKey("Static")) { + if (regtrig.getMapParams().get("Static").equals("True")) { + AllZone.getGameAction().playSpellAbility_NoStack(wrapperAbility, false); } - else - { + else { AllZone.getStack().addSimultaneousStackEntry(wrapperAbility); } } - else - { + else { AllZone.getStack().addSimultaneousStackEntry(wrapperAbility); } return true;