From 7a3a8b0490bbbbf8af6149ae8c9c88c0fefef4d1 Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Sat, 2 Sep 2017 17:35:13 +0000 Subject: [PATCH] Refactor some "String.format" to use StringBuilder --- .../src/main/java/forge/util/TextUtil.java | 26 ++++++++++++++++ .../main/java/forge/game/GameActionUtil.java | 2 +- .../java/forge/game/GameLogFormatter.java | 30 ++++++++++--------- .../game/ability/IllegalAbilityException.java | 3 +- .../game/ability/SpellAbilityEffect.java | 5 ++-- .../ability/effects/ChangeZoneEffect.java | 3 +- .../ability/effects/ControlPlayerEffect.java | 3 +- .../ability/effects/CountersMoveEffect.java | 3 +- .../game/ability/effects/MillEffect.java | 3 +- .../game/ability/effects/PlayEffect.java | 3 +- .../src/main/java/forge/game/card/Card.java | 4 +-- .../java/forge/game/card/CardFactoryUtil.java | 4 +-- .../java/forge/game/combat/CombatUtil.java | 14 ++++----- .../java/forge/game/cost/CostUnattach.java | 3 +- .../java/forge/game/cost/PaymentDecision.java | 3 +- .../game/event/GameEventBlockersDeclared.java | 3 +- .../game/event/GameEventCardChangeZone.java | 3 +- .../game/event/GameEventCardStatsChanged.java | 5 ++-- .../game/event/GameEventGameStarted.java | 3 +- .../forge/game/event/GameEventManaPool.java | 3 +- .../event/GameEventPlayerLivesChanged.java | 3 +- .../game/event/GameEventPlayerPriority.java | 3 +- .../event/GameEventPlayerStatsChanged.java | 3 +- .../forge/game/event/GameEventShuffle.java | 3 +- .../forge/game/event/GameEventTurnBegan.java | 3 +- .../forge/game/event/GameEventTurnPhase.java | 3 +- .../java/forge/game/event/GameEventZone.java | 8 +++-- .../main/java/forge/game/keyword/Keyword.java | 3 +- .../main/java/forge/game/keyword/Kicker.java | 5 +--- .../java/forge/game/phase/PhaseHandler.java | 3 +- .../java/forge/game/player/PlayerView.java | 25 ++++++++-------- .../game/replacement/ReplacementHandler.java | 5 ++-- .../SpellAbilityStackInstance.java | 3 +- .../forge/game/trigger/TriggerWaiting.java | 4 ++- .../main/java/forge/game/zone/MagicStack.java | 9 +++--- .../main/java/forge/game/zone/PlayerZone.java | 3 +- .../src/main/java/forge/util/MessageUtil.java | 20 +++++++------ 37 files changed, 145 insertions(+), 87 deletions(-) diff --git a/forge-core/src/main/java/forge/util/TextUtil.java b/forge-core/src/main/java/forge/util/TextUtil.java index e479f64707e..911f8dd8b7c 100644 --- a/forge-core/src/main/java/forge/util/TextUtil.java +++ b/forge-core/src/main/java/forge/util/TextUtil.java @@ -183,4 +183,30 @@ public class TextUtil { return s.substring(0, 1).toUpperCase() + s.substring(1); } + //concatenate with spaces + public static String concatWithSpace(String s1, String s2) { + return new StringBuilder().append(s1).append(" ").append(s2).toString(); + } + public static String concatWithSpace(String s1, String s2, String s3) { + return new StringBuilder().append(s1).append(" ").append(s2).append(" ").append(s3).toString(); + } + public static String concatWithSpace(String s1, String s2, String s3, String s4) { + return new StringBuilder().append(s1).append(" ").append(s2).append(" ").append(s3).append(" ").append(s4).toString(); + } + public static String concatWithSpace(String s1, String s2, String s3, String s4, String s5) { + return new StringBuilder().append(s1).append(" ").append(s2).append(" ").append(s3).append(" ").append(s4).append(" ").append(s5).toString(); + } + public static String concatWithSpace(String s1, String s2, String s3, String s4, String s5, String s6) { + return new StringBuilder().append(s1).append(" ").append(s2).append(" ").append(s3).append(" ").append(s4).append(" ").append(s5).append(" ").append(s6).toString(); + } + public static String concatWithSpace(String s1, String s2, String s3, String s4, String s5, String s6, String s7) { + return new StringBuilder().append(s1).append(" ").append(s2).append(" ").append(s3).append(" ").append(s4).append(" ").append(s5).append(" ").append(s6).append(" ").append(s7).toString(); + } + //concatenate no spaces + public static String concatNoSpace(String s1, String s2, String s3) { + return new StringBuilder().append(s1).append(s2).append(s3).toString(); + } + public static String concatNoSpace(String s1, String s2, String s3, String s4, String s5) { + return new StringBuilder().append(s1).append(s2).append(s3).append(s4).append(s5).toString(); + } } diff --git a/forge-game/src/main/java/forge/game/GameActionUtil.java b/forge-game/src/main/java/forge/game/GameActionUtil.java index d34e0e4987b..d8f5fe284e3 100644 --- a/forge-game/src/main/java/forge/game/GameActionUtil.java +++ b/forge-game/src/main/java/forge/game/GameActionUtil.java @@ -392,7 +392,7 @@ public final class GameActionUtil { newSA.setBasicSpell(false); final Cost cost1 = new Cost(sCosts[0], false); final Cost cost2 = new Cost(sCosts[1], false); - newSA.setDescription(newSA.getDescription() + String.format(" (Both kickers: %s and %s)", cost1.toSimpleString(), cost2.toSimpleString())); + newSA.setDescription(newSA.getDescription() + TextUtil.concatWithSpace(" (Both kickers:", cost1.toSimpleString(),"and",cost2.toSimpleString()+")")); newSA.setPayCosts(cost2.add(cost1.add(newSA.getPayCosts()))); newSA.addOptionalCost(OptionalCost.Kicker1); newSA.addOptionalCost(OptionalCost.Kicker2); diff --git a/forge-game/src/main/java/forge/game/GameLogFormatter.java b/forge-game/src/main/java/forge/game/GameLogFormatter.java index 5197f17946e..84eee18b131 100644 --- a/forge-game/src/main/java/forge/game/GameLogFormatter.java +++ b/forge-game/src/main/java/forge/game/GameLogFormatter.java @@ -30,6 +30,7 @@ import forge.game.player.Player; import forge.game.spellability.TargetChoices; import forge.game.zone.ZoneType; import forge.util.Lang; +import forge.util.TextUtil; import forge.util.maps.MapOfLists; public class GameLogFormatter extends IGameEventVisitor.Base { @@ -42,7 +43,7 @@ public class GameLogFormatter extends IGameEventVisitor.Base { @Override public GameLogEntry visit(GameEventGameOutcome ev) { for (Player p : ev.result.getPlayers()) { - String outcome = String.format("%s has %s", p.getName(), p.getOutcome().toString()); + String outcome = TextUtil.concatWithSpace(p.getName(),"has", p.getOutcome().toString()); log.add(GameLogEntryType.GAME_OUTCOME, outcome); } return generateSummary(ev.history); @@ -51,15 +52,15 @@ public class GameLogFormatter extends IGameEventVisitor.Base { @Override public GameLogEntry visit(GameEventScry ev) { String scryOutcome = ""; - String toTop = String.format("%s to the top of the library", Lang.nounWithAmount(ev.toTop, "card")); - String toBottom = String.format("%s to the bottom of the library", Lang.nounWithAmount(ev.toBottom, "card")); + String toTop = TextUtil.concatWithSpace(Lang.nounWithAmount(ev.toTop, "card"),"to the top of the library"); + String toBottom = TextUtil.concatWithSpace(Lang.nounWithAmount(ev.toBottom, "card"),"to the bottom of the library"); if (ev.toTop > 0 && ev.toBottom > 0) { - scryOutcome = String.format("%s scried %s and %s.", ev.player, toTop, toBottom); + scryOutcome = TextUtil.concatWithSpace(ev.player.toString(),"scried", toTop, "and", toBottom); } else if (ev.toBottom == 0) { - scryOutcome = String.format("%s scried %s.", ev.player, toTop); + scryOutcome = TextUtil.concatWithSpace(ev.player.toString(),"scried", toTop); } else { - scryOutcome = String.format("%s scried %s.", ev.player, toBottom); + scryOutcome = TextUtil.concatWithSpace(ev.player.toString(),"scried", toBottom); } return new GameLogEntry(GameLogEntryType.STACK_RESOLVE, scryOutcome); @@ -104,7 +105,7 @@ public class GameLogFormatter extends IGameEventVisitor.Base { return null; } - String modeChoiceOutcome = String.format("%s has chosen %s for %s.", ev.player, ev.mode, ev.cardName); + String modeChoiceOutcome = TextUtil.concatWithSpace(ev.player.toString(), "has chosen", ev.mode, "for", ev.cardName+"."); return new GameLogEntry(GameLogEntryType.STACK_RESOLVE, modeChoiceOutcome); } @@ -143,7 +144,7 @@ public class GameLogFormatter extends IGameEventVisitor.Base { if (newLobbyPlayer == null) { message = p.getName() + " has restored control over themself"; } else { - message = String.format("%s is controlled by %s", p.getName(), newLobbyPlayer.getName()); + message = TextUtil.concatWithSpace(p.getName(), "is controlled by", newLobbyPlayer.getName()); } return new GameLogEntry(GameLogEntryType.PLAYER_CONROL, message); } @@ -166,7 +167,7 @@ public class GameLogFormatter extends IGameEventVisitor.Base { if (event.type == DamageType.LoyaltyLoss) { additionalLog = "(Removing " + Lang.nounWithAmount(event.amount, "loyalty counter") + ")"; } - String message = String.format("%s deals %d damage %s to %s.", event.source, event.amount, additionalLog, event.card); + String message = TextUtil.concatWithSpace(event.source.toString(),"deals", String.valueOf(event.amount),"damage", additionalLog,"to", event.card.toString()+"."); return new GameLogEntry(GameLogEntryType.DAMAGE, message); } @@ -175,26 +176,27 @@ public class GameLogFormatter extends IGameEventVisitor.Base { */ @Override public GameLogEntry visit(GameEventLandPlayed ev) { - String message = String.format("%s played %s", ev.player, ev.land); + String message = TextUtil.concatWithSpace(ev.player.toString(),"played", ev.land.toString()); return new GameLogEntry(GameLogEntryType.LAND, message); } @Override public GameLogEntry visit(GameEventTurnBegan event) { - String message = String.format("Turn %d (%s)", event.turnNumber, event.turnOwner); + String message = TextUtil.concatWithSpace("Turn", String.valueOf(event.turnNumber), "("+event.turnOwner.toString()+")"); return new GameLogEntry(GameLogEntryType.TURN, message); } @Override public GameLogEntry visit(GameEventPlayerDamaged ev) { String extra = ev.infect ? " (as poison counters)" : ""; - String message = String.format("%s deals %d %s damage to %s%s.", ev.source, ev.amount, ev.combat ? "combat" : "non-combat", ev.target, extra); + String damageType = ev.combat ? "combat" : "non-combat"; + String message = TextUtil.concatWithSpace(ev.source.toString(),"deals", String.valueOf(ev.amount), damageType, "damage to", ev.target.toString()+extra+"."); return new GameLogEntry(GameLogEntryType.DAMAGE, message); } @Override public GameLogEntry visit(GameEventPlayerPoisoned ev) { - String message = String.format("%s receives %s from %s", ev.receiver, Lang.nounWithAmount(ev.amount, "posion counter"), ev.source); + String message = TextUtil.concatWithSpace(ev.receiver.toString(),"receives", Lang.nounWithAmount(ev.amount, "posion counter"),"from", ev.source.toString()); return new GameLogEntry(GameLogEntryType.DAMAGE, message); } @@ -264,7 +266,7 @@ public class GameLogFormatter extends IGameEventVisitor.Base { @Override public GameLogEntry visit(GameEventMulligan ev) { - String message = String.format("%s has mulliganed down to %d cards.", ev.player, ev.player.getZone(ZoneType.Hand).size()); + String message = TextUtil.concatWithSpace(ev.player.toString(),"has mulliganed down to", String.valueOf(ev.player.getZone(ZoneType.Hand).size()),"cards."); return new GameLogEntry(GameLogEntryType.MULLIGAN, message); } diff --git a/forge-game/src/main/java/forge/game/ability/IllegalAbilityException.java b/forge-game/src/main/java/forge/game/ability/IllegalAbilityException.java index c852877d1a6..6f9fb2f8fdd 100644 --- a/forge-game/src/main/java/forge/game/ability/IllegalAbilityException.java +++ b/forge-game/src/main/java/forge/game/ability/IllegalAbilityException.java @@ -1,6 +1,7 @@ package forge.game.ability; import forge.game.spellability.SpellAbility; +import forge.util.TextUtil; public class IllegalAbilityException extends RuntimeException { private static final long serialVersionUID = -8638474348184716635L; @@ -10,7 +11,7 @@ public class IllegalAbilityException extends RuntimeException { } public IllegalAbilityException(final SpellAbility sa, final SpellAbilityEffect effect) { - this(String.format("%s (effect %s)", sa, effect.getClass().getName())); + this(TextUtil.concatWithSpace(sa.toString(), "(effect "+effect.getClass().getName()+")")); } private IllegalAbilityException(final String message) { diff --git a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java index ff750bde4a7..336b19fc11d 100644 --- a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; import java.util.StringTokenizer; +import forge.util.TextUtil; import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Lists; @@ -105,12 +106,12 @@ public abstract class SpellAbilityEffect { if (sa.hasParam("Announce")) { String svar = sa.getParam("Announce"); int amount = CardFactoryUtil.xCount(sa.getHostCard(), sa.getSVar(svar)); - sb.append(String.format(" (%s=%d)", svar, amount)); + sb.append(TextUtil.concatNoSpace(" (", svar,"="+amount+")")); } else{ if (sa.getPayCosts() != null && sa.getPayCosts().getCostMana() != null && sa.getPayCosts().getCostMana().getAmountOfX() > 0) { int amount = sa.getHostCard().getXManaCostPaid(); - sb.append(String.format(" (%s=%d)", "X", amount)); + sb.append(TextUtil.concatNoSpace(" (","X","="+amount+")")); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 5242a135c93..d7ee2b0de0f 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -27,6 +27,7 @@ import forge.game.trigger.TriggerType; import forge.game.zone.Zone; import forge.game.zone.ZoneType; import forge.util.Aggregates; +import forge.util.TextUtil; import forge.util.collect.*; import forge.util.Lang; import forge.util.MessageUtil; @@ -427,7 +428,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { hostCard.addRemembered(CardUtil.getLKICopy(tgtC)); } - final String prompt = String.format("Do you want to move %s from %s to %s?", tgtC, origin, destination); + final String prompt = TextUtil.concatWithSpace("Do you want to move", tgtC.toString(), "from", origin.toString(), "to",destination.toString()+"?"); if (optional && !player.getController().confirmAction(sa, null, prompt) ) continue; diff --git a/forge-game/src/main/java/forge/game/ability/effects/ControlPlayerEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ControlPlayerEffect.java index 0b0ab421786..00ddea54129 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ControlPlayerEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ControlPlayerEffect.java @@ -6,6 +6,7 @@ import forge.game.ability.SpellAbilityEffect; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.util.Lang; +import forge.util.TextUtil; import java.util.List; @@ -19,7 +20,7 @@ public class ControlPlayerEffect extends SpellAbilityEffect { protected String getStackDescription(SpellAbility sa) { List tgtPlayers = getTargetPlayers(sa); - return String.format("%s controls %s during their next turn", sa.getActivatingPlayer(), Lang.joinHomogenous(tgtPlayers)); + return TextUtil.concatWithSpace(sa.getActivatingPlayer().toString(),"controls", Lang.joinHomogenous(tgtPlayers),"during their next turn"); } @SuppressWarnings("serial") diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersMoveEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersMoveEffect.java index 9d53ac509bc..c3606cc5c74 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CountersMoveEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CountersMoveEffect.java @@ -17,6 +17,7 @@ import java.util.Map; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import forge.util.TextUtil; public class CountersMoveEffect extends SpellAbilityEffect { @@ -51,7 +52,7 @@ public class CountersMoveEffect extends SpellAbilityEffect { try{ sb.append(tgtCards.get(0)); } catch(final IndexOutOfBoundsException exception) { - System.out.println(String.format("Somehow this is missing targets? %s", source.toString())); + System.out.println(TextUtil.concatWithSpace("Somehow this is missing targets?", source.toString())); } sb.append("."); diff --git a/forge-game/src/main/java/forge/game/ability/effects/MillEffect.java b/forge-game/src/main/java/forge/game/ability/effects/MillEffect.java index 1e673662862..577b276c442 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/MillEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/MillEffect.java @@ -10,6 +10,7 @@ import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; import forge.game.zone.ZoneType; +import forge.util.TextUtil; import java.util.List; @@ -37,7 +38,7 @@ public class MillEffect extends SpellAbilityEffect { for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { if (sa.hasParam("Optional")) { - final String prompt = String.format("Do you want to put card(s) from library to %s?", destination); + final String prompt = TextUtil.concatWithSpace("Do you want to put card(s) from library to", destination.toString()+"?"); if (!p.getController().confirmAction(sa, null, prompt)) { continue; } diff --git a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java index 2714c1ea4b7..96c2c1352d0 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java @@ -3,6 +3,7 @@ package forge.game.ability.effects; import java.util.ArrayList; import java.util.List; +import forge.util.TextUtil; import org.apache.commons.lang3.StringUtils; import com.google.common.base.Predicate; @@ -150,7 +151,7 @@ public class PlayEffect extends SpellAbilityEffect { game.getAction().revealTo(tgtCard, activator); } - if (optional && !controller.getController().confirmAction(sa, null, String.format("Do you want to play %s?", tgtCard))) { + if (optional && !controller.getController().confirmAction(sa, null, TextUtil.concatWithSpace("Do you want to play", tgtCard.toString()+"?"))) { if (wasFaceDown) { tgtCard.setState(CardStateName.FaceDown, false); } diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index c28ee76c055..e41b483e0cc 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -3046,7 +3046,7 @@ public class Card extends GameEntity implements Comparable { } @Override public String toString() { - return String.format("c:%d tb:%d spb:%d bfc:%d", currentValue, tempBoost, semiPermanentBoost, bonusFromCounters); + return TextUtil.concatWithSpace("c:"+String.valueOf(currentValue),"tb:"+String.valueOf(tempBoost), "spb:"+String.valueOf(semiPermanentBoost),"bfc:"+String.valueOf(bonusFromCounters)); } } @@ -5229,7 +5229,7 @@ public class Card extends GameEntity implements Comparable { requestedCMC += xPaid; break; default: - System.out.println(String.format("Illegal Split Card CMC mode %s passed to getCMC!", mode.toString())); + System.out.println(TextUtil.concatWithSpace("Illegal Split Card CMC mode", mode.toString(),"passed to getCMC!")); break; } } else if (currentStateName == CardStateName.Transformed) { diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 1501b972c46..43a054707ec 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -244,7 +244,7 @@ public class CardFactoryUtil { int counters = AbilityUtils.calculateAmount(c, timeCounters, this); c.addCounter(CounterType.TIME, counters, c, true); - String sb = String.format("%s has suspended %s with %d time counters on it.", this.getActivatingPlayer(), c.getName(), counters); + String sb = TextUtil.concatWithSpace(this.getActivatingPlayer().toString(),"has suspended", c.getName(), "with", String.valueOf(counters),"time counters on it."); game.getGameLog().add(GameLogEntryType.STACK_RESOLVE, sb); } }; @@ -4249,7 +4249,7 @@ public class CardFactoryUtil { altCostSA.setRestrictions(restriction); final String costDescription = params.containsKey("Description") ? params.get("Description") - : String.format("You may %s rather than pay %s's mana cost.", abCost.toStringAlt(), card.getName()); + : TextUtil.concatWithSpace("You may", abCost.toStringAlt(),"rather than pay", card.getName()+"'s mana cost."); altCostSA.setDescription(costDescription); if (params.containsKey("References")) { diff --git a/forge-game/src/main/java/forge/game/combat/CombatUtil.java b/forge-game/src/main/java/forge/game/combat/CombatUtil.java index fef5ef50863..9a3991d421e 100644 --- a/forge-game/src/main/java/forge/game/combat/CombatUtil.java +++ b/forge-game/src/main/java/forge/game/combat/CombatUtil.java @@ -693,13 +693,13 @@ public class CombatUtil { for (Card cardToBeBlocked : blocker.getMustBlockCards()) { if (!blockedSoFar.contains(cardToBeBlocked) && CombatUtil.canBlockMoreCreatures(blocker, blockedSoFar) && combat.isAttacking(cardToBeBlocked) && CombatUtil.canBlock(cardToBeBlocked, blocker)) { - return String.format("%s must still block %s.", blocker, cardToBeBlocked); + return TextUtil.concatWithSpace(blocker.toString(),"must still block", cardToBeBlocked.toString()+"."); } } } // lure effects if (!blockers.contains(blocker) && CombatUtil.mustBlockAnAttacker(blocker, combat)) { - return String.format("%s must block an attacker, but has not been assigned to block any.", blocker); + return TextUtil.concatWithSpace(blocker.toString(),"must block an attacker, but has not been assigned to block any."); } // "CARDNAME blocks each turn if able." @@ -715,7 +715,7 @@ public class CombatUtil { } } if (must) { - return String.format("%s must block each turn, but was not assigned to block any attacker now.", blocker); + return TextUtil.concatWithSpace(blocker.toString(),"must block each turn, but was not assigned to block any attacker now."); } } } @@ -725,9 +725,9 @@ public class CombatUtil { // Creatures that aren't allowed to block unless certain restrictions are met. for (final Card blocker : blockers) { if (blockers.size() < 2 && blocker.hasKeyword("CARDNAME can't attack or block alone.")) { - return String.format("%s can't block alone.", blocker); + return TextUtil.concatWithSpace(blocker.toString(),"can't block alone."); } else if (blockers.size() < 3 && blocker.hasKeyword("CARDNAME can't block unless at least two other creatures block.")) { - return String.format("%s can't block unless at least two other creatures block.", blocker); + return TextUtil.concatWithSpace(blocker.toString(),"can't block unless at least two other creatures block."); } else if (blocker.hasKeyword("CARDNAME can't block unless a creature with greater power also blocks.")) { boolean found = false; int power = blocker.getNetPower(); @@ -739,7 +739,7 @@ public class CombatUtil { } } if (!found) { - return String.format("%s can't block unless a creature with greater power also blocks.", blocker); + return TextUtil.concatWithSpace(blocker.toString(),"can't block unless a creature with greater power also blocks."); } } } @@ -748,7 +748,7 @@ public class CombatUtil { int cntBlockers = combat.getBlockers(attacker).size(); // don't accept blocker amount for attackers with keyword defining valid blockers amount if (cntBlockers > 0 && !canAttackerBeBlockedWithAmount(attacker, cntBlockers, combat)) - return String.format("%s cannot be blocked with %d creatures you've assigned", attacker, cntBlockers); + return TextUtil.concatWithSpace(attacker.toString(),"cannot be blocked with", String.valueOf(cntBlockers), "creatures you've assigned"); } return null; diff --git a/forge-game/src/main/java/forge/game/cost/CostUnattach.java b/forge-game/src/main/java/forge/game/cost/CostUnattach.java index 029b69fc2a2..4dcfb4eb05f 100644 --- a/forge-game/src/main/java/forge/game/cost/CostUnattach.java +++ b/forge-game/src/main/java/forge/game/cost/CostUnattach.java @@ -21,6 +21,7 @@ import forge.game.card.Card; import forge.game.card.CardLists; import forge.game.player.Player; import forge.game.spellability.SpellAbility; +import forge.util.TextUtil; import java.util.List; @@ -51,7 +52,7 @@ public class CostUnattach extends CostPartWithList { */ @Override public final String toString() { - return String.format("Unattach %s", this.getTypeDescription()); + return TextUtil.concatWithSpace("Unattach", this.getTypeDescription()); } /* diff --git a/forge-game/src/main/java/forge/game/cost/PaymentDecision.java b/forge-game/src/main/java/forge/game/cost/PaymentDecision.java index 49533476cc3..357d79dbacf 100644 --- a/forge-game/src/main/java/forge/game/cost/PaymentDecision.java +++ b/forge-game/src/main/java/forge/game/cost/PaymentDecision.java @@ -6,6 +6,7 @@ import forge.game.card.CounterType; import forge.game.mana.Mana; import forge.game.player.Player; import forge.game.spellability.SpellAbility; +import forge.util.TextUtil; import java.util.List; @@ -80,7 +81,7 @@ public class PaymentDecision { */ @Override public String toString() { - return String.format("Payment Decision: %d, %s", c, cards); + return TextUtil.concatWithSpace("Payment Decision:", String.valueOf(c)+",", cards.toString()); } public static PaymentDecision type(String choice) { diff --git a/forge-game/src/main/java/forge/game/event/GameEventBlockersDeclared.java b/forge-game/src/main/java/forge/game/event/GameEventBlockersDeclared.java index 2a770cbe772..08ae477434e 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventBlockersDeclared.java +++ b/forge-game/src/main/java/forge/game/event/GameEventBlockersDeclared.java @@ -4,6 +4,7 @@ import forge.game.GameEntity; import forge.game.card.Card; import forge.game.player.Player; import forge.util.Lang; +import forge.util.TextUtil; import forge.util.maps.MapOfLists; import java.util.ArrayList; @@ -42,6 +43,6 @@ public class GameEventBlockersDeclared extends GameEvent { blockerCards.addAll(cc); } } - return String.format("%s declared %d blockers: %s", defendingPlayer.getName(), blockerCards.size(), Lang.joinHomogenous(blockerCards) ); + return TextUtil.concatWithSpace(defendingPlayer.getName(),"declared", String.valueOf(blockerCards.size()),"blockers:", Lang.joinHomogenous(blockerCards) ); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventCardChangeZone.java b/forge-game/src/main/java/forge/game/event/GameEventCardChangeZone.java index 58b75d1002f..097f803066c 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventCardChangeZone.java +++ b/forge-game/src/main/java/forge/game/event/GameEventCardChangeZone.java @@ -2,6 +2,7 @@ package forge.game.event; import forge.game.card.Card; import forge.game.zone.Zone; +import forge.util.TextUtil; public class GameEventCardChangeZone extends GameEvent { @@ -26,7 +27,7 @@ public class GameEventCardChangeZone extends GameEvent { */ @Override public String toString() { - return String.format("%s : [%s] -> [%s]", card, from, to); + return TextUtil.concatWithSpace(card.toString(),":", "["+from.toString()+"]","->", "["+to.toString()+"]"); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventCardStatsChanged.java b/forge-game/src/main/java/forge/game/event/GameEventCardStatsChanged.java index 5fbf035c3b9..439033663ff 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventCardStatsChanged.java +++ b/forge-game/src/main/java/forge/game/event/GameEventCardStatsChanged.java @@ -2,6 +2,7 @@ package forge.game.event; import com.google.common.collect.Iterables; import forge.game.card.Card; +import forge.util.TextUtil; import org.apache.commons.lang3.StringUtils; import java.util.Arrays; @@ -36,9 +37,9 @@ public class GameEventCardStatsChanged extends GameEvent { if ( null == card ) return "Card state changes: (empty list)"; if( cards.size() == 1) - return String.format("Card state changes: %s (%s) %d/%d", card.getName(), StringUtils.join(card.getType(), ' '), card.getNetPower(), card.getNetToughness() ); + return TextUtil.concatWithSpace("Card state changes:", card.getName(), "("+StringUtils.join(card.getType(), ' ')+")", card.getNetPower()+"/"+card.getNetToughness() ); else - return String.format("Card state changes: %s (%s) %d/%d and %d more", card.getName(), StringUtils.join(card.getType(), ' '), card.getNetPower(), card.getNetToughness(), cards.size() - 1 ); + return TextUtil.concatWithSpace("Card state changes: %s (%s)", card.getName(), "("+StringUtils.join(card.getType(), ' ')+")", card.getNetPower()+"/"+card.getNetToughness(),"and", cards.size() - 1 +" more"); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventGameStarted.java b/forge-game/src/main/java/forge/game/event/GameEventGameStarted.java index 1df40bf776f..502822ee1a4 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventGameStarted.java +++ b/forge-game/src/main/java/forge/game/event/GameEventGameStarted.java @@ -3,6 +3,7 @@ package forge.game.event; import forge.game.GameType; import forge.game.player.Player; import forge.util.Lang; +import forge.util.TextUtil; /** * TODO: Write javadoc for this type. @@ -32,7 +33,7 @@ public class GameEventGameStarted extends GameEvent { */ @Override public String toString() { - return String.format("%s game between %s started. %s goes first ", gameType, Lang.joinHomogenous(players), firstTurn) ; + return TextUtil.concatWithSpace(gameType.toString(),"game between", Lang.joinHomogenous(players), "started.", firstTurn.toString(), "goes first "); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventManaPool.java b/forge-game/src/main/java/forge/game/event/GameEventManaPool.java index 848eeb91c37..10e767cecf0 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventManaPool.java +++ b/forge-game/src/main/java/forge/game/event/GameEventManaPool.java @@ -3,6 +3,7 @@ package forge.game.event; import forge.game.mana.Mana; import forge.game.player.Player; import forge.util.Lang; +import forge.util.TextUtil; /** * TODO: Write javadoc for this type. @@ -29,6 +30,6 @@ public class GameEventManaPool extends GameEvent { */ @Override public String toString() { - return String.format("%s mana pool %s - %s ", Lang.getPossesive(player.getName()), mode, mana); + return TextUtil.concatWithSpace(Lang.getPossesive(player.getName()),"mana pool", mode.toString(), "-", mana.toString()+" "); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventPlayerLivesChanged.java b/forge-game/src/main/java/forge/game/event/GameEventPlayerLivesChanged.java index 87e106907da..f1e1bcc0f28 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventPlayerLivesChanged.java +++ b/forge-game/src/main/java/forge/game/event/GameEventPlayerLivesChanged.java @@ -2,6 +2,7 @@ package forge.game.event; import forge.game.player.Player; import forge.util.Lang; +import forge.util.TextUtil; public class GameEventPlayerLivesChanged extends GameEvent { public final Player player; @@ -21,6 +22,6 @@ public class GameEventPlayerLivesChanged extends GameEvent { @Override public String toString() { - return String.format("%s lives changed: %d -> %d", Lang.getPossesive(player.getName()), oldLives, newLives); + return TextUtil.concatWithSpace(Lang.getPossesive(player.getName()),"lives changed:", String.valueOf(oldLives),"->", String.valueOf(newLives)); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventPlayerPriority.java b/forge-game/src/main/java/forge/game/event/GameEventPlayerPriority.java index ce5d36f8657..90a76a935a0 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventPlayerPriority.java +++ b/forge-game/src/main/java/forge/game/event/GameEventPlayerPriority.java @@ -2,6 +2,7 @@ package forge.game.event; import forge.game.phase.PhaseType; import forge.game.player.Player; +import forge.util.TextUtil; /** * TODO: Write javadoc for this type. @@ -30,6 +31,6 @@ public class GameEventPlayerPriority extends GameEvent { */ @Override public String toString() { - return String.format("Priority - %s", priority.getName()); + return TextUtil.concatWithSpace("Priority -", priority.getName()); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventPlayerStatsChanged.java b/forge-game/src/main/java/forge/game/event/GameEventPlayerStatsChanged.java index 99fc53f6849..912a8770a53 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventPlayerStatsChanged.java +++ b/forge-game/src/main/java/forge/game/event/GameEventPlayerStatsChanged.java @@ -7,6 +7,7 @@ import com.google.common.collect.Iterables; import forge.game.player.Player; import forge.util.Lang; +import forge.util.TextUtil; /** * This means card's characteristics have changed on server, clients must re-request them @@ -36,7 +37,7 @@ public class GameEventPlayerStatsChanged extends GameEvent { if (null == players || Iterables.isEmpty(players)) { return "Player state changes: (empty list)"; } - return String.format("Player state changes: %s", Lang.joinHomogenous(players)); + return TextUtil.concatWithSpace("Player state changes:", Lang.joinHomogenous(players)); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventShuffle.java b/forge-game/src/main/java/forge/game/event/GameEventShuffle.java index 9db5450c104..274031a263d 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventShuffle.java +++ b/forge-game/src/main/java/forge/game/event/GameEventShuffle.java @@ -2,6 +2,7 @@ package forge.game.event; import forge.game.player.Player; import forge.util.Lang; +import forge.util.TextUtil; public class GameEventShuffle extends GameEvent { @@ -21,6 +22,6 @@ public class GameEventShuffle extends GameEvent { */ @Override public String toString() { - return String.format("%s %s his/her/its library", player, Lang.joinVerb(player.getName(), "shuffle")); + return TextUtil.concatWithSpace(player.toString(), Lang.joinVerb(player.getName(), "shuffle"),"his/her/its library"); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventTurnBegan.java b/forge-game/src/main/java/forge/game/event/GameEventTurnBegan.java index d930de90d2c..58336524491 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventTurnBegan.java +++ b/forge-game/src/main/java/forge/game/event/GameEventTurnBegan.java @@ -1,6 +1,7 @@ package forge.game.event; import forge.game.player.Player; +import forge.util.TextUtil; public class GameEventTurnBegan extends GameEvent { @@ -23,6 +24,6 @@ public class GameEventTurnBegan extends GameEvent { */ @Override public String toString() { - return String.format("Turn %d (%s)", turnNumber, turnOwner); + return TextUtil.concatWithSpace("Turn", String.valueOf(turnNumber), "("+turnOwner.toString()+")"); } } \ No newline at end of file diff --git a/forge-game/src/main/java/forge/game/event/GameEventTurnPhase.java b/forge-game/src/main/java/forge/game/event/GameEventTurnPhase.java index 8605fc80a5c..bde364794bd 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventTurnPhase.java +++ b/forge-game/src/main/java/forge/game/event/GameEventTurnPhase.java @@ -3,6 +3,7 @@ package forge.game.event; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.util.Lang; +import forge.util.TextUtil; /** * TODO: Write javadoc for this type. @@ -27,6 +28,6 @@ public class GameEventTurnPhase extends GameEvent { @Override public String toString() { String playerName = Lang.getPossesive(playerTurn.getName()); - return String.format("%s turn, %s%s phase", playerName, phaseDesc, phase.nameForUi ); + return TextUtil.concatWithSpace(playerName,"turn,", phaseDesc+phase.nameForUi, "phase"); } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventZone.java b/forge-game/src/main/java/forge/game/event/GameEventZone.java index 187b6573030..6cc6169dcf1 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventZone.java +++ b/forge-game/src/main/java/forge/game/event/GameEventZone.java @@ -4,6 +4,7 @@ import forge.game.card.Card; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.util.Lang; +import forge.util.TextUtil; /** * TODO: Write javadoc for this type. @@ -35,9 +36,10 @@ public class GameEventZone extends GameEvent { @Override public String toString() { String owners = player == null ? "Game" : Lang.getPossesive(player.getName()); - String zts = zoneType.toString(); - String ms = mode.toString(); - return String.format(card == null ? "%s %s : %s" : "%s %s : %s %s", owners, zts, ms, card); + return card == null + ? TextUtil.concatWithSpace(owners, zoneType.toString(), ":", mode.toString()) + : TextUtil.concatWithSpace(owners, zoneType.toString(), ":", mode.toString(), card.toString() + ); } } diff --git a/forge-game/src/main/java/forge/game/keyword/Keyword.java b/forge-game/src/main/java/forge/game/keyword/Keyword.java index d688b1f3180..b49e13b7d44 100644 --- a/forge-game/src/main/java/forge/game/keyword/Keyword.java +++ b/forge-game/src/main/java/forge/game/keyword/Keyword.java @@ -6,6 +6,7 @@ import forge.StaticData; import forge.game.card.Card; import forge.item.PaperCard; import forge.util.EnumUtil; +import forge.util.TextUtil; public enum Keyword { UNDEFINED(SimpleKeyword.class, false, ""), @@ -217,7 +218,7 @@ public enum Keyword { } public String getDescription() { - return String.format("%s (%s)", displayName, reminderText); + return TextUtil.concatWithSpace(displayName," ("+reminderText+")"); } public static List getAllKeywords() { diff --git a/forge-game/src/main/java/forge/game/keyword/Kicker.java b/forge-game/src/main/java/forge/game/keyword/Kicker.java index 72ecddd6742..816eb9254c1 100644 --- a/forge-game/src/main/java/forge/game/keyword/Kicker.java +++ b/forge-game/src/main/java/forge/game/keyword/Kicker.java @@ -27,9 +27,6 @@ public class Kicker extends KeywordWithCost { return super.formatReminderText(reminderText); } //handle special case of double kicker - return String.format("You may pay an additional %s and/or %s as you cast this spell.", - cost.toSimpleString(), - cost2.toSimpleString() - ); + return TextUtil.concatWithSpace("You may pay an additional", cost.toSimpleString(),"and/or", cost2.toSimpleString(),"as you cast this spell."); } } diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index d954a6210f5..55ebc413f5a 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -41,6 +41,7 @@ import forge.game.trigger.Trigger; import forge.game.trigger.TriggerType; import forge.game.zone.ZoneType; import forge.util.CollectionSuppliers; +import forge.util.TextUtil; import forge.util.collect.FCollectionView; import forge.util.maps.HashMapOfLists; import forge.util.maps.MapOfLists; @@ -985,7 +986,7 @@ public class PhaseHandler implements java.io.Serializable { if (game.isGameOver() || nextPlayer == null) { return; } // conceded? if (DEBUG_PHASES) { - System.out.println(String.format("%s %s: %s is active, previous was %s", playerTurn, phase, pPlayerPriority, nextPlayer)); + System.out.println(TextUtil.concatWithSpace(playerTurn.toString(),phase.toString()+":", pPlayerPriority.toString(),"is active, previous was", nextPlayer.toString())); } if (pFirstPriority == nextPlayer) { if (game.getStack().isEmpty()) { diff --git a/forge-game/src/main/java/forge/game/player/PlayerView.java b/forge-game/src/main/java/forge/game/player/PlayerView.java index aa89fea00cf..4769116a042 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerView.java +++ b/forge-game/src/main/java/forge/game/player/PlayerView.java @@ -7,6 +7,7 @@ import forge.card.CardType; import forge.card.mana.ManaAtom; import forge.game.card.CounterType; +import forge.util.TextUtil; import org.apache.commons.lang3.StringUtils; import com.google.common.base.Objects; @@ -109,8 +110,8 @@ public class PlayerView extends GameEntityView { for (final PlayerView p : Iterables.concat(Collections.singleton(this), opponents)) { final int damage = p.getCommanderDamage(v); if (damage > 0) { - final String text = String.format("Commander damage to %s from %s:", p, v.getName()); - sb.append(String.format(text + " %d\r\n", damage)); + final String text = TextUtil.concatWithSpace("Commander damage to", p.toString(),"from", v.getName()+":"); + sb.append(TextUtil.concatWithSpace(text, String.valueOf(damage)+"\r\n")); } } return sb.toString(); @@ -124,18 +125,18 @@ public class PlayerView extends GameEntityView { final FCollectionView opponents = getOpponents(); final List info = Lists.newArrayListWithExpectedSize(opponents.size()); - info.add(String.format("Commanders: %s", Lang.joinHomogenous(commanders))); + info.add(TextUtil.concatWithSpace("Commanders:", Lang.joinHomogenous(commanders))); for (final PlayerView p : Iterables.concat(Collections.singleton(this), opponents)) { for (final CardView v : p.getCommanders()) { final int damage = this.getCommanderDamage(v); if (damage > 0) { final String text; if (p.equals(this)) { - text = String.format("Commander damage from own commander %s:", v); + text = TextUtil.concatWithSpace("Commander damage from own commander", v.toString()+":"); } else { - text = String.format("Commander damage from %s's %s:", p, v); + text = TextUtil.concatWithSpace("Commander damage from", p.toString()+"'s", v.toString()+":"); } - info.add(String.format(text + " %d\r\n", damage)); + info.add(TextUtil.concatWithSpace(text,String.valueOf(damage)+"\r\n")); } } } @@ -383,27 +384,27 @@ public class PlayerView extends GameEntityView { private List getDetailsList() { final List details = Lists.newArrayListWithCapacity(8); - details.add(String.format("Life: %d", getLife())); + details.add(TextUtil.concatWithSpace("Life:", String.valueOf(getLife()))); Map counters = getCounters(); if (counters != null) { for (Entry p : counters.entrySet()) { if (p.getValue() > 0) { - details.add(String.format("%s counters: %d", p.getKey().getName(), p.getValue())); + details.add(TextUtil.concatWithSpace(p.getKey().getName(), "counters:", String.valueOf(p.getValue()))); } } } - details.add(String.format("Cards in hand: %d/%s", getHandSize(), getMaxHandString())); - details.add(String.format("Cards drawn this turn: %d", getNumDrawnThisTurn())); - details.add(String.format("Damage prevention: %d", getPreventNextDamage())); + details.add(TextUtil.concatNoSpace("Cards in hand: ", String.valueOf(getHandSize())+"/", getMaxHandString())); + details.add(TextUtil.concatWithSpace("Cards drawn this turn:", String.valueOf(getNumDrawnThisTurn()))); + details.add(TextUtil.concatWithSpace("Damage prevention:", String.valueOf(getPreventNextDamage()))); final String keywords = Lang.joinHomogenous(getDisplayableKeywords()); if (!keywords.isEmpty()) { details.add(keywords); } final FCollectionView ante = getAnte(); if (ante != null && !ante.isEmpty()) { - details.add(String.format("Ante'd: %s", Lang.joinHomogenous(ante))); + details.add(TextUtil.concatWithSpace("Ante'd:", Lang.joinHomogenous(ante))); } details.addAll(getPlayerCommanderInfo()); return details; diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java index ea1600ca58e..6bc18b46e64 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java @@ -28,6 +28,7 @@ import forge.game.spellability.SpellAbility; import forge.game.zone.Zone; import forge.game.zone.ZoneType; import forge.util.FileSection; +import forge.util.TextUtil; import forge.util.Visitor; import org.apache.commons.lang3.StringUtils; @@ -241,8 +242,8 @@ public class ReplacementHandler { Card cardForUi = host.getCardForUi(); String effectDesc = replacementEffect.toString().replace("CARDNAME", cardForUi.getName()); final String question = replacementEffect instanceof ReplaceDiscard - ? String.format("Apply replacement effect of %s to %s?\r\n(%s)", cardForUi, runParams.get("Card").toString(), effectDesc) - : String.format("Apply replacement effect of %s?\r\n(%s)", cardForUi, effectDesc); + ? TextUtil.concatWithSpace("Apply replacement effect of", cardForUi.toString(), "to", runParams.get("Card").toString()+"?", "\r\n(", effectDesc+")") + : TextUtil.concatWithSpace("Apply replacement effect of", cardForUi.toString()+"?", "\r\n(", effectDesc+")"); boolean confirmed = optDecider.getController().confirmReplacementEffect(replacementEffect, effectSA, question); if (!confirmed) { return ReplacementResult.NotReplaced; diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java index f68cbaa2650..386c128c648 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java @@ -28,6 +28,7 @@ import forge.game.trigger.Trigger; import forge.game.trigger.TriggerType; import forge.game.trigger.WrappedAbility; import forge.game.zone.ZoneType; +import forge.util.TextUtil; import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Maps; @@ -414,7 +415,7 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView { @Override public String toString() { - return String.format("%s->%s", getSourceCard(), getStackDescription()); + return TextUtil.concatNoSpace(getSourceCard().toString(), "->", getStackDescription()); } public StackItemView getView() { diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerWaiting.java b/forge-game/src/main/java/forge/game/trigger/TriggerWaiting.java index dced50d71e7..2e4df5537cd 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerWaiting.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerWaiting.java @@ -1,5 +1,7 @@ package forge.game.trigger; +import forge.util.TextUtil; + import java.util.List; import java.util.Map; @@ -35,6 +37,6 @@ public class TriggerWaiting { @Override public String toString() { - return String.format("Waiting trigger: %s with %s", mode, params); + return TextUtil.concatWithSpace("Waiting trigger:", mode.toString(),"with", params.toString()); } } diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index 4e7fb0ae3bb..c9e3cbdf6bf 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -65,6 +65,7 @@ import forge.game.spellability.TargetChoices; import forge.game.trigger.Trigger; import forge.game.trigger.TriggerType; import forge.game.trigger.WrappedAbility; +import forge.util.TextUtil; /** *

@@ -284,7 +285,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable @@ -101,7 +102,7 @@ public class PlayerZone extends Zone { @Override public final String toString() { - return String.format("%s %s", Lang.getPossesive(player.toString()), zoneType); + return TextUtil.concatWithSpace(Lang.getPossesive(player.toString()), zoneType.toString()); } public CardCollectionView getCardsPlayerCanActivate(Player who) { diff --git a/forge-game/src/main/java/forge/util/MessageUtil.java b/forge-game/src/main/java/forge/util/MessageUtil.java index e153870a5c8..bd0345925b2 100644 --- a/forge-game/src/main/java/forge/util/MessageUtil.java +++ b/forge-game/src/main/java/forge/util/MessageUtil.java @@ -7,6 +7,7 @@ import forge.game.player.Player; import forge.game.player.PlayerView; import forge.game.spellability.SpellAbility; + public class MessageUtil { private MessageUtil() { }; @@ -39,26 +40,27 @@ public class MessageUtil { if (sa.hasParam("SecretlyChoose")) { return value; } - final boolean random = sa.hasParam("Random"); - return String.format(random ? "Randomly chosen number for %s is %s" : "%s chooses number: %s", mayBeYou(player, target), value); + return sa.hasParam("Random") + ? TextUtil.concatWithSpace("Randomly chosen number for", mayBeYou(player, target),"is", value) + : TextUtil.concatWithSpace( mayBeYou(player, target),"chooses number:", value); case ChooseType: - return String.format("%s %s %s for effect of %s", choser, Lang.joinVerb(choser, "choose"), value, sa.getHostCard().getName()); + return TextUtil.concatWithSpace(choser, Lang.joinVerb(choser, "choose"), value, "for effect of", sa.getHostCard().getName()); case FlipACoin: String flipper = StringUtils.capitalize(mayBeYou(player, target)); return sa.hasParam("NoCall") - ? String.format("%s flip comes up %s", Lang.getPossesive(flipper), value) - : String.format("%s %s the flip", flipper, Lang.joinVerb(flipper, value)); + ? TextUtil.concatWithSpace(Lang.getPossesive(flipper),"flip comes up", value) + : TextUtil.concatWithSpace(flipper, Lang.joinVerb(flipper, value), "the flip"); case Protection: - return String.format("%s %s protection from %s", choser, Lang.joinVerb(choser, "choose"), value); + return TextUtil.concatWithSpace(choser, Lang.joinVerb(choser, "choose"), value); case Vote: String chooser = StringUtils.capitalize(mayBeYou(player, target)); - return String.format("%s %s %s", chooser, Lang.joinVerb(chooser, "vote"), value); + return TextUtil.concatWithSpace(chooser, Lang.joinVerb(chooser,"vote"), value); default: String tgt = mayBeYou(player, target); if (tgt.equals("(null)")) { - return String.format("%s effect's value is %s", sa.getHostCard().getName(), value); + return TextUtil.concatWithSpace(sa.getHostCard().getName(),"effect's value is", value); } else { - return String.format("%s effect's value for %s is %s", sa.getHostCard().getName(), tgt, value); + return TextUtil.concatWithSpace(sa.getHostCard().getName(),"effect's value for", tgt,"is", value); } } }