diff --git a/.gitattributes b/.gitattributes
index 5dcf710a8a9..53d8b82ecf7 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -11348,7 +11348,6 @@ src/main/java/arcane/util/Util.java svneol=native#text/plain
src/main/java/arcane/util/package-info.java svneol=native#text/plain
src/main/java/forge/AllZone.java svneol=native#text/plain
src/main/java/forge/AllZoneUtil.java svneol=native#text/plain
-src/main/java/forge/ButtonUtil.java svneol=native#text/plain
src/main/java/forge/Card.java svneol=native#text/plain
src/main/java/forge/CardCharactersticName.java -text
src/main/java/forge/CardColor.java svneol=native#text/plain
@@ -11367,19 +11366,12 @@ src/main/java/forge/Command.java svneol=native#text/plain
src/main/java/forge/CommandArgs.java svneol=native#text/plain
src/main/java/forge/CommandList.java svneol=native#text/plain
src/main/java/forge/CommandReturn.java svneol=native#text/plain
-src/main/java/forge/ComputerUtilBlock.java svneol=native#text/plain
src/main/java/forge/Constant.java svneol=native#text/plain
src/main/java/forge/Counters.java svneol=native#text/plain
src/main/java/forge/GameAction.java svneol=native#text/plain
src/main/java/forge/GameActionUtil.java svneol=native#text/plain
src/main/java/forge/GameEntity.java -text
src/main/java/forge/GameLog.java -text
-src/main/java/forge/GuiDisplayUtil.java svneol=native#text/plain
-src/main/java/forge/GuiImportPicture.java svneol=native#text/plain
-src/main/java/forge/GuiInput.java svneol=native#text/plain
-src/main/java/forge/GuiMigrateLocalMWSSetPicturesHQ.java svneol=native#text/plain
-src/main/java/forge/GuiMultipleBlockers.java svneol=native#text/plain
-src/main/java/forge/GuiProgressBarWindow.java svneol=native#text/plain
src/main/java/forge/HandSizeOp.java svneol=native#text/plain
src/main/java/forge/ImageCache.java svneol=native#text/plain
src/main/java/forge/MagicStack.java svneol=native#text/plain
@@ -11389,7 +11381,6 @@ src/main/java/forge/Singletons.java svneol=native#text/plain
src/main/java/forge/StaticEffect.java svneol=native#text/plain
src/main/java/forge/StaticEffects.java svneol=native#text/plain
src/main/java/forge/UndoCommand.java svneol=native#text/plain
-src/main/java/forge/ZCTrigger.java svneol=native#text/plain
src/main/java/forge/card/BoosterData.java -text
src/main/java/forge/card/BoosterGenerator.java svneol=native#text/plain
src/main/java/forge/card/CardBlock.java -text
@@ -11557,6 +11548,7 @@ src/main/java/forge/card/trigger/TriggerTurnFaceUp.java svneol=native#text/plain
src/main/java/forge/card/trigger/TriggerType.java -text
src/main/java/forge/card/trigger/TriggerUnequip.java svneol=native#text/plain
src/main/java/forge/card/trigger/TriggerUntaps.java svneol=native#text/plain
+src/main/java/forge/card/trigger/ZCTrigger.java svneol=native#text/plain
src/main/java/forge/card/trigger/package-info.java svneol=native#text/plain
src/main/java/forge/control/ControlBazaarUI.java -text
src/main/java/forge/control/ControlMatchUI.java -text
@@ -11647,6 +11639,7 @@ src/main/java/forge/game/player/ComputerAIGeneral.java svneol=native#text/plain
src/main/java/forge/game/player/ComputerAIInput.java svneol=native#text/plain
src/main/java/forge/game/player/ComputerUtil.java svneol=native#text/plain
src/main/java/forge/game/player/ComputerUtilAttack.java svneol=native#text/plain
+src/main/java/forge/game/player/ComputerUtilBlock.java svneol=native#text/plain
src/main/java/forge/game/player/DefaultPlayerZone.java svneol=native#text/plain
src/main/java/forge/game/player/HumanPlayer.java svneol=native#text/plain
src/main/java/forge/game/player/IPlayerZone.java svneol=native#text/plain
@@ -11658,6 +11651,12 @@ src/main/java/forge/game/player/PlayerZoneComesIntoPlay.java svneol=native#text/
src/main/java/forge/gui/CardContainer.java svneol=native#text/plain
src/main/java/forge/gui/CardListViewer.java -text
src/main/java/forge/gui/ForgeAction.java svneol=native#text/plain
+src/main/java/forge/gui/GuiDisplayUtil.java svneol=native#text/plain
+src/main/java/forge/gui/GuiImportPicture.java svneol=native#text/plain
+src/main/java/forge/gui/GuiInput.java svneol=native#text/plain
+src/main/java/forge/gui/GuiMigrateLocalMWSSetPicturesHQ.java svneol=native#text/plain
+src/main/java/forge/gui/GuiMultipleBlockers.java svneol=native#text/plain
+src/main/java/forge/gui/GuiProgressBarWindow.java svneol=native#text/plain
src/main/java/forge/gui/GuiUtils.java svneol=native#text/plain
src/main/java/forge/gui/ListChooser.java svneol=native#text/plain
src/main/java/forge/gui/MultiLineLabel.java svneol=native#text/plain
@@ -11872,6 +11871,7 @@ src/main/java/forge/util/StorageView.java -text
src/main/java/forge/util/TextUtil.java -text
src/main/java/forge/util/XmlUtil.java -text
src/main/java/forge/util/package-info.java -text
+src/main/java/forge/view/ButtonUtil.java svneol=native#text/plain
src/main/java/forge/view/FView.java svneol=native#text/plain
src/main/java/forge/view/Main.java -text
src/main/java/forge/view/SplashFrame.java -text
diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java
index ff21b784a48..0e7a28063e0 100644
--- a/src/main/java/forge/Card.java
+++ b/src/main/java/forge/Card.java
@@ -50,6 +50,7 @@ import forge.card.spellability.Target;
import forge.card.staticability.StaticAbility;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerType;
+import forge.card.trigger.ZCTrigger;
import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.item.CardDb;
@@ -3224,7 +3225,7 @@ public class Card extends GameEntity implements Comparable
- * GuiDisplayUtil class. - *
- * - * @author Forge - * @version $Id$ - */ -public final class GuiDisplayUtil { - - private GuiDisplayUtil() { - throw new AssertionError(); - } - - /** - *- * getBorder. - *
- * - * @param card - * a {@link forge.Card} object. - * @return a {@link javax.swing.border.Border} object. - */ - public static Border getBorder(final Card card) { - // color info - if (card == null) { - return BorderFactory.createEmptyBorder(2, 2, 2, 2); - } - java.awt.Color color; - final ArrayList- * devModeGenerateMana. - *
- */ - public static void devModeGenerateMana() { - final Card dummy = new Card(); - dummy.setOwner(AllZone.getHumanPlayer()); - dummy.addController(AllZone.getHumanPlayer()); - final AbilityMana abMana = new AbilityMana(dummy, "0", "W U B G R 1", 10) { - private static final long serialVersionUID = -2164401486331182356L; - - }; - abMana.produceMana(); - } - - /** - *- * formatCardType. - *
- * - * @param card - * a {@link forge.Card} object. - * @return a {@link java.lang.String} object. - */ - public static String formatCardType(final Card card) { - final ArrayList- * cleanString. - *
- * - * @param in - * a {@link java.lang.String} object. - * @return a {@link java.lang.String} object. - */ - public static String cleanString(final String in) { - final StringBuffer out = new StringBuffer(); - char c; - for (int i = 0; i < in.length(); i++) { - c = in.charAt(i); - if ((c == ' ') || (c == '-')) { - out.append('_'); - } else if (Character.isLetterOrDigit(c) || (c == '_')) { - out.append(c); - } - } - return out.toString().toLowerCase(); - } - - /** - *- * cleanStringMWS. - *
- * - * @param in - * a {@link java.lang.String} object. - * @return a {@link java.lang.String} object. - */ - public static String cleanStringMWS(final String in) { - final StringBuffer out = new StringBuffer(); - char c; - for (int i = 0; i < in.length(); i++) { - c = in.charAt(i); - if ((c == '"') || (c == '/')) { - out.append(""); - } else { - out.append(c); - } - } - return out.toString(); - } - - /** - *- * setupNoLandPanel. - *
- * - * @param j - * a {@link javax.swing.JPanel} object. - * @param c - * an array of {@link forge.Card} objects. - */ - public static void setupNoLandPanel(final JPanel j, final Card[] c) { - final ArrayList- * setupLandPanel. - *
- * - * @param j - * a {@link javax.swing.JPanel} object. - * @param c - * an array of {@link forge.Card} objects. - */ - public static void setupLandPanel(final JPanel j, final Card[] c) { - final ArrayList- * setupPanel. - *
- * - * @param p - * a {@link javax.swing.JPanel} object. - * @param list - * a {@link java.util.ArrayList} object. - * @param stack - * a boolean. - */ - private static void setupPanel(final JPanel p, ArrayList- * setupNoLandPermPanel. - *
- * - * @param p - * a {@link javax.swing.JPanel} object. - * @param list - * a {@link java.util.ArrayList} object. - * @param stack - * a boolean. - */ - private static void setupNoLandPermPanel(final JPanel p, ArrayList- * getPlaneswalkers. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * getEquippedEnchantedCreatures. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * getNonTokenCreatures. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * getTokenCreatures. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * getTokenCreatures. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @param tokenName - * a {@link java.lang.String} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * getMoxen. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @param moxName - * a {@link java.lang.String} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * getNonCreatureArtifacts. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * getGlobalEnchantments. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * getCard. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @param name - * a {@link java.lang.String} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * getEnchantedLands. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * getBasics. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @param color - * a {@link java.lang.String} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * getNonBasics. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * getNonBasicLand. - *
- * - * @param cards - * a {@link java.util.ArrayList} object. - * @param landName - * a {@link java.lang.String} object. - * @return a {@link java.util.ArrayList} object. - */ - public static ArrayList- * isStackable. - *
- * - * @param c - * a {@link forge.Card} object. - * @return a boolean. - */ - public static boolean isStackable(final Card c) { - if (c.isLand() || (c.getName().startsWith("Mox") && !c.getName().equals("Mox Diamond")) - || (c.isLand() && c.isEnchanted()) || (c.isAura() && c.isEnchanting()) - || (c.isToken() && CardFactoryUtil.multipleControlled(c)) - || (c.isCreature() && (c.isEquipped() || c.isEnchanted())) || (c.isEquipment() && c.isEquipping()) - || (c.isEnchantment())) { - return true; - } - - return false; - } - - // ~ - /** - *- * setupConnectedCards. - *
- * - * @param connectedCards - * a {@link java.util.ArrayList} object. - */ - public static void setupConnectedCards(final ArrayList- * setupPlayZone. - *
- * - * @param p - * a {@link arcane.ui.PlayArea} object. - * @param c - * an array of {@link forge.Card} objects. - */ - public static void setupPlayZone(final PlayArea p, final List- * updateGUI. - *
- */ - public static void updateGUI() { - AllZone.getComputerPlayer().getZone(Zone.Battlefield).updateObservers(); - AllZone.getHumanPlayer().getZone(Zone.Battlefield).updateObservers(); - //AllZone.getHumanPlayer().getZone(Zone.Hand).updateObservers(); - AllZone.getComputerPlayer().updateObservers(); - AllZone.getHumanPlayer().updateObservers(); - } - - /** - *- * devSetupGameState. - *
- */ - public static void devSetupGameState() { - String tHumanLife = "-1"; - String tComputerLife = "-1"; - String tHumanSetupCardsInPlay = "NONE"; - String tComputerSetupCardsInPlay = "NONE"; - String tHumanSetupCardsInHand = "NONE"; - String tComputerSetupCardsInHand = "NONE"; - String tHumanSetupGraveyard = "NONE"; - String tComputerSetupGraveyard = "NONE"; - String tHumanSetupLibrary = "NONE"; - String tComputerSetupLibrary = "NONE"; - String tHumanSetupExile = "NONE"; - String tComputerSetupExile = "NONE"; - String tChangePlayer = "NONE"; - String tChangePhase = "NONE"; - - final String wd = "."; - final JFileChooser fc = new JFileChooser(wd); - final int rc = fc.showDialog(null, "Select Game State File"); - if (rc != JFileChooser.APPROVE_OPTION) { - return; - } - - try { - final FileInputStream fstream = new FileInputStream(fc.getSelectedFile().getAbsolutePath()); - final DataInputStream in = new DataInputStream(fstream); - final BufferedReader br = new BufferedReader(new InputStreamReader(in)); - - String temp = ""; - - while ((temp = br.readLine()) != null) { - final String[] tempData = temp.split("="); - - if (tempData.length < 2) { - continue; - } - if (tempData[0].toCharArray()[0] == '#') { - continue; - } - - final String categoryName = tempData[0]; - final String categoryValue = tempData[1]; - - if (categoryName.toLowerCase().equals("humanlife")) { - tHumanLife = categoryValue; - } else if (categoryName.toLowerCase().equals("ailife")) { - tComputerLife = categoryValue; - } else if (categoryName.toLowerCase().equals("humancardsinplay")) { - tHumanSetupCardsInPlay = categoryValue; - } else if (categoryName.toLowerCase().equals("aicardsinplay")) { - tComputerSetupCardsInPlay = categoryValue; - } else if (categoryName.toLowerCase().equals("humancardsinhand")) { - tHumanSetupCardsInHand = categoryValue; - } else if (categoryName.toLowerCase().equals("aicardsinhand")) { - tComputerSetupCardsInHand = categoryValue; - } else if (categoryName.toLowerCase().equals("humancardsingraveyard")) { - tHumanSetupGraveyard = categoryValue; - } else if (categoryName.toLowerCase().equals("aicardsingraveyard")) { - tComputerSetupGraveyard = categoryValue; - } else if (categoryName.toLowerCase().equals("humancardsinlibrary")) { - tHumanSetupLibrary = categoryValue; - } else if (categoryName.toLowerCase().equals("aicardsinlibrary")) { - tComputerSetupLibrary = categoryValue; - } else if (categoryName.toLowerCase().equals("humancardsinexile")) { - tHumanSetupExile = categoryValue; - } else if (categoryName.toLowerCase().equals("aicardsinexile")) { - tComputerSetupExile = categoryValue; - } else if (categoryName.toLowerCase().equals("activeplayer")) { - tChangePlayer = categoryValue; - } else if (categoryName.toLowerCase().equals("activephase")) { - tChangePhase = categoryValue; - } - } - - in.close(); - } catch (final FileNotFoundException fnfe) { - JOptionPane.showMessageDialog(null, "File not found: " + fc.getSelectedFile().getAbsolutePath()); - } catch (final Exception e) { - JOptionPane.showMessageDialog(null, "Error loading battle setup file!"); - return; - } - - final int setHumanLife = Integer.parseInt(tHumanLife); - final int setComputerLife = Integer.parseInt(tComputerLife); - - final String[] humanSetupCardsInPlay = tHumanSetupCardsInPlay.split(";"); - final String[] computerSetupCardsInPlay = tComputerSetupCardsInPlay.split(";"); - final String[] humanSetupCardsInHand = tHumanSetupCardsInHand.split(";"); - final String[] computerSetupCardsInHand = tComputerSetupCardsInHand.split(";"); - final String[] humanSetupGraveyard = tHumanSetupGraveyard.split(";"); - final String[] computerSetupGraveyard = tComputerSetupGraveyard.split(";"); - final String[] humanSetupLibrary = tHumanSetupLibrary.split(";"); - final String[] computerSetupLibrary = tComputerSetupLibrary.split(";"); - final String[] humanSetupExile = tHumanSetupExile.split(";"); - final String[] computerSetupExile = tComputerSetupExile.split(";"); - - CardList humanDevSetup = new CardList(); - CardList computerDevSetup = new CardList(); - CardList humanDevHandSetup = new CardList(); - CardList computerDevHandSetup = new CardList(); - CardList humanDevGraveyardSetup = new CardList(); - CardList computerDevGraveyardSetup = new CardList(); - CardList humanDevLibrarySetup = new CardList(); - CardList computerDevLibrarySetup = new CardList(); - CardList humanDevExileSetup = new CardList(); - CardList computerDevExileSetup = new CardList(); - - if (!tChangePlayer.trim().toLowerCase().equals("none")) { - if (tChangePlayer.trim().toLowerCase().equals("human")) { - Singletons.getModel().getGameState().getPhaseHandler().setPlayerTurn(AllZone.getHumanPlayer()); - } - if (tChangePlayer.trim().toLowerCase().equals("ai")) { - Singletons.getModel().getGameState().getPhaseHandler().setPlayerTurn(AllZone.getComputerPlayer()); - } - } - - if (!tChangePhase.trim().toLowerCase().equals("none")) { - Singletons.getModel().getGameState().getPhaseHandler().setDevPhaseState(forge.game.phase.PhaseType.smartValueOf(tChangePhase)); - } - - if (!tHumanSetupCardsInPlay.trim().toLowerCase().equals("none")) { - humanDevSetup = GuiDisplayUtil.devProcessCardsForZone(humanSetupCardsInPlay, AllZone.getHumanPlayer()); - } - - if (!tHumanSetupCardsInHand.trim().toLowerCase().equals("none")) { - humanDevHandSetup = GuiDisplayUtil.devProcessCardsForZone(humanSetupCardsInHand, AllZone.getHumanPlayer()); - } - - if (!tComputerSetupCardsInPlay.trim().toLowerCase().equals("none")) { - computerDevSetup = GuiDisplayUtil.devProcessCardsForZone(computerSetupCardsInPlay, - AllZone.getComputerPlayer()); - } - - if (!tComputerSetupCardsInHand.trim().toLowerCase().equals("none")) { - computerDevHandSetup = GuiDisplayUtil.devProcessCardsForZone(computerSetupCardsInHand, - AllZone.getComputerPlayer()); - } - - if (!tComputerSetupGraveyard.trim().toLowerCase().equals("none")) { - computerDevGraveyardSetup = GuiDisplayUtil.devProcessCardsForZone(computerSetupGraveyard, - AllZone.getComputerPlayer()); - } - - if (!tHumanSetupGraveyard.trim().toLowerCase().equals("none")) { - humanDevGraveyardSetup = GuiDisplayUtil.devProcessCardsForZone(humanSetupGraveyard, - AllZone.getHumanPlayer()); - } - - if (!tHumanSetupLibrary.trim().toLowerCase().equals("none")) { - humanDevLibrarySetup = GuiDisplayUtil.devProcessCardsForZone(humanSetupLibrary, AllZone.getHumanPlayer()); - } - - if (!tComputerSetupLibrary.trim().toLowerCase().equals("none")) { - computerDevLibrarySetup = GuiDisplayUtil.devProcessCardsForZone(computerSetupLibrary, - AllZone.getComputerPlayer()); - } - - if (!tHumanSetupExile.trim().toLowerCase().equals("none")) { - humanDevExileSetup = GuiDisplayUtil.devProcessCardsForZone(humanSetupExile, AllZone.getHumanPlayer()); - } - - if (!tComputerSetupExile.trim().toLowerCase().equals("none")) { - computerDevExileSetup = GuiDisplayUtil.devProcessCardsForZone(computerSetupExile, - AllZone.getComputerPlayer()); - } - - AllZone.getTriggerHandler().suppressMode(TriggerType.ChangesZone); - AllZone.getCombat().reset(); - for (final Card c : humanDevSetup) { - AllZone.getHumanPlayer().getZone(Zone.Hand).add(c); - Singletons.getModel().getGameAction().moveToPlay(c); - c.setSickness(false); - } - - for (final Card c : computerDevSetup) { - AllZone.getComputerPlayer().getZone(Zone.Hand).add(c); - Singletons.getModel().getGameAction().moveToPlay(c); - c.setSickness(false); - } - - if (computerDevGraveyardSetup.size() > 0) { - AllZone.getComputerPlayer().getZone(Zone.Graveyard).setCards(computerDevGraveyardSetup); - } - if (humanDevGraveyardSetup.size() > 0) { - AllZone.getHumanPlayer().getZone(Zone.Graveyard).setCards(humanDevGraveyardSetup); - } - - if (computerDevHandSetup.size() > 0) { - AllZone.getComputerPlayer().getZone(Zone.Hand).setCards(computerDevHandSetup); - } - if (humanDevHandSetup.size() > 0) { - AllZone.getHumanPlayer().getZone(Zone.Hand).setCards(humanDevHandSetup); - } - - if (humanDevLibrarySetup.size() > 0) { - AllZone.getHumanPlayer().getZone(Zone.Library).setCards(humanDevLibrarySetup); - } - if (computerDevLibrarySetup.size() > 0) { - AllZone.getComputerPlayer().getZone(Zone.Library).setCards(computerDevLibrarySetup); - } - - if (humanDevExileSetup.size() > 0) { - AllZone.getHumanPlayer().getZone(Zone.Exile).setCards(humanDevExileSetup); - } - if (computerDevExileSetup.size() > 0) { - AllZone.getComputerPlayer().getZone(Zone.Exile).setCards(computerDevExileSetup); - } - - AllZone.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); - - if (setComputerLife > 0) { - AllZone.getComputerPlayer().setLife(setComputerLife, null); - } - if (setHumanLife > 0) { - AllZone.getHumanPlayer().setLife(setHumanLife, null); - } - - Singletons.getModel().getGameAction().checkStateEffects(); - Singletons.getModel().getGameState().getPhaseHandler().updateObservers(); - AllZone.getHumanPlayer().getZone(Zone.Exile).updateObservers(); - AllZone.getComputerPlayer().getZone(Zone.Exile).updateObservers(); - AllZone.getHumanPlayer().getZone(Zone.Hand).updateObservers(); - AllZone.getComputerPlayer().getZone(Zone.Hand).updateObservers(); - AllZone.getHumanPlayer().getZone(Zone.Graveyard).updateObservers(); - AllZone.getComputerPlayer().getZone(Zone.Graveyard).updateObservers(); - AllZone.getHumanPlayer().getZone(Zone.Battlefield).updateObservers(); - AllZone.getComputerPlayer().getZone(Zone.Battlefield).updateObservers(); - AllZone.getHumanPlayer().getZone(Zone.Library).updateObservers(); - AllZone.getComputerPlayer().getZone(Zone.Library).updateObservers(); - } - - /** - *- * devProcessCardsForZone. - *
- * - * @param data - * an array of {@link java.lang.String} objects. - * @param player - * a {@link forge.game.player.Player} object. - * @return a {@link forge.CardList} object. - */ - public static CardList devProcessCardsForZone(final String[] data, final Player player) { - final CardList cl = new CardList(); - for (final String element : data) { - final String[] cardinfo = element.trim().split("\\|"); - - final Card c = AllZone.getCardFactory().getCard(cardinfo[0], player); - - boolean hasSetCurSet = false; - for (final String info : cardinfo) { - if (info.startsWith("Set:")) { - c.setCurSetCode(info.substring(info.indexOf(':') + 1)); - hasSetCurSet = true; - } else if (info.equalsIgnoreCase("Tapped:True")) { - c.tap(); - } else if (info.startsWith("Counters:")) { - final String[] counterStrings = info.substring(info.indexOf(':') + 1).split(","); - for (final String counter : counterStrings) { - c.addCounter(Counters.valueOf(counter), 1); - } - } else if (info.equalsIgnoreCase("SummonSick:True")) { - c.setSickness(true); - } else if (info.equalsIgnoreCase("FaceDown:True")) { - c.setState(CardCharactersticName.FaceDown); - } - } - - if (!hasSetCurSet) { - c.setCurSetCode(c.getMostRecentSet()); - } - - c.setImageFilename(CardUtil.buildFilename(c)); - cl.add(c); - } - return cl; - } - - /** - *- * devModeTutor. - *
- * - * @since 1.0.15 - */ - public static void devModeTutor() { - final CardList lib = AllZone.getHumanPlayer().getCardsIn(Zone.Library); - final Object o = GuiUtils.chooseOneOrNone("Choose a card", lib.toArray()); - if (null == o) { - return; - } else { - final Card c = (Card) o; - Singletons.getModel().getGameAction().moveToHand(c); - } - } - - /** - *- * devModeTutor. - *
- * - * @since 1.2.7 - */ - public static void devModeAddAnyCard() { - final Iterable- * devModeAddCounter. - *
- * - * @since 1.0.15 - */ - public static void devModeAddCounter() { - final CardList play = AllZoneUtil.getCardsIn(Zone.Battlefield); - final Object o = GuiUtils.chooseOneOrNone("Add counters to which card?", play.toArray()); - if (null == o) { - return; - } else { - final Card c = (Card) o; - final Counters counter = GuiUtils.chooseOneOrNone("Which type of counter?", Counters.values()); - if (null == counter) { - return; - } else { - final Integer[] integers = new Integer[99]; - for (int j = 0; j < 99; j++) { - integers[j] = Integer.valueOf(j); - } - final Integer i = GuiUtils.chooseOneOrNone("How many counters?", integers); - if (null == i) { - return; - } else { - c.addCounterFromNonEffect(counter, i); - } - } - } - } - - /** - *- * devModeTapPerm. - *
- * - * @since 1.0.15 - */ - public static void devModeTapPerm() { - final CardList play = AllZoneUtil.getCardsIn(Zone.Battlefield); - final Object o = GuiUtils.chooseOneOrNone("Choose a permanent", play.toArray()); - if (null == o) { - return; - } else { - final Card c = (Card) o; - c.tap(); - } - } - - /** - *- * devModeUntapPerm. - *
- * - * @since 1.0.15 - */ - public static void devModeUntapPerm() { - final CardList play = AllZoneUtil.getCardsIn(Zone.Battlefield); - final Object o = GuiUtils.chooseOneOrNone("Choose a permanent", play.toArray()); - if (null == o) { - return; - } else { - final Card c = (Card) o; - c.untap(); - } - } - - /** - *- * devModeUnlimitedLand. - *
- * - * @since 1.0.16 - */ - public static void devModeUnlimitedLand() { - AllZone.getHumanPlayer().addMaxLandsToPlay(100); - } - - /** - *- * devModeSetLife. - *
- * - * @since 1.1.3 - */ - public static void devModeSetLife() { - final Listdiff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java index 0e1056372b8..4b43378a51b 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java @@ -25,7 +25,6 @@ import java.util.Random; import forge.AllZone; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.CardListFilter; @@ -49,6 +48,7 @@ import forge.game.player.Player; import forge.game.player.PlayerZone; import forge.gui.GuiUtils; import forge.util.MyRandom; +import forge.view.ButtonUtil; /** *
diff --git a/src/main/java/forge/card/cardfactory/AbstractCardFactory.java b/src/main/java/forge/card/cardfactory/AbstractCardFactory.java index 38278830aad..561bc1808b2 100644 --- a/src/main/java/forge/card/cardfactory/AbstractCardFactory.java +++ b/src/main/java/forge/card/cardfactory/AbstractCardFactory.java @@ -30,7 +30,6 @@ import javax.swing.JOptionPane; import net.slightlymagic.braids.util.ImmutableIterableFrom; import forge.AllZone; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardCharactersticName; import forge.CardList; @@ -61,6 +60,7 @@ import forge.gui.GuiUtils; import forge.properties.ForgeProps; import forge.properties.NewConstants; import forge.util.FileUtil; +import forge.view.ButtonUtil; /** *
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java index 9ae97ac63e8..37fda069da1 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java @@ -27,7 +27,6 @@ import com.esotericsoftware.minlog.Log; import forge.AllZone; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardCharactersticName; import forge.CardList; @@ -56,6 +55,7 @@ import forge.game.player.Player; import forge.game.player.PlayerZone; import forge.gui.GuiUtils; import forge.util.MyRandom; +import forge.view.ButtonUtil; /** *
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryLands.java b/src/main/java/forge/card/cardfactory/CardFactoryLands.java index aca5d8f7f14..cb87cdb0d26 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryLands.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryLands.java @@ -21,7 +21,6 @@ import javax.swing.JOptionPane; import forge.AllZone; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.CardListFilter; @@ -42,6 +41,7 @@ import forge.game.player.Player; import forge.game.player.PlayerZone; import forge.gui.GuiUtils; import forge.util.MyRandom; +import forge.view.ButtonUtil; /** *
diff --git a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java index ee082dc3605..d953008e271 100644 --- a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java +++ b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java @@ -28,7 +28,6 @@ import com.esotericsoftware.minlog.Log; import forge.AllZone; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.CardListFilter; @@ -52,6 +51,7 @@ import forge.game.player.Player; import forge.game.player.PlayerUtil; import forge.game.player.PlayerZone; import forge.gui.GuiUtils; +import forge.view.ButtonUtil; /** *
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index a1605ec94f3..bbf5ca68d99 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -30,7 +30,6 @@ import com.esotericsoftware.minlog.Log; import forge.AllZone; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardCharactersticName; import forge.CardList; @@ -70,6 +69,7 @@ import forge.game.player.Player; import forge.game.player.PlayerZone; import forge.gui.GuiUtils; import forge.util.MyRandom; +import forge.view.ButtonUtil; /** *
diff --git a/src/main/java/forge/card/cost/CostDiscard.java b/src/main/java/forge/card/cost/CostDiscard.java index 0f2be885a0c..c2614c2c447 100644 --- a/src/main/java/forge/card/cost/CostDiscard.java +++ b/src/main/java/forge/card/cost/CostDiscard.java @@ -18,7 +18,6 @@ package forge.card.cost; import forge.AllZone; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.CardListUtil; @@ -31,6 +30,7 @@ import forge.control.input.Input; import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.player.PlayerZone; +import forge.view.ButtonUtil; /** * The Class CostDiscard. diff --git a/src/main/java/forge/card/cost/CostExile.java b/src/main/java/forge/card/cost/CostExile.java index 5d1e6b2bd26..877fc64f256 100644 --- a/src/main/java/forge/card/cost/CostExile.java +++ b/src/main/java/forge/card/cost/CostExile.java @@ -22,7 +22,6 @@ import java.util.Iterator; import javax.swing.JOptionPane; import forge.AllZone; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.Constant; @@ -36,6 +35,7 @@ import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.player.PlayerZone; import forge.gui.GuiUtils; +import forge.view.ButtonUtil; /** * The Class CostExile. diff --git a/src/main/java/forge/card/cost/CostMana.java b/src/main/java/forge/card/cost/CostMana.java index 41762ea7405..878f3dd3ec6 100644 --- a/src/main/java/forge/card/cost/CostMana.java +++ b/src/main/java/forge/card/cost/CostMana.java @@ -20,7 +20,6 @@ package forge.card.cost; import com.google.common.base.Strings; import forge.AllZone; -import forge.ButtonUtil; import forge.Card; import forge.Constant.Zone; import forge.Singletons; @@ -35,6 +34,7 @@ import forge.game.phase.PhaseHandler; import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.player.PlayerZone; +import forge.view.ButtonUtil; /** * The Class CostMana. diff --git a/src/main/java/forge/card/cost/CostPutCounter.java b/src/main/java/forge/card/cost/CostPutCounter.java index dda985d818a..16241b3378d 100644 --- a/src/main/java/forge/card/cost/CostPutCounter.java +++ b/src/main/java/forge/card/cost/CostPutCounter.java @@ -17,7 +17,6 @@ */ package forge.card.cost; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.Constant.Zone; @@ -29,6 +28,7 @@ import forge.card.spellability.SpellAbility; import forge.control.input.Input; import forge.game.player.Player; import forge.game.player.PlayerZone; +import forge.view.ButtonUtil; /** * The Class CostPutCounter. diff --git a/src/main/java/forge/card/cost/CostReturn.java b/src/main/java/forge/card/cost/CostReturn.java index db7670b1c20..72ab989eccb 100644 --- a/src/main/java/forge/card/cost/CostReturn.java +++ b/src/main/java/forge/card/cost/CostReturn.java @@ -20,7 +20,6 @@ package forge.card.cost; import javax.swing.JOptionPane; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.Constant.Zone; @@ -31,6 +30,7 @@ import forge.control.input.Input; import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.player.PlayerZone; +import forge.view.ButtonUtil; /** * The Class CostReturn. diff --git a/src/main/java/forge/card/cost/CostReveal.java b/src/main/java/forge/card/cost/CostReveal.java index cc2400eb92f..2c847d64f38 100644 --- a/src/main/java/forge/card/cost/CostReveal.java +++ b/src/main/java/forge/card/cost/CostReveal.java @@ -18,7 +18,6 @@ package forge.card.cost; import forge.AllZone; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.Constant; @@ -31,6 +30,7 @@ import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.player.PlayerZone; import forge.gui.GuiUtils; +import forge.view.ButtonUtil; /** * The Class CostReveal. diff --git a/src/main/java/forge/card/cost/CostSacrifice.java b/src/main/java/forge/card/cost/CostSacrifice.java index 7c52f920611..8b11526aca8 100644 --- a/src/main/java/forge/card/cost/CostSacrifice.java +++ b/src/main/java/forge/card/cost/CostSacrifice.java @@ -20,7 +20,6 @@ package forge.card.cost; import javax.swing.JOptionPane; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.Constant.Zone; @@ -31,6 +30,7 @@ import forge.control.input.Input; import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.player.PlayerZone; +import forge.view.ButtonUtil; /** * The Class CostSacrifice. diff --git a/src/main/java/forge/card/cost/CostTapType.java b/src/main/java/forge/card/cost/CostTapType.java index 4d166118201..806f19ed683 100644 --- a/src/main/java/forge/card/cost/CostTapType.java +++ b/src/main/java/forge/card/cost/CostTapType.java @@ -17,7 +17,6 @@ */ package forge.card.cost; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.CardListFilter; @@ -30,6 +29,7 @@ import forge.control.input.Input; import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.player.PlayerZone; +import forge.view.ButtonUtil; /** * The Class CostTapType. diff --git a/src/main/java/forge/card/spellability/AbilityTriggered.java b/src/main/java/forge/card/spellability/AbilityTriggered.java index 6e17daa8444..faa1f0612d9 100644 --- a/src/main/java/forge/card/spellability/AbilityTriggered.java +++ b/src/main/java/forge/card/spellability/AbilityTriggered.java @@ -23,8 +23,8 @@ import forge.Card; import forge.CardCharactersticName; import forge.CardList; import forge.Command; -import forge.ZCTrigger; import forge.card.CardCharacteristics; +import forge.card.trigger.ZCTrigger; /** *
@@ -79,7 +79,7 @@ public class AbilityTriggered extends Ability implements Command { * @param sourceCommand * a {@link forge.Command} object. * @param situation - * a {@link forge.ZCTrigger} object. + * a {@link forge.card.trigger.ZCTrigger} object. */ public AbilityTriggered(final Card sourceCard, final Command sourceCommand, final ZCTrigger situation) { super(sourceCard, "0"); diff --git a/src/main/java/forge/card/spellability/SpellPermanent.java b/src/main/java/forge/card/spellability/SpellPermanent.java index 8ae91ef0d9e..35c9cd97708 100644 --- a/src/main/java/forge/card/spellability/SpellPermanent.java +++ b/src/main/java/forge/card/spellability/SpellPermanent.java @@ -21,7 +21,6 @@ import java.util.HashMap; import forge.AllZone; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.CardUtil; @@ -40,6 +39,7 @@ import forge.game.phase.PhaseType; import forge.game.player.ComputerAIGeneral; import forge.game.player.ComputerUtil; import forge.game.player.Player; +import forge.view.ButtonUtil; /** *
diff --git a/src/main/java/forge/card/spellability/TargetSelection.java b/src/main/java/forge/card/spellability/TargetSelection.java index e9454cc8c25..fc1911e64b0 100644 --- a/src/main/java/forge/card/spellability/TargetSelection.java +++ b/src/main/java/forge/card/spellability/TargetSelection.java @@ -23,7 +23,6 @@ import java.util.List; import forge.AllZone; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.Constant; @@ -34,6 +33,7 @@ import forge.control.input.Input; import forge.game.player.Player; import forge.game.player.PlayerZone; import forge.gui.GuiUtils; +import forge.view.ButtonUtil; /** *
diff --git a/src/main/java/forge/ZCTrigger.java b/src/main/java/forge/card/trigger/ZCTrigger.java
similarity index 96%
rename from src/main/java/forge/ZCTrigger.java
rename to src/main/java/forge/card/trigger/ZCTrigger.java
index 46e28489a1e..23fa49e2e6f 100644
--- a/src/main/java/forge/ZCTrigger.java
+++ b/src/main/java/forge/card/trigger/ZCTrigger.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
@@ -84,7 +84,7 @@ public enum ZCTrigger { * * @param description * a {@link java.lang.String} object. - * @return a {@link forge.ZCTrigger} object. + * @return a {@link forge.card.trigger.ZCTrigger} object. */ public static ZCTrigger getTrigger(final String description) { for (final ZCTrigger t : ZCTrigger.values()) { diff --git a/src/main/java/forge/control/ControlMatchUI.java b/src/main/java/forge/control/ControlMatchUI.java index c497d3834e8..8af3fba7bb1 100644 --- a/src/main/java/forge/control/ControlMatchUI.java +++ b/src/main/java/forge/control/ControlMatchUI.java @@ -29,7 +29,6 @@ import forge.Card; import forge.CardList; import forge.Constant; import forge.Constant.Zone; -import forge.GuiMultipleBlockers; import forge.Singletons; import forge.control.match.ControlDetail; import forge.control.match.ControlDock; @@ -42,6 +41,7 @@ import forge.game.GameType; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.gui.CardContainer; +import forge.gui.GuiMultipleBlockers; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FSkin; import forge.properties.ForgePreferences.FPref; diff --git a/src/main/java/forge/control/input/InputAttack.java b/src/main/java/forge/control/input/InputAttack.java index ac97b059797..2f715a47f1f 100644 --- a/src/main/java/forge/control/input/InputAttack.java +++ b/src/main/java/forge/control/input/InputAttack.java @@ -18,13 +18,13 @@ package forge.control.input; import forge.AllZone; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.Constant; import forge.Constant.Zone; import forge.game.phase.CombatUtil; import forge.game.player.PlayerZone; +import forge.view.ButtonUtil; import forge.Singletons; /** diff --git a/src/main/java/forge/control/input/InputBlock.java b/src/main/java/forge/control/input/InputBlock.java index c4ad5f10690..d053b26be04 100644 --- a/src/main/java/forge/control/input/InputBlock.java +++ b/src/main/java/forge/control/input/InputBlock.java @@ -20,12 +20,12 @@ package forge.control.input; import java.util.ArrayList; import forge.AllZone; -import forge.ButtonUtil; import forge.Card; import forge.Constant; import forge.Singletons; import forge.game.phase.CombatUtil; import forge.game.player.PlayerZone; +import forge.view.ButtonUtil; /** *
diff --git a/src/main/java/forge/control/input/InputCleanup.java b/src/main/java/forge/control/input/InputCleanup.java index f3f1242a983..559031fc19e 100644 --- a/src/main/java/forge/control/input/InputCleanup.java +++ b/src/main/java/forge/control/input/InputCleanup.java @@ -18,12 +18,12 @@ package forge.control.input; import forge.AllZone; -import forge.ButtonUtil; import forge.Card; import forge.Constant; import forge.Constant.Zone; import forge.game.phase.CombatUtil; import forge.game.player.PlayerZone; +import forge.view.ButtonUtil; import forge.Singletons; /** diff --git a/src/main/java/forge/control/input/InputMulligan.java b/src/main/java/forge/control/input/InputMulligan.java index 49ace6db941..f6daa918f7e 100644 --- a/src/main/java/forge/control/input/InputMulligan.java +++ b/src/main/java/forge/control/input/InputMulligan.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import forge.AllZone; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.Constant; @@ -39,6 +38,7 @@ import forge.game.player.Player; import forge.game.player.PlayerZone; import forge.quest.QuestController; import forge.quest.bazaar.QuestItemType; +import forge.view.ButtonUtil; /** *
* InputMulligan class. diff --git a/src/main/java/forge/control/input/InputPassPriority.java b/src/main/java/forge/control/input/InputPassPriority.java index aaa314cf05f..107345fb688 100644 --- a/src/main/java/forge/control/input/InputPassPriority.java +++ b/src/main/java/forge/control/input/InputPassPriority.java @@ -18,13 +18,13 @@ package forge.control.input; import forge.AllZone; -import forge.ButtonUtil; import forge.Card; -import forge.GuiDisplayUtil; import forge.Singletons; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.player.PlayerZone; +import forge.gui.GuiDisplayUtil; +import forge.view.ButtonUtil; /** *
diff --git a/src/main/java/forge/control/input/InputPayManaCost.java b/src/main/java/forge/control/input/InputPayManaCost.java index e3878cbc243..79093a40e88 100644 --- a/src/main/java/forge/control/input/InputPayManaCost.java +++ b/src/main/java/forge/control/input/InputPayManaCost.java @@ -18,7 +18,6 @@ package forge.control.input; import forge.AllZone; -import forge.ButtonUtil; import forge.Card; import forge.Constant.Zone; import forge.Singletons; @@ -28,6 +27,7 @@ import forge.card.trigger.TriggerType; import forge.game.phase.PhaseHandler; import forge.game.player.Player; import forge.game.player.PlayerZone; +import forge.view.ButtonUtil; //pays the cost of a card played from the player's hand //the card is removed from the players hand if the cost is paid diff --git a/src/main/java/forge/control/input/InputPayManaCostAbility.java b/src/main/java/forge/control/input/InputPayManaCostAbility.java index 8ae311c208e..123387abc48 100644 --- a/src/main/java/forge/control/input/InputPayManaCostAbility.java +++ b/src/main/java/forge/control/input/InputPayManaCostAbility.java @@ -18,7 +18,6 @@ package forge.control.input; import forge.AllZone; -import forge.ButtonUtil; import forge.Card; import forge.Command; import forge.Constant.Zone; @@ -26,6 +25,7 @@ import forge.Singletons; import forge.card.mana.ManaCost; import forge.card.spellability.SpellAbility; import forge.game.player.PlayerZone; +import forge.view.ButtonUtil; //if cost is paid, Command.execute() is called diff --git a/src/main/java/forge/control/match/ControlField.java b/src/main/java/forge/control/match/ControlField.java index 89d505ac6e6..f1f81ac8cd9 100644 --- a/src/main/java/forge/control/match/ControlField.java +++ b/src/main/java/forge/control/match/ControlField.java @@ -37,7 +37,6 @@ import forge.Card; import forge.CardList; import forge.Constant; import forge.Constant.Zone; -import forge.GuiDisplayUtil; import forge.Singletons; import forge.card.cardfactory.CardFactoryUtil; import forge.control.input.Input; @@ -49,6 +48,7 @@ import forge.control.input.InputPayManaCostAbility; import forge.game.player.Player; import forge.game.player.PlayerZone; import forge.gui.ForgeAction; +import forge.gui.GuiDisplayUtil; import forge.gui.GuiUtils; import forge.gui.toolbox.FLabel; import forge.properties.ForgeProps; diff --git a/src/main/java/forge/control/match/ControlMessage.java b/src/main/java/forge/control/match/ControlMessage.java index 000436e7456..d8e191ff119 100644 --- a/src/main/java/forge/control/match/ControlMessage.java +++ b/src/main/java/forge/control/match/ControlMessage.java @@ -21,8 +21,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import forge.Constant; -import forge.GuiInput; import forge.Singletons; +import forge.gui.GuiInput; import forge.view.match.ViewMessage; /** diff --git a/src/main/java/forge/control/match/ControlTabber.java b/src/main/java/forge/control/match/ControlTabber.java index 28b8cd66d93..870d8ae7818 100644 --- a/src/main/java/forge/control/match/ControlTabber.java +++ b/src/main/java/forge/control/match/ControlTabber.java @@ -24,9 +24,9 @@ import java.util.Observable; import java.util.Observer; import forge.AllZone; -import forge.GuiDisplayUtil; import forge.MyObservable; import forge.Singletons; +import forge.gui.GuiDisplayUtil; import forge.properties.ForgePreferences.FPref; import forge.view.match.ViewTabber; diff --git a/src/main/java/forge/game/phase/Untap.java b/src/main/java/forge/game/phase/Untap.java index 8b1a9e36b79..a08d37874ba 100644 --- a/src/main/java/forge/game/phase/Untap.java +++ b/src/main/java/forge/game/phase/Untap.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import forge.AllZone; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardList; import forge.CardListFilter; @@ -35,6 +34,7 @@ import forge.card.cardfactory.CardFactoryUtil; import forge.control.input.Input; import forge.game.player.Player; import forge.game.player.PlayerZone; +import forge.view.ButtonUtil; /** *
diff --git a/src/main/java/forge/game/phase/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java index 5c0042fd474..779909232d5 100644 --- a/src/main/java/forge/game/phase/Upkeep.java +++ b/src/main/java/forge/game/phase/Upkeep.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import forge.AllZone; import forge.AllZoneUtil; -import forge.ButtonUtil; import forge.Card; import forge.CardCharactersticName; import forge.CardList; @@ -46,6 +45,7 @@ import forge.game.player.Player; import forge.game.player.PlayerUtil; import forge.game.player.PlayerZone; import forge.gui.GuiUtils; +import forge.view.ButtonUtil; /** *
diff --git a/src/main/java/forge/game/player/ComputerAIGeneral.java b/src/main/java/forge/game/player/ComputerAIGeneral.java
index d4878be9109..24880adb1d7 100644
--- a/src/main/java/forge/game/player/ComputerAIGeneral.java
+++ b/src/main/java/forge/game/player/ComputerAIGeneral.java
@@ -27,7 +27,6 @@ import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
-import forge.ComputerUtilBlock;
import forge.Singletons;
import forge.Constant.Zone;
import forge.card.abilityfactory.AbilityFactory;
diff --git a/src/main/java/forge/game/player/ComputerUtil.java b/src/main/java/forge/game/player/ComputerUtil.java
index 64b12ae366a..b6f68ba5e6d 100644
--- a/src/main/java/forge/game/player/ComputerUtil.java
+++ b/src/main/java/forge/game/player/ComputerUtil.java
@@ -29,7 +29,6 @@ import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.CardUtil;
-import forge.ComputerUtilBlock;
import forge.Constant;
import forge.GameAction;
import forge.Singletons;
diff --git a/src/main/java/forge/ComputerUtilBlock.java b/src/main/java/forge/game/player/ComputerUtilBlock.java
similarity index 99%
rename from src/main/java/forge/ComputerUtilBlock.java
rename to src/main/java/forge/game/player/ComputerUtilBlock.java
index 8c2ea601ebd..39631196d80 100644
--- a/src/main/java/forge/ComputerUtilBlock.java
+++ b/src/main/java/forge/game/player/ComputerUtilBlock.java
@@ -15,10 +15,17 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
diff --git a/src/main/java/forge/gui/GuiDisplayUtil.java b/src/main/java/forge/gui/GuiDisplayUtil.java
new file mode 100644
index 00000000000..171279085b9
--- /dev/null
+++ b/src/main/java/forge/gui/GuiDisplayUtil.java
@@ -0,0 +1,809 @@
+/*
+ * Forge: Play Magic: the Gathering.
+ * Copyright (C) 2011 Forge Team
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ * GuiDisplayUtil class. + *
+ * + * @author Forge + * @version $Id$ + */ +public final class GuiDisplayUtil { + + private GuiDisplayUtil() { + throw new AssertionError(); + } + + /** + *+ * getBorder. + *
+ * + * @param card + * a {@link forge.Card} object. + * @return a {@link javax.swing.border.Border} object. + */ + public static Border getBorder(final Card card) { + // color info + if (card == null) { + return BorderFactory.createEmptyBorder(2, 2, 2, 2); + } + java.awt.Color color; + final ArrayList+ * devModeGenerateMana. + *
+ */ + public static void devModeGenerateMana() { + final Card dummy = new Card(); + dummy.setOwner(AllZone.getHumanPlayer()); + dummy.addController(AllZone.getHumanPlayer()); + final AbilityMana abMana = new AbilityMana(dummy, "0", "W U B G R 1", 10) { + private static final long serialVersionUID = -2164401486331182356L; + + }; + abMana.produceMana(); + } + + /** + *+ * formatCardType. + *
+ * + * @param card + * a {@link forge.Card} object. + * @return a {@link java.lang.String} object. + */ + public static String formatCardType(final Card card) { + final ArrayList+ * cleanString. + *
+ * + * @param in + * a {@link java.lang.String} object. + * @return a {@link java.lang.String} object. + */ + public static String cleanString(final String in) { + final StringBuffer out = new StringBuffer(); + char c; + for (int i = 0; i < in.length(); i++) { + c = in.charAt(i); + if ((c == ' ') || (c == '-')) { + out.append('_'); + } else if (Character.isLetterOrDigit(c) || (c == '_')) { + out.append(c); + } + } + return out.toString().toLowerCase(); + } + + /** + *+ * cleanStringMWS. + *
+ * + * @param in + * a {@link java.lang.String} object. + * @return a {@link java.lang.String} object. + */ + public static String cleanStringMWS(final String in) { + final StringBuffer out = new StringBuffer(); + char c; + for (int i = 0; i < in.length(); i++) { + c = in.charAt(i); + if ((c == '"') || (c == '/')) { + out.append(""); + } else { + out.append(c); + } + } + return out.toString(); + } + + + + /** + *+ * isStackable. + *
+ * + * @param c + * a {@link forge.Card} object. + * @return a boolean. + */ + public static boolean isStackable(final Card c) { + if (c.isLand() || (c.getName().startsWith("Mox") && !c.getName().equals("Mox Diamond")) + || (c.isLand() && c.isEnchanted()) || (c.isAura() && c.isEnchanting()) + || (c.isToken() && CardFactoryUtil.multipleControlled(c)) + || (c.isCreature() && (c.isEquipped() || c.isEnchanted())) || (c.isEquipment() && c.isEquipping()) + || (c.isEnchantment())) { + return true; + } + + return false; + } + + // ~ + /** + *+ * setupConnectedCards. + *
+ * + * @param connectedCards + * a {@link java.util.ArrayList} object. + */ + public static void setupConnectedCards(final ArrayList+ * setupPlayZone. + *
+ * + * @param p + * a {@link arcane.ui.PlayArea} object. + * @param c + * an array of {@link forge.Card} objects. + */ + public static void setupPlayZone(final PlayArea p, final List+ * updateGUI. + *
+ */ + public static void updateGUI() { + AllZone.getComputerPlayer().getZone(Zone.Battlefield).updateObservers(); + AllZone.getHumanPlayer().getZone(Zone.Battlefield).updateObservers(); + //AllZone.getHumanPlayer().getZone(Zone.Hand).updateObservers(); + AllZone.getComputerPlayer().updateObservers(); + AllZone.getHumanPlayer().updateObservers(); + } + + /** + *+ * devSetupGameState. + *
+ */ + public static void devSetupGameState() { + String tHumanLife = "-1"; + String tComputerLife = "-1"; + String tHumanSetupCardsInPlay = "NONE"; + String tComputerSetupCardsInPlay = "NONE"; + String tHumanSetupCardsInHand = "NONE"; + String tComputerSetupCardsInHand = "NONE"; + String tHumanSetupGraveyard = "NONE"; + String tComputerSetupGraveyard = "NONE"; + String tHumanSetupLibrary = "NONE"; + String tComputerSetupLibrary = "NONE"; + String tHumanSetupExile = "NONE"; + String tComputerSetupExile = "NONE"; + String tChangePlayer = "NONE"; + String tChangePhase = "NONE"; + + final String wd = "."; + final JFileChooser fc = new JFileChooser(wd); + final int rc = fc.showDialog(null, "Select Game State File"); + if (rc != JFileChooser.APPROVE_OPTION) { + return; + } + + try { + final FileInputStream fstream = new FileInputStream(fc.getSelectedFile().getAbsolutePath()); + final DataInputStream in = new DataInputStream(fstream); + final BufferedReader br = new BufferedReader(new InputStreamReader(in)); + + String temp = ""; + + while ((temp = br.readLine()) != null) { + final String[] tempData = temp.split("="); + + if (tempData.length < 2) { + continue; + } + if (tempData[0].toCharArray()[0] == '#') { + continue; + } + + final String categoryName = tempData[0]; + final String categoryValue = tempData[1]; + + if (categoryName.toLowerCase().equals("humanlife")) { + tHumanLife = categoryValue; + } else if (categoryName.toLowerCase().equals("ailife")) { + tComputerLife = categoryValue; + } else if (categoryName.toLowerCase().equals("humancardsinplay")) { + tHumanSetupCardsInPlay = categoryValue; + } else if (categoryName.toLowerCase().equals("aicardsinplay")) { + tComputerSetupCardsInPlay = categoryValue; + } else if (categoryName.toLowerCase().equals("humancardsinhand")) { + tHumanSetupCardsInHand = categoryValue; + } else if (categoryName.toLowerCase().equals("aicardsinhand")) { + tComputerSetupCardsInHand = categoryValue; + } else if (categoryName.toLowerCase().equals("humancardsingraveyard")) { + tHumanSetupGraveyard = categoryValue; + } else if (categoryName.toLowerCase().equals("aicardsingraveyard")) { + tComputerSetupGraveyard = categoryValue; + } else if (categoryName.toLowerCase().equals("humancardsinlibrary")) { + tHumanSetupLibrary = categoryValue; + } else if (categoryName.toLowerCase().equals("aicardsinlibrary")) { + tComputerSetupLibrary = categoryValue; + } else if (categoryName.toLowerCase().equals("humancardsinexile")) { + tHumanSetupExile = categoryValue; + } else if (categoryName.toLowerCase().equals("aicardsinexile")) { + tComputerSetupExile = categoryValue; + } else if (categoryName.toLowerCase().equals("activeplayer")) { + tChangePlayer = categoryValue; + } else if (categoryName.toLowerCase().equals("activephase")) { + tChangePhase = categoryValue; + } + } + + in.close(); + } catch (final FileNotFoundException fnfe) { + JOptionPane.showMessageDialog(null, "File not found: " + fc.getSelectedFile().getAbsolutePath()); + } catch (final Exception e) { + JOptionPane.showMessageDialog(null, "Error loading battle setup file!"); + return; + } + + final int setHumanLife = Integer.parseInt(tHumanLife); + final int setComputerLife = Integer.parseInt(tComputerLife); + + final String[] humanSetupCardsInPlay = tHumanSetupCardsInPlay.split(";"); + final String[] computerSetupCardsInPlay = tComputerSetupCardsInPlay.split(";"); + final String[] humanSetupCardsInHand = tHumanSetupCardsInHand.split(";"); + final String[] computerSetupCardsInHand = tComputerSetupCardsInHand.split(";"); + final String[] humanSetupGraveyard = tHumanSetupGraveyard.split(";"); + final String[] computerSetupGraveyard = tComputerSetupGraveyard.split(";"); + final String[] humanSetupLibrary = tHumanSetupLibrary.split(";"); + final String[] computerSetupLibrary = tComputerSetupLibrary.split(";"); + final String[] humanSetupExile = tHumanSetupExile.split(";"); + final String[] computerSetupExile = tComputerSetupExile.split(";"); + + CardList humanDevSetup = new CardList(); + CardList computerDevSetup = new CardList(); + CardList humanDevHandSetup = new CardList(); + CardList computerDevHandSetup = new CardList(); + CardList humanDevGraveyardSetup = new CardList(); + CardList computerDevGraveyardSetup = new CardList(); + CardList humanDevLibrarySetup = new CardList(); + CardList computerDevLibrarySetup = new CardList(); + CardList humanDevExileSetup = new CardList(); + CardList computerDevExileSetup = new CardList(); + + if (!tChangePlayer.trim().toLowerCase().equals("none")) { + if (tChangePlayer.trim().toLowerCase().equals("human")) { + Singletons.getModel().getGameState().getPhaseHandler().setPlayerTurn(AllZone.getHumanPlayer()); + } + if (tChangePlayer.trim().toLowerCase().equals("ai")) { + Singletons.getModel().getGameState().getPhaseHandler().setPlayerTurn(AllZone.getComputerPlayer()); + } + } + + if (!tChangePhase.trim().toLowerCase().equals("none")) { + Singletons.getModel().getGameState().getPhaseHandler().setDevPhaseState(forge.game.phase.PhaseType.smartValueOf(tChangePhase)); + } + + if (!tHumanSetupCardsInPlay.trim().toLowerCase().equals("none")) { + humanDevSetup = GuiDisplayUtil.devProcessCardsForZone(humanSetupCardsInPlay, AllZone.getHumanPlayer()); + } + + if (!tHumanSetupCardsInHand.trim().toLowerCase().equals("none")) { + humanDevHandSetup = GuiDisplayUtil.devProcessCardsForZone(humanSetupCardsInHand, AllZone.getHumanPlayer()); + } + + if (!tComputerSetupCardsInPlay.trim().toLowerCase().equals("none")) { + computerDevSetup = GuiDisplayUtil.devProcessCardsForZone(computerSetupCardsInPlay, + AllZone.getComputerPlayer()); + } + + if (!tComputerSetupCardsInHand.trim().toLowerCase().equals("none")) { + computerDevHandSetup = GuiDisplayUtil.devProcessCardsForZone(computerSetupCardsInHand, + AllZone.getComputerPlayer()); + } + + if (!tComputerSetupGraveyard.trim().toLowerCase().equals("none")) { + computerDevGraveyardSetup = GuiDisplayUtil.devProcessCardsForZone(computerSetupGraveyard, + AllZone.getComputerPlayer()); + } + + if (!tHumanSetupGraveyard.trim().toLowerCase().equals("none")) { + humanDevGraveyardSetup = GuiDisplayUtil.devProcessCardsForZone(humanSetupGraveyard, + AllZone.getHumanPlayer()); + } + + if (!tHumanSetupLibrary.trim().toLowerCase().equals("none")) { + humanDevLibrarySetup = GuiDisplayUtil.devProcessCardsForZone(humanSetupLibrary, AllZone.getHumanPlayer()); + } + + if (!tComputerSetupLibrary.trim().toLowerCase().equals("none")) { + computerDevLibrarySetup = GuiDisplayUtil.devProcessCardsForZone(computerSetupLibrary, + AllZone.getComputerPlayer()); + } + + if (!tHumanSetupExile.trim().toLowerCase().equals("none")) { + humanDevExileSetup = GuiDisplayUtil.devProcessCardsForZone(humanSetupExile, AllZone.getHumanPlayer()); + } + + if (!tComputerSetupExile.trim().toLowerCase().equals("none")) { + computerDevExileSetup = GuiDisplayUtil.devProcessCardsForZone(computerSetupExile, + AllZone.getComputerPlayer()); + } + + AllZone.getTriggerHandler().suppressMode(TriggerType.ChangesZone); + AllZone.getCombat().reset(); + for (final Card c : humanDevSetup) { + AllZone.getHumanPlayer().getZone(Zone.Hand).add(c); + Singletons.getModel().getGameAction().moveToPlay(c); + c.setSickness(false); + } + + for (final Card c : computerDevSetup) { + AllZone.getComputerPlayer().getZone(Zone.Hand).add(c); + Singletons.getModel().getGameAction().moveToPlay(c); + c.setSickness(false); + } + + if (computerDevGraveyardSetup.size() > 0) { + AllZone.getComputerPlayer().getZone(Zone.Graveyard).setCards(computerDevGraveyardSetup); + } + if (humanDevGraveyardSetup.size() > 0) { + AllZone.getHumanPlayer().getZone(Zone.Graveyard).setCards(humanDevGraveyardSetup); + } + + if (computerDevHandSetup.size() > 0) { + AllZone.getComputerPlayer().getZone(Zone.Hand).setCards(computerDevHandSetup); + } + if (humanDevHandSetup.size() > 0) { + AllZone.getHumanPlayer().getZone(Zone.Hand).setCards(humanDevHandSetup); + } + + if (humanDevLibrarySetup.size() > 0) { + AllZone.getHumanPlayer().getZone(Zone.Library).setCards(humanDevLibrarySetup); + } + if (computerDevLibrarySetup.size() > 0) { + AllZone.getComputerPlayer().getZone(Zone.Library).setCards(computerDevLibrarySetup); + } + + if (humanDevExileSetup.size() > 0) { + AllZone.getHumanPlayer().getZone(Zone.Exile).setCards(humanDevExileSetup); + } + if (computerDevExileSetup.size() > 0) { + AllZone.getComputerPlayer().getZone(Zone.Exile).setCards(computerDevExileSetup); + } + + AllZone.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); + + if (setComputerLife > 0) { + AllZone.getComputerPlayer().setLife(setComputerLife, null); + } + if (setHumanLife > 0) { + AllZone.getHumanPlayer().setLife(setHumanLife, null); + } + + Singletons.getModel().getGameAction().checkStateEffects(); + Singletons.getModel().getGameState().getPhaseHandler().updateObservers(); + AllZone.getHumanPlayer().getZone(Zone.Exile).updateObservers(); + AllZone.getComputerPlayer().getZone(Zone.Exile).updateObservers(); + AllZone.getHumanPlayer().getZone(Zone.Hand).updateObservers(); + AllZone.getComputerPlayer().getZone(Zone.Hand).updateObservers(); + AllZone.getHumanPlayer().getZone(Zone.Graveyard).updateObservers(); + AllZone.getComputerPlayer().getZone(Zone.Graveyard).updateObservers(); + AllZone.getHumanPlayer().getZone(Zone.Battlefield).updateObservers(); + AllZone.getComputerPlayer().getZone(Zone.Battlefield).updateObservers(); + AllZone.getHumanPlayer().getZone(Zone.Library).updateObservers(); + AllZone.getComputerPlayer().getZone(Zone.Library).updateObservers(); + } + + /** + *+ * devProcessCardsForZone. + *
+ * + * @param data + * an array of {@link java.lang.String} objects. + * @param player + * a {@link forge.game.player.Player} object. + * @return a {@link forge.CardList} object. + */ + public static CardList devProcessCardsForZone(final String[] data, final Player player) { + final CardList cl = new CardList(); + for (final String element : data) { + final String[] cardinfo = element.trim().split("\\|"); + + final Card c = AllZone.getCardFactory().getCard(cardinfo[0], player); + + boolean hasSetCurSet = false; + for (final String info : cardinfo) { + if (info.startsWith("Set:")) { + c.setCurSetCode(info.substring(info.indexOf(':') + 1)); + hasSetCurSet = true; + } else if (info.equalsIgnoreCase("Tapped:True")) { + c.tap(); + } else if (info.startsWith("Counters:")) { + final String[] counterStrings = info.substring(info.indexOf(':') + 1).split(","); + for (final String counter : counterStrings) { + c.addCounter(Counters.valueOf(counter), 1); + } + } else if (info.equalsIgnoreCase("SummonSick:True")) { + c.setSickness(true); + } else if (info.equalsIgnoreCase("FaceDown:True")) { + c.setState(CardCharactersticName.FaceDown); + } + } + + if (!hasSetCurSet) { + c.setCurSetCode(c.getMostRecentSet()); + } + + c.setImageFilename(CardUtil.buildFilename(c)); + cl.add(c); + } + return cl; + } + + /** + *+ * devModeTutor. + *
+ * + * @since 1.0.15 + */ + public static void devModeTutor() { + final CardList lib = AllZone.getHumanPlayer().getCardsIn(Zone.Library); + final Object o = GuiUtils.chooseOneOrNone("Choose a card", lib.toArray()); + if (null == o) { + return; + } else { + final Card c = (Card) o; + Singletons.getModel().getGameAction().moveToHand(c); + } + } + + /** + *+ * devModeTutor. + *
+ * + * @since 1.2.7 + */ + public static void devModeAddAnyCard() { + final Iterable+ * devModeAddCounter. + *
+ * + * @since 1.0.15 + */ + public static void devModeAddCounter() { + final CardList play = AllZoneUtil.getCardsIn(Zone.Battlefield); + final Object o = GuiUtils.chooseOneOrNone("Add counters to which card?", play.toArray()); + if (null == o) { + return; + } else { + final Card c = (Card) o; + final Counters counter = GuiUtils.chooseOneOrNone("Which type of counter?", Counters.values()); + if (null == counter) { + return; + } else { + final Integer[] integers = new Integer[99]; + for (int j = 0; j < 99; j++) { + integers[j] = Integer.valueOf(j); + } + final Integer i = GuiUtils.chooseOneOrNone("How many counters?", integers); + if (null == i) { + return; + } else { + c.addCounterFromNonEffect(counter, i); + } + } + } + } + + /** + *+ * devModeTapPerm. + *
+ * + * @since 1.0.15 + */ + public static void devModeTapPerm() { + final CardList play = AllZoneUtil.getCardsIn(Zone.Battlefield); + final Object o = GuiUtils.chooseOneOrNone("Choose a permanent", play.toArray()); + if (null == o) { + return; + } else { + final Card c = (Card) o; + c.tap(); + } + } + + /** + *+ * devModeUntapPerm. + *
+ * + * @since 1.0.15 + */ + public static void devModeUntapPerm() { + final CardList play = AllZoneUtil.getCardsIn(Zone.Battlefield); + final Object o = GuiUtils.chooseOneOrNone("Choose a permanent", play.toArray()); + if (null == o) { + return; + } else { + final Card c = (Card) o; + c.untap(); + } + } + + /** + *+ * devModeUnlimitedLand. + *
+ * + * @since 1.0.16 + */ + public static void devModeUnlimitedLand() { + AllZone.getHumanPlayer().addMaxLandsToPlay(100); + } + + /** + *+ * devModeSetLife. + *
+ * + * @since 1.1.3 + */ + public static void devModeSetLife() { + final List* ButtonUtil class. diff --git a/src/test/java/forge/GuiMigrateLocalMWSSetPicturesHQTest.java b/src/test/java/forge/GuiMigrateLocalMWSSetPicturesHQTest.java index 2c5265d4cb8..fd78e334772 100644 --- a/src/test/java/forge/GuiMigrateLocalMWSSetPicturesHQTest.java +++ b/src/test/java/forge/GuiMigrateLocalMWSSetPicturesHQTest.java @@ -2,6 +2,8 @@ package forge; import org.testng.annotations.Test; +import forge.gui.GuiMigrateLocalMWSSetPicturesHQ; + /** * Created by IntelliJ IDEA. User: dhudson */ diff --git a/src/test/java/forge/GuiMultipleBlockers4Test.java b/src/test/java/forge/GuiMultipleBlockers4Test.java index aae12e557e3..a4824e9d8ce 100644 --- a/src/test/java/forge/GuiMultipleBlockers4Test.java +++ b/src/test/java/forge/GuiMultipleBlockers4Test.java @@ -2,6 +2,8 @@ package forge; import org.testng.annotations.Test; +import forge.gui.GuiMultipleBlockers; + /** * Created by IntelliJ IDEA. User: dhudson */ diff --git a/src/test/java/forge/GuiProgressBarWindowTest.java b/src/test/java/forge/GuiProgressBarWindowTest.java index b59517bbf5e..5ea68d03131 100644 --- a/src/test/java/forge/GuiProgressBarWindowTest.java +++ b/src/test/java/forge/GuiProgressBarWindowTest.java @@ -5,6 +5,8 @@ import javax.swing.WindowConstants; import org.testng.Assert; import org.testng.annotations.Test; +import forge.gui.GuiProgressBarWindow; + /** * Created by IntelliJ IDEA. User: dhudson */