如题,
写插件时发现只兼容一个版本会不会不够适用
查了相关的帖子,但还是不太清楚是个什么原理,是怎么来的
(有是有教程,但大部分都是干讲原理,能给些实例就好)
写插件时发现只兼容一个版本会不会不够适用
查了相关的帖子,但还是不太清楚是个什么原理,是怎么来的
(有是有教程,但大部分都是干讲原理,能给些实例就好)
导入对应版本的bukkit/spigot/paper的api进行开发,通过getversion好像,获得服务器版本对一些版本有差异的代码分别编写。应该
我这个插件可能可以作为一个例子
它在没有引入任何外部Json库的情况下实现了Json解析
相关代码
复制代码
它在没有引入任何外部Json库的情况下实现了Json解析
相关代码
- if (Bukkit.getBukkitVersion().compareTo("1.14") >= 0) {
- gson = true;
- }
Bukkit的个版本API都具有一定的相似性,就比如我最近在开发的一个小插件,使用的1.12.2的api进行开发,而1.13,1.14,1.15的API也涵盖了我开发插件中使用到的api,所以也可以在那些服务端上完美运行。我的一个跨版本兼容解决方案就是在编写完一段功能代码后,替换(降级或升级)当前API版本,看代码能否正常打包,相应的API是否兼容存在,不存在可以通过判断Bukkit当前版本书些不同版本的解决代码。我也是刚开始做开发的,可能说的不太到位。
本帖最后由 BlessAzek 于 2023-1-27 20:11 编辑
嗯。。。一般来说只要使用通用的接口(指在任何版本下都存在的接口)
就没什么大问题
当然也有特例
就拿 1.16+ 版本中的 RGB 颜色举个例子吧
在 1.16+ 版本的 Spigot 服务器核心中,ChatColor(位于 net.md_5.api.chat 包中的类)类里面有一个 of(Color) 方法,
在低于 1.16 版本的服务器核心中是没有这个方法的
因此在调用这个方法之前应该首先去判断一下服务器版本是否在 1.16 以上,
然后去调用这个方法
例子:
复制代码
对于1.16及以下的版本,如果使用了 rgb 颜色,或许你需要将其转换成与原版最接近的颜色。
(相关例子可以见我的这个插件开源地址)
对于各个版本中不存在的类(指 1.12 中有这个类,但是更新的版本或者更老的版本中没有了)
应当将其封装成一个 class 以防止报 ClassNotFoundException
例子:
复制代码
这样我们就把 新(老) 版本中的才有的 Class 给封装到了一个类中。
调用例子:
复制代码
嗯。。。一般来说只要使用通用的接口(指在任何版本下都存在的接口)
就没什么大问题
当然也有特例
就拿 1.16+ 版本中的 RGB 颜色举个例子吧
在 1.16+ 版本的 Spigot 服务器核心中,ChatColor(位于 net.md_5.api.chat 包中的类)类里面有一个 of(Color) 方法,
在低于 1.16 版本的服务器核心中是没有这个方法的
因此在调用这个方法之前应该首先去判断一下服务器版本是否在 1.16 以上,
然后去调用这个方法
例子:
- String str = "";
- // true 代表服务器版本在 1.16+
- if (true) {
- str += ChatColor.of(new Color(0xFF00FF)) + "RGB 颜色";
- } else {
- str += ChatColor.BLACK + "版本低于了 1.16"
- }
对于1.16及以下的版本,如果使用了 rgb 颜色,或许你需要将其转换成与原版最接近的颜色。
(相关例子可以见我的这个插件开源地址)
对于各个版本中不存在的类(指 1.12 中有这个类,但是更新的版本或者更老的版本中没有了)
应当将其封装成一个 class 以防止报 ClassNotFoundException
例子:
- // 示例用 class
- public class TestClass {
- public static void test() {
- // 假设我们服务器版本在 1.12 及以上才有了 Player 类
- // 注意是假设(不要刚((
- Player p = Bukkit.getPlayer();
- // do something...
- }
- }
这样我们就把 新(老) 版本中的才有的 Class 给封装到了一个类中。
调用例子:
- //...
- // true 代表服务器版本在 1.12+
- if (true) {
- TestClass.test();
- } else {
- // do something
- }
本帖最后由 烂柯人beta 于 2023-1-27 21:44 编辑
可以参考下这个
https://www.mcbbs.net/forum.php?mod=viewthread&tid=1414777&page=1#pid27848926
可以参考下这个
https://www.mcbbs.net/forum.php?mod=viewthread&tid=1414777&page=1#pid27848926