很多人开发过程的调用了ForgeApi的插件,1.12.2和1.16.5就算用了多模块进行开发也是每个版本各一个插件
没办法实现那种一个插件直接兼容两个版本的服务端,下面就是教大家整一个能实现一个插件多个版本的服务
端均可试用的forge插件(或许你已经有方法了,不过应该不在开发上有很多不便的地方吧~)
操作过程只需要有一个能多版本forge开发的gradle项目 -- 前往白老板的教程
理论是直接用父项目用 compileOnly project(path: '子模块名')来导入子模块做父项目依赖
不够这样构建的时候就必须给父项目配置对版本的forge依赖,由于子模块有2个不同版本的
forge依赖,所以这个方法不现实.其他的比较偏的方法虽然可以导入子模块的类做依赖,构建
也能构建可是开发过程中修改了代码后多半都需要让子模块构建一次,这样很是麻烦,而上面
说的导入依赖的方法却能实现实时更新,且构建上也会按照需要的情况下去自动构建子模块
以下主要就是解决这个问题
正式开始:
一、导入依赖
按理说按照白老板的教程的话会有v12 v16 common3个子模块,而插件主类在v12 和 v16
父项目则几乎没有什么需要的内容
而按照我的来的话则主类代码都在父项目中,v12 v16用来些对应版本的一些调用处理,common的有着所有子模块和项目能用的代码
修改父项目build.gradle:
将父项目中的dependencies{}块改成这样
这样的写就能实现类似导入project的效果了,上部分是在构建的时候用的(因为如果只用下部分导入的话构建过程中会提示找不到类)
下部分用来实现实时更新,这样就不需要在写代码的时候给子模块内代码添加代码块后需要手动构建一次了(只写上部分的话,如果你不构建子模块就不能用)
二、控制打包结果
如果你对shadowJar更加熟悉就自己配置把
以下是直接使用jar块将需要的内容打包到jar内
给父项目的build.gradle内添加jar{}块的代码(位置随意):
这段只是将子模块所有构建出来的东西一起打包了而已
三、构建顺序配置
如果父项目在子模块前构建可能会导致一些报错,不过可以确定的是绝对没办法将子模块构建出来的内容打包走
所以还需要添加一些点点内(随意加在如何位置(代码块内除外)):
第一第二条是用来让父项目的配置被评估之前评估(简单理解就是线去处理子模块的配置(效果:你在forge开发中构建的时候就会出现对应版本的mcp什么的内容,这些内容会出现在父项目开始构建之前))
最后一条是确保父项目构建之前就构建好子模块(其实加了这条后上面两条就不需要了的)
最后你就可以愉快的在父项目中进行插件的开发了,记得导入spigot/bukkit依赖.
构建的时候直接build就完事了。注意区分代码
一个用了这种方式所插件项目:
其他:
有更好的处理可以评论分享
没办法实现那种一个插件直接兼容两个版本的服务端,下面就是教大家整一个能实现一个插件多个版本的服务
端均可试用的forge插件(或许你已经有方法了,不过应该不在开发上有很多不便的地方吧~)
操作过程只需要有一个能多版本forge开发的gradle项目 -- 前往白老板的教程
理论是直接用父项目用 compileOnly project(path: '子模块名')来导入子模块做父项目依赖
不够这样构建的时候就必须给父项目配置对版本的forge依赖,由于子模块有2个不同版本的
forge依赖,所以这个方法不现实.其他的比较偏的方法虽然可以导入子模块的类做依赖,构建
也能构建可是开发过程中修改了代码后多半都需要让子模块构建一次,这样很是麻烦,而上面
说的导入依赖的方法却能实现实时更新,且构建上也会按照需要的情况下去自动构建子模块
以下主要就是解决这个问题
正式开始:
一、导入依赖
按理说按照白老板的教程的话会有v12 v16 common3个子模块,而插件主类在v12 和 v16
父项目则几乎没有什么需要的内容
而按照我的来的话则主类代码都在父项目中,v12 v16用来些对应版本的一些调用处理,common的有着所有子模块和项目能用的代码
修改父项目build.gradle:
将父项目中的dependencies{}块改成这样
代码:
dependencies {
implementation project(path: ':common') #common内不需要forge所以直接用这种导入就好
implementation project(':v1_12_2').sourceSets.main.output #导入输出的class的这个主要是在用于构建的时候所需(与下面的配置一起)
implementation project(':v1_16_5').sourceSets.main.output
compileOnly fileTree(dir: 'v1_12_2/src/main/java', include: '**/*.java') #导入子模块中的java文件做依赖(实现开发过程中修改了子模块后父项目中引用的时候实时更新\配合上面一起)
compileOnly fileTree(dir: 'v1_16_5/src/main/java', include: '**/*.java')
}
下部分用来实现实时更新,这样就不需要在写代码的时候给子模块内代码添加代码块后需要手动构建一次了(只写上部分的话,如果你不构建子模块就不能用)
二、控制打包结果
如果你对shadowJar更加熟悉就自己配置把
以下是直接使用jar块将需要的内容打包到jar内
给父项目的build.gradle内添加jar{}块的代码(位置随意):
代码:
jar {
from project(':v1_12_2').sourceSets.main.output
from project(':v1_12_2').sourceSets.main.resources
from project(':common').sourceSets.main.output
from project(':common').sourceSets.main.resources
from project(':v1_16_5').sourceSets.main.output
from project(':v1_16_5').sourceSets.main.resources
}
这段只是将子模块所有构建出来的东西一起打包了而已
三、构建顺序配置
如果父项目在子模块前构建可能会导致一些报错,不过可以确定的是绝对没办法将子模块构建出来的内容打包走
所以还需要添加一些点点内(随意加在如何位置(代码块内除外)):
代码:
project(":v1_12_2").evaluationDependsOnChildren()
project(":v1_16_5").evaluationDependsOnChildren()
compileJava.dependsOn(':v1_12_2:build', ':v1_16_5:build')
最后一条是确保父项目构建之前就构建好子模块(其实加了这条后上面两条就不需要了的)
最后你就可以愉快的在父项目中进行插件的开发了,记得导入spigot/bukkit依赖.
构建的时候直接build就完事了。注意区分代码
一个用了这种方式所插件项目:
其他:
有更好的处理可以评论分享