Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果minecraft player';s会话是否作为原始播放机有效?_Java_Minecraft - Fatal编程技术网

Java 如果minecraft player';s会话是否作为原始播放机有效?

Java 如果minecraft player';s会话是否作为原始播放机有效?,java,minecraft,Java,Minecraft,我挑战自己创建一个minecraft服务器,附带条件是我将使用的大多数插件都是我的。我已经制作了很多不同的插件,从商店到各种小游戏。现在我决定编写自己的登录注册插件。基本上,一切都已正常运行并准备就绪,但我想在这里添加一项功能。此功能是当玩家连接到服务器(warez)时,我的插件会检查玩家的会话是否是原始的(我的意思是玩家已经购买了游戏,并且他通过原始的mojang启动器登录,并具有有效的mojang会话。玩家应该以warez模式连接到服务器(未登录,使用非官方启动器))我指的不仅仅是这里提到的

我挑战自己创建一个minecraft服务器,附带条件是我将使用的大多数插件都是我的。我已经制作了很多不同的插件,从商店到各种小游戏。现在我决定编写自己的登录注册插件。基本上,一切都已正常运行并准备就绪,但我想在这里添加一项功能。此功能是当玩家连接到服务器(warez)时,我的插件会检查玩家的会话是否是原始的(我的意思是玩家已经购买了游戏,并且他通过原始的mojang启动器登录,并具有有效的mojang会话。玩家应该以warez模式连接到服务器(未登录,使用非官方启动器))我指的不仅仅是这里提到的名字,还有他的莫江会议。简而言之,它是否通过原始启动器登录,并带有电子邮件和密码

我完全不知道如何验证玩家的原创性,我知道mojang有一个API,但我不知道它是否提供了这种可能性。我还想知道客户端是否正在从UUID或sessionID向服务器发送哈希,这可以与mojang API进行比较,或者我不知道

更新:

我发现这两篇文章:

1)

2)

从这篇文章中,我大致了解到,在连接客户机的过程中,我将与服务器一起发送服务器ID和密码,然后他们同意的后续哈希将通过POST将客户机发送到mojang服务器,然后我的服务器应向mojang询问它是否登录到我的服务器客户机

更新2

我想到了以下几点:

  • 如果我将自己的代理编程为玩家可以连接的现象,那么这个代理会将所有内容复制到服务器上。因此,我可以让我想去的人进来,我还可以通过mojang页面使用服务器ID和哈希进行交叉检查。但它将是第三方软件,而不是插件
  • 修改插口本身,我的意思是在SSLServerSocket级别执行上述操作,插口服务器从中接收所有套接字和数据。在那里,如果我对数据将通过的网桥进行编码,我还能够同意客户机-服务器ID,计算散列并从mojang服务器验证它。但它仍然不会在插件中,而是在服务器中
  • 从插件覆盖上面提到的服务器的一些深层部分。该插件将在加载后替换服务器的某些部分
  • 现在我的问题是,如何替换插件中提到的服务器部分?尝试使用反射(我是noob,有反射)并用我的函数替换一些函数是个好主意,这会调用spiget低级代码吗

    非常感谢您的建议。 祝你今天愉快。

    PS:很抱歉我的英语不好。

    public boolean isCracked(ProxiedPlayer){
    
    public boolean isCracked(ProxiedPlayer player) {
       
        String name = player.getName();
        UUID actualUUID = player.getUniqueId();
        String actualUUIDStr = uuid.toString();
        String offlineUUIDStr = getMd5("OfflinePlayer:"+name);
       
        if(offlineUUIDStr.equals(actualUUIDStr)) {
            return true;
        }
        return false;
    
    }
    
    // Taken from https://www.geeksforgeeks.org/md5-hash-in-java/
    public static String getMd5(String input)
        {
            try {
     
                // Static getInstance method is called with hashing MD5
                MessageDigest md = MessageDigest.getInstance("MD5");
     
                // digest() method is called to calculate message digest
                //  of an input digest() return array of byte
                byte[] messageDigest = md.digest(input.getBytes());
     
                // Convert byte array into signum representation
                BigInteger no = new BigInteger(1, messageDigest);
     
                // Convert message digest into hex value
                String hashtext = no.toString(16);
                while (hashtext.length() < 32) {
                    hashtext = "0" + hashtext;
                }
                return hashtext;
            }
     
            // For specifying wrong message digest algorithms
            catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e);
            }
        }
    }
    
    
    String name=player.getName(); UUID actualuid=player.getUniqueId(); 字符串ActualUIDSTR=uuid.toString(); 字符串offlineUUIDStr=getMd5(“OfflinePlayer:+name”); 如果(脱机UUIDSTR等于(实际指令)){ 返回true; } 返回false; } //取自https://www.geeksforgeeks.org/md5-hash-in-java/ 公共静态字符串getMd5(字符串输入) { 试一试{ //使用哈希MD5调用静态getInstance方法 MessageDigest md=MessageDigest.getInstance(“MD5”); //调用digest()方法来计算消息摘要 //输入摘要()的返回字节数组 byte[]messageDigest=md.digest(input.getBytes()); //将字节数组转换为符号表示 BigInteger否=新的BigInteger(1,messageDigest); //将消息摘要转换为十六进制值 字符串hashtext=no.toString(16); while(hashtext.length()<32){ hashtext=“0”+hashtext; } 返回hashtext; } //用于指定错误的消息摘要算法 捕获(无算法异常){ 抛出新的运行时异常(e); } } }
    你说的
    原件是什么意思?玩家还应该如何登录?嗨,我的意思是,玩家已经购买了游戏,并且使用有效的mojang会话登录了原始mojang启动器。玩家应该以warez模式连接服务器(未登录,使用非官方启动器)#如果播放器的UUID与播放器的用户名UUID匹配,则将此添加到postTest中?我不知道它是如何使用UUID的,当玩家没有登录到MOJAN,那么他的UUID会是随机生成的,与mojang UUID不匹配吗?我不知道MiCeCrpe,但是看起来是这样的。请考虑添加注释到你的答案来解释它,使它更有用。我认为代码已经很好地注释了。当CooderSK已经创建了多个插件时,这段代码就不难理解了。谢谢,我会检查的it@CooderSK如果我的答案有效,你能接受吗?@FishyCode对不起,我不能,我没有足够的声誉去投票