diff --git a/src/main/java/forge/card/ability/effects/TokenEffect.java b/src/main/java/forge/card/ability/effects/TokenEffect.java index 4fdc7426cb3..38cc11bf415 100644 --- a/src/main/java/forge/card/ability/effects/TokenEffect.java +++ b/src/main/java/forge/card/ability/effects/TokenEffect.java @@ -25,10 +25,11 @@ import forge.Singletons; import forge.card.ability.AbilityFactory; import forge.card.ability.AbilityUtils; import forge.card.ability.SpellAbilityEffect; -import forge.card.cardfactory.CardFactoryUtil; +import forge.card.cardfactory.CardFactory; import forge.card.spellability.SpellAbility; import forge.card.trigger.Trigger; import forge.card.trigger.TriggerHandler; +import forge.game.event.TokenCreatedEvent; import forge.game.player.Player; import forge.item.CardToken; @@ -200,9 +201,13 @@ public class TokenEffect extends SpellAbilityEffect { final String remember = sa.getParam("RememberTokens"); for (final Player controller : AbilityUtils.getDefinedPlayers(host, this.tokenOwner, sa)) { for (int i = 0; i < finalAmount; i++) { - final List tokens = CardFactoryUtil.makeToken(substitutedName, imageName, controller, cost, + final List tokens = CardFactory.makeToken(substitutedName, imageName, controller, cost, substitutedTypes, finalPower, finalToughness, this.tokenKeywords); - + for(Card tok : tokens) { + Singletons.getModel().getGame().getAction().moveToPlay(tok); + } + Singletons.getModel().getGame().getEvents().post(new TokenCreatedEvent()); + // Grant rule changes if (this.tokenHiddenKeywords != null) { for (final String s : this.tokenHiddenKeywords) { diff --git a/src/main/java/forge/card/cardfactory/CardFactory.java b/src/main/java/forge/card/cardfactory/CardFactory.java index a95f14990a8..4f32d53fa0c 100644 --- a/src/main/java/forge/card/cardfactory/CardFactory.java +++ b/src/main/java/forge/card/cardfactory/CardFactory.java @@ -28,6 +28,7 @@ import forge.CardColor; import forge.CardUtil; import forge.Color; import forge.ImageCache; +import forge.Singletons; import forge.card.CardCharacteristics; import forge.card.CardRules; import forge.card.CardSplitType; @@ -41,6 +42,7 @@ import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellPermanent; import forge.card.spellability.Target; import forge.card.trigger.TriggerHandler; +import forge.game.event.TokenCreatedEvent; import forge.game.player.Player; import forge.item.CardDb; import forge.item.CardPrinted; @@ -510,4 +512,40 @@ public class CardFactory { } } + public static List makeToken(final String name, final String imageName, final Player controller, + final String manaCost, final String[] types, final int baseAttack, final int baseDefense, + final String[] intrinsicKeywords) { + final List list = new ArrayList(); + final Card c = new Card(); + c.setName(name); + c.setImageKey(ImageCache.TOKEN_PREFIX + imageName); + + // TODO - most tokens mana cost is 0, this needs to be fixed + // c.setManaCost(manaCost); + c.addColor(manaCost); + c.setToken(true); + + for (final String t : types) { + c.addType(t); + } + + c.setBaseAttack(baseAttack); + c.setBaseDefense(baseDefense); + + final int multiplier = controller.getTokenDoublersMagnitude(); + for (int i = 0; i < multiplier; i++) { + Card temp = copyStats(c); + + for (final String kw : intrinsicKeywords) { + temp.addIntrinsicKeyword(kw); + } + temp.setOwner(controller); + temp.setToken(true); + CardFactoryUtil.parseKeywords(temp, temp.getName()); + CardFactoryUtil.setupKeywordedAbilities(temp); + list.add(temp); + } + return list; + } + } // end class AbstractCardFactory diff --git a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java index 5a06c5c9c89..bf27308d9b5 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java @@ -52,6 +52,7 @@ import forge.control.input.Input; import forge.control.input.InputSelectManyCards; import forge.game.ai.ComputerUtilCard; import forge.game.ai.ComputerUtilCombat; +import forge.game.event.TokenCreatedEvent; import forge.game.player.Player; import forge.game.zone.PlayerZone; import forge.game.zone.Zone; @@ -74,11 +75,15 @@ public class CardFactoryCreatures { final Ability ability = new Ability(card, ManaCost.ZERO) { @Override public void resolve() { - final List cl = CardFactoryUtil.makeToken("Stangg Twin", + final List cl = CardFactory.makeToken("Stangg Twin", CardToken.makeTokenFileName("RG", 3, 4, "Stangg Twin"), card.getController(), "R G", new String[] { "Legendary", "Creature", "Human", "Warrior" }, 3, 4, new String[] { "" }); - + for(Card tok : cl) { + Singletons.getModel().getGame().getAction().moveToPlay(tok); + } + Singletons.getModel().getGame().getEvents().post(new TokenCreatedEvent()); + cl.get(0).addLeavesPlayCommand(new Command() { private static final long serialVersionUID = 3367390368512271319L; @@ -369,13 +374,18 @@ public class CardFactoryCreatures { final SpellAbility ability2 = new Ability(card, ManaCost.ZERO) { @Override public void resolve() { + int n = card.sumAllCounters(); for (int i = 0; i < card.sumAllCounters(); i++) { - this.makeToken(); + for(Card tok : this.makeToken()) { + Singletons.getModel().getGame().getAction().moveToPlay(tok); + } } + if (n > 0) + Singletons.getModel().getGame().getEvents().post(new TokenCreatedEvent()); } // resolve() - public void makeToken() { - CardFactoryUtil.makeToken("Kithkin Soldier", CardToken.makeTokenFileName("W", 1, 1, "Kithkin Soldier"), + public List makeToken() { + return CardFactory.makeToken("Kithkin Soldier", CardToken.makeTokenFileName("W", 1, 1, "Kithkin Soldier"), card.getController(), "W", new String[] { "Creature", "Kithkin", "Soldier" }, 1, 1, new String[] { "" }); } }; diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 96b54d99cc0..13abdc2c331 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -68,7 +68,6 @@ import forge.game.GameState; import forge.game.ai.ComputerUtil; import forge.game.ai.ComputerUtilCard; import forge.game.ai.ComputerUtilCost; -import forge.game.event.TokenCreatedEvent; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.AIPlayer; @@ -2436,83 +2435,6 @@ public class CardFactoryUtil { return true; } - public static List makeToken(final String name, final String imageName, final Player controller, - final String manaCost, final String[] types, final int baseAttack, final int baseDefense, - final String[] intrinsicKeywords) { - final List list = new ArrayList(); - final Card c = new Card(); - c.setName(name); - c.setImageKey(imageName); - - // TODO - most tokens mana cost is 0, this needs to be fixed - // c.setManaCost(manaCost); - c.addColor(manaCost); - c.setToken(true); - - for (final String t : types) { - c.addType(t); - } - - c.setBaseAttack(baseAttack); - c.setBaseDefense(baseDefense); - - final int multiplier = controller.getTokenDoublersMagnitude(); - for (int i = 0; i < multiplier; i++) { - Card temp = CardFactory.copyStats(c); - - for (final String kw : intrinsicKeywords) { - temp.addIntrinsicKeyword(kw); - } - temp.setOwner(controller); - temp.setToken(true); - CardFactoryUtil.parseKeywords(temp, temp.getName()); - CardFactoryUtil.setupKeywordedAbilities(temp); - Singletons.getModel().getGame().getAction().moveToPlay(temp); - list.add(temp); - } - - Singletons.getModel().getGame().getEvents().post(new TokenCreatedEvent()); - - return list; - } - - /** - *

- * copyTokens. - *

- * - * @param tokenList - * a {@link forge.CardList} object. - * @return a {@link forge.CardList} object. - */ - public static List copyTokens(final List tokenList) { - final List list = new ArrayList(); - - for (Card thisToken : tokenList) { - list.addAll(copySingleToken(thisToken)); - } - - return list; - } - - public static List copySingleToken(Card thisToken) { - final ArrayList tal = thisToken.getType(); - final String[] tokenTypes = new String[tal.size()]; - tal.toArray(tokenTypes); - - final List kal = thisToken.getIntrinsicKeyword(); - final String[] tokenKeywords = new String[kal.size()]; - kal.toArray(tokenKeywords); - final List tokens = CardFactoryUtil.makeToken(thisToken.getName(), thisToken.getImageKey(), - thisToken.getController(), thisToken.getManaCost().toString(), tokenTypes, thisToken.getBaseAttack(), - thisToken.getBaseDefense(), tokenKeywords); - - for (final Card token : tokens) { - token.setColor(thisToken.getColor()); - } - return tokens; - } - /** *

* getBushidoEffects.