Java 如果minecraft player';s会话是否作为原始播放机有效?
我挑战自己创建一个minecraft服务器,附带条件是我将使用的大多数插件都是我的。我已经制作了很多不同的插件,从商店到各种小游戏。现在我决定编写自己的登录注册插件。基本上,一切都已正常运行并准备就绪,但我想在这里添加一项功能。此功能是当玩家连接到服务器(warez)时,我的插件会检查玩家的会话是否是原始的(我的意思是玩家已经购买了游戏,并且他通过原始的mojang启动器登录,并具有有效的mojang会话。玩家应该以warez模式连接到服务器(未登录,使用非官方启动器))我指的不仅仅是这里提到的名字,还有他的莫江会议。简而言之,它是否通过原始启动器登录,并带有电子邮件和密码 我完全不知道如何验证玩家的原创性,我知道mojang有一个API,但我不知道它是否提供了这种可能性。我还想知道客户端是否正在从UUID或sessionID向服务器发送哈希,这可以与mojang API进行比较,或者我不知道 更新: 我发现这两篇文章: 1) 2) 从这篇文章中,我大致了解到,在连接客户机的过程中,我将与服务器一起发送服务器ID和密码,然后他们同意的后续哈希将通过POST将客户机发送到mojang服务器,然后我的服务器应向mojang询问它是否登录到我的服务器客户机 更新2 我想到了以下几点:Java 如果minecraft player';s会话是否作为原始播放机有效?,java,minecraft,Java,Minecraft,我挑战自己创建一个minecraft服务器,附带条件是我将使用的大多数插件都是我的。我已经制作了很多不同的插件,从商店到各种小游戏。现在我决定编写自己的登录注册插件。基本上,一切都已正常运行并准备就绪,但我想在这里添加一项功能。此功能是当玩家连接到服务器(warez)时,我的插件会检查玩家的会话是否是原始的(我的意思是玩家已经购买了游戏,并且他通过原始的mojang启动器登录,并具有有效的mojang会话。玩家应该以warez模式连接到服务器(未登录,使用非官方启动器))我指的不仅仅是这里提到的
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对不起,我不能,我没有足够的声誉去投票