Checkstyle fixes in GameActionUtil and GenerateConstructedDeck

This commit is contained in:
slapshot5
2011-09-04 20:45:11 +00:00
parent 61ba486d8d
commit afc4ea7478
2 changed files with 249 additions and 238 deletions

View File

@@ -4,18 +4,24 @@ package forge;
import forge.card.abilityFactory.AbilityFactory; import forge.card.abilityFactory.AbilityFactory;
import forge.card.cardFactory.CardFactoryUtil; import forge.card.cardFactory.CardFactoryUtil;
import forge.card.cost.Cost; import forge.card.cost.Cost;
import forge.card.spellability.*; import forge.card.spellability.Ability_Activated;
import forge.card.spellability.Ability_Mana;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Ability;
import forge.card.spellability.Target;
import forge.game.GameLossReason; import forge.game.GameLossReason;
import forge.gui.GuiUtils; import forge.gui.GuiUtils;
import forge.gui.input.Input; import forge.gui.input.Input;
import forge.gui.input.Input_PayManaCostUtil; import forge.gui.input.Input_PayManaCostUtil;
import forge.gui.input.Input_PayManaCost_Ability; import forge.gui.input.Input_PayManaCost_Ability;
import javax.swing.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import javax.swing.JOptionPane;
/** /**
* <p>GameActionUtil class.</p> * <p>GameActionUtil class.</p>
@@ -23,7 +29,11 @@ import java.util.HashMap;
* @author Forge * @author Forge
* @version $Id$ * @version $Id$
*/ */
public class GameActionUtil { public final class GameActionUtil {
private GameActionUtil() {
throw new AssertionError();
}
/** /**
* <p>executeDrawStepEffects.</p> * <p>executeDrawStepEffects.</p>
@@ -67,36 +77,37 @@ public class GameActionUtil {
* @param c a {@link forge.Card} object. * @param c a {@link forge.Card} object.
*/ */
public static void playCard_Cascade(final Card c) { public static void playCard_Cascade(final Card c) {
Command Cascade = new Command() { Command cascade = new Command() {
private static final long serialVersionUID = -845154812215847505L; private static final long serialVersionUID = -845154812215847505L;
public void execute() { public void execute() {
CardList humanNexus = AllZoneUtil.getPlayerCardsInPlay(AllZone.getHumanPlayer(), "Maelstrom Nexus"); CardList humanNexus = AllZoneUtil.getPlayerCardsInPlay(AllZone.getHumanPlayer(), "Maelstrom Nexus");
CardList computerNexus = AllZoneUtil.getPlayerCardsInPlay(AllZone.getComputerPlayer(), "Maelstrom Nexus"); CardList computerNexus = AllZoneUtil.getPlayerCardsInPlay(
AllZone.getComputerPlayer(), "Maelstrom Nexus");
if (humanNexus.size() > 0) { if (humanNexus.size() > 0) {
if (Phase.getPlayerSpellCount() == 1 && !c.isCopiedSpell()) { if (Phase.getPlayerSpellCount() == 1 && !c.isCopiedSpell()) {
for (int i = 0; i < humanNexus.size(); i++) { for (int i = 0; i < humanNexus.size(); i++) {
DoCascade(c); doCascade(c);
} }
} }
} }
if (computerNexus.size() > 0) { if (computerNexus.size() > 0) {
if (Phase.getComputerSpellCount() == 1 && !c.isCopiedSpell()) { if (Phase.getComputerSpellCount() == 1 && !c.isCopiedSpell()) {
for (int i = 0; i < computerNexus.size(); i++) { for (int i = 0; i < computerNexus.size(); i++) {
DoCascade(c); doCascade(c);
} }
} }
} }
if (c.hasKeyword("Cascade") if (c.hasKeyword("Cascade")
|| c.getName().equals("Bituminous Blast")) //keyword gets cleared for Bitumonous Blast || c.getName().equals("Bituminous Blast")) //keyword gets cleared for Bitumonous Blast
{ {
DoCascade(c); doCascade(c);
} }
}// execute() } // execute()
void DoCascade(Card c) { void doCascade(final Card c) {
final Player controller = c.getController(); final Player controller = c.getController();
final Card cascCard = c; final Card cascCard = c;
@@ -132,16 +143,17 @@ public class GameActionUtil {
StringBuilder title = new StringBuilder(); StringBuilder title = new StringBuilder();
title.append(cascCard.getName()).append(" - Cascade Ability"); title.append(cascCard.getName()).append(" - Cascade Ability");
StringBuilder question = new StringBuilder(); StringBuilder question = new StringBuilder();
question.append("Cast ").append(cascadedCard.getName()).append(" without paying its mana cost?"); question.append("Cast ").append(cascadedCard.getName());
question.append(" without paying its mana cost?");
int answer = JOptionPane.showConfirmDialog(null, question.toString(), title.toString(), JOptionPane.YES_NO_OPTION); int answer = JOptionPane.showConfirmDialog(null, question.toString(),
title.toString(), JOptionPane.YES_NO_OPTION);
if (answer == JOptionPane.YES_OPTION) { if (answer == JOptionPane.YES_OPTION) {
AllZone.getGameAction().playCardNoCost(cascadedCard); AllZone.getGameAction().playCardNoCost(cascadedCard);
revealed.remove(cascadedCard); revealed.remove(cascadedCard);
} }
} else //computer } else {
{
ArrayList<SpellAbility> choices = cascadedCard.getBasicSpells(); ArrayList<SpellAbility> choices = cascadedCard.getBasicSpells();
for (SpellAbility sa : choices) { for (SpellAbility sa : choices) {
@@ -167,7 +179,7 @@ public class GameActionUtil {
} }
}; };
Cascade.execute(); cascade.execute();
} }
/** /**
@@ -176,13 +188,15 @@ public class GameActionUtil {
* @param c a {@link forge.Card} object. * @param c a {@link forge.Card} object.
*/ */
public static void playCard_Ripple(final Card c) { public static void playCard_Ripple(final Card c) {
Command Ripple = new Command() { Command ripple = new Command() {
private static final long serialVersionUID = -845154812215847505L; private static final long serialVersionUID = -845154812215847505L;
public void execute() { public void execute() {
CardList humanThrummingStone = AllZoneUtil.getPlayerCardsInPlay(AllZone.getHumanPlayer(), "Thrumming Stone"); CardList humanThrummingStone = AllZoneUtil.getPlayerCardsInPlay(
CardList computerThrummingStone = AllZoneUtil.getPlayerCardsInPlay(AllZone.getComputerPlayer(), "Thrumming Stone"); AllZone.getHumanPlayer(), "Thrumming Stone");
CardList computerThrummingStone = AllZoneUtil.getPlayerCardsInPlay(
AllZone.getComputerPlayer(), "Thrumming Stone");
for (int i = 0; i < humanThrummingStone.size(); i++) { for (int i = 0; i < humanThrummingStone.size(); i++) {
if (c.getController().isHuman()) { if (c.getController().isHuman()) {
@@ -199,15 +213,15 @@ public class GameActionUtil {
if (a.get(x).toString().startsWith("Ripple")) { if (a.get(x).toString().startsWith("Ripple")) {
String parse = c.getKeyword().get(x).toString(); String parse = c.getKeyword().get(x).toString();
String[] k = parse.split(":"); String[] k = parse.split(":");
DoRipple(c, Integer.valueOf(k[1])); doRipple(c, Integer.valueOf(k[1]));
} }
} }
} // execute() } // execute()
void DoRipple(final Card c, final int RippleCount) { void doRipple(final Card c, final int rippleCount) {
final Player controller = c.getController(); final Player controller = c.getController();
final Card RippleCard = c; final Card rippleCard = c;
boolean Activate_Ripple = false; boolean activateRipple = false;
if (controller.isHuman()) { if (controller.isHuman()) {
Object[] possibleValues = {"Yes", "No"}; Object[] possibleValues = {"Yes", "No"};
AllZone.getDisplay().showMessage("Activate Ripple? "); AllZone.getDisplay().showMessage("Activate Ripple? ");
@@ -215,58 +229,57 @@ public class GameActionUtil {
JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
null, possibleValues, possibleValues[0]); null, possibleValues, possibleValues[0]);
if (q.equals(0)) { if (q.equals(0)) {
Activate_Ripple = true; activateRipple = true;
} }
} else { } else {
Activate_Ripple = true; activateRipple = true;
} }
if (Activate_Ripple == true) { if (activateRipple == true) {
final Ability ability = new Ability(c, "0") { final Ability ability = new Ability(c, "0") {
@Override @Override
public void resolve() { public void resolve() {
CardList topOfLibrary = AllZoneUtil.getPlayerCardsInLibrary(controller); CardList topOfLibrary = AllZoneUtil.getPlayerCardsInLibrary(controller);
CardList revealed = new CardList(); CardList revealed = new CardList();
int RippleNumber = RippleCount; int rippleNumber = rippleCount;
if (topOfLibrary.size() == 0) { if (topOfLibrary.size() == 0) {
return; return;
} }
int RippleMax = 10; // Shouldn't Have more than Ripple 10, seeing as no cards exist with a ripple greater than 4
Card[] RippledCards = new Card[RippleMax]; // Shouldn't Have more than Ripple 10, seeing as no cards exist with a ripple greater than 4
int rippleMax = 10;
Card[] rippledCards = new Card[rippleMax];
Card crd; Card crd;
if (topOfLibrary.size() < RippleNumber) { if (topOfLibrary.size() < rippleNumber) {
RippleNumber = topOfLibrary.size(); rippleNumber = topOfLibrary.size();
} }
for (int i = 0; i < RippleNumber; i++) { for (int i = 0; i < rippleNumber; i++) {
crd = topOfLibrary.get(i); crd = topOfLibrary.get(i);
revealed.add(crd); revealed.add(crd);
if (crd.getName().equals(RippleCard.getName())) { if (crd.getName().equals(rippleCard.getName())) {
RippledCards[i] = crd; rippledCards[i] = crd;
} }
}//For } //for
GuiUtils.getChoiceOptional("Revealed cards:", revealed.toArray()); GuiUtils.getChoiceOptional("Revealed cards:", revealed.toArray());
for (int i = 0; i < RippleMax; i++) { for (int i = 0; i < rippleMax; i++) {
if (RippledCards[i] != null if (rippledCards[i] != null && !rippledCards[i].isUnCastable()) {
&& !RippledCards[i].isUnCastable()) {
if (RippledCards[i].getController().isHuman()) { if (rippledCards[i].getController().isHuman()) {
Object[] possibleValues = {"Yes", "No"}; Object[] possibleValues = {"Yes", "No"};
Object q = JOptionPane.showOptionDialog(null, "Cast " + RippledCards[i].getName() + "?", "Ripple", Object q = JOptionPane.showOptionDialog(null, "Cast " + rippledCards[i].getName() + "?", "Ripple",
JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
null, possibleValues, possibleValues[0]); null, possibleValues, possibleValues[0]);
if (q.equals(0)) { if (q.equals(0)) {
AllZone.getGameAction().playCardNoCost(RippledCards[i]); AllZone.getGameAction().playCardNoCost(rippledCards[i]);
revealed.remove(RippledCards[i]); revealed.remove(rippledCards[i]);
} }
} else //computer } else {
{ ArrayList<SpellAbility> choices = rippledCards[i].getBasicSpells();
ArrayList<SpellAbility> choices = RippledCards[i].getBasicSpells();
for (SpellAbility sa : choices) { for (SpellAbility sa : choices) {
if (sa.canPlayAI() if (sa.canPlayAI() && !sa.getSourceCard().isType("Legendary")) {
&& !sa.getSourceCard().isType("Legendary")) {
ComputerUtil.playStackFree(sa); ComputerUtil.playStackFree(sa);
revealed.remove(RippledCards[i]); revealed.remove(rippledCards[i]);
break; break;
} }
} }
@@ -288,7 +301,7 @@ public class GameActionUtil {
} }
} }
}; };
Ripple.execute(); ripple.execute();
} //playCard_Ripple() } //playCard_Ripple()
/** /**
@@ -380,7 +393,7 @@ public class GameActionUtil {
* *
* @param c a {@link forge.Card} object. * @param c a {@link forge.Card} object.
*/ */
public static void playCard_Venser_Emblem(Card c) { public static void playCard_Venser_Emblem(final Card c) {
final Player controller = c.getController(); final Player controller = c.getController();
CardList list = AllZoneUtil.getPlayerCardsInPlay(controller); CardList list = AllZoneUtil.getPlayerCardsInPlay(controller);
@@ -699,12 +712,12 @@ public class GameActionUtil {
int answer; int answer;
if (defaultNo) { if (defaultNo) {
Object options[] = {"Yes", "No"}; Object[] options = {"Yes", "No"};
answer = JOptionPane.showOptionDialog(null, question, title.toString(), JOptionPane.YES_NO_OPTION, answer = JOptionPane.showOptionDialog(null, question, title.toString(), JOptionPane.YES_NO_OPTION,
JOptionPane.PLAIN_MESSAGE, null, options, options[1]); JOptionPane.PLAIN_MESSAGE, null, options, options[1]);
} }
else { else {
answer= JOptionPane.showConfirmDialog(null, question, title.toString(), JOptionPane.YES_NO_OPTION); answer = JOptionPane.showConfirmDialog(null, question, title.toString(), JOptionPane.YES_NO_OPTION);
} }
if (answer == JOptionPane.YES_OPTION) { if (answer == JOptionPane.YES_OPTION) {
@@ -741,10 +754,12 @@ public class GameActionUtil {
} }
if ((flip == true && choice.equals("heads")) || (flip == false && choice.equals("tails"))) { if ((flip == true && choice.equals("heads")) || (flip == false && choice.equals("tails"))) {
JOptionPane.showMessageDialog(null, source.getName() + " - " + caller + " wins flip.", source.getName(), JOptionPane.PLAIN_MESSAGE); JOptionPane.showMessageDialog(null, source.getName() + " - " + caller + " wins flip.",
source.getName(), JOptionPane.PLAIN_MESSAGE);
return true; return true;
} else { } else {
JOptionPane.showMessageDialog(null, source.getName() + " - " + caller + " loses flip.", source.getName(), JOptionPane.PLAIN_MESSAGE); JOptionPane.showMessageDialog(null, source.getName() + " - " + caller + " loses flip.",
source.getName(), JOptionPane.PLAIN_MESSAGE);
return false; return false;
} }
} }
@@ -1194,8 +1209,6 @@ public class GameActionUtil {
if (c.getName().equals("Scalpelexis")) { if (c.getName().equals("Scalpelexis")) {
playerCombatDamage_Scalpelexis(c); playerCombatDamage_Scalpelexis(c);
/*} else if (c.getName().equals("Augury Adept")) {
playerCombatDamage_Augury_Adept(c);*/
} else if (c.getName().equals("Spawnwrithe")) { } else if (c.getName().equals("Spawnwrithe")) {
playerCombatDamage_Spawnwrithe(c); playerCombatDamage_Spawnwrithe(c);
} else if (c.getName().equals("Treva, the Renewer")) { } else if (c.getName().equals("Treva, the Renewer")) {
@@ -1226,7 +1239,8 @@ public class GameActionUtil {
enchanted.getController().setLife(life * 2, aura); enchanted.getController().setLife(life * 2, aura);
} }
}; };
doubleLife.setStackDescription(aura.getName() + " - " + enchanted.getController() + " doubles his or her life total."); doubleLife.setStackDescription(aura.getName() + " - " + enchanted.getController()
+ " doubles his or her life total.");
AllZone.getStack().addSimultaneousStackEntry(doubleLife); AllZone.getStack().addSimultaneousStackEntry(doubleLife);
@@ -1391,7 +1405,8 @@ public class GameActionUtil {
if (broken == 0) { if (broken == 0) {
if ((c1.getName().contains(c2.getName()) || c1.getName().contains(c3.getName()) if ((c1.getName().contains(c2.getName()) || c1.getName().contains(c3.getName())
|| c1.getName().contains(c4.getName()) || c2.getName().contains(c3.getName()) || c1.getName().contains(c4.getName()) || c2.getName().contains(c3.getName())
|| c2.getName().contains(c4.getName()) || c3.getName().contains(c4.getName()))) { || c2.getName().contains(c4.getName()) || c3.getName().contains(c4.getName())))
{
count = count + 1; count = count + 1;
} else { } else {
broken = 1; broken = 1;
@@ -1453,50 +1468,6 @@ public class GameActionUtil {
} }
/**
* <p>playerCombatDamage_Augury_Adept.</p>
*
* @param c a {@link forge.Card} object.
*/
/*private static void playerCombatDamage_Augury_Adept(final Card c) {
final Player[] player = new Player[1];
final Card crd = c;
if (c.getNetAttack() > 0) {
Ability ability2 = new Ability(crd, "0") {
@Override
public void resolve() {
player[0] = crd.getController();
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player[0]);
if (lib.size() > 0) {
CardList cl = new CardList();
cl.add(lib.get(0));
GuiUtils.getChoiceOptional("Top card", cl.toArray());
}
;
if (lib.size() == 0) {
return;
}
Card top = lib.get(0);
player[0].gainLife(CardUtil.getConvertedManaCost(top.getManaCost()), crd);
AllZone.getGameAction().moveToHand(top);
}
}; // ability2
player[0] = c.getController();
StringBuilder sb = new StringBuilder();
sb.append(c.getName()).append(" - ").append(player[0]);
sb.append(" reveals the top card of his library and put that card into his hand. ");
sb.append("He gain life equal to its converted mana cost.");
ability2.setStackDescription(sb.toString());
AllZone.getStack().addSimultaneousStackEntry(ability2);
}
}*/
/** /**
* <p>draw_Sylvan_Library.</p> * <p>draw_Sylvan_Library.</p>
@@ -1539,7 +1510,9 @@ public class GameActionUtil {
@Override @Override
public void selectCard(final Card card, final PlayerZone zone) { public void selectCard(final Card card, final PlayerZone zone) {
if (zone.is(Constant.Zone.Hand) && true == card.getDrawnThisTurn()) { if (zone.is(Constant.Zone.Hand) && true == card.getDrawnThisTurn()) {
if (player.canPayLife(4) && GameActionUtil.showYesNoDialog(source, cardQuestion)) { if (player.canPayLife(4)
&& GameActionUtil.showYesNoDialog(source, cardQuestion))
{
player.payLife(4, source); player.payLife(4, source);
//card stays in hand //card stays in hand
} else { } else {
@@ -1671,7 +1644,7 @@ public class GameActionUtil {
} }
} // execute() } // execute()
}; };
/** Constant <code>Koth_Emblem</code> */ /** Constant <code>Koth_Emblem</code> */
public static Command Koth_Emblem = new Command() { public static Command Koth_Emblem = new Command() {
@@ -1765,168 +1738,191 @@ public class GameActionUtil {
/** /**
* <p>specialConditionsMet.</p> * <p>specialConditionsMet.</p>
* *
* @param SourceCard a {@link forge.Card} object. * @param sourceCard a {@link forge.Card} object.
* @param SpecialConditions a {@link java.lang.String} object. * @param specialConditions a {@link java.lang.String} object.
* @return a boolean. * @return a boolean.
*/ */
public static boolean specialConditionsMet(Card SourceCard, String SpecialConditions) { public static boolean specialConditionsMet(final Card sourceCard, final String specialConditions) {
if (SpecialConditions.contains("CardsInHandMore")) { if (specialConditions.contains("CardsInHandMore")) {
CardList SpecialConditionsCardList = AllZoneUtil.getPlayerHand(SourceCard.getController()); CardList specialConditionsCardList = AllZoneUtil.getPlayerHand(sourceCard.getController());
String Condition = SpecialConditions.split("/")[1]; String condition = specialConditions.split("/")[1];
if (SpecialConditionsCardList.size() < Integer.valueOf(Condition)) return false; if (specialConditionsCardList.size() < Integer.valueOf(condition)) {
return false;
}
} }
if (SpecialConditions.contains("OppHandEmpty")) { if (specialConditions.contains("OppHandEmpty")) {
CardList oppHand = AllZoneUtil.getPlayerHand(SourceCard.getController().getOpponent()); CardList oppHand = AllZoneUtil.getPlayerHand(sourceCard.getController().getOpponent());
if (!(oppHand.size() == 0)) return false; if (!(oppHand.size() == 0)) {
return false;
}
} }
if (SpecialConditions.contains("TopCardOfLibraryIsBlack")) { if (specialConditions.contains("TopCardOfLibraryIsBlack")) {
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, SourceCard.getController()); PlayerZone lib = AllZone.getZone(Constant.Zone.Library, sourceCard.getController());
if (!(lib.get(0).isBlack())) return false; if (!(lib.get(0).isBlack())) {
return false;
}
} }
if (SpecialConditions.contains("LibraryLE")) { if (specialConditions.contains("LibraryLE")) {
CardList Library = AllZoneUtil.getPlayerCardsInLibrary(SourceCard.getController()); CardList library = AllZoneUtil.getPlayerCardsInLibrary(sourceCard.getController());
String maxnumber = SpecialConditions.split("/")[1]; String maxnumber = specialConditions.split("/")[1];
if (Library.size() > Integer.valueOf(maxnumber)) return false; if (library.size() > Integer.valueOf(maxnumber)) {
return false;
}
} }
if (SpecialConditions.contains("LifeGE")) { if (specialConditions.contains("LifeGE")) {
int life = SourceCard.getController().getLife(); int life = sourceCard.getController().getLife();
String maxnumber = SpecialConditions.split("/")[1]; String maxnumber = specialConditions.split("/")[1];
if (!(life >= Integer.valueOf(maxnumber))) return false; if (!(life >= Integer.valueOf(maxnumber))) {
return false;
}
} }
if (SpecialConditions.contains("OppCreatureInPlayGE")) { if (specialConditions.contains("OppCreatureInPlayGE")) {
CardList OppInPlay = AllZoneUtil.getPlayerCardsInPlay(SourceCard.getController().getOpponent()); CardList oppInPlay = AllZoneUtil.getPlayerCardsInPlay(sourceCard.getController().getOpponent());
OppInPlay = OppInPlay.getType("Creature"); oppInPlay = oppInPlay.getType("Creature");
String maxnumber = SpecialConditions.split("/")[1]; String maxnumber = specialConditions.split("/")[1];
if (!(OppInPlay.size() >= Integer.valueOf(maxnumber))) return false; if (!(oppInPlay.size() >= Integer.valueOf(maxnumber))) {
return false;
}
} }
if (SpecialConditions.contains("LandYouCtrlLE")) { if (specialConditions.contains("LandYouCtrlLE")) {
CardList LandInPlay = AllZoneUtil.getPlayerCardsInPlay(SourceCard.getController()); CardList landInPlay = AllZoneUtil.getPlayerCardsInPlay(sourceCard.getController());
LandInPlay = LandInPlay.getType("Land"); landInPlay = landInPlay.getType("Land");
String maxnumber = SpecialConditions.split("/")[1]; String maxnumber = specialConditions.split("/")[1];
if (!(LandInPlay.size() <= Integer.valueOf(maxnumber))) return false; if (!(landInPlay.size() <= Integer.valueOf(maxnumber))) {
return false;
}
} }
if (SpecialConditions.contains("LandOppCtrlLE")) { if (specialConditions.contains("LandOppCtrlLE")) {
CardList OppLandInPlay = AllZoneUtil.getPlayerCardsInPlay(SourceCard.getController().getOpponent()); CardList oppLandInPlay = AllZoneUtil.getPlayerCardsInPlay(sourceCard.getController().getOpponent());
OppLandInPlay = OppLandInPlay.getType("Land"); oppLandInPlay = oppLandInPlay.getType("Land");
String maxnumber = SpecialConditions.split("/")[1]; String maxnumber = specialConditions.split("/")[1];
if (!(OppLandInPlay.size() <= Integer.valueOf(maxnumber))) return false; if (!(oppLandInPlay.size() <= Integer.valueOf(maxnumber))) {
return false;
}
} }
if (SpecialConditions.contains("OppCtrlMoreCreatures")) { if (specialConditions.contains("OppCtrlMoreCreatures")) {
CardList CreaturesInPlayYou = AllZoneUtil.getPlayerCardsInPlay(SourceCard.getController()); CardList creaturesInPlayYou = AllZoneUtil.getPlayerCardsInPlay(sourceCard.getController());
CreaturesInPlayYou = CreaturesInPlayYou.getType("Creature"); creaturesInPlayYou = creaturesInPlayYou.getType("Creature");
CardList CreaturesInPlayOpp = AllZoneUtil.getPlayerCardsInPlay(SourceCard.getController().getOpponent()); CardList creaturesInPlayOpp = AllZoneUtil.getPlayerCardsInPlay(sourceCard.getController().getOpponent());
CreaturesInPlayOpp = CreaturesInPlayOpp.getType("Creature"); creaturesInPlayOpp = creaturesInPlayOpp.getType("Creature");
if (CreaturesInPlayYou.size() > CreaturesInPlayOpp.size()) return false; if (creaturesInPlayYou.size() > creaturesInPlayOpp.size()) {
return false;
}
} }
if (SpecialConditions.contains("OppCtrlMoreLands")) { if (specialConditions.contains("OppCtrlMoreLands")) {
CardList LandsInPlayYou = AllZoneUtil.getPlayerCardsInPlay(SourceCard.getController()); CardList landsInPlayYou = AllZoneUtil.getPlayerCardsInPlay(sourceCard.getController());
LandsInPlayYou = LandsInPlayYou.getType("Land"); landsInPlayYou = landsInPlayYou.getType("Land");
CardList LandsInPlayOpp = AllZoneUtil.getPlayerCardsInPlay(SourceCard.getController().getOpponent()); CardList landsInPlayOpp = AllZoneUtil.getPlayerCardsInPlay(sourceCard.getController().getOpponent());
LandsInPlayOpp = LandsInPlayOpp.getType("Land"); landsInPlayOpp = landsInPlayOpp.getType("Land");
if (LandsInPlayYou.size() > LandsInPlayOpp.size()) return false; if (landsInPlayYou.size() > landsInPlayOpp.size()) {
return false;
}
} }
if (SpecialConditions.contains("EnchantedControllerCreaturesGE")) { if (specialConditions.contains("EnchantedControllerCreaturesGE")) {
CardList EnchantedControllerInPlay = AllZoneUtil.getPlayerCardsInPlay(SourceCard.getEnchantingCard().getController()); CardList enchantedControllerInPlay = AllZoneUtil.getPlayerCardsInPlay(
EnchantedControllerInPlay = EnchantedControllerInPlay.getType("Creature"); sourceCard.getEnchantingCard().getController());
String maxnumber = SpecialConditions.split("/")[1]; enchantedControllerInPlay = enchantedControllerInPlay.getType("Creature");
if (!(EnchantedControllerInPlay.size() >= Integer.valueOf(maxnumber))) return false; String maxnumber = specialConditions.split("/")[1];
if (!(enchantedControllerInPlay.size() >= Integer.valueOf(maxnumber))) {
return false;
}
} }
if (SpecialConditions.contains("OppLifeLE")) { if (specialConditions.contains("OppLifeLE")) {
int life = SourceCard.getController().getOpponent().getLife(); int life = sourceCard.getController().getOpponent().getLife();
String maxnumber = SpecialConditions.split("/")[1]; String maxnumber = specialConditions.split("/")[1];
if (!(life <= Integer.valueOf(maxnumber))) { if (!(life <= Integer.valueOf(maxnumber))) {
return false; return false;
} }
} }
if (SpecialConditions.contains("Threshold")) { if (specialConditions.contains("Threshold")) {
if (!SourceCard.getController().hasThreshold()) { if (!sourceCard.getController().hasThreshold()) {
return false; return false;
} }
} }
if (SpecialConditions.contains("Imprint")) { if (specialConditions.contains("Imprint")) {
if (SourceCard.getImprinted().isEmpty()) { if (sourceCard.getImprinted().isEmpty()) {
return false; return false;
} }
} }
if (SpecialConditions.contains("Hellbent")) { if (specialConditions.contains("Hellbent")) {
CardList Handcards = AllZoneUtil.getPlayerHand(SourceCard.getController()); CardList handcards = AllZoneUtil.getPlayerHand(sourceCard.getController());
if (Handcards.size() > 0) { if (handcards.size() > 0) {
return false; return false;
} }
} }
if (SpecialConditions.contains("Metalcraft")) { if (specialConditions.contains("Metalcraft")) {
CardList CardsinPlay = AllZoneUtil.getPlayerCardsInPlay(SourceCard.getController()); CardList cardsinPlay = AllZoneUtil.getPlayerCardsInPlay(sourceCard.getController());
CardsinPlay = CardsinPlay.getType("Artifact"); cardsinPlay = cardsinPlay.getType("Artifact");
if (CardsinPlay.size() < 3) { if (cardsinPlay.size() < 3) {
return false; return false;
} }
} }
if (SpecialConditions.contains("isPresent")) { // is a card of a certain type/color present? if (specialConditions.contains("isPresent")) { // is a card of a certain type/color present?
String Requirements = SpecialConditions.replaceAll("isPresent ", ""); String requirements = specialConditions.replaceAll("isPresent ", "");
CardList CardsinPlay = AllZoneUtil.getCardsInPlay(); CardList cardsinPlay = AllZoneUtil.getCardsInPlay();
String Conditions[] = Requirements.split(","); String[] conditions = requirements.split(",");
CardsinPlay = CardsinPlay.getValidCards(Conditions, SourceCard.getController(), SourceCard); cardsinPlay = cardsinPlay.getValidCards(conditions, sourceCard.getController(), sourceCard);
if (CardsinPlay.isEmpty()) { if (cardsinPlay.isEmpty()) {
return false; return false;
} }
} }
if (SpecialConditions.contains("isInGraveyard")) { // is a card of a certain type/color present in yard? if (specialConditions.contains("isInGraveyard")) { // is a card of a certain type/color present in yard?
String Requirements = SpecialConditions.replaceAll("isInGraveyard ", ""); String requirements = specialConditions.replaceAll("isInGraveyard ", "");
CardList CardsinYards = AllZoneUtil.getCardsInGraveyard(); CardList cardsinYards = AllZoneUtil.getCardsInGraveyard();
String conditions[] = Requirements.split(","); String[] conditions = requirements.split(",");
CardsinYards = CardsinYards.getValidCards(conditions, SourceCard.getController(), SourceCard); cardsinYards = cardsinYards.getValidCards(conditions, sourceCard.getController(), sourceCard);
if (CardsinYards.isEmpty()) { if (cardsinYards.isEmpty()) {
return false; return false;
} }
} }
if (SpecialConditions.contains("isNotPresent")) { // is no card of a certain type/color present? if (specialConditions.contains("isNotPresent")) { // is no card of a certain type/color present?
String requirements = SpecialConditions.replaceAll("isNotPresent ", ""); String requirements = specialConditions.replaceAll("isNotPresent ", "");
CardList cardsInPlay = AllZoneUtil.getCardsInPlay(); CardList cardsInPlay = AllZoneUtil.getCardsInPlay();
String[] conditions = requirements.split(","); String[] conditions = requirements.split(",");
cardsInPlay = cardsInPlay.getValidCards(conditions, SourceCard.getController(), SourceCard); cardsInPlay = cardsInPlay.getValidCards(conditions, sourceCard.getController(), sourceCard);
if (!cardsInPlay.isEmpty()) { if (!cardsInPlay.isEmpty()) {
return false; return false;
} }
} }
if (SpecialConditions.contains("isEquipped")) { if (specialConditions.contains("isEquipped")) {
if (!SourceCard.isEquipped()) { if (!sourceCard.isEquipped()) {
return false; return false;
} }
} }
if (SpecialConditions.contains("isEnchanted")) { if (specialConditions.contains("isEnchanted")) {
if (!SourceCard.isEnchanted()) { if (!sourceCard.isEnchanted()) {
return false; return false;
} }
} }
if (SpecialConditions.contains("isUntapped")) { if (specialConditions.contains("isUntapped")) {
if (!SourceCard.isUntapped()) { if (!sourceCard.isUntapped()) {
return false; return false;
} }
} }
if (SpecialConditions.contains("isValid")) { // does this card meet the valid description? if (specialConditions.contains("isValid")) { // does this card meet the valid description?
String requirements = SpecialConditions.replaceAll("isValid ", ""); String requirements = specialConditions.replaceAll("isValid ", "");
if (!SourceCard.isValid(requirements, SourceCard.getController(), SourceCard)) { if (!sourceCard.isValid(requirements, sourceCard.getController(), sourceCard)) {
return false; return false;
} }
} }
if (SpecialConditions.contains("isYourTurn")) { if (specialConditions.contains("isYourTurn")) {
if (!AllZone.getPhase().isPlayerTurn(SourceCard.getController())) { if (!AllZone.getPhase().isPlayerTurn(sourceCard.getController())) {
return false; return false;
} }
} }
if (SpecialConditions.contains("notYourTurn")) { if (specialConditions.contains("notYourTurn")) {
if (!AllZone.getPhase().isPlayerTurn(SourceCard.getController().getOpponent())) { if (!AllZone.getPhase().isPlayerTurn(sourceCard.getController().getOpponent())) {
return false; return false;
} }
} }
if (SpecialConditions.contains("OppPoisoned")) { if (specialConditions.contains("OppPoisoned")) {
if (SourceCard.getController().getOpponent().getPoisonCounters() == 0) { if (sourceCard.getController().getOpponent().getPoisonCounters() == 0) {
return false; return false;
} }
} }
if (SpecialConditions.contains("OppNotPoisoned")) { if (specialConditions.contains("OppNotPoisoned")) {
if (SourceCard.getController().getOpponent().getPoisonCounters() > 0) { if (sourceCard.getController().getOpponent().getPoisonCounters() > 0) {
return false; return false;
} }
} }
@@ -1980,31 +1976,36 @@ public class GameActionUtil {
for (Card land : lands) { for (Card land : lands) {
if (land.isType("Swamp")) { if (land.isType("Swamp")) {
AbilityFactory af = new AbilityFactory(); AbilityFactory af = new AbilityFactory();
SpellAbility sa = af.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get("Swamp") + " | SpellDescription$ Add " + produces.get("Swamp") + " to your mana pool.", land); SpellAbility sa = af.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get("Swamp")
+ " | SpellDescription$ Add " + produces.get("Swamp") + " to your mana pool.", land);
sa.setType("BasicLandTypeMana"); sa.setType("BasicLandTypeMana");
land.addSpellAbility(sa); land.addSpellAbility(sa);
} }
if (land.isType("Forest")) { if (land.isType("Forest")) {
AbilityFactory af = new AbilityFactory(); AbilityFactory af = new AbilityFactory();
SpellAbility sa = af.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get("Forest") + " | SpellDescription$ Add " + produces.get("Forest") + " to your mana pool.", land); SpellAbility sa = af.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get("Forest")
+ " | SpellDescription$ Add " + produces.get("Forest") + " to your mana pool.", land);
sa.setType("BasicLandTypeMana"); sa.setType("BasicLandTypeMana");
land.addSpellAbility(sa); land.addSpellAbility(sa);
} }
if (land.isType("Island")) { if (land.isType("Island")) {
AbilityFactory af = new AbilityFactory(); AbilityFactory af = new AbilityFactory();
SpellAbility sa = af.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get("Island") + " | SpellDescription$ Add " + produces.get("Island") + " to your mana pool.", land); SpellAbility sa = af.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get("Island")
+ " | SpellDescription$ Add " + produces.get("Island") + " to your mana pool.", land);
sa.setType("BasicLandTypeMana"); sa.setType("BasicLandTypeMana");
land.addSpellAbility(sa); land.addSpellAbility(sa);
} }
if (land.isType("Mountain")) { if (land.isType("Mountain")) {
AbilityFactory af = new AbilityFactory(); AbilityFactory af = new AbilityFactory();
SpellAbility sa = af.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get("Mountain") + " | SpellDescription$ Add " + produces.get("Mountain") + " to your mana pool.", land); SpellAbility sa = af.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get("Mountain")
+ " | SpellDescription$ Add " + produces.get("Mountain") + " to your mana pool.", land);
sa.setType("BasicLandTypeMana"); sa.setType("BasicLandTypeMana");
land.addSpellAbility(sa); land.addSpellAbility(sa);
} }
if (land.isType("Plains")) { if (land.isType("Plains")) {
AbilityFactory af = new AbilityFactory(); AbilityFactory af = new AbilityFactory();
SpellAbility sa = af.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get("Plains") + " | SpellDescription$ Add " + produces.get("Plains") + " to your mana pool.", land); SpellAbility sa = af.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get("Plains")
+ " | SpellDescription$ Add " + produces.get("Plains") + " to your mana pool.", land);
sa.setType("BasicLandTypeMana"); sa.setType("BasicLandTypeMana");
land.addSpellAbility(sa); land.addSpellAbility(sa);
} }
@@ -2012,7 +2013,7 @@ public class GameActionUtil {
} // execute() } // execute()
}; //stLandManaAbilities }; //stLandManaAbilities
/** Constant <code>Coat_of_Arms</code>. */ /** Constant <code>Coat_of_Arms</code>. */
public static Command Coat_of_Arms = new Command() { public static Command Coat_of_Arms = new Command() {
@@ -2312,7 +2313,9 @@ public class GameActionUtil {
for (int i = 0; i < creature.size(); i++) { for (int i = 0; i < creature.size(); i++) {
c = creature.get(i); c = creature.get(i);
if (((c.getAbilityText().trim().equals("") || c.isFaceDown()) && c.getUnhiddenKeyword().size() == 0)) { if (((c.getAbilityText().trim().equals("") || c.isFaceDown())
&& c.getUnhiddenKeyword().size() == 0))
{
c.addSemiPermanentAttackBoost(2); c.addSemiPermanentAttackBoost(2);
c.addSemiPermanentDefenseBoost(2); c.addSemiPermanentDefenseBoost(2);
@@ -2574,7 +2577,7 @@ public class GameActionUtil {
if (specialConditionsMet(cardWithKeyword, k[6])) { //special conditions are isPresent, isValid if (specialConditionsMet(cardWithKeyword, k[6])) { //special conditions are isPresent, isValid
final String affected = k[1]; final String affected = k[1];
final String specific[] = affected.split(","); final String[] specific = affected.split(",");
// options are All, Self, Enchanted etc. // options are All, Self, Enchanted etc.
CardList affectedCards = getAffectedCards(cardWithKeyword, k, specific); CardList affectedCards = getAffectedCards(cardWithKeyword, k, specific);
@@ -2585,13 +2588,15 @@ public class GameActionUtil {
int x = 0; int x = 0;
if (pt[0].contains("X") || pt[1].contains("X")) { if (pt[0].contains("X") || pt[1].contains("X")) {
x = CardFactoryUtil.xCount(cardWithKeyword, cardWithKeyword.getSVar("X").split("\\$")[1]); x = CardFactoryUtil.xCount(
cardWithKeyword, cardWithKeyword.getSVar("X").split("\\$")[1]);
} }
se.setXValue(x); se.setXValue(x);
int y = 0; int y = 0;
if (pt[1].contains("Y")) { if (pt[1].contains("Y")) {
y = CardFactoryUtil.xCount(cardWithKeyword, cardWithKeyword.getSVar("Y").split("\\$")[1]); y = CardFactoryUtil.xCount(
cardWithKeyword, cardWithKeyword.getSVar("Y").split("\\$")[1]);
} }
se.setYValue(y); se.setYValue(y);
} }

View File

@@ -1,6 +1,14 @@
package forge.deck.generate; package forge.deck.generate;
import forge.*; import forge.AllZone;
import forge.Card;
import forge.CardFilter;
import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
import forge.CardUtil;
import forge.Constant;
import forge.view.swing.OldGuiNewGame; import forge.view.swing.OldGuiNewGame;
import java.util.ArrayList; import java.util.ArrayList;
@@ -42,7 +50,7 @@ public class GenerateConstructedDeck {
* *
* @return a {@link forge.CardList} object. * @return a {@link forge.CardList} object.
*/ */
public CardList generateDeck() { public final CardList generateDeck() {
CardList deck; CardList deck;
int check; int check;
@@ -67,7 +75,7 @@ public class GenerateConstructedDeck {
* *
* @param list a {@link forge.CardList} object. * @param list a {@link forge.CardList} object.
*/ */
private void addLand(CardList list) { private void addLand(final CardList list) {
Card land; Card land;
for (int i = 0; i < 13; i++) { for (int i = 0; i < 13; i++) {
land = AllZone.getCardFactory().getCard(map.get(color1).toString(), AllZone.getComputerPlayer()); land = AllZone.getCardFactory().getCard(map.get(color1).toString(), AllZone.getComputerPlayer());
@@ -80,12 +88,12 @@ public class GenerateConstructedDeck {
/** /**
* Creates a CardList from the set of all cards that meets the criteria * Creates a CardList from the set of all cards that meets the criteria
* for color(s), type, whether the card is suitable for * for color(s), type, whether the card is suitable for
* placement in random decks and in AI decks, etc. * placement in random decks and in AI decks, etc.
* *
* @see #filterBadCards(Iterable) * @see #filterBadCards(Iterable)
* *
* @return a subset of cards <= the set of all cards; might be empty, but * @return a subset of cards <= the set of all cards; might be empty, but
* never null * never null
*/ */
private CardList getCards() { private CardList getCards() {
@@ -116,14 +124,14 @@ public class GenerateConstructedDeck {
* @param in a {@link forge.CardList} object. * @param in a {@link forge.CardList} object.
* @return a {@link forge.CardList} object. * @return a {@link forge.CardList} object.
*/ */
private CardList get2Colors(CardList in) { private CardList get2Colors(final CardList in) {
int a; int a;
int b; int b;
do { do {
a = CardUtil.getRandomIndex(Constant.Color.onlyColors); a = CardUtil.getRandomIndex(Constant.Color.onlyColors);
b = CardUtil.getRandomIndex(Constant.Color.onlyColors); b = CardUtil.getRandomIndex(Constant.Color.onlyColors);
} while (a == b);//do not want to get the same color twice } while (a == b); //do not want to get the same color twice
color1 = Constant.Color.onlyColors[a]; color1 = Constant.Color.onlyColors[a];
color2 = Constant.Color.onlyColors[b]; color2 = Constant.Color.onlyColors[b];
@@ -134,21 +142,18 @@ public class GenerateConstructedDeck {
out.shuffle(); out.shuffle();
CardList artifact = in.filter(new CardListFilter() { CardList artifact = in.filter(new CardListFilter() {
public boolean addCard(Card c) { public boolean addCard(final Card c) {
//is this really a colorless artifact and not something //is this really a colorless artifact and not something
//weird like Sarcomite Myr which is a colored artifact //weird like Sarcomite Myr which is a colored artifact
return c.isArtifact() && return c.isArtifact() && CardUtil.getColors(c).contains(Constant.Color.Colorless)
CardUtil.getColors(c).contains(Constant.Color.Colorless) && && !OldGuiNewGame.removeArtifacts.isSelected();
!OldGuiNewGame.removeArtifacts.isSelected();
} }
}); });
out.addAll(artifact); out.addAll(artifact);
out = out.filter(new CardListFilter() { out = out.filter(new CardListFilter() {
public boolean addCard(Card c) { public boolean addCard(final Card c) {
if (c.isCreature() && if (c.isCreature() && c.getNetAttack() <= 1 && OldGuiNewGame.removeSmallCreatures.isSelected()) {
c.getNetAttack() <= 1 &&
OldGuiNewGame.removeSmallCreatures.isSelected()) {
return false; return false;
} }
@@ -162,30 +167,31 @@ public class GenerateConstructedDeck {
/** /**
* Creates a CardList from the given sequence that meets the criteria * Creates a CardList from the given sequence that meets the criteria
* for color(s), type, whether the card is suitable for * for color(s), type, whether the card is suitable for
* placement in random decks and in AI decks, etc. * placement in random decks and in AI decks, etc.
* *
* @param sequence an iterable over Card instances * @param sequence an iterable over Card instances
* *
* @return a subset of sequence <= sequence; might be empty, but never * @return a subset of sequence <= sequence; might be empty, but never
* null * null
*/ */
private CardList filterBadCards(Iterable<Card> sequence) { private CardList filterBadCards(final Iterable<Card> sequence) {
final ArrayList<Card> goodLand = new ArrayList<Card>(); final ArrayList<Card> goodLand = new ArrayList<Card>();
CardList out = CardFilter.filter(sequence, new CardListFilter() { CardList out = CardFilter.filter(sequence, new CardListFilter() {
public boolean addCard(Card c) { public boolean addCard(final Card c) {
ArrayList<String> list = CardUtil.getColors(c); ArrayList<String> list = CardUtil.getColors(c);
if (list.size() == 2) { if (list.size() == 2) {
if (!(list.contains(color1) && list.contains(color2))) if (!(list.contains(color1) && list.contains(color2))) {
return false; return false;
}
} }
return CardUtil.getColors(c).size() <= 2 && //only dual colored gold cards return CardUtil.getColors(c).size() <= 2 //only dual colored gold cards
!c.isLand() && //no land && !c.isLand() //no land
!c.getSVar("RemRandomDeck").equals("True") && && !c.getSVar("RemRandomDeck").equals("True")
!c.getSVar("RemAIDeck").equals("True") || //OR very important && !c.getSVar("RemAIDeck").equals("True") //OR very important
goodLand.contains(c.getName()); || goodLand.contains(c.getName());
} }
}); });