diff --git a/buildnumber.properties b/buildnumber.properties index 571dd45..30750e5 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Sun Jun 29 12:03:50 CEST 2014 -build.number=904 +#Sun Jun 29 16:33:24 CEST 2014 +build.number=909 diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Player.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Player.java index 25e82ee..c112480 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_Player.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Player.java @@ -45,6 +45,11 @@ public class TFM_Player protected TFM_Player(UUID uuid) { + if (uuid == null) + { + throw new IllegalArgumentException("UUID can not be null!"); + } + this.uuid = uuid; this.ips = new ArrayList(); } diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerData.java b/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerData.java index 884acb8..7bfbc7a 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerData.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerData.java @@ -59,7 +59,7 @@ public class TFM_PlayerData private TFM_PlayerData(Player player) { this.player = player; - this.uuid = TFM_UuidResolver.getUUIDOf(player.getName()); + this.uuid = TFM_Util.getUuid(player.getName()); this.ip = player.getAddress().getAddress().getHostAddress(); } diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java index 0b301bf..fcd378a 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java @@ -6,6 +6,8 @@ import java.lang.reflect.Field; import java.net.URL; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -121,7 +123,43 @@ public class TFM_Util public static UUID getUuid(String offlineplayer) { - return TFM_UuidResolver.getUUIDOf(offlineplayer); + final UUID uuid = TFM_UuidResolver.getUUIDOf(offlineplayer); + + if (uuid == null) + { + return generateUuidForName(offlineplayer); + } + + return uuid; + } + + public static UUID generateUuidForName(String name) + { + TFM_Log.info("Generating spoof UUID for " + name); + name = name.toLowerCase(); + try + { + final MessageDigest mDigest = MessageDigest.getInstance("SHA1"); + byte[] result = mDigest.digest(name.getBytes()); + final StringBuilder sb = new StringBuilder(); + for (int i = 0; i < result.length; i++) + { + sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1)); + } + + return UUID.fromString( + sb.substring(0, 8) + + "-" + sb.substring(8, 12) + + "-" + sb.substring(12, 16) + + "-" + sb.substring(16, 20) + + "-" + sb.substring(20, 32)); + } + catch (NoSuchAlgorithmException ex) + { + TFM_Log.severe(ex); + } + + return UUID.randomUUID(); } public static void bcastMsg(String message, ChatColor color)