315 lines
13 KiB
Groovy
315 lines
13 KiB
Groovy
buildscript {
|
|
repositories {
|
|
maven { url = 'https://maven.minecraftforge.net' }
|
|
maven {
|
|
url = 'https://repo.spongepowered.org/repository/maven-public/'
|
|
content { includeGroup "org.spongepowered" }
|
|
}
|
|
mavenCentral()
|
|
}
|
|
dependencies {
|
|
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
|
|
classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT'
|
|
}
|
|
}
|
|
|
|
plugins {
|
|
id "com.modrinth.minotaur" version "2.+"
|
|
// It's safest to have this on 2.+ to get the latest features and
|
|
// bug fixes without having to worry about breaking changes.
|
|
}
|
|
|
|
apply plugin: 'net.minecraftforge.gradle'
|
|
apply plugin: 'org.spongepowered.mixin'
|
|
|
|
archivesBaseName = getArtifactID("forge")
|
|
|
|
println "asdf"
|
|
|
|
// Adds KFF as dependency and Kotlin libs to the runtime classpath
|
|
// If you already know how to add the Kotlin plugin to Gradle, this is the only line you need for KFF
|
|
apply from: "https://raw.githubusercontent.com/thedarkcolour/KotlinForForge/site/thedarkcolour/kotlinforforge/gradle/kff-${kotlinForForgeVersion}.gradle"
|
|
|
|
minecraft {
|
|
mappings channel: 'official', version: minecraftVersion
|
|
accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
|
|
|
|
if (project.hasProperty('forge_ats_enabled') && project.findProperty('forge_ats_enabled').toBoolean()) {
|
|
// This location is hardcoded in Forge and can not be changed.
|
|
// https://github.com/MinecraftForge/MinecraftForge/blob/be1698bb1554f9c8fa2f58e32b9ab70bc4385e60/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFile.java#L123
|
|
accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
|
|
project.logger.debug('Forge Access Transformers are enabled for this project.')
|
|
}
|
|
|
|
runs {
|
|
client {
|
|
workingDirectory project.file('run')
|
|
ideaModule "${rootProject.name}.${project.name}.main"
|
|
property 'mixin.env.remapRefMap', 'true'
|
|
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
|
mods {
|
|
create(modID) {
|
|
source sourceSets.main
|
|
source project(":Common").sourceSets.main
|
|
}
|
|
}
|
|
}
|
|
|
|
server {
|
|
workingDirectory project.file('run')
|
|
ideaModule "${rootProject.name}.${project.name}.main"
|
|
property 'mixin.env.remapRefMap', 'true'
|
|
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
|
mods {
|
|
create(modID) {
|
|
source sourceSets.main
|
|
source project(":Common").sourceSets.main
|
|
}
|
|
}
|
|
}
|
|
|
|
// This run config launches GameTestServer and runs all registered gametests, then exits.
|
|
// By default, the server will crash when no gametests are provided.
|
|
// The gametest system is also enabled by default for other run configs under the /test command.
|
|
gameTestServer {
|
|
workingDirectory project.file('run')
|
|
ideaModule "${rootProject.name}.${project.name}.main"
|
|
property 'mixin.env.remapRefMap', 'true'
|
|
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
|
|
|
// Recommended logging data for a userdev environment
|
|
// The markers can be added/remove as needed separated by commas.
|
|
// "SCAN": For mods scan.
|
|
// "REGISTRIES": For firing of registry events.
|
|
// "REGISTRYDUMP": For getting the contents of all registries.
|
|
property 'forge.logging.markers', 'REGISTRIES'
|
|
|
|
// Recommended logging level for the console
|
|
// You can set various levels here.
|
|
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
|
|
property 'forge.logging.console.level', 'debug'
|
|
|
|
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
|
|
property 'forge.enabledGameTestNamespaces', 'hexucasting'
|
|
|
|
mods {
|
|
create(modID) {
|
|
source sourceSets.main
|
|
source sourceSets.test
|
|
source project(":Common").sourceSets.test
|
|
}
|
|
}
|
|
}
|
|
|
|
// We have to have a dummy data run to be parented from
|
|
data {}
|
|
|
|
xplatDatagen {
|
|
parent minecraft.runs.data
|
|
|
|
workingDirectory project.file('run')
|
|
ideaModule "${rootProject.name}.${project.name}.main"
|
|
args '--mod', modID, '--all', '--output', file('../Common/src/generated/resources/'), '--existing', file('../Common/src/main/resources/')
|
|
property 'mixin.env.remapRefMap', 'true'
|
|
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
|
property 'hexucasting.xplat_datagen', 'true'
|
|
mods {
|
|
create(modID) {
|
|
source sourceSets.main
|
|
source project(":Common").sourceSets.main
|
|
}
|
|
}
|
|
}
|
|
|
|
forgeDatagen {
|
|
parent minecraft.runs.data
|
|
|
|
workingDirectory project.file('run')
|
|
ideaModule "${rootProject.name}.${project.name}.main"
|
|
args '--mod', modID, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
|
|
property 'mixin.env.remapRefMap', 'true'
|
|
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
|
property 'hexucasting.forge_datagen', 'true'
|
|
mods {
|
|
create(modID) {
|
|
source sourceSets.main
|
|
source project(":Common").sourceSets.main
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
// Put repositories for dependencies here
|
|
// ForgeGradle automatically adds the Forge maven and Maven Central for you
|
|
|
|
// If you have mod jar dependencies in ./libs, you can declare them as a repository like so:
|
|
flatDir {
|
|
dir 'libs'
|
|
}
|
|
|
|
maven {
|
|
// location of the maven that hosts JEI files
|
|
name = "Progwml6 maven"
|
|
url = "https://dvs1.progwml6.com/files/maven/"
|
|
}
|
|
maven {
|
|
// location of a maven mirror for JEI files, as a fallback
|
|
name = "ModMaven"
|
|
url = "https://modmaven.dev"
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
// Specify the version of Minecraft to use. If this is any group other than 'net.minecraft', it is assumed
|
|
// that the dep is a ForgeGradle 'patcher' dependency, and its patches will be applied.
|
|
// The userdev artifact is a special name and will get all sorts of transformations applied to it.
|
|
minecraft "net.minecraftforge:forge:${minecraftVersion}-${forgeVersion}"
|
|
compileOnly project(":Common")
|
|
|
|
annotationProcessor 'org.spongepowered:mixin:0.8.5:processor'
|
|
|
|
compileOnly fg.deobf("at.petra-k.paucal:paucal-forge-$minecraftVersion:$paucalVersion")
|
|
runtimeOnly fg.deobf("at.petra-k.paucal:paucal-forge-$minecraftVersion:$paucalVersion")
|
|
compileOnly fg.deobf("${modID}:hexcasting-forge-$minecraftVersion:$hexcastingVersion")
|
|
runtimeOnly fg.deobf("${modID}:hexcasting-forge-$minecraftVersion:$hexcastingVersion")
|
|
|
|
compileOnly fg.deobf("vazkii.patchouli:Patchouli:$minecraftVersion-$patchouliVersion")
|
|
runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:$minecraftVersion-$patchouliVersion")
|
|
|
|
// Testing dependencies:
|
|
testCompileOnly project(":Common")
|
|
|
|
testAnnotationProcessor 'org.spongepowered:mixin:0.8.5:processor'
|
|
|
|
testCompileOnly fg.deobf("at.petra-k.paucal:paucal-forge-$minecraftVersion:$paucalVersion")
|
|
testRuntimeOnly fg.deobf("at.petra-k.paucal:paucal-forge-$minecraftVersion:$paucalVersion")
|
|
testCompileOnly fg.deobf("${modID}:hexcasting-forge-$minecraftVersion:$hexcastingVersion")
|
|
testRuntimeOnly fg.deobf("${modID}:hexcasting-forge-$minecraftVersion:$hexcastingVersion")
|
|
testCompileOnly fg.deobf("vazkii.patchouli:Patchouli:$minecraftVersion-$patchouliVersion")
|
|
testRuntimeOnly fg.deobf("vazkii.patchouli:Patchouli:$minecraftVersion-$patchouliVersion")
|
|
|
|
testCompileOnly 'org.junit.jupiter:junit-jupiter-api:5.9.0'
|
|
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0'
|
|
}
|
|
|
|
mixin {
|
|
add sourceSets.main, "hexucasting.mixins.refmap.json"
|
|
add sourceSets.test, "hexucasting.test.mixins.refmap.json"
|
|
config "hexucastingplat.mixins.json"
|
|
config "hexucasting_forge.mixins.json"
|
|
}
|
|
|
|
tasks.withType(JavaCompile) {
|
|
source(project(":Common").sourceSets.main.allSource)
|
|
}
|
|
compileKotlin {
|
|
source(project(":Common").sourceSets.main.kotlin)
|
|
}
|
|
compileTestKotlin {
|
|
source(project(":Common").sourceSets.test.kotlin)
|
|
}
|
|
|
|
// This task is here for debugging purposes, running it tells you what directories each sourceSet is setup to look at.
|
|
task printSourceSetInformation(){
|
|
doLast{
|
|
sourceSets.each { srcSet ->
|
|
println "["+srcSet.name+"]"
|
|
print "-->Java Source directories: "+srcSet.allJava.srcDirs+"\n"
|
|
print "-->Kotlin Source directories: "+srcSet.kotlin.srcDirs+"\n"
|
|
print "-->Resource directories: "+srcSet.resources.srcDirs+"\n"
|
|
print "-->Output directories: "+srcSet.output.classesDirs.files+"\n"
|
|
// print "-->Compile classpath:\n"
|
|
// srcSet.compileClasspath.files.each {
|
|
// print " "+it.path+"\n"
|
|
// }
|
|
println ""
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// https://discord.com/channels/313125603924639766/733055378371117127/980968358658838540
|
|
// > It won't generate a refmap if there are no changes source files
|
|
// > Since the last build
|
|
// > Gradle task execution avoidance breaks it that way
|
|
// > At one point i got it to work reliably but forcing some specific task to always run i just don't remember the syntax and which task it was
|
|
// > It might have been compileJava
|
|
build {
|
|
println "Forcing re-compile of Java to include refmap"
|
|
tasks.withType(JavaCompile) {
|
|
outputs.upToDateWhen { false }
|
|
}
|
|
compileKotlin {
|
|
outputs.upToDateWhen { false }
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
main.resources.srcDirs += ['src/generated/resources', '../Common/src/generated/resources']
|
|
test.resources.srcDirs += ['src/generated/resources', '../Common/src/generated/resources', 'src/main/resources', '../Common/src/main/resources']
|
|
main.kotlin.srcDirs += 'src/main/java'
|
|
test.kotlin.srcDirs += 'src/main/java'
|
|
}
|
|
|
|
processResources {
|
|
from project(":Common").sourceSets.main.resources
|
|
inputs.property "version", project.version
|
|
|
|
filesMatching("mods.toml") {
|
|
expand "version": project.version
|
|
}
|
|
}
|
|
|
|
processTestResources {
|
|
from project(":Common").sourceSets.test.resources
|
|
inputs.property "version", project.version
|
|
|
|
filesMatching("mods.toml") {
|
|
expand "version": project.version
|
|
}
|
|
}
|
|
|
|
def loadProperties = { filename ->
|
|
def properties = new Properties()
|
|
rootProject.file(filename).withInputStream {
|
|
properties.load(it)
|
|
}
|
|
return properties
|
|
}
|
|
|
|
/**
|
|
* To setup automatic modrinth exporting, get your API key from the modrinth website and place it in a
|
|
* file in the root project directory called keys.properties
|
|
* e.g.
|
|
* MODRINTH_TOKEN=exampletoken
|
|
* Then, uncomment the modrinth blocks in every build.gradle. When you run the modrinth build task
|
|
* in the base project task space, it will upload both Forge and Fabric versions of the mod to
|
|
* modrinth automatically, with the changelog from the changelog.md file in the base project directory.
|
|
*/
|
|
//modrinth {
|
|
// token = loadProperties("keys.properties").MODRINTH_TOKEN
|
|
// projectId = "$modID" // This can be the project ID or the slug. Either will work!
|
|
// versionNumber = "$modVersion" // You don't need to set this manually. Will fail if Modrinth has this version already
|
|
// versionName = "$modVersion-forge"
|
|
// changelog = rootProject.file("changelog.md").text
|
|
// versionType = "release" // This is the default -- can also be `beta` or `alpha`
|
|
// uploadFile = jar // With Loom, this MUST be set to `remapJar` instead of `jar`!
|
|
// gameVersions = ["1.19.2"] // Must be an array, even with only one version
|
|
// loaders = ["forge"] // Must also be an array - no need to specify this if you're using Loom or ForgeGradle
|
|
// dependencies { // A special DSL for creating dependencies
|
|
// // scope.type
|
|
// // The scope can be `required`, `optional`, `incompatible`, or `embedded`
|
|
// // The type can either be `project` or `version`
|
|
// required.project "hex-casting" // Creates a new required dependency on Hex Casting
|
|
// required.project "paucal"
|
|
// required.project "patchouli"
|
|
// required.project "kotlin-for-forge"
|
|
// }
|
|
//}
|
|
|
|
jar.finalizedBy('reobfJar')
|
|
setupJar(this)
|