PHP |我的世界离线UUID

时间:2018-12-15 18:32:39

标签: php uuid minecraft

我正在为Minecraft服务器创建一个用户控制面板,如果客户端单击“立即购买”按钮,则在数据库(permissionex(ranksystem插件))中更新客户端的排名。 ex权限由minecraft离线UUID来确定。

minecraft uuid:md5(“ OfflinePlayer:” +名称)但是 这和数据库的uuid,相差2个字母。

我的数据库uuid:7a1a45e593cc389007345468dd059e70

我的网站的uuid:7a1a45e593cc389087345468dd059e70

谢谢,抱歉我的英语不好

我的代码:

$offlineuuid = md5("OfflinePlayer:".$_SESSION['username']."");

$uuid = MojangAPI::formatUuid($offlineuuid); // Egy API-t felhasználva át alakítja teljes UUID-vé (kötőjelessé)
$connection = new mysqli("localhost", "root", "", "rank");

echo "".$uuid."<br>"; // <-- a SESSION uuidje (a név amivel belépett a weboldalra)


$conn = mysqli_connect("localhost", "root", "");
$db = mysqli_select_db($conn, "rank");

$query = mysqli_query($conn, "SELECT * FROM permissions_inheritance WHERE child='$uuid'");
echo "7a1a45e5-93cc-3890-8734-5468dd059e70<br>";  //<- adatbázis UUIDje
$rows = mysqli_num_rows($query);

2 个答案:

答案 0 :(得分:0)

在您的问题中,我在两个UUID之间仅看到一位数字不同:在“变量”字段中。您的“数据库” UUID的值为0xxx,该值保留用于与长整数系统向后兼容,并且几乎可以肯定是无效的。您的“网站” UUID的值为10xx,适用于RFC4122,并且几乎总是正确的。

简而言之:您没有正确生成您的UUID,并且一个软件正在尝试(某种程度上)为您修复它,而另一个则没有。解决方案是生成一个都将接受的有效UUID。

答案 1 :(得分:0)

我找到了解决方法。

示例用法: $uuid = offlinePlayerUuid("HereThePlayerName123");

输入您的代码:

function offlinePlayerUuid($username) {
    //extracted from the java code:
    //new GameProfile(UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8)), name));
    $data = hex2bin(md5("OfflinePlayer:" . $username));
    //set the version to 3 -> Name based md5 hash
    $data[6] = chr(ord($data[6]) & 0x0f | 0x30);
    //IETF variant
    $data[8] = chr(ord($data[8]) & 0x3f | 0x80);
    return createJavaUuid(bin2hex($data));
}

function createJavaUuid($striped) {
    //example: 069a79f4-44e9-4726-a5be-fca90e38aaf5
    $components = array(
        substr($striped, 0, 8),
        substr($striped, 8, 4),
        substr($striped, 12, 4),
        substr($striped, 16, 4),
        substr($striped, 20),
    );
    return implode('-', $components);
}