跳到主要内容

[其四] 同时支持Spigot与Folia

这里记录了一些杂乱的事项,也许对你的开发有用!

同时支持Spigot与Folia

由于FoliaAPI是基于BukkitAPI的,理论上你也可以写出一个同时支持Folia与Spigot服务端的插件,只需要包装对应的方法即可。

基本思路是判断服务端类型,比如反射Folia特有的类:io.papermc.paper.threadedregions.RegionizedServerInitEvent,然后在工具类中执行不同的代码。

这里的代码是我的一个简单实现,我尝试包装了FoliaAPI和BukkitAPI中的调度等API。代码仅供参考!由于Folia服务端可能有很多修改,请尽量不要直接使用,或者请自行打包到自己的源代码中。

大部分所有的用法都在FoliaLibAPI中, 你需要new FoliaLibAPI(plugin) 中间填入你自己的插件实例。

然后通过不同参数的getScheduler。 不同的传入参数,Bukkit中是没有任何区别的,只有在Folia会有区别。

传入Location会以REGION调度,传入Entity会以Entity调度,传入isGlobal=true会以Global调度,如果为空则会以ASYNC方式调度。

当然也有kotlin版本()

不用中央仓库形式发布是希望大家都能仔细看看写出自己的内容加深了解(我信了)

支持Java8

既然支持了Spigot,由于编译Folia插件需要使用Java17,如果你在Java8环境中加载时抛出了java.lang.UnsupportedClassVersionError,那么你需要注意在pom.xml配置里maven-compiler-plugin的source和target是否为1.8。

            <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>

bstats

在使用过程中发现bstats也使用了BukkitAPI中的调度程序,因此需要对bstats也进行一些更改。

所以选择直接复制一个java下来:bstats-metrics 修改191行, Bukkit.getScheduler().runTask(plugin, this::submitData);

使用上文中AsyncScheduler替代之!