diff --git a/forge-game/src/main/java/forge/util/MessageUtil.java b/forge-game/src/main/java/forge/util/MessageUtil.java index 99e08a89dfb..d09707aa26b 100644 --- a/forge-game/src/main/java/forge/util/MessageUtil.java +++ b/forge-game/src/main/java/forge/util/MessageUtil.java @@ -19,7 +19,7 @@ public class MessageUtil { } public static String formatMessage(String message, PlayerView player, Object related) { - if (related instanceof Player && message.indexOf("{player") >= 0) { + if (related instanceof PlayerView && message.indexOf("{player") >= 0) { String noun = mayBeYou(player, related); message = message.replace("{player}", noun).replace("{player's}", Lang.getPossesive(noun)); } diff --git a/forge-gui/src/main/java/forge/match/GameLobby.java b/forge-gui/src/main/java/forge/match/GameLobby.java index 8e03380d610..8a4f816803f 100644 --- a/forge-gui/src/main/java/forge/match/GameLobby.java +++ b/forge-gui/src/main/java/forge/match/GameLobby.java @@ -347,7 +347,7 @@ public abstract class GameLobby { setNameNow = true; hasNameBeenSet = true; } - lobbyPlayer = GamePlayerUtil.getGuiPlayer(name, setNameNow); + lobbyPlayer = GamePlayerUtil.getGuiPlayer(name, avatar, setNameNow); } Deck deck = slot.getDeck(); diff --git a/forge-gui/src/main/java/forge/match/HostedMatch.java b/forge-gui/src/main/java/forge/match/HostedMatch.java index 5c390bd7cc7..4911297c4ba 100644 --- a/forge-gui/src/main/java/forge/match/HostedMatch.java +++ b/forge-gui/src/main/java/forge/match/HostedMatch.java @@ -46,6 +46,7 @@ import forge.sound.MusicPlaylist; import forge.sound.SoundSystem; import forge.trackable.TrackableCollection; import forge.util.CollectionSuppliers; +import forge.util.FCollectionView; import forge.util.GuiDisplayUtil; import forge.util.NameGenerator; import forge.util.maps.HashMapOfLists; @@ -99,12 +100,21 @@ public class HostedMatch { gameRules.setAppliedVariants(appliedVariants); } - if (players.size() == 2) { - title = String.format("%s vs %s", players.get(0).getPlayer().getName(), players.get(1).getPlayer().getName()); + final List sortedPlayers = Lists.newArrayList(players); + Collections.sort(sortedPlayers, new Comparator() { + @Override public final int compare(final RegisteredPlayer p1, final RegisteredPlayer p2) { + final int v1 = p1.getPlayer() instanceof LobbyPlayerHuman ? 0 : 1; + final int v2 = p2.getPlayer() instanceof LobbyPlayerHuman ? 0 : 1; + return Integer.compare(v1, v2); + } + }); + + if (sortedPlayers.size() == 2) { + title = String.format("%s vs %s", sortedPlayers.get(0).getPlayer().getName(), sortedPlayers.get(1).getPlayer().getName()); } else { - title = String.format("Multiplayer Game (%d players)", players.size()); + title = String.format("Multiplayer Game (%d players)", sortedPlayers.size()); } - this.match = new Match(gameRules, players, title); + this.match = new Match(gameRules, sortedPlayers, title); startGame(); } @@ -137,25 +147,15 @@ public class HostedMatch { game.subscribeToEvents(SoundSystem.instance); game.subscribeToEvents(visitor); - // Instantiate all required field slots (user at 0) - final List sortedPlayers = Lists.newArrayList(game.getRegisteredPlayers()); - Collections.sort(sortedPlayers, new Comparator() { - @Override - public int compare(final Player p1, final Player p2) { - final int v1 = p1.getController() instanceof PlayerControllerHuman ? 0 : 1; - final int v2 = p2.getController() instanceof PlayerControllerHuman ? 0 : 1; - return Integer.compare(v1, v2); - } - }); - + final FCollectionView players = game.getPlayers(); final String[] avatarIndices = FModel.getPreferences().getPref(FPref.UI_AVATARS).split(","); final GameView gameView = getGameView(); humanCount = 0; final MapOfLists playersPerGui = new HashMapOfLists(CollectionSuppliers.arrayLists()); - for (int iPlayer = 0; iPlayer < sortedPlayers.size(); iPlayer++) { + for (int iPlayer = 0; iPlayer < players.size(); iPlayer++) { final RegisteredPlayer rp = match.getPlayers().get(iPlayer); - final Player p = sortedPlayers.get(iPlayer); + final Player p = players.get(iPlayer); p.getLobbyPlayer().setAvatarIndex(rp.getPlayer().getAvatarIndex()); if (p.getLobbyPlayer().getAvatarIndex() == -1) { @@ -195,7 +195,7 @@ public class HostedMatch { gui.setGameController(null, humanController); gui.openView(null); - } else if (humanCount == sortedPlayers.size()) { + } else if (humanCount == players.size()) { //if there are no AI's, allow all players to see all cards (hotseat mode). for (final PlayerControllerHuman humanController : humanControllers) { humanController.setMayLookAtAllCards(true); @@ -208,7 +208,7 @@ public class HostedMatch { } //ensure opponents set properly - for (final Player p : sortedPlayers) { + for (final Player p : players) { p.updateOpponentsForView(); } diff --git a/forge-gui/src/main/java/forge/player/GamePlayerUtil.java b/forge-gui/src/main/java/forge/player/GamePlayerUtil.java index 3f6935c1d7c..0b0c8468738 100644 --- a/forge-gui/src/main/java/forge/player/GamePlayerUtil.java +++ b/forge-gui/src/main/java/forge/player/GamePlayerUtil.java @@ -23,7 +23,7 @@ public final class GamePlayerUtil { public static final LobbyPlayer getGuiPlayer() { return guiPlayer; } - public static final LobbyPlayer getGuiPlayer(final String name, final boolean writePref) { + public static final LobbyPlayer getGuiPlayer(final String name, final int avatarIndex, final boolean writePref) { if (writePref) { if (!name.equals(guiPlayer.getName())) { guiPlayer.setName(name); @@ -33,7 +33,7 @@ public final class GamePlayerUtil { return guiPlayer; } //use separate LobbyPlayerHuman instance for human players beyond first - return new LobbyPlayerHuman(name); + return new LobbyPlayerHuman(name, avatarIndex); } public static final LobbyPlayer getQuestPlayer() { diff --git a/forge-gui/src/main/java/forge/player/LobbyPlayerHuman.java b/forge-gui/src/main/java/forge/player/LobbyPlayerHuman.java index deb7ae0405f..0738d344dcc 100644 --- a/forge-gui/src/main/java/forge/player/LobbyPlayerHuman.java +++ b/forge-gui/src/main/java/forge/player/LobbyPlayerHuman.java @@ -9,7 +9,11 @@ import forge.util.GuiDisplayUtil; public class LobbyPlayerHuman extends LobbyPlayer implements IGameEntitiesFactory { public LobbyPlayerHuman(final String name) { + this(name, -1); + } + public LobbyPlayerHuman(final String name, final int avatarIndex) { super(name); + setAvatarIndex(avatarIndex); } @Override diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 7f3d4048d3b..955d6e44fdb 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -577,7 +577,7 @@ public class PlayerControllerHuman } else { message += "{player's} " + zone.name().toLowerCase(); } - String fm = MessageUtil.formatMessage(message, player, owner); + String fm = MessageUtil.formatMessage(message, getLocalPlayerView(), owner); if (!cards.isEmpty()) { tempShowCards(game.getCardList(cards)); getGui().reveal(fm, cards);