diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/objectLoader/versions/Version.java b/src/main/java/de/bixilon/minosoft/game/datatypes/objectLoader/versions/Version.java index b74036daf..324b08612 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/objectLoader/versions/Version.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/objectLoader/versions/Version.java @@ -25,6 +25,7 @@ public class Version { final HashMap> serverboundPacketMapping; final HashMap> clientboundPacketMapping; VersionMapping mapping; + boolean isGettingLoaded; public Version(String versionName, int protocolVersion, HashMap> serverboundPacketMapping, HashMap> clientboundPacketMapping) { this.versionName = versionName; @@ -76,6 +77,15 @@ public class Version { this.mapping = mapping; } + + public boolean isGettingLoaded() { + return isGettingLoaded; + } + + public void setGettingLoaded(boolean gettingLoaded) { + isGettingLoaded = gettingLoaded; + } + @Override public boolean equals(Object obj) { if (super.equals(obj)) { diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/objectLoader/versions/Versions.java b/src/main/java/de/bixilon/minosoft/game/datatypes/objectLoader/versions/Versions.java index 8d4c38a3f..22c335ccf 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/objectLoader/versions/Versions.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/objectLoader/versions/Versions.java @@ -134,6 +134,10 @@ public class Versions { if (protocolId < ProtocolDefinition.FLATTING_VERSION_ID) { version = versionMap.get(ProtocolDefinition.PRE_FLATTENING_VERSION_ID); } + if (version.isGettingLoaded()) { + return; + } + version.setGettingLoaded(true); Log.verbose(String.format("Loading mappings for version %s...", version)); long startTime = System.currentTimeMillis(); @@ -161,7 +165,7 @@ public class Versions { } Log.verbose(String.format("Loaded mappings for version %s in %dms (%s)", version, (System.currentTimeMillis() - startTime), version.getVersionName())); - + version.setGettingLoaded(false); } public static void unloadUnnecessaryVersions(int necessary) { diff --git a/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java b/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java index cc899a648..cc66486a8 100644 --- a/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java +++ b/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java @@ -275,7 +275,7 @@ public class ServerListCell extends ListCell implements Initializable { } public void refresh() { - Log.info(String.format("Refreshing server status (serverName=\"%s\", address=\"%s\"", server.getName(), server.getAddress())); + Log.info(String.format("Refreshing server status (serverName=\"%s\", address=\"%s\")", server.getName(), server.getAddress())); if (server.getLastPing() == null) { // server was not pinged, don't even try, only costs memory and cpu return; diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java b/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java index 680b5f36f..cb14049b8 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java +++ b/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java @@ -207,11 +207,14 @@ public class Connection { } public void setVersion(Version version) { + if (this.version == version) { + return; + } + this.version = version; this.customMapping.setVersion(version); try { Versions.loadVersionMappings(version.getProtocolVersion()); - customMapping.setVersion(version); } catch (IOException e) { e.printStackTrace(); Log.fatal(String.format("Could not load mapping for %s. This version seems to be unsupported!", version)); diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java index af9774029..2ee149c9c 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java @@ -65,7 +65,7 @@ public class PacketHandler { if (version == null) { Log.fatal(String.format("Server is running on unknown version or a invalid version was forced (version=%d, brand=\"%s\")", versionId, pkg.getResponse().getServerBrand())); } else { - connection.setVersion(version); + connection.setVersion(version); } Log.info(String.format("Status response received: %s/%s online. MotD: '%s'", pkg.getResponse().getPlayerOnline(), pkg.getResponse().getMaxPlayers(), pkg.getResponse().getMotd().getColoredMessage())); connection.handleCallbacks(pkg.getResponse());