Some users have multiple UUID records for agent:minecraft
Several users have multiple UUIDs, documented here is one user "jumbokiller2001".
{"name":"jumbokiller2001","agent":"minecraft"}
{"id":"e01c28e44f2443389440e07974a47393","name":"JUMBOKILLER2001"}
{"id":"6d0409ceb40c4580b2075e19d6a12003","name":"JUMBOKILLER2001"}
{"id":"a8e27c733217448ab7166ae32f00799c","name":"JUMBOKILLER2001"}
{"id":"a5d19e7fb70f4a7ab9bfaf02eda2562a","name":"JUMBOKILLER2001"}
{"id":"311a4cacf4584766aa89212a55d9ea3d","name":"JUMBOKILLER2001"}
Code used:
A very simple wrapper created from https://github.com/Mojang/AccountsClient
String name = "jumbokiller2001"; Profile[] profiles = profileRepository.findProfilesByCriteria(new ProfileCriteria(name, "minecraft")); if (profiles.length == 1) { return profiles[0].getId(); } else { for(Profile profile : profiles) { System.err.println(gson.toJson(profile)); } return "Couldn't get the UUID! :("; }
Linked Issues
Created Issue:
Some users have multiple UUID records for agent:minecraft
Several users have multiple UUIDs, documented here is one user "jumbokiller2001".
{"name":"jumbokiller2001","agent":"minecraft"} {"id":"e01c28e44f2443389440e07974a47393","name":"JUMBOKILLER2001"} {"id":"6d0409ceb40c4580b2075e19d6a12003","name":"JUMBOKILLER2001"} {"id":"a8e27c733217448ab7166ae32f00799c","name":"JUMBOKILLER2001"} {"id":"a5d19e7fb70f4a7ab9bfaf02eda2562a","name":"JUMBOKILLER2001"} {"id":"311a4cacf4584766aa89212a55d9ea3d","name":"JUMBOKILLER2001"}Code used:
A very simple wrapper created from https://github.com/Mojang/AccountsClientString name = "jumbokiller2001";
{ return profiles[0].getId(); }
Profile[] profiles = profileRepository.findProfilesByCriteria(new ProfileCriteria(name, "minecraft"));
if (profiles.length == 1)else {
{ System.err.println(gson.toJson(profile)); }
for(Profile profile : profiles)return "Couldn't get the UUID!
";
}
Linked Issues
Several users have multiple UUIDs, documented here is one user "jumbokiller2001".
{"name":"jumbokiller2001","agent":"minecraft"} {"id":"e01c28e44f2443389440e07974a47393","name":"JUMBOKILLER2001"} {"id":"6d0409ceb40c4580b2075e19d6a12003","name":"JUMBOKILLER2001"} {"id":"a8e27c733217448ab7166ae32f00799c","name":"JUMBOKILLER2001"} {"id":"a5d19e7fb70f4a7ab9bfaf02eda2562a","name":"JUMBOKILLER2001"} {"id":"311a4cacf4584766aa89212a55d9ea3d","name":"JUMBOKILLER2001"}Code used:
A very simple wrapper created from https://github.com/Mojang/AccountsClientString name = "jumbokiller2001";
{ return profiles[0].getId(); }
Profile[] profiles = profileRepository.findProfilesByCriteria(new ProfileCriteria(name, "minecraft"));
if (profiles.length == 1)else {
{ System.err.println(gson.toJson(profile)); }
for(Profile profile : profiles)return "Couldn't get the UUID!
";
}
Several users have multiple UUIDs, documented here is one user "jumbokiller2001".
{"name":"jumbokiller2001","agent":"minecraft"} {"id":"e01c28e44f2443389440e07974a47393","name":"JUMBOKILLER2001"} {"id":"6d0409ceb40c4580b2075e19d6a12003","name":"JUMBOKILLER2001"} {"id":"a8e27c733217448ab7166ae32f00799c","name":"JUMBOKILLER2001"} {"id":"a5d19e7fb70f4a7ab9bfaf02eda2562a","name":"JUMBOKILLER2001"} {"id":"311a4cacf4584766aa89212a55d9ea3d","name":"JUMBOKILLER2001"}Code used:
A very simple wrapper created from https://github.com/Mojang/AccountsClientString name = "jumbokiller2001";
{ return profiles[0].getId(); }
Profile[] profiles = profileRepository.findProfilesByCriteria(new ProfileCriteria(name, "minecraft"));
if (profiles.length == 1)else {
{ System.err.println(gson.toJson(profile)); }
for(Profile profile : profiles)return "Couldn't get the UUID!
";
}Several users have multiple UUIDs, documented here is one user "jumbokiller2001".
{"name":"jumbokiller2001","agent":"minecraft"} {"id":"e01c28e44f2443389440e07974a47393","name":"JUMBOKILLER2001"} {"id":"6d0409ceb40c4580b2075e19d6a12003","name":"JUMBOKILLER2001"} {"id":"a8e27c733217448ab7166ae32f00799c","name":"JUMBOKILLER2001"} {"id":"a5d19e7fb70f4a7ab9bfaf02eda2562a","name":"JUMBOKILLER2001"} {"id":"311a4cacf4584766aa89212a55d9ea3d","name":"JUMBOKILLER2001"}Code used:
A very simple wrapper created from https://github.com/Mojang/AccountsClientString name = "jumbokiller2001"; Profile[] profiles = profileRepository.findProfilesByCriteria(new ProfileCriteria(name, "minecraft")); if (profiles.length == 1) { return profiles[0].getId(); } else { for(Profile profile : profiles) { System.err.println(gson.toJson(profile)); } return "Couldn't get the UUID! :("; }
Sounds more like a bug in the conversion code Mojang-side since names are unique and don't care about casing.
relates to
Whoever formatted this for me, you're a saint, thankyou.
Tip: Embrace code sections with {code} tags.
I can verify this on my UUID converter
Array ( [profiles] => Array ( [0] => Array ( [id] => e01c28e44f2443389440e07974a47393 [name] => JUMBOKILLER2001 ) [1] => Array ( [id] => 6d0409ceb40c4580b2075e19d6a12003 [name] => JUMBOKILLER2001 ) [2] => Array ( [id] => a8e27c733217448ab7166ae32f00799c [name] => JUMBOKILLER2001 ) [3] => Array ( [id] => a5d19e7fb70f4a7ab9bfaf02eda2562a [name] => JUMBOKILLER2001 ) [4] => Array ( [id] => 311a4cacf4584766aa89212a55d9ea3d [name] => JUMBOKILLER2001 ) ) [size] => 5 )Also, Fishbans api can't search the UUID of this user.
http://api.fishbans.com/stats/JUMBOKILLER2001
{"success":false,"error":"Unable to get UUID for this user."}Confirmed.
Out of the 3.1mil users in our DB, these are the ones affected (outputted from an implementation of the Mojang AccountsClient):
This is being looked into now, we found a total of ~50 users that were affected by this problem.
I can confirm that it's fixed from my end. Thanks!
Is this issue really resolved? Both of the following:
https://sessionserver.mojang.com/session/minecraft/profile/e01c28e44f2443389440e07974a47393
AND
https://sessionserver.mojang.com/session/minecraft/profile/6d0409ceb40c4580b2075e19d6a12003
return data for JUMBOKILLER2001, however, only the first one has proper skin data.
Yes, it is. That's a separate issue of /profile/ not caring about if an account was flagged as deleted or not
Awesome, thanks for the confirmation
To add to that, Monsieur, you wouldn't be looking up a UUID that was never sent. What matters is the username to UUID and (that same) UUID to username works properly
Doesn't seem to be fixed.
user nico returns this:
{ "profiles": [ { "id": "3bfb7c8d02a24ece8b56c7e22a553be3", "name": "nico", "legacy": true, "demo": true }, { "id": "24107f5e4e4c49d0b25f423d0a9fc337", "name": "Nico" } ], "size": 2 }Please reopen.
Reopened & Confirmed Redstone Sheep's comment
http://nooooooooooooooo.com/
Now, I am no expert, but the one name is Nico, and the other is nico.
Matthew has a point. When looking up for a name, it will return all profiles with the same name, even if not the same caps.
Indeed. The profiles are also clearly separate, as one is a legacy and demo account and the other is neither.
Oh ok, so false alarm?
I'm unclear if this is still an issue or not.
If the intended behaviour is for the username -> uuid lookup to return a single uuid, so as far as it looks, even if it's for the demo account reasons, it's still an issue.
Even if it's a false alarm, it should definitely still be looked into because although they have a different case they should technically have the same UUID as Mojang only accepts new accounts based of a different letter/number combination. Having two show up when checking a player name may become a little confusing right? I'm with Ben on this one.
It should go like so:
Display exact username's profile
Then
Display non-exact (other caps) username's profile
Is that an authoritative statement, or a suggestion?
I don't think this is false alarm. Usernames should be unique in any capitalization.
This problem makes it very hard for automatisation. How am I supposed to figure out the correct UUID for player nico?
Requesting the UUID for a single player shouldn't return multiple ones.
As an example, a script would probably request the UUID for a user and then pick the first entry or the first entry where the username matches (case-insensitive)
In this case it would pick the legacy/demo one.
I tested this by creating a Nico.dat user and then convert it by running a newer server version. It renamed it to 3bfb7c8d-02a2-4ece-8b56-c7e22a553be3.dat, which is, as you can see "nico" and not "Nico"
Please reopen.
Looks like the vanilla minecraft server assigns the wrong UUID to this user.
I just ran a test startup of an online mode vanilla server and it exceptioned out (but still converted) Nico.dat to 3bfb7c8d-02a2-4ece-8b56-c7e22a553be3.dat
Bug still present in vanilla server, please mark as unresolved.
Ben: you be stealing my idea much!
btw: it's probably more likely to be a bug on the server side. Mojang should scan their database for duplicate names and remove them, if possible.
It looks like this issue can currently arise from legacy account holders/demo account holders buying accounts and this not being properly handled by the system, but obviously we don't have any idea about the internal workings, so we can only conjecture.
As far as server owners are concerned, yes, it is possible to get a wrong uuid for a user, and in fact is quite likely if you happen to get one of the users affected by this bug since it seems the incorrect uuid is the ony first in the list, which will result in (when it gets fixed) the correct uuid being the second one, which means that any server that tried to convert them beforehand will have the wrong uuid saved!
No it shouldn't return multiple accounts in any favoured order. First, Mojang might probably need to create a custom JSON parser to realize this and second, it totally depends on the language/library (on the client side) which order the results have, if any at all.
Reopening again. Usernames are not case sensitive, and one username should never return two UUID's, even if they are technically different usernames.
Thinking that the "Fix Version" needs to be changed to "Future Version" due to Ezekiel's post.
Fix Version?
Anyway this is an API problem, that doesn't have anything to do with Minecraft (and it's versions).
The profile for Nico appears to be fixed.
No, it still returns two accounts using https://api.mojang.com/profiles/page/1, which is what current versions use AFAIK.
Using https://api.mojang.com/profiles/minecraft will only return one account, but that's probably only because it does not return demo accounts.
deleted, that method is depreciated and not valid
It may be deprecated, but it's still used by very recent versions.
Since this is an API problem and not a client problem, it should be fixed on the API side.
I don't see what's not valid with that, but it still does return multiple accounts.
So the API problem originally reported still exists for that API.
It is strongly discouraged that you use that version, as it is only still online for compatibility reasons and should not be used by any production software.
Also, when you say
What 'versions' are you referring to?
I just tested with 1.7.8. It throw an error but converted the file anyways (with the wrong UUID!)
It works in 1.7.9, but again, that is because it uses a different API than the one reported and thus shouldn't be topic of this ticket.
1.7.8 is old, and it's fixed in 1.7.9
"old"
However, it's not fixed in 1.7.9. It uses a different API, that's a difference.
The thing that bugs me is that it could easily be fixed for versions < 1.7.9 by just fixing the API. There surely are a lot of people using MC < 1.7.9.
version 1.7.5 doesn't have UUID compatibility, if I understand correctly. 1.7.6-1.7.8 were broken versions that weren't released for more than a little while. Therefor it can be assumed the usage for 1.7.6,1.7.7, and 1.7.8 are extremely low and insignificant.
Okay
While using the UUID lookup api for our player uptime tracking system I encountered a user who still has multiple uuids.
Apparently there is a uuid for 'milo00' and for 'Milo00'.
(Only difference is a different capitalization, but minecraft usernames are not case-sensitive?).
Assuming this bug has not been fully fixed yet?
Also, I seem to be having almost 200 names in my database who don't seem to have an uuid at all?
Yeah, just drop those 200 users. They're people who refunded their Minecraft purchase or were removed for other reasons.
FearThe1337, you are using a depreciated API. Please use the correct API calls in the future, to avoid broken responses.
http://github.com/Mojang/AccountsClient/wiki
Using the latest api (Which I was already using) the name still returns 2 different uuids for this user if the lookup has more then 1 name specified.
outputs
Same for the php code I was using
<?php function uuidArray($usernames){ $json = json_encode($usernames); $ch = curl_init(); $curlConfig = array( CURLOPT_URL => "https://api.mojang.com/profiles/minecraft", CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => $json, CURLOPT_HTTPHEADER => array( 'Content-Type: application/json', 'Content-Length: ' . strlen($json) ), ); curl_setopt_array($ch, $curlConfig); $json = curl_exec($ch); curl_close($ch); $response = json_decode($json); return $response; } $names = array(); $names[] = 'milo00'; $names[] = 'Notch'; print_r(uuidArray($names)); ?>which yielded the output:
Reopened, issues still occur when there are two names in a request
The new API is now returning demo accounts, too.
Thus we got the same problem again. For some reason it only returns two accounts (e.g. Nico/nico) when more than 1 user is requested.
How very strange, well caught!
I noticed that earlier today as well
The public API has now been updated to exclude demo profiles from the listing (which is the intended behavior). Thanks for bringing this to our attention!