和版本有关的方法貌似只有Server.getBukkitVersion(),但是不知道怎么用,而且javadocs里也没有注释说怎么判断版本(这个方法居然返回的是个String)
想起Slimefun里有判断版本的代码
但是貌似比较长
而且调用了CSCoreLib2的反射类= =
为了判断一个服务器版本而添加一个CSCoreLib显然不现实
paper端里貌似有个Server.getVersion()方法(也返回String);原文如下:
@NotNull
@NotNull String getBukkitVersion?()
Gets the Bukkit version that this server is running.
Returns:
version of Bukkit
但是貌似比较长
而且调用了CSCoreLib2的反射类= =
为了判断一个服务器版本而添加一个CSCoreLib显然不现实
paper端里貌似有个Server.getVersion()方法(也返回String);原文如下:
@NotNull
@NotNull String getVersion()
Gets the version string of this server implementation.
Returns:
version of this server implementation
返回字符串有什么问题吗?不然还能给你个整数不成
现在一般都采用这个
version = org.bukkit.Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
可以得到 1_15_R1 这样的字符串
主要是用来反射OBC或者NMS的类
version = org.bukkit.Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
可以得到 1_15_R1 这样的字符串
主要是用来反射OBC或者NMS的类
简单点可以直接使用你说的两种办法 然后用contains("1.12")这种方法来判断版本
用起来比较简单
用起来比较简单
至少我是这么做的(别打我)
复制代码
- String version = Bukkit.getServer().getVersion();
 
- Boolean a;                                   
 
 
- if(version.contains("1.9")||version.contains("1.10")||version.contains("1.11")||version.contains("1.12")||version.contains("1.13")||version.contains("1.14")||version.contains("1.15"))
 
- a=true;
 
- else
 
- a=false;
如果是获取mc版本的话可以考虑使用ProtocolLib前置,方便实用(而且大部分服务器都有安装此插件)
如果不方便前置插件的话可以直接copy一下pl用的正则
复制代码
使用
复制代码
即可提取版本号
当然这样简单粗暴没办法判断快照/开发版本,而且比较版本号也不方便,需要判断快照版本或者比较版本号的话可以使用ProtocolLib作为前置,或者抄pl的com.comphenix.protocol.utility.MinecraftVersion类的代码(并在发布时注明代码来源)
如果不方便前置插件的话可以直接copy一下pl用的正则
- .*\\(.*MC.\\s*([a-zA-z0-9\\-\\.]+)\\s*\\)
使用
- pattern.matcher(version).group(1)
即可提取版本号
当然这样简单粗暴没办法判断快照/开发版本,而且比较版本号也不方便,需要判断快照版本或者比较版本号的话可以使用ProtocolLib作为前置,或者抄pl的com.comphenix.protocol.utility.MinecraftVersion类的代码(并在发布时注明代码来源)