diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index d8c427933b2..77d7ebf6ef4 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -753,7 +753,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { currentConnection.setPort(port); String allMAC = ""; try { - allMAC = currentConnection.getMAC(); + allMAC = Connection.getMAC(); } catch (SocketException ex) { } currentConnection.setUserIdStr(System.getProperty("user.name") + ":" + System.getProperty("os.name") + ":" + MagePreferences.getUserNames() + ":" + allMAC); diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index 3574836bf9f..317dd0e37cb 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -2953,6 +2953,7 @@ public abstract class GameImpl implements Game, Serializable { executingRollback = true; for (Player playerObject : getPlayers().values()) { if (playerObject.isHuman() && playerObject.isInGame()) { + playerObject.resetStoredBookmark(this); playerObject.abort(); playerObject.resetPlayerPassedActions(); } diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index 2879a82cb0c..e85a5c3cca6 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -1182,9 +1182,11 @@ public abstract class PlayerImpl implements Player, Serializable { } protected void restoreState(int bookmark, String text, Game game) { - game.restoreState(bookmark, text); - if (storedBookmark >= bookmark) { - resetStoredBookmark(game); + if (storedBookmark > -1) { // e.g. a turn rollback sets this to -1 so no more rollback of current action may be done + game.restoreState(bookmark, text); + if (storedBookmark >= bookmark) { + resetStoredBookmark(game); + } } } @@ -2334,12 +2336,13 @@ public abstract class PlayerImpl implements Player, Serializable { count = searchedLibrary.count(target.getFilter(), game); } else { Player targetPlayer = game.getPlayer(targetPlayerId); - if (targetPlayer != null) { - if (cardsFromTop == null) { - cardsFromTop = new ArrayList<>(targetPlayer.getLibrary().getTopCards(game, librarySearchLimit)); - } else { - cardsFromTop.retainAll(targetPlayer.getLibrary().getCards(game)); - } + if (targetPlayer == null) { + return false; + } + if (cardsFromTop == null) { + cardsFromTop = new ArrayList<>(targetPlayer.getLibrary().getTopCards(game, librarySearchLimit)); + } else { + cardsFromTop.retainAll(targetPlayer.getLibrary().getCards(game)); } newTarget.setCardLimit(Math.min(librarySearchLimit, cardsFromTop.size())); count = Math.min(searchedLibrary.count(target.getFilter(), game), librarySearchLimit); @@ -2390,7 +2393,7 @@ public abstract class PlayerImpl implements Player, Serializable { chooseCard.setMessage("Which creature do you wish to cast from your library?"); Set choice = new LinkedHashSet<>(); for (Entry entry : libraryCastableCardTracker.entrySet()) { - choice.add(new AbstractMap.SimpleEntry(entry).getValue()); + choice.add(new AbstractMap.SimpleEntry<>(entry).getValue()); } chooseCard.setChoices(choice); while (!choice.isEmpty()) { @@ -2454,6 +2457,7 @@ public abstract class PlayerImpl implements Player, Serializable { /** * @param game * @param appliedEffects + * @param numSides Number of sides the dice has * @return the number that the player rolled */ @Override @@ -3214,8 +3218,7 @@ public abstract class PlayerImpl implements Player, Serializable { } @Override - public void setStoredBookmark(int storedBookmark - ) { + public void setStoredBookmark(int storedBookmark) { this.storedBookmark = storedBookmark; } @@ -3802,4 +3805,11 @@ public abstract class PlayerImpl implements Player, Serializable { return this.getId().equals(obj.getId()); } + + @Override + public int hashCode() { + int hash = 7; + hash = 89 * hash + Objects.hashCode(this.playerId); + return hash; + } }