diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java b/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java index 92065eb60c..422a466a2d 100644 --- a/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java +++ b/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java @@ -3,12 +3,14 @@ package io.anuke.mindustry.desktop; import club.minnced.discord.rpc.DiscordEventHandlers; import club.minnced.discord.rpc.DiscordRPC; import club.minnced.discord.rpc.DiscordRichPresence; +import com.badlogic.gdx.utils.Base64Coder; import io.anuke.kryonet.DefaultThreadImpl; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.ThreadHandler.ThreadProvider; import io.anuke.mindustry.io.Platform; import io.anuke.mindustry.net.Net; import io.anuke.ucore.UCore; +import io.anuke.ucore.core.Settings; import io.anuke.ucore.util.Strings; import javax.swing.*; @@ -19,6 +21,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Enumeration; import java.util.Locale; +import java.util.Random; import static io.anuke.mindustry.Vars.*; @@ -106,15 +109,34 @@ public class DesktopPlatform extends Platform { try { Enumeration e = NetworkInterface.getNetworkInterfaces(); NetworkInterface out; - for(out = e.nextElement(); out.getHardwareAddress() == null && e.hasMoreElements(); out = e.nextElement()); + for(out = e.nextElement(); out.getHardwareAddress() == null && e.hasMoreElements() && validAddress(out.getHardwareAddress()); out = e.nextElement()); byte[] bytes = out.getHardwareAddress(); byte[] result = new byte[8]; System.arraycopy(bytes, 0, result, 0, bytes.length); + + if(new String(Base64Coder.encode(result)).equals("AAAAAAAAAOA=")) throw new RuntimeException("Bad UUID."); + return result; }catch (Exception e){ - e.printStackTrace(); - return null; + Settings.defaults("uuid", ""); + + String uuid = Settings.getString("uuid"); + if(uuid.isEmpty()){ + byte[] result = new byte[8]; + new Random().nextBytes(result); + uuid = new String(Base64Coder.encode(result)); + Settings.putString("uuid", uuid); + Settings.save(); + return result; + } + return Base64Coder.decode(uuid); } } + + private boolean validAddress(byte[] bytes){ + byte[] result = new byte[8]; + System.arraycopy(bytes, 0, result, 0, bytes.length); + return !new String(Base64Coder.encode(result)).equals("AAAAAAAAAOA="); + } }