From b57630a5e4ba0b808c787bffd75740fcd87b9c9d Mon Sep 17 00:00:00 2001 From: TheSnoozer Date: Sat, 30 Mar 2019 11:27:02 -0400 Subject: [PATCH] https://github.com/ORelio/Minecraft-Console-Client/issues/493: UUID not properly storing due to GUID conversion (need to convert a Java big-endian Guid to a C# little-endian Guid) --- .../Protocol/Handlers/Protocol18.cs | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index a9c42996..2f4c261e 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -1368,7 +1368,39 @@ namespace MinecraftClient.Protocol.Handlers /// The uuid private static Guid readNextUUID(List cache) { - return new Guid(readData(16, cache)); + byte[] javaUUID = readData(16, cache); + Guid guid; + if (BitConverter.IsLittleEndian) + { + guid = ToLittleEndian(javaUUID); + } + else + { + guid = new Guid(javaUUID); + } + return guid; + } + + /// + /// convert a Java big-endian Guid to a .NET little-endian Guid. + /// + /// GUID in little endian. + private static Guid ToLittleEndian(byte[] java) + { + byte[] net = new byte[16]; + for (int i = 8; i < 16; i++) + { + net[i] = java[i]; + } + net[3] = java[0]; + net[2] = java[1]; + net[1] = java[2]; + net[0] = java[3]; + net[5] = java[4]; + net[4] = java[5]; + net[6] = java[7]; + net[7] = java[6]; + return new Guid(net); } ///