diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 7da47e134e3..bce56df1794 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -6311,6 +6311,8 @@ public class Card extends GameEntity implements Comparable { * @return a boolean. */ public final boolean isType(String type) { + if ( type == null ) return false; + type = this.toMixedCase(type); if (this.typeContains(type) diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactory.java b/src/main/java/forge/card/abilityfactory/AbilityFactory.java index 296953266ac..2ab2f2e0870 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactory.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactory.java @@ -2835,7 +2835,7 @@ public class AbilityFactory { public void execute() { sa.resolve(); if (params.containsKey("PowerSink")) { - GameActionUtil.doPowerSink(AllZone.getHumanPlayer()); + GameActionUtil.doPowerSink(sa.getActivatingPlayer()); } AbilityFactory.resolveSubAbilities(sa); if (usedStack) { @@ -2847,8 +2847,8 @@ public class AbilityFactory { if (payer.isHuman()) { GameActionUtil.payCostDuringAbilityResolve(ability, cost, paidCommand, unpaidCommand, sa); } else { - if (ComputerUtil.canPayCost(ability, payer) && CostUtil.checkLifeCost(cost, source, 4, sa) - && CostUtil.checkDamageCost(cost, source, 4)) { + if (ComputerUtil.canPayCost(ability, payer) && CostUtil.checkLifeCost(payer, cost, source, 4, sa) + && CostUtil.checkDamageCost(payer, cost, source, 4)) { // AI was crashing because the blank ability used to pay costs // Didn't have any of the data on the original SA to pay dependant costs ability.setTarget(sa.getTarget()); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java index 79aeb202ba8..532de1e9a2c 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java @@ -338,7 +338,7 @@ public class AbilityFactoryAlterLife { return false; } - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } @@ -756,7 +756,7 @@ public class AbilityFactoryAlterLife { if (abCost != null) { // AI currently disabled for these costs - if (!CostUtil.checkLifeCost(abCost, source, amount, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, amount, null)) { return false; } @@ -1257,7 +1257,7 @@ public class AbilityFactoryAlterLife { if (abCost != null) { // AI currently disabled for these costs - if (!CostUtil.checkLifeCost(abCost, source, 1, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 1, null)) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java index 5ecfec3e93a..e0736529efc 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java @@ -496,7 +496,7 @@ public final class AbilityFactoryChangeZone { return false; } - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } @@ -1516,7 +1516,7 @@ public final class AbilityFactoryChangeZone { return false; } - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } @@ -2579,7 +2579,7 @@ public final class AbilityFactoryChangeZone { if (abCost != null) { // AI currently disabled for these costs - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounterMagic.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounterMagic.java index ad5c079a1c9..a9b7cdd3114 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounterMagic.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounterMagic.java @@ -258,7 +258,7 @@ public class AbilityFactoryCounterMagic { if (!CostUtil.checkSacrificeCost(ai, abCost, source)) { return false; } - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java index 1a92e8f97a3..0e186c12039 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java @@ -333,7 +333,7 @@ public class AbilityFactoryCounters { if (abCost != null) { // AI currently disabled for these costs - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } @@ -1011,7 +1011,7 @@ public class AbilityFactoryCounters { if (abCost != null) { // AI currently disabled for these costs - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } @@ -1866,7 +1866,7 @@ public class AbilityFactoryCounters { if (abCost != null) { // AI currently disabled for these costs - if (!CostUtil.checkLifeCost(abCost, source, 8, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 8, null)) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java index 624c57807ba..17169859b69 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java @@ -394,7 +394,7 @@ public class AbilityFactoryDealDamage { } // temporarily disabled until better AI - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } @@ -1181,7 +1181,7 @@ public class AbilityFactoryDealDamage { // abCost stuff that should probably be centralized... if (abCost != null) { // AI currently disabled for some costs - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDebuff.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDebuff.java index ca7af8f819e..40af5c8884a 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDebuff.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDebuff.java @@ -308,7 +308,7 @@ public final class AbilityFactoryDebuff { return false; } - if (!CostUtil.checkLifeCost(cost, source, 40, null)) { + if (!CostUtil.checkLifeCost(ai, cost, source, 40, null)) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDestroy.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDestroy.java index 5d6505b00de..fe1b0360dfa 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDestroy.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDestroy.java @@ -232,7 +232,7 @@ public class AbilityFactoryDestroy { return false; } - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } @@ -961,7 +961,7 @@ public class AbilityFactoryDestroy { if (abCost != null) { // AI currently disabled for some costs - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java index 126e4daee7c..d9c64d8cc04 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java @@ -279,7 +279,7 @@ public final class AbilityFactoryPlay { return false; } - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java index f474e745166..eba5fd1aee3 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java @@ -280,7 +280,7 @@ public class AbilityFactoryPreventDamage { final Cost cost = sa.getPayCosts(); // temporarily disabled until better AI - if (!CostUtil.checkLifeCost(cost, hostCard, 4, null)) { + if (!CostUtil.checkLifeCost(ai, cost, hostCard, 4, null)) { return false; } @@ -725,7 +725,7 @@ public class AbilityFactoryPreventDamage { final Cost cost = sa.getPayCosts(); // temporarily disabled until better AI - if (!CostUtil.checkLifeCost(cost, hostCard, 4, null)) { + if (!CostUtil.checkLifeCost(ai, cost, hostCard, 4, null)) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryProtection.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryProtection.java index 6e254ddbcda..4ff99676b05 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryProtection.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryProtection.java @@ -311,7 +311,7 @@ public final class AbilityFactoryProtection { final Cost cost = sa.getPayCosts(); // temporarily disabled until better AI - if (!CostUtil.checkLifeCost(cost, hostCard, 4, null)) { + if (!CostUtil.checkLifeCost(ai, cost, hostCard, 4, null)) { return false; } @@ -1039,7 +1039,7 @@ public final class AbilityFactoryProtection { final Cost cost = sa.getPayCosts(); // temporarily disabled until better AI - if (!CostUtil.checkLifeCost(cost, hostCard, 4, null)) { + if (!CostUtil.checkLifeCost(ai, cost, hostCard, 4, null)) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java index 44f7e4ffb44..8727c633919 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java @@ -818,7 +818,7 @@ public class AbilityFactoryPump { final Cost cost = sa.getPayCosts(); final PhaseHandler ph = Singletons.getModel().getGameState().getPhaseHandler(); - if (!CostUtil.checkLifeCost(cost, sa.getSourceCard(), 4, null)) { + if (!CostUtil.checkLifeCost(ai, cost, sa.getSourceCard(), 4, null)) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java index 431b60810c6..042bb80157a 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java @@ -270,7 +270,7 @@ public class AbilityFactoryRegenerate { final Cost abCost = af.getAbCost(); if (abCost != null) { // AI currently disabled for these costs - if (!CostUtil.checkLifeCost(abCost, hostCard, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, hostCard, 4, null)) { return false; } @@ -716,7 +716,7 @@ public class AbilityFactoryRegenerate { return false; } - if (!CostUtil.checkLifeCost(abCost, hostCard, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, hostCard, 4, null)) { return false; } } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryReveal.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryReveal.java index af74b0bf091..2c4857f003f 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryReveal.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryReveal.java @@ -1289,7 +1289,7 @@ public final class AbilityFactoryReveal { if (abCost != null) { // AI currently disabled for these costs - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } @@ -2275,7 +2275,7 @@ public final class AbilityFactoryReveal { if (abCost != null) { // AI currently disabled for these costs - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java b/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java index c392d3e6f5d..5b6f4b2b307 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java @@ -866,7 +866,7 @@ public class AbilityFactorySacrifice { if (abCost != null) { // AI currently disabled for some costs - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java index 0df25b92f45..e5386d0407b 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java @@ -355,7 +355,7 @@ public class AbilityFactoryToken extends AbilityFactory { } if (cost != null) { - if (!CostUtil.checkLifeCost(cost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, cost, source, 4, null)) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java index 7764577b616..42863a6ba44 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java @@ -304,7 +304,7 @@ public class AbilityFactoryZoneAffecting { return false; } - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } @@ -874,7 +874,7 @@ public class AbilityFactoryZoneAffecting { if (abCost != null) { // AI currently disabled for these costs - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } @@ -1604,7 +1604,7 @@ public class AbilityFactoryZoneAffecting { return false; } - if (!CostUtil.checkLifeCost(abCost, source, 4, null)) { + if (!CostUtil.checkLifeCost(ai, abCost, source, 4, null)) { return false; } diff --git a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java index 6167657edce..d45a5cb037b 100644 --- a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java +++ b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java @@ -793,69 +793,46 @@ public class CardFactorySorceries { } private final static SpellAbility getPatriarchsBidding( final Card card ) { - final String[] input = new String[2]; final SpellAbility spell = new Spell(card) { private static final long serialVersionUID = -2182173662547136798L; @Override public void resolve() { - input[0] = ""; - while (input[0] == "") { - input[0] = JOptionPane.showInputDialog(null, "Which creature type?", "Pick type", - JOptionPane.QUESTION_MESSAGE); - if (input[0] == null) { - break; - } - if (!CardUtil.isACreatureType(input[0])) { - input[0] = ""; - // TODO some more input validation, - // case-sensitivity, - // etc. - } - - input[0] = input[0].trim(); // this is to prevent - // "cheating", and selecting - // multiple creature - // types,eg "Goblin Soldier" - } - - if (input[0] == null) { - input[0] = ""; - } - - final HashMap countInGraveyard = new HashMap(); - final List allGrave = AllZone.getComputerPlayer().getCardsIn(ZoneType.Graveyard); - for (final Card c : Iterables.filter(allGrave, CardPredicates.Presets.CREATURES)) { - for (final String type : c.getType()) { - if (CardUtil.isACreatureType(type)) { - if (countInGraveyard.containsKey(type)) { - countInGraveyard.put(type, countInGraveyard.get(type) + 1); - } else { - countInGraveyard.put(type, 1); + List types = new ArrayList(); + for(Player p : AllZone.getPlayersInGame()) { + if ( p.isHuman() ) { + types.add(GuiChoose.one("Which creature type?", Constant.CardTypes.CREATURE_TYPES)); + } else { + final HashMap countInGraveyard = new HashMap(); + final List aiGrave = p.getCardsIn(ZoneType.Graveyard); + for (final Card c : Iterables.filter(aiGrave, CardPredicates.Presets.CREATURES)) { + for (final String type : c.getType()) { + if (CardUtil.isACreatureType(type)) { + Integer oldVal = countInGraveyard.get(type); + countInGraveyard.put(type, 1 + ( oldVal != null ? oldVal : 0 )); + } } } + String maxKey = ""; + int maxCount = -1; + for (final Entry entry : countInGraveyard.entrySet()) { + if (entry.getValue() > maxCount) { + maxKey = entry.getKey(); + maxCount = entry.getValue(); + } + } + types.add( maxKey.equals("") ? "Sliver" : maxKey ); } } - String maxKey = ""; - int maxCount = -1; - for (final Entry entry : countInGraveyard.entrySet()) { - if (entry.getValue() > maxCount) { - maxKey = entry.getKey(); - maxCount = entry.getValue(); - } - } - if (!maxKey.equals("")) { - input[1] = maxKey; - } else { - input[1] = "Sliver"; - } - // Actually put everything on the battlefield List bidded = CardLists.filter(AllZoneUtil.getCardsIn(ZoneType.Graveyard), CardPredicates.Presets.CREATURES); for (final Card c : bidded) { - if (c.isType(input[1]) || (!input[0].equals("") && c.isType(input[0]))) { - Singletons.getModel().getGameAction().moveToPlay(c); + for(int i = 0; i < types.size(); i++) { + if (c.isType(types.get(i))) { + Singletons.getModel().getGameAction().moveToPlay(c); + i = types.size(); // break inner loop + } } } } // resolve() diff --git a/src/main/java/forge/card/cost/CostDamage.java b/src/main/java/forge/card/cost/CostDamage.java index cca5eefddd1..43ab047834f 100644 --- a/src/main/java/forge/card/cost/CostDamage.java +++ b/src/main/java/forge/card/cost/CostDamage.java @@ -100,7 +100,7 @@ public class CostDamage extends CostPart { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { AllZone.getComputerPlayer().addDamage(this.getLastPaidAmount(), source); } diff --git a/src/main/java/forge/card/cost/CostDiscard.java b/src/main/java/forge/card/cost/CostDiscard.java index 51f7cb93f3b..cf4576a0341 100644 --- a/src/main/java/forge/card/cost/CostDiscard.java +++ b/src/main/java/forge/card/cost/CostDiscard.java @@ -163,10 +163,9 @@ public class CostDiscard extends CostPartWithList { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { - final Player activator = ability.getActivatingPlayer(); + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { for (final Card c : this.getList()) { - activator.discard(c, ability); + ai.discard(c, ability); } } diff --git a/src/main/java/forge/card/cost/CostExile.java b/src/main/java/forge/card/cost/CostExile.java index fec8070b43d..01a7a2ded07 100644 --- a/src/main/java/forge/card/cost/CostExile.java +++ b/src/main/java/forge/card/cost/CostExile.java @@ -175,7 +175,7 @@ public class CostExile extends CostPartWithList { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { for (final Card c : this.getList()) { Singletons.getModel().getGameAction().exile(c); if (this.from.equals(ZoneType.Stack)) { diff --git a/src/main/java/forge/card/cost/CostGainLife.java b/src/main/java/forge/card/cost/CostGainLife.java index 3f0e21b8db4..bc6151ee644 100644 --- a/src/main/java/forge/card/cost/CostGainLife.java +++ b/src/main/java/forge/card/cost/CostGainLife.java @@ -17,7 +17,6 @@ */ package forge.card.cost; -import forge.AllZone; import forge.Card; import forge.GameActionUtil; import forge.card.abilityfactory.AbilityFactory; @@ -105,8 +104,8 @@ public class CostGainLife extends CostPart { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { - AllZone.getHumanPlayer().gainLife(this.getLastPaidAmount(), null); + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { + ai.getOpponent().gainLife(this.getLastPaidAmount(), null); } /* diff --git a/src/main/java/forge/card/cost/CostMana.java b/src/main/java/forge/card/cost/CostMana.java index 15e0c3e6e63..7c7b7d879e8 100644 --- a/src/main/java/forge/card/cost/CostMana.java +++ b/src/main/java/forge/card/cost/CostMana.java @@ -197,8 +197,8 @@ public class CostMana extends CostPart { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { - ComputerUtil.payManaCost(ability.getActivatingPlayer(), ability); + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { + ComputerUtil.payManaCost(ai, ability); } /* diff --git a/src/main/java/forge/card/cost/CostMill.java b/src/main/java/forge/card/cost/CostMill.java index e8f0062c131..b3329ddcde7 100644 --- a/src/main/java/forge/card/cost/CostMill.java +++ b/src/main/java/forge/card/cost/CostMill.java @@ -110,7 +110,7 @@ public class CostMill extends CostPartWithList { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { for (final Card c : this.getList()) { Singletons.getModel().getGameAction().moveToGraveyard(c); } diff --git a/src/main/java/forge/card/cost/CostPart.java b/src/main/java/forge/card/cost/CostPart.java index de6e2c5f4e0..862c4136cff 100644 --- a/src/main/java/forge/card/cost/CostPart.java +++ b/src/main/java/forge/card/cost/CostPart.java @@ -203,7 +203,7 @@ public abstract class CostPart { * @param payment * the payment */ - public abstract void payAI(SpellAbility ability, Card source, CostPayment payment); + public abstract void payAI(final Player ai, SpellAbility ability, Card source, CostPayment payment); /** * Pay human. diff --git a/src/main/java/forge/card/cost/CostPayLife.java b/src/main/java/forge/card/cost/CostPayLife.java index 87d695024dc..cfa750464eb 100644 --- a/src/main/java/forge/card/cost/CostPayLife.java +++ b/src/main/java/forge/card/cost/CostPayLife.java @@ -109,8 +109,8 @@ public class CostPayLife extends CostPart { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { - ability.getActivatingPlayer().payLife(this.getLastPaidAmount(), null); + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { + ai.payLife(this.getLastPaidAmount(), null); } /* diff --git a/src/main/java/forge/card/cost/CostPayment.java b/src/main/java/forge/card/cost/CostPayment.java index 51a8525e81c..0a4d398a095 100644 --- a/src/main/java/forge/card/cost/CostPayment.java +++ b/src/main/java/forge/card/cost/CostPayment.java @@ -303,7 +303,7 @@ public class CostPayment { } for (final CostPart part : parts) { - part.payAI(this.ability, this.ability.getSourceCard(), this); + part.payAI(ai, this.ability, this.ability.getSourceCard(), this); } return true; } diff --git a/src/main/java/forge/card/cost/CostPutCounter.java b/src/main/java/forge/card/cost/CostPutCounter.java index 444adee3ea8..2854b9eb9eb 100644 --- a/src/main/java/forge/card/cost/CostPutCounter.java +++ b/src/main/java/forge/card/cost/CostPutCounter.java @@ -155,7 +155,7 @@ public class CostPutCounter extends CostPartWithList { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { Integer c = this.convertAmount(); if (c == null) { c = AbilityFactory.calculateAmount(source, this.getAmount(), ability); diff --git a/src/main/java/forge/card/cost/CostRemoveCounter.java b/src/main/java/forge/card/cost/CostRemoveCounter.java index ae83e7e95be..fc26edcc2e8 100644 --- a/src/main/java/forge/card/cost/CostRemoveCounter.java +++ b/src/main/java/forge/card/cost/CostRemoveCounter.java @@ -186,7 +186,7 @@ public class CostRemoveCounter extends CostPartWithList { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { final String amount = this.getAmount(); Integer c = this.convertAmount(); if (c == null) { diff --git a/src/main/java/forge/card/cost/CostReturn.java b/src/main/java/forge/card/cost/CostReturn.java index 073c03e474f..d204ce39cb7 100644 --- a/src/main/java/forge/card/cost/CostReturn.java +++ b/src/main/java/forge/card/cost/CostReturn.java @@ -130,7 +130,7 @@ public class CostReturn extends CostPartWithList { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { for (final Card c : this.getList()) { Singletons.getModel().getGameAction().moveToHand(c); } diff --git a/src/main/java/forge/card/cost/CostReveal.java b/src/main/java/forge/card/cost/CostReveal.java index ae29693814b..3e9d4a98764 100644 --- a/src/main/java/forge/card/cost/CostReveal.java +++ b/src/main/java/forge/card/cost/CostReveal.java @@ -134,7 +134,7 @@ public class CostReveal extends CostPartWithList { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { GuiChoose.oneOrNone("Revealed cards:", this.getList()); } diff --git a/src/main/java/forge/card/cost/CostSacrifice.java b/src/main/java/forge/card/cost/CostSacrifice.java index 5060ab2c564..79daaec159e 100644 --- a/src/main/java/forge/card/cost/CostSacrifice.java +++ b/src/main/java/forge/card/cost/CostSacrifice.java @@ -138,7 +138,7 @@ public class CostSacrifice extends CostPartWithList { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { this.addListToHash(ability, "Sacrificed"); for (final Card c : this.getList()) { Singletons.getModel().getGameAction().sacrifice(c, ability); diff --git a/src/main/java/forge/card/cost/CostTap.java b/src/main/java/forge/card/cost/CostTap.java index cd643202937..6e8c88db25e 100644 --- a/src/main/java/forge/card/cost/CostTap.java +++ b/src/main/java/forge/card/cost/CostTap.java @@ -73,7 +73,7 @@ public class CostTap extends CostPart { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { source.tap(); } diff --git a/src/main/java/forge/card/cost/CostTapType.java b/src/main/java/forge/card/cost/CostTapType.java index d65e713274e..4283c36dc0e 100644 --- a/src/main/java/forge/card/cost/CostTapType.java +++ b/src/main/java/forge/card/cost/CostTapType.java @@ -139,7 +139,7 @@ public class CostTapType extends CostPartWithList { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { for (final Card c : this.getList()) { c.tap(); } diff --git a/src/main/java/forge/card/cost/CostUntap.java b/src/main/java/forge/card/cost/CostUntap.java index 87be288c1bd..9756c9bcc35 100644 --- a/src/main/java/forge/card/cost/CostUntap.java +++ b/src/main/java/forge/card/cost/CostUntap.java @@ -73,7 +73,7 @@ public class CostUntap extends CostPart { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { source.untap(); } diff --git a/src/main/java/forge/card/cost/CostUntapType.java b/src/main/java/forge/card/cost/CostUntapType.java index 3c977d3b2b9..fecb7e66603 100644 --- a/src/main/java/forge/card/cost/CostUntapType.java +++ b/src/main/java/forge/card/cost/CostUntapType.java @@ -144,7 +144,7 @@ public class CostUntapType extends CostPartWithList { * forge.Card, forge.card.cost.Cost_Payment) */ @Override - public final void payAI(final SpellAbility ability, final Card source, final CostPayment payment) { + public final void payAI(final Player ai, final SpellAbility ability, final Card source, final CostPayment payment) { for (final Card c : this.getList()) { c.untap(); } diff --git a/src/main/java/forge/card/cost/CostUtil.java b/src/main/java/forge/card/cost/CostUtil.java index f36506518b5..12ea8937d34 100644 --- a/src/main/java/forge/card/cost/CostUtil.java +++ b/src/main/java/forge/card/cost/CostUtil.java @@ -143,7 +143,7 @@ public class CostUtil { * @param sourceAbility TODO * @return true, if successful */ - public static boolean checkLifeCost(final Cost cost, final Card source, final int remainingLife, SpellAbility sourceAbility) { + public static boolean checkLifeCost(final Player ai, final Cost cost, final Card source, final int remainingLife, SpellAbility sourceAbility) { // TODO - Pass in SA for everything else that calls this function if (cost == null) { return true; @@ -157,7 +157,7 @@ public class CostUtil { amount = AbilityFactory.calculateAmount(source, payLife.getAmount(), sourceAbility); } - if ((AllZone.getComputerPlayer().getLife() - amount) < remainingLife) { + if ((ai.getLife() - amount) < remainingLife) { return false; } } @@ -176,21 +176,20 @@ public class CostUtil { * the remaining life * @return true, if successful */ - public static boolean checkDamageCost(final Cost cost, final Card source, final int remainingLife) { + public static boolean checkDamageCost(final Player ai, final Cost cost, final Card source, final int remainingLife) { if (cost == null) { return true; } for (final CostPart part : cost.getCostParts()) { if (part instanceof CostDamage) { final CostDamage pay = (CostDamage) part; - Player computer = AllZone.getComputerPlayer(); - int realDamage = computer.predictDamage(pay.convertAmount(), source, false); - if (computer.getLife() - realDamage < remainingLife - && realDamage > 0 && !computer.cantLoseForZeroOrLessLife() - && computer.canLoseLife()) { + int realDamage = ai.predictDamage(pay.convertAmount(), source, false); + if (ai.getLife() - realDamage < remainingLife + && realDamage > 0 && !ai.cantLoseForZeroOrLessLife() + && ai.canLoseLife()) { return false; } - if (source.getName().equals("Skullscorch") && computer.getCardsIn(ZoneType.Hand).size() < 2) { + if (source.getName().equals("Skullscorch") && ai.getCardsIn(ZoneType.Hand).size() < 2) { return false; } } diff --git a/src/main/java/forge/card/spellability/SpellPermanent.java b/src/main/java/forge/card/spellability/SpellPermanent.java index a334aa1abe6..e276a97b555 100644 --- a/src/main/java/forge/card/spellability/SpellPermanent.java +++ b/src/main/java/forge/card/spellability/SpellPermanent.java @@ -335,7 +335,7 @@ public class SpellPermanent extends Spell { if (cost != null) { // AI currently disabled for these costs - if (!CostUtil.checkLifeCost(cost, card, 4, null)) { + if (!CostUtil.checkLifeCost(ai, cost, card, 4, null)) { return false; } diff --git a/src/main/java/forge/control/input/InputAttack.java b/src/main/java/forge/control/input/InputAttack.java index ace36a1979e..ac89474e9b1 100644 --- a/src/main/java/forge/control/input/InputAttack.java +++ b/src/main/java/forge/control/input/InputAttack.java @@ -27,6 +27,7 @@ import forge.Card; import forge.CardPredicates; import forge.Singletons; import forge.game.phase.CombatUtil; +import forge.game.player.Player; import forge.game.zone.PlayerZone; import forge.game.zone.ZoneType; import forge.gui.framework.SDisplayUtil; @@ -98,7 +99,8 @@ public class InputAttack extends Input { return; } - if (zone.is(ZoneType.Battlefield, AllZone.getHumanPlayer()) + final Player human = Singletons.getControl().getPlayer(); + if (zone.is(ZoneType.Battlefield, human) && CombatUtil.canAttack(card, AllZone.getCombat())) { // TODO add the propaganda code here and remove it in @@ -109,7 +111,7 @@ public class InputAttack extends Input { AllZone.getCombat().addAttacker(card); // just to make sure the attack symbol is marked - AllZone.getHumanPlayer().getZone(ZoneType.Battlefield).updateObservers(); + human.getZone(ZoneType.Battlefield).updateObservers(); CombatUtil.showCombat(); } else { diff --git a/src/main/java/forge/control/input/InputBlock.java b/src/main/java/forge/control/input/InputBlock.java index 91fc5b00a05..14941f366e4 100644 --- a/src/main/java/forge/control/input/InputBlock.java +++ b/src/main/java/forge/control/input/InputBlock.java @@ -109,7 +109,7 @@ public class InputBlock extends Input { } else { // Make sure this card is valid to even be a blocker if (this.currentAttacker != null && card.isCreature() && card.getController().isHuman() - && zone.is(ZoneType.Battlefield, AllZone.getHumanPlayer())) { + && zone.is(ZoneType.Battlefield, Singletons.getControl().getPlayer())) { // Create a new blockedBy list if it doesn't exist if (!this.allBlocking.containsKey(card)) { this.allBlocking.put(card, new ArrayList()); diff --git a/src/main/java/forge/control/input/InputMulligan.java b/src/main/java/forge/control/input/InputMulligan.java index 648ff362093..9d9bb48380a 100644 --- a/src/main/java/forge/control/input/InputMulligan.java +++ b/src/main/java/forge/control/input/InputMulligan.java @@ -153,60 +153,59 @@ public class InputMulligan extends Input { // Human Leylines & Chancellors ButtonUtil.reset(); final AbilityFactory af = new AbilityFactory(); - final List humanOpeningHand = AllZone.getHumanPlayer().getCardsIn(ZoneType.Hand); - - for (final Card c : humanOpeningHand) { - final ArrayList kws = c.getKeyword(); - for (int i = 0; i < kws.size(); i++) { - final String kw = kws.get(i); - - if (kw.startsWith("MayEffectFromOpeningHand")) { - final String effName = kw.split(":")[1]; - - final SpellAbility effect = af.getAbility(c.getSVar(effName), c); - if (GameActionUtil.showYesNoDialog(c, "Use this card's ability?")) { - // If we ever let the AI memorize cards in the players - // hand, this would be a place to do so. - ga.playSpellAbilityNoStack(effect, false); - } - } - } - if (c.getName().startsWith("Leyline")) { - if (GameActionUtil.showYesNoDialog(c, "Use this card's ability?")) { - ga.moveToPlay(c); - } - } - } - - // Computer Leylines & Chancellors - Player ai = AllZone.getComputerPlayer(); - final List aiOpeningHand = ai.getCardsIn(ZoneType.Hand); - for (final Card c : aiOpeningHand) { - if (!c.getName().startsWith("Leyline")) { - final ArrayList kws = c.getKeyword(); - for (int i = 0; i < kws.size(); i++) { - final String kw = kws.get(i); - - if (kw.startsWith("MayEffectFromOpeningHand")) { - final String effName = kw.split(":")[1]; - - final SpellAbility effect = af.getAbility(c.getSVar(effName), c); - - // Is there a better way for the AI to decide this? - if (effect.doTrigger(false)) { - GameActionUtil.showInfoDialg("Computer reveals " + c.getName() + "(" + c.getUniqueNumber() - + ")."); - ComputerUtil.playNoStack(ai, effect); + + for (Player p : AllZone.getPlayersInGame()) { + final List openingHand = p.getCardsIn(ZoneType.Hand); + + for (final Card c : openingHand) { + if ( p.isHuman() ) { + final ArrayList kws = c.getKeyword(); + for (int i = 0; i < kws.size(); i++) { + final String kw = kws.get(i); + + if (kw.startsWith("MayEffectFromOpeningHand")) { + final String effName = kw.split(":")[1]; + + final SpellAbility effect = af.getAbility(c.getSVar(effName), c); + if (GameActionUtil.showYesNoDialog(c, "Use this card's ability?")) { + // If we ever let the AI memorize cards in the players + // hand, this would be a place to do so. + ga.playSpellAbilityNoStack(effect, false); + } } } + if (c.getName().startsWith("Leyline")) { + if (GameActionUtil.showYesNoDialog(c, "Use this card's ability?")) { + ga.moveToPlay(c); + } + } + } else { // Computer Leylines & Chancellors + if (!c.getName().startsWith("Leyline")) { + final ArrayList kws = c.getKeyword(); + for (int i = 0; i < kws.size(); i++) { + final String kw = kws.get(i); + + if (kw.startsWith("MayEffectFromOpeningHand")) { + final String effName = kw.split(":")[1]; + + final SpellAbility effect = af.getAbility(c.getSVar(effName), c); + + // Is there a better way for the AI to decide this? + if (effect.doTrigger(false)) { + GameActionUtil.showInfoDialg("Computer reveals " + c.getName() + "(" + c.getUniqueNumber() + ")."); + ComputerUtil.playNoStack(p, effect); + } + } + } + } + if (c.getName().startsWith("Leyline") + && !(c.getName().startsWith("Leyline of Singularity") && (AllZoneUtil.getCardsIn(ZoneType.Battlefield, + "Leyline of Singularity").size() > 0))) { + ga.moveToPlay(c); + //ga.checkStateEffects(); + } } } - if (c.getName().startsWith("Leyline") - && !(c.getName().startsWith("Leyline of Singularity") && (AllZoneUtil.getCardsIn(ZoneType.Battlefield, - "Leyline of Singularity").size() > 0))) { - ga.moveToPlay(c); - //ga.checkStateEffects(); - } } //ga.checkStateEffects(); diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index 094ee3dc002..2172a45e9cc 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -67,13 +67,16 @@ public class GameNew { Card.resetUniqueNumber(); for( PlayerStartsGame p : players ) { - p.getPlayer().setStartingLife(p.initialLives); + final Player player = p.getPlayer(); + player.setStartingLife(p.initialLives); // what if I call it for AI player? - p.getPlayer().updateObservers(); - p.getPlayer().setDeck(p.getDeck()); - PlayerZone bf = p.getPlayer().getZone(ZoneType.Battlefield); + player.updateObservers(); + player.setDeck(p.getDeck()); + PlayerZone bf = player.getZone(ZoneType.Battlefield); if (p.cardsOnBattlefield != null) { for (final Card c : p.cardsOnBattlefield) { + c.addController(player); + c.setOwner(player); bf.add(c, false); c.setSickness(true); c.setStartsGameInPlay(true); diff --git a/src/main/java/forge/game/limited/GauntletMini.java b/src/main/java/forge/game/limited/GauntletMini.java index 9f2abc611e8..5870c23af95 100644 --- a/src/main/java/forge/game/limited/GauntletMini.java +++ b/src/main/java/forge/game/limited/GauntletMini.java @@ -231,7 +231,7 @@ public class GauntletMini { * Draft mode status. * @return boolean, gauntletDraft */ - public final boolean getGauntletDraft() { + public final boolean isGauntletDraft() { return gauntletDraft; } diff --git a/src/main/java/forge/game/phase/Untap.java b/src/main/java/forge/game/phase/Untap.java index d9214b9d59e..bb9e76b2d50 100644 --- a/src/main/java/forge/game/phase/Untap.java +++ b/src/main/java/forge/game/phase/Untap.java @@ -237,8 +237,9 @@ public class Untap extends Phase implements java.io.Serializable { } } if (AllZoneUtil.isCardInPlay("Damping Field") || AllZoneUtil.isCardInPlay("Imi Statue")) { - if (Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn().isComputer()) { - List artList = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); + final Player turnOwner = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn(); + if (turnOwner.isComputer()) { + List artList = turnOwner.getCardsIn(ZoneType.Battlefield); artList = CardLists.filter(artList, Presets.ARTIFACTS); artList = CardLists.filter(artList, tappedCanUntap); if (artList.size() > 0) { @@ -268,7 +269,7 @@ public class Untap extends Phase implements java.io.Serializable { } } // selectCard() }; // Input - List artList = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield); + List artList = turnOwner.getCardsIn(ZoneType.Battlefield); artList = CardLists.filter(artList, Presets.ARTIFACTS); artList = CardLists.filter(artList, tappedCanUntap); if (artList.size() > 0) { diff --git a/src/main/java/forge/game/phase/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java index 902da30d2ae..3354c512676 100644 --- a/src/main/java/forge/game/phase/Upkeep.java +++ b/src/main/java/forge/game/phase/Upkeep.java @@ -1216,13 +1216,6 @@ public class Upkeep extends Phase implements java.io.Serializable { boolean wantDamageCreatures = false; final String[] smallCreatures = { "Creature.toughnessLE2" }; - List humanCreatures = AllZoneUtil.getCreaturesInPlay(AllZone.getHumanPlayer()); - humanCreatures = CardLists.getValidCards(humanCreatures, smallCreatures, k.getController(), k); - humanCreatures = CardLists.getNotKeyword(humanCreatures, "Indestructible"); - - List computerCreatures = AllZoneUtil.getCreaturesInPlay(AllZone.getComputerPlayer()); - computerCreatures = CardLists.getValidCards(computerCreatures, smallCreatures, k.getController(), k); - computerCreatures = CardLists.getNotKeyword(computerCreatures, "Indestructible"); // We assume that both players will want to peek, ask if // they want to reveal. @@ -1242,6 +1235,15 @@ public class Upkeep extends Phase implements java.io.Serializable { } // player isComputer() else { + List humanCreatures = AllZoneUtil.getCreaturesInPlay(player.getOpponent()); + humanCreatures = CardLists.getValidCards(humanCreatures, smallCreatures, k.getController(), k); + humanCreatures = CardLists.getNotKeyword(humanCreatures, "Indestructible"); + + List computerCreatures = AllZoneUtil.getCreaturesInPlay(player); + computerCreatures = CardLists.getValidCards(computerCreatures, smallCreatures, k.getController(), k); + computerCreatures = CardLists.getNotKeyword(computerCreatures, "Indestructible"); + + if (humanCreatures.size() > computerCreatures.size()) { final String title = "Computer reveals"; this.revealTopCard(title); @@ -2203,7 +2205,7 @@ public class Upkeep extends Phase implements java.io.Serializable { @Override public void selectCard(final Card card, final PlayerZone zone) { - if (zone.is(ZoneType.Battlefield, AllZone.getHumanPlayer()) + if (zone.is(ZoneType.Battlefield, player) && list.contains(card)) { card.tap(); list.remove(card); diff --git a/src/main/java/forge/gui/match/ViewWinLose.java b/src/main/java/forge/gui/match/ViewWinLose.java index 16ca60c2a07..ece12a3ed78 100644 --- a/src/main/java/forge/gui/match/ViewWinLose.java +++ b/src/main/java/forge/gui/match/ViewWinLose.java @@ -51,18 +51,19 @@ public class ViewWinLose { btnContinue = new FButton(); btnRestart = new FButton(); btnQuit = new FButton(); + + final Player human = Singletons.getControl().getPlayer(); // Control of the win/lose is handled differently for various game modes. ControlWinLose control; - if (Singletons.getModel().getMatchState().getGameType() == GameType.Quest) { + if (matchState.getGameType() == GameType.Quest) { control = new QuestWinLoseHandler(this); } - else if (Singletons.getModel().getMatchState().getGameType() == GameType.Sealed - || (Singletons.getModel().getMatchState().getGameType() == GameType.Draft && AllZone.getGauntlet().getGauntletDraft())) { - + else if (matchState.getGameType() == GameType.Sealed + || (matchState.getGameType() == GameType.Draft && AllZone.getGauntlet().isGauntletDraft())) { control = new GauntletWinLose(this); } - else if (Singletons.getModel().getMatchState().getGameType() == GameType.Gauntlet) { + else if (matchState.getGameType() == GameType.Gauntlet) { control = new OtherGauntletWinLose(this); } else { @@ -102,7 +103,7 @@ public class ViewWinLose { } // Show Wins and Loses - final Player human = AllZone.getHumanPlayer(); + final int humanWins = matchState.countGamesWonBy(human); final int humanLosses = matchState.getGamesPlayedCount() - humanWins; diff --git a/src/main/java/forge/quest/QuestUtil.java b/src/main/java/forge/quest/QuestUtil.java index 4417229481a..51e511342bf 100644 --- a/src/main/java/forge/quest/QuestUtil.java +++ b/src/main/java/forge/quest/QuestUtil.java @@ -17,11 +17,9 @@ */ package forge.quest; -import forge.AllZone; import forge.Card; import forge.card.cardfactory.CardFactory; -import forge.game.player.Player; import forge.item.CardDb; import forge.quest.bazaar.QuestPetController; @@ -70,7 +68,7 @@ public class QuestUtil { final List extras = ((QuestEventChallenge) qe).getAIExtraCards(); for (final String s : extras) { - list.add(QuestUtil.readExtraCard(s, AllZone.getComputerPlayer())); + list.add(QuestUtil.readExtraCard(s)); } } @@ -97,9 +95,8 @@ public class QuestUtil { if (pet != null) { Card c = pet.getPetCard(qc.getAssets()); if (c != null) { - Card copy = CardFactory.getCard2(c, AllZone.getHumanPlayer()); + Card copy = CardFactory.getCard2(c, null); copy.setSickness(true); - copy.addController(AllZone.getHumanPlayer()); copy.setImageName(c.getImageName()); copy.setToken(true); list.add(copy); @@ -130,7 +127,7 @@ public class QuestUtil { final List extras = ((QuestEventChallenge) qe).getHumanExtraCards(); for (final String s : extras) { - list.add(QuestUtil.readExtraCard(s, AllZone.getHumanPlayer())); + list.add(QuestUtil.readExtraCard(s)); } } @@ -181,17 +178,15 @@ public class QuestUtil { * the owner * @return the card */ - public static Card readExtraCard(final String name, final Player owner) { + public static Card readExtraCard(final String name) { // Token card creation Card tempcard; if (name.startsWith("TOKEN")) { tempcard = QuestUtil.createToken(name); - tempcard.addController(owner); - tempcard.setOwner(owner); } // Standard card creation else { - tempcard = CardDb.instance().getCard(name, true).toForgeCard(owner); + tempcard = CardDb.instance().getCard(name, true).toForgeCard(); } return tempcard; }