本帖最后由 迪安小弱渣 于 2019-12-14 21:52 编辑
这个API库的开发简介
[size=14.6667px]在编写这个插件的过程中,我本来是打算只是将它做成一个可以独立运作的程序,但因为我本人以往都在做Bukkit与Bungee插件的开发,所以我还是让它可以在bungecord、spigot和bukkit服务器上运作,这可能没有什么实际作用,但毕竟林子一大什么鸟都能有(例如可以做一个不需要通过BungeeCord来获取子服务器在线人数的插件 [滑稽])。
[size=14.6667px]
这个API库能做什么?
[size=14.6667px]
[size=14.6667px]
这个API库支持哪些功能?
[size=14.6667px]

效果图:

开发者食用的API与方法列表:
studio.trc.minecraft.serverpinglib.API.MCServerSocket: 操控服务器的连接
方法列表:
[size=14.6667px][size=14.6667px]
studio.trc.minecraft.serverpinglib.API.MCServerStatus: 获取目标服务器的各个信息
[size=14.6667px]方法列表:
[size=14.6667px][size=14.6667px]
studio.trc.minecraft.serverpinglib.API.MCServerSample: 获取服务器样品(所以说sample应该翻译成什么比较好呢)
方法列表:
[size=14.6667px]
studio.trc.minecraft.serverpinglib.[size=14.6667px]API.MCServerModInfo: 获取服务器模组信息
方法列表:
[size=14.6667px]
studio.trc.minecraft.serverpinglib.API.MCServerMotd: 获取服务器的MOTD信息
方法列表:
[size=14.6667px]
studio.trc.minecraft.serverpinglib.[size=14.6667px]API.MCServerMotd: 获取服务器的图标
方法列表:
[size=14.6667px][size=14.6667px]
[size=14.6667px]

示例代码
[size=14.6667px][size=14.6667px]

[size=14.6667px]在上述代码中,play.trc-studio.com是我服务器的IP地址(别说我恶意宣传,我在mcbbs有自己的服务器宣传贴)。可以使用其他服务器的IP地址代替它并获取它们的信息。
[size=14.6667px]PS:建议不要在主线程中使用MCServerSocket.getInstance()方法。如果目标服务器连接时间过长,可能会导致主线程长时间不响应,甚至造成其他不必要的后果。
代码执行后输出的结果:
[size=14.6667px]
[size=14.6667px]
[size=14.6667px]其他类简介:
[size=14.6667px]ProtocolNumber: 操控协议号码
[size=14.6667px]ProtocolVersion: 协议版本的枚举常量列表
[size=14.6667px]ProtocolPacket: 协议包信息
[size=14.6667px]Encoding: 操控返回流的字符编码
[size=14.6667px]

[size=14.6667px]在编写这个插件的过程中,我本来是打算只是将它做成一个可以独立运作的程序,但因为我本人以往都在做Bukkit与Bungee插件的开发,所以我还是让它可以在bungecord、spigot和bukkit服务器上运作,这可能没有什么实际作用,但毕竟林子一大什么鸟都能有(例如可以做一个不需要通过BungeeCord来获取子服务器在线人数的插件 [滑稽])。
[size=14.6667px]
这个API库能做什么?
[size=14.6667px]
这个API库可以伪造一道假的协议连接,直接读取指定IP地址的Minecraft服务器的信息,而不需要通过Minecraft客户端,并且它可以独立运作,开发者可以导入到IDE库内并直接使用其API。
[size=14.6667px]
[size=14.6667px]
这个API库支持哪些功能?
[size=14.6667px]

效果图:
查询Hypixel的信息(来自插件TRCStudioServerTeleport 基于API库编写的跨服插件)

查询EarthMC服务器的信息(国外著名的正版小游戏服务器,主要是给各位看看SRV解析的效果 [原IP地址earthmc.net])

查询Badlion服务器的信息(已关闭的国外正版PVP服务器,给各位看看上边说的“样品”指的是什么)


更多的请看下边介绍

开发者食用的API与方法列表:
studio.trc.minecraft.serverpinglib.API.MCServerSocket: 操控服务器的连接
方法列表:
[size=14.6667px][size=14.6667px]
[size=14.6667px]
studio.trc.minecraft.serverpinglib.API.MCServerStatus: 获取目标服务器的各个信息
[size=14.6667px]方法列表:
[size=14.6667px][size=14.6667px]
[size=14.6667px]
studio.trc.minecraft.serverpinglib.API.MCServerSample: 获取服务器样品(所以说sample应该翻译成什么比较好呢)
方法列表:
[size=14.6667px]
[size=14.6667px]
studio.trc.minecraft.serverpinglib.[size=14.6667px]API.MCServerModInfo: 获取服务器模组信息
方法列表:
[size=14.6667px]
[size=14.6667px]
studio.trc.minecraft.serverpinglib.API.MCServerMotd: 获取服务器的MOTD信息
方法列表:
[size=14.6667px]
[size=14.6667px]
[size=14.6667px][size=14.6667px]
studio.trc.minecraft.serverpinglib.[size=14.6667px]API.MCServerMotd: 获取服务器的图标
方法列表:
[size=14.6667px][size=14.6667px]
[size=14.6667px]
[size=14.6667px]

示例代码
[size=14.6667px][size=14.6667px]
public static void main(String[] args) {
MCServerSocket socket = MCServerSocket.getInstance("play.trc-studio.com", 25565);
if (socket == null) {
System.out.println("无法连接到服务器!");
return;
}
MCServerStatus status = socket.getStatus(ProtocolVersion.v1_8_X);
if (!status.isMCServer()) {
System.out.println("这不是一个MineCraft服务器.");
return;
}
System.out.println("服务器IP: " + socket.getIP() + ":" + socket.getPort());
System.out.println("是否使用SRV域名解析: " + socket.isSRVDomainName());
System.out.println("服务器版本: " + status.getVersion());
System.out.println("你的协议号码: " + status.getProtocolNumber());
System.out.println("目标服务器的协议号码: " + status.getServerProtocolNumber());
System.out.println("协议版本: " + status.getProtocolVersion());
System.out.println("是否支持当前协议的客户端进入服务器: " + status.supportVersion());
System.out.println("最大在线人数: " + status.getMaxPlayers());
System.out.println("当前在线人数: " + status.getOnlinePlayers());
if (status.getSample().hasSample()) { //是否存在样品
System.out.println("样品列表: ");
for (SampleText st : status.getSample().getSampleList()) {
System.out.println(st.getName()); //只获取样品的名字或内容
}
}
System.out.println("MOTD: ");
System.out.println(status.getMotd().getLine1MotdText()); //第一行MOTD
System.out.println(status.getMotd().getLine2MotdText()); //第二行MOTD
if (status.getIcon().hasServerIcon()) { //服务器是否拥有图标
status.getIcon().saveImageFile("E:/程序用/TRCStudio.png"); //保存图标文件到 E:/程序用/TRCStudio.png
System.out.println("已保存服务器图标到 E:/程序用/TRCStudio.png");
}
if (status.getModInfo().hasModInfo()) { //是否拥有模组信息
if (status.getModInfo().hasMod()) { //是否安装了模组
System.out.println("Mods");
for (MCMod mods : status.getModInfo().getModList()) {
System.out.println(mods.getModId() + ", v" + mods.getVersion()); //输出模组信息, 格式为“模组ID, v版本号”
}
}
}
}
[size=14.6667px][size=14.6667px][size=14.6667px]

[size=14.6667px]在上述代码中,play.trc-studio.com是我服务器的IP地址(别说我恶意宣传,我在mcbbs有自己的服务器宣传贴)。可以使用其他服务器的IP地址代替它并获取它们的信息。
[size=14.6667px]PS:建议不要在主线程中使用MCServerSocket.getInstance()方法。如果目标服务器连接时间过长,可能会导致主线程长时间不响应,甚至造成其他不必要的后果。
代码执行后输出的结果:
[size=14.6667px]
服务器IP: play.trc-studio.com:25565
是否使用SRV域名解析: false
服务器版本: TRCStudio 1.7.x-1.14.x
你的协议号码: 47
目标服务器的协议号码: 47
协议版本: 1.8.X
是否支持当前协议的客户端进入服务器: true
最大在线人数: 2048
当前在线人数: 27
MOTD:
=> TRC Studio 国际 | 1.7.2 - 1.15 <=
[!] 生存服玩家小镇计划进行中! 传送点/res tp csz(广告)
已保存服务器图标到 E:/程序用/TRCStudio.png
服务器图标保存的效果:

[size=14.6667px]
[size=14.6667px]
[size=14.6667px]其他类简介:
[size=14.6667px]ProtocolNumber: 操控协议号码
[size=14.6667px]ProtocolVersion: 协议版本的枚举常量列表
[size=14.6667px]ProtocolPacket: 协议包信息
[size=14.6667px]Encoding: 操控返回流的字符编码
[size=14.6667px]

本插件所用所有代码均为原创,不存在借用/抄袭等行为
这个API库的开发简介
[size=14.6667px]在编写这个插件的过程中,我本来是打算只是将它做成一个可以独立运作的程序,但因为我本人以往都在做Bukkit与Bungee插件的开发,所以我还是让它可以在bungecord、spigot和bukkit服务器上运作,这可能没有什么实际作用,但毕竟林子一大什么鸟都能有(例如可以做一个不需要通过BungeeCord来获取子服务器在线人数的插件 [滑稽])。
[size=14.6667px]

这个API库能做什么?
[size=14.6667px]
[size=14.6667px]

这个API库支持哪些功能?
[size=14.6667px]

效果图:

开发者食用的API与方法列表:
studio.trc.minecraft.serverpinglib.API.MCServerSocket: 操控服务器的连接
方法列表:
[size=14.6667px][size=14.6667px]
studio.trc.minecraft.serverpinglib.API.MCServerStatus: 获取目标服务器的各个信息
[size=14.6667px]方法列表:
[size=14.6667px][size=14.6667px]
studio.trc.minecraft.serverpinglib.API.MCServerSample: 获取服务器样品(所以说sample应该翻译成什么比较好呢)
方法列表:
[size=14.6667px]
studio.trc.minecraft.serverpinglib.[size=14.6667px]API.MCServerModInfo: 获取服务器模组信息
方法列表:
[size=14.6667px]
studio.trc.minecraft.serverpinglib.API.MCServerMotd: 获取服务器的MOTD信息
方法列表:
[size=14.6667px]
studio.trc.minecraft.serverpinglib.[size=14.6667px]API.MCServerMotd: 获取服务器的图标
方法列表:
[size=14.6667px][size=14.6667px]
[size=14.6667px]

示例代码
[size=14.6667px][size=14.6667px]
[size=14.6667px]

[size=14.6667px]在上述代码中,play.trc-studio.com是我服务器的IP地址(别说我恶意宣传,我在mcbbs有自己的服务器宣传贴)。可以使用其他服务器的IP地址代替它并获取它们的信息。
[size=14.6667px]PS:建议不要在主线程中使用MCServerSocket.getInstance()方法。如果目标服务器连接时间过长,可能会导致主线程长时间不响应,甚至造成其他不必要的后果。
代码执行后输出的结果:
[size=14.6667px]
[size=14.6667px]
[size=14.6667px]其他类简介:
[size=14.6667px]ProtocolNumber: 操控协议号码
[size=14.6667px]ProtocolVersion: 协议版本的枚举常量列表
[size=14.6667px]ProtocolPacket: 协议包信息
[size=14.6667px]Encoding: 操控返回流的字符编码
[size=14.6667px]

本插件所用所有代码均为原创,不存在借用/抄袭等行为
2021.12 数据,可能有更多内容
这个API库的开发简介[size=14.6667px]在编写这个插件的过程中,我本来是打算只是将它做成一个可以独立运作的程序,但因为我本人以往都在做Bukkit与Bungee插件的开发,所以我还是让它可以在bungecord、spigot和bukkit服务器上运作,这可能没有什么实际作用,但毕竟林子一大什么鸟都能有(例如可以做一个不需要通过BungeeCord来获取子服务器在线人数的插件 [滑稽])。
[size=14.6667px]

这个API库能做什么?
[size=14.6667px]
这个API库可以伪造一道假的协议连接,直接读取指定IP地址的Minecraft服务器的信息,而不需要通过Minecraft客户端,并且它可以独立运作,开发者可以导入到IDE库内并直接使用其API。
[size=14.6667px]
[size=14.6667px]

这个API库支持哪些功能?
[size=14.6667px]
- 支持使用在目标为 MineCraft 1.7.2 - 1.15 (或者更高的版本,等待慢慢更新)的服务器上
- 支持读取服务器的MOTD信息
- 支持使用在域名为SRV解析的服务器
- 支持读取最基本的信息(在线人数、最大在线、服务器版本、核心信息等)
- 支持获取目标服务器的模组列表与他们的版本(需要目标服务器本身支持安装Mod)
- 支持获取目标服务器的样本(Samples,这个我实在不知道应该翻译成什么,至于这是什么东西请看下边的截图)
- 支持获取目标服务器的图标,并且可以将它保存到本地目录上(效果请看下边截图)
- 在读取文字类信息的时候,不会丢失彩色字体效果
- 可自定义流的字符编码(默认UTF-8,能显示中文)

效果图:
查询Hypixel的信息(来自插件TRCStudioServerTeleport 基于API库编写的跨服插件)

查询EarthMC服务器的信息(国外著名的正版小游戏服务器,主要是给各位看看SRV解析的效果 [原IP地址earthmc.net])

查询Badlion服务器的信息(已关闭的国外正版PVP服务器,给各位看看上边说的“样品”指的是什么)


更多的请看下边介绍

开发者食用的API与方法列表:
studio.trc.minecraft.serverpinglib.API.MCServerSocket: 操控服务器的连接
方法列表:
[size=14.6667px][size=14.6667px]
[size=14.6667px]
- public String getIP() 获取IP地址
- public int getPort() 获取端口
- public boolean isOnline() 目标服务器是否在线
- public boolean isSRVDomainName() 目标服务器的域名地址是否使用了SRV解析
- public MCServerStatus getStatus() 获取MCServerStatus实例
- public MCServerStatus getStatus(ProtocolVersion version) 使用指定协议版本获取MCServerStatus实例
- public Socket getSocket() 获取Socket类实例
- public static MCServerSocket getInstance(String ip, int port, int timeout) 连接到服务器
- public static MCServerSocket getInstance(String ip, int port) 同上
studio.trc.minecraft.serverpinglib.API.MCServerStatus: 获取目标服务器的各个信息
[size=14.6667px]方法列表:
[size=14.6667px][size=14.6667px]
[size=14.6667px]
- public int getMaxPlayers() 获取最大在线人数
- public int getOnlinePlayers() 获取当前在线人数
- public int getServerProtocolNumber() 获取服务器协议号
- public int getProtocolNumber() 获取你所使用的协议号(这取决于getStatus()时括号中填写的协议,若填无即为最新版本)
- public String getVersion() 获取服务器版本
- public String getProtocolVersion() 获取你的协议版本
- public String getStringJson() 获取服务器Json信息
- public MCServerModInfo getModInfo() 获取MCServerModInfo实例
- public MCServerMotd getMotd() 获取MCServerMotd实例
- public MCServerSample getSample() 获取MCServerSample实例
- public MCServerIcon getIcon() 获取MCServerIcon实例
- public boolean isMCServer() 目标服务器是否为MC服务器
- public boolean supportVersion() 若使用与连接协议版本一致的客户端能否进入该服务器
- public static MCServerStatus getStatus(MCServerSocket mcsocket) 获取实例
- public static MCServerStatus getStatus(MCServerSocket mcsocket, ProtocolVersion version) 使用指定版本获取协议
studio.trc.minecraft.serverpinglib.API.MCServerSample: 获取服务器样品(所以说sample应该翻译成什么比较好呢)
方法列表:
[size=14.6667px]
[size=14.6667px]
- public List<SampleText> getSampleList() 获取样品集合实例
- public boolean hasSample() 是否拥有样本
- 内部类
- SampleText:
- public String getID() 获取样本的UUID
- public String getName() 获取样本的内容或名字
- public String get(SampleEnum object) (SampleEnum是一个枚举类,里边有两个枚举选项 ID和NAME)获取指定样品目标信息
- public String getColorID() 同上获取UUID,但保留彩色字体
- public String getColorName() 同上获取内容或名字,保留彩色字体
- public String getColor(SampleEnum object) 同上...
studio.trc.minecraft.serverpinglib.[size=14.6667px]API.MCServerModInfo: 获取服务器模组信息
方法列表:
[size=14.6667px]
[size=14.6667px]
- public boolean hasModInfo() 目标服务器是否存在模组信息(目标是Bungee服务器的话会返回true,但不一定有模组)
- public boolean hasMod() 目标服务器是否安装了模组
- public String getModType() 获取模组Json信息
- public List<MCMod> getModList() 获取MCMod的实例列表
- 内部类:
- MCMod:
- public String getVersion() 获取模组的版本
- public String getModId() 获取模组的名字 & ID
studio.trc.minecraft.serverpinglib.API.MCServerMotd: 获取服务器的MOTD信息
方法列表:
[size=14.6667px]
[size=14.6667px]
- public String getMotdText() 获取服务器的MOTD(包含换行符号)
- public String getColorMotdText() 获取服务器的MOTD(保留彩色字体)
- public String getLine1MotdText() 获取服务器第一行MOTD
- public String getLine2MotdText() 获取服务器第二行MOTD
- public String getLine1ColorMotd() 同上,保留彩色字体
- public String getLine2ColorMotd() 同上,保留彩色字体(人类本质[确信])
[size=14.6667px][size=14.6667px]
studio.trc.minecraft.serverpinglib.[size=14.6667px]API.MCServerMotd: 获取服务器的图标
方法列表:
[size=14.6667px][size=14.6667px]
[size=14.6667px]
- public void saveImageFile(File file) 将图标保存到本地(如果文件不存在,将自动创建)
- public void saveImageFile(String path) 同上,但这里是直接填写文件地址的
- public boolean hasServerIcon() 是否存在服务器图标
- public String getBase64Image() 获取Base64格式的服务器图标信息
- public byte[] getImageBytes() 获取图标的字节组
[size=14.6667px]

示例代码
[size=14.6667px][size=14.6667px]
public static void main(String[] args) {
MCServerSocket socket = MCServerSocket.getInstance("play.trc-studio.com", 25565);
if (socket == null) {
System.out.println("无法连接到服务器!");
return;
}
MCServerStatus status = socket.getStatus(ProtocolVersion.v1_8_X);
if (!status.isMCServer()) {
System.out.println("这不是一个MineCraft服务器.");
return;
}
System.out.println("服务器IP: " + socket.getIP() + ":" + socket.getPort());
System.out.println("是否使用SRV域名解析: " + socket.isSRVDomainName());
System.out.println("服务器版本: " + status.getVersion());
System.out.println("你的协议号码: " + status.getProtocolNumber());
System.out.println("目标服务器的协议号码: " + status.getServerProtocolNumber());
System.out.println("协议版本: " + status.getProtocolVersion());
System.out.println("是否支持当前协议的客户端进入服务器: " + status.supportVersion());
System.out.println("最大在线人数: " + status.getMaxPlayers());
System.out.println("当前在线人数: " + status.getOnlinePlayers());
if (status.getSample().hasSample()) { //是否存在样品
System.out.println("样品列表: ");
for (SampleText st : status.getSample().getSampleList()) {
System.out.println(st.getName()); //只获取样品的名字或内容
}
}
System.out.println("MOTD: ");
System.out.println(status.getMotd().getLine1MotdText()); //第一行MOTD
System.out.println(status.getMotd().getLine2MotdText()); //第二行MOTD
if (status.getIcon().hasServerIcon()) { //服务器是否拥有图标
status.getIcon().saveImageFile("E:/程序用/TRCStudio.png"); //保存图标文件到 E:/程序用/TRCStudio.png
System.out.println("已保存服务器图标到 E:/程序用/TRCStudio.png");
}
if (status.getModInfo().hasModInfo()) { //是否拥有模组信息
if (status.getModInfo().hasMod()) { //是否安装了模组
System.out.println("Mods");
for (MCMod mods : status.getModInfo().getModList()) {
System.out.println(mods.getModId() + ", v" + mods.getVersion()); //输出模组信息, 格式为“模组ID, v版本号”
}
}
}
}
[size=14.6667px][size=14.6667px][size=14.6667px]

[size=14.6667px]在上述代码中,play.trc-studio.com是我服务器的IP地址(别说我恶意宣传,我在mcbbs有自己的服务器宣传贴)。可以使用其他服务器的IP地址代替它并获取它们的信息。
[size=14.6667px]PS:建议不要在主线程中使用MCServerSocket.getInstance()方法。如果目标服务器连接时间过长,可能会导致主线程长时间不响应,甚至造成其他不必要的后果。
代码执行后输出的结果:
[size=14.6667px]
服务器IP: play.trc-studio.com:25565
是否使用SRV域名解析: false
服务器版本: TRCStudio 1.7.x-1.14.x
你的协议号码: 47
目标服务器的协议号码: 47
协议版本: 1.8.X
是否支持当前协议的客户端进入服务器: true
最大在线人数: 2048
当前在线人数: 27
MOTD:
=> TRC Studio 国际 | 1.7.2 - 1.15 <=
[!] 生存服玩家小镇计划进行中! 传送点/res tp csz(广告)
已保存服务器图标到 E:/程序用/TRCStudio.png
服务器图标保存的效果:

[size=14.6667px]
[size=14.6667px]
[size=14.6667px]其他类简介:
[size=14.6667px]ProtocolNumber: 操控协议号码
[size=14.6667px]ProtocolVersion: 协议版本的枚举常量列表
[size=14.6667px]ProtocolPacket: 协议包信息
[size=14.6667px]Encoding: 操控返回流的字符编码
[size=14.6667px]

本插件所用所有代码均为原创,不存在借用/抄袭等行为
为什么排版又乱了,还出现了一大堆编辑帖子时不存在的代码

不会制作插件 但还是支持一下
更新至1.1.0版本
怎么没有找到下载地址呢?
很不错的插件
能不能把下载文件直接放在mcbbs呢。。。。。。去外网都进不去
感谢楼主的
分享
分享
请问这个可以用php网页调用显示在线人数吗?
Aurora211 发表于 2020-6-30 10:13
请问这个可以用php网页调用显示在线人数吗?
可以,前提是你能配合得好
感谢楼主分享
与LuckPerms冲突。
这么好的插件这么不能支持一下哒
1.16.4完美支持
支持,就想要这样的插件!
mcbbs有你更精彩 谢谢作者