ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 在Minecraft中使用NMS更改玩家皮肤(Bukkit / Spigot)

2019-06-27 15:59:56  阅读:261  来源: 互联网

标签:java minecraft bukkit


我目前正在开发一个插件,可以让你假设另一个玩家的身份.它几乎完美无缺:您的UUID和用户名更改为您认为服务器身份的用户的UUID和用户名,并且就服务器和插件而言,您似乎是该播放器.您将拥有与他们相同的级别,相同的权限,一切.我无法得到的一件事是皮肤.我曾经认为,当UUID出现时,其他玩家的玩家皮肤会被改变,但事实并非如此.我正在使用反射来更改GameProfile和EntityPlayer中的UUID(uniqueID字段继承自Entity),获取播放器UUID的所有方法都返回插件设置的UUID.我通过反编译的NMS和Bukkit / Spigot论坛进行挖掘,但所有这些都表明皮肤应该随UUID而改变.我正在发送一个PlayerQuitEvent和PlayerJoinEvent插件来模拟真实的玩家离开和假定的玩家加入,并向所有玩家发送数据包以从tab和ingame中删除旧玩家,然后添加新玩家.如果可以避免,我宁愿不使用ProtocolLib.任何帮助将不胜感激,任何人都能指出我正确的方向吗?

提前致谢!

解决方法:

我自己想通了.事实证明,GameProfile包含皮肤纹理.必须从Mojang会话服务器请求此纹理.这是代码:

public static boolean setSkin(GameProfile profile, UUID uuid) {
    try {
        HttpsURLConnection connection = (HttpsURLConnection) new URL(String.format("https://sessionserver.mojang.com/session/minecraft/profile/%s?unsigned=false", UUIDTypeAdapter.fromUUID(uuid))).openConnection();
        if (connection.getResponseCode() == HttpsURLConnection.HTTP_OK) {
            String reply = new BufferedReader(new InputStreamReader(connection.getInputStream())).readLine();
            String skin = reply.split("\"value\":\"")[1].split("\"")[0];
            String signature = reply.split("\"signature\":\"")[1].split("\"")[0];
            profile.getProperties().put("textures", new Property("textures", skin, signature));
            return true;
        } else {
            System.out.println("Connection could not be opened (Response code " + connection.getResponseCode() + ", " + connection.getResponseMessage() + ")");
            return false;
        }
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}

标签:java,minecraft,bukkit
来源: https://codeday.me/bug/20190627/1306399.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有