TRCStudioDean
本帖最后由 迪安小弱渣 于 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]


[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,能显示中文)
[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]
  • 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) 同上
[size=14.6667px][size=14.6667px]


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) 使用指定版本获取协议
[size=14.6667px][size=14.6667px]


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) 同上...
[size=14.6667px][size=14.6667px]


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
[size=14.6667px][size=14.6667px]


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]

示例代码
[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]




本插件所用所有代码均为原创,不存在借用/抄袭等行为



TRCStudioDean
为什么排版又乱了,还出现了一大堆编辑帖子时不存在的代码

我觉得很淦
不会制作插件 但还是支持一下

TRCStudioDean
更新至1.1.0版本

1622784146
怎么没有找到下载地址呢?

Itsusinn
很不错的插件

战神你史哥
能不能把下载文件直接放在mcbbs呢。。。。。。去外网都进不去

2722008080
感谢楼主的
分享

Aurora211
请问这个可以用php网页调用显示在线人数吗?

TRCStudioDean
Aurora211 发表于 2020-6-30 10:13
请问这个可以用php网页调用显示在线人数吗?

可以,前提是你能配合得好

南桥南阳
感谢楼主分享

ml0834666
与LuckPerms冲突。

345308145
这么好的插件这么不能支持一下哒

1091692594
1.16.4完美支持

brealid
支持,就想要这样的插件!

_juhua_
mcbbs有你更精彩 谢谢作者

第一页 上一页 下一页 最后一页