2020-04-25 13:33:17 +00:00
|
|
|
plugins {
|
|
|
|
id 'fabric-loom' version '0.2.7-SNAPSHOT'
|
|
|
|
id 'com.matthewprenger.cursegradle' version '1.4.0'
|
|
|
|
}
|
|
|
|
|
|
|
|
def cDir = new File(rootProject.projectDir.absolutePath, 'src/main/c')
|
|
|
|
|
|
|
|
class JNIPlatform {
|
|
|
|
String name
|
|
|
|
String[] cmakeArgs
|
|
|
|
String libExtension
|
|
|
|
|
2020-04-25 17:25:37 +00:00
|
|
|
JNIPlatform(String name, String libExtension, File rootDir) {
|
2020-04-25 13:33:17 +00:00
|
|
|
this.name = name
|
2020-04-25 17:25:37 +00:00
|
|
|
this.cmakeArgs = ["-DCMAKE_TOOLCHAIN_FILE=${rootDir.absolutePath}/cmake/${name}-toolchain.cmake"] as String[]
|
2020-04-25 13:33:17 +00:00
|
|
|
this.libExtension = libExtension
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
JNIPlatform[] jniPlatforms = [
|
2020-04-25 17:25:37 +00:00
|
|
|
new JNIPlatform("linux-x86_64", ".so", rootDir),
|
|
|
|
new JNIPlatform("linux-x86", ".so", rootDir),
|
|
|
|
new JNIPlatform("linux-armhf", ".so", rootDir),
|
|
|
|
new JNIPlatform("linux-arm64", ".so", rootDir),
|
|
|
|
new JNIPlatform("windows-x86_64", ".dll", rootDir),
|
|
|
|
new JNIPlatform("windows-x86", ".dll", rootDir)
|
2020-04-25 13:33:17 +00:00
|
|
|
]
|
|
|
|
|
2020-04-25 17:25:37 +00:00
|
|
|
task cleanJNI {}
|
|
|
|
task compileJNI {}
|
|
|
|
|
2020-04-25 13:33:17 +00:00
|
|
|
for (JNIPlatform platform : jniPlatforms) {
|
|
|
|
def buildDir = new File(cDir, "build-${platform.name}")
|
|
|
|
if (!buildDir.exists()) {
|
|
|
|
buildDir.mkdir()
|
|
|
|
}
|
|
|
|
|
2020-04-27 18:18:56 +00:00
|
|
|
tasks.create(name: "cmake-${platform.name}", group: 'jni', type: Exec) {
|
2020-04-25 13:33:17 +00:00
|
|
|
workingDir buildDir
|
|
|
|
|
|
|
|
executable 'cmake'
|
|
|
|
args platform.cmakeArgs + ['..']
|
|
|
|
}
|
|
|
|
|
2020-04-27 18:18:56 +00:00
|
|
|
tasks.create(name: "compileJNI-${platform.name}", group: 'jni', type: Exec) {
|
2020-04-25 13:33:17 +00:00
|
|
|
workingDir buildDir
|
|
|
|
|
|
|
|
executable 'make'
|
|
|
|
|
|
|
|
dependsOn tasks.getByName("cmake-${platform.name}")
|
|
|
|
}
|
|
|
|
|
2020-04-25 17:25:37 +00:00
|
|
|
compileJNI.dependsOn tasks.getByName("compileJNI-${platform.name}")
|
2020-04-25 13:33:17 +00:00
|
|
|
|
2020-04-27 18:18:56 +00:00
|
|
|
tasks.create(name: "cleanJNI-${platform.name}", group: 'jni', type: Delete) {
|
2020-04-25 13:33:17 +00:00
|
|
|
delete buildDir.absolutePath
|
|
|
|
}
|
|
|
|
|
2020-04-25 17:25:37 +00:00
|
|
|
cleanJNI.dependsOn tasks.getByName("cleanJNI-${platform.name}")
|
2020-04-25 13:33:17 +00:00
|
|
|
}
|
|
|
|
|
2020-04-25 17:25:37 +00:00
|
|
|
clean.dependsOn cleanJNI
|
|
|
|
processResources.dependsOn compileJNI
|
|
|
|
|
2020-04-25 13:33:17 +00:00
|
|
|
compileJava {
|
|
|
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
|
|
|
targetCompatibility = JavaVersion.VERSION_1_8
|
|
|
|
}
|
|
|
|
|
|
|
|
archivesBaseName = project.archives_base_name
|
|
|
|
def mod_version = project.mod_version as Object
|
|
|
|
version = "${mod_version}+${project.minecraft_version}"
|
|
|
|
group = project.maven_group as Object
|
|
|
|
|
|
|
|
minecraft {
|
|
|
|
}
|
|
|
|
|
|
|
|
dependencies {
|
|
|
|
minecraft "com.mojang:minecraft:${project.minecraft_version}"
|
|
|
|
mappings "net.fabricmc:yarn:${project.minecraft_version}+build.${project.yarn_build}:v2"
|
|
|
|
modImplementation "net.fabricmc:fabric-loader:${project.fabric_loader_version}"
|
|
|
|
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
|
|
|
|
}
|
|
|
|
|
|
|
|
def typescriptOut = new File(buildDir, 'generated/typescript')
|
|
|
|
|
|
|
|
sourceSets {
|
|
|
|
main {
|
|
|
|
resources {
|
|
|
|
srcDir typescriptOut
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-04-28 02:30:12 +00:00
|
|
|
def typescriptRoot = 'src/main/js'
|
|
|
|
def typescriptRootFile = new File(rootDir.absolutePath, typescriptRoot)
|
2020-04-25 13:33:17 +00:00
|
|
|
|
2020-04-27 18:18:56 +00:00
|
|
|
task typescript(group: 'build') {
|
2020-04-25 13:33:17 +00:00
|
|
|
inputs.dir typescriptRootFile
|
|
|
|
outputs.dir typescriptOut
|
|
|
|
|
|
|
|
doFirst {
|
|
|
|
project.delete {
|
|
|
|
delete typescriptOut
|
|
|
|
}
|
|
|
|
typescriptOut.mkdirs()
|
|
|
|
|
|
|
|
project.exec {
|
2020-04-28 02:30:12 +00:00
|
|
|
workingDir typescriptRootFile
|
|
|
|
|
|
|
|
executable 'npm'
|
2020-04-25 13:33:17 +00:00
|
|
|
|
2020-04-28 02:30:12 +00:00
|
|
|
args 'run', 'build', '--'
|
|
|
|
args '--outDir', new File(typescriptOut, 'scriptcraft').absolutePath
|
2020-04-25 13:33:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-04-28 02:30:12 +00:00
|
|
|
task eslint(group: 'verification', type: Exec) {
|
|
|
|
workingDir typescriptRootFile
|
|
|
|
|
|
|
|
executable 'npm'
|
|
|
|
|
|
|
|
args 'run', 'eslint'
|
|
|
|
}
|
|
|
|
|
2020-04-27 18:18:56 +00:00
|
|
|
processResources.dependsOn typescript
|
2020-04-25 13:33:17 +00:00
|
|
|
|
|
|
|
def typedocOut = new File(buildDir, 'typedoc')
|
|
|
|
|
2020-04-27 18:18:56 +00:00
|
|
|
task typedoc(group: 'documentation') {
|
2020-04-25 13:33:17 +00:00
|
|
|
inputs.dir typescriptRootFile
|
|
|
|
outputs.dir typedocOut
|
|
|
|
|
|
|
|
doFirst {
|
|
|
|
project.delete {
|
|
|
|
delete typedocOut
|
|
|
|
}
|
|
|
|
typedocOut.mkdirs()
|
|
|
|
|
|
|
|
project.exec {
|
|
|
|
workingDir typescriptRootFile
|
|
|
|
|
2020-04-28 02:30:12 +00:00
|
|
|
executable 'npm'
|
|
|
|
|
|
|
|
args 'run', 'typedoc', '--'
|
2020-04-25 13:33:17 +00:00
|
|
|
args '--out', typedocOut.absolutePath
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
processResources {
|
|
|
|
inputs.property 'version', mod_version
|
|
|
|
inputs.property 'name', rootProject.name
|
|
|
|
|
|
|
|
from(sourceSets.main.resources.srcDirs) {
|
|
|
|
include 'fabric.mod.json'
|
|
|
|
expand 'version': mod_version, 'name': rootProject.name
|
|
|
|
}
|
|
|
|
|
|
|
|
from(sourceSets.main.resources.srcDirs) {
|
|
|
|
exclude 'fabric.mod.json'
|
|
|
|
}
|
|
|
|
|
|
|
|
for (JNIPlatform platform : jniPlatforms) {
|
|
|
|
def buildDir = new File(cDir, "build-${platform.name}")
|
|
|
|
if (!buildDir.exists()) {
|
|
|
|
buildDir.mkdir()
|
|
|
|
}
|
|
|
|
|
|
|
|
def file = new File(buildDir, 'libscriptcraft' + platform.libExtension)
|
|
|
|
inputs.files file
|
|
|
|
|
|
|
|
from(file.absolutePath) {
|
|
|
|
into new File('natives', platform.name).path
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// ensure that the encoding is set to UTF-8, no matter what the system default is
|
|
|
|
// this fixes some edge cases with special characters not displaying correctly
|
|
|
|
// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
|
|
|
|
tasks.withType(JavaCompile) {
|
|
|
|
options.encoding = 'UTF-8'
|
|
|
|
}
|
|
|
|
|
|
|
|
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
|
|
|
|
// if it is present.
|
|
|
|
// If you remove this task, sources will not be generated.
|
|
|
|
task sourcesJar(type: Jar, dependsOn: classes) {
|
|
|
|
classifier 'sources'
|
|
|
|
from sourceSets.main.allSource
|
|
|
|
}
|
|
|
|
|
|
|
|
task typedocJar(type: Jar) {
|
|
|
|
classifier 'typedoc'
|
|
|
|
from typedocOut
|
|
|
|
}
|
|
|
|
|
|
|
|
typedocJar.dependsOn typedoc
|
|
|
|
|
|
|
|
artifacts {
|
|
|
|
archives sourcesJar
|
|
|
|
archives typedocJar
|
|
|
|
}
|
|
|
|
|
|
|
|
jar {
|
|
|
|
from 'LICENSE'
|
|
|
|
}
|
|
|
|
|
|
|
|
if (project.hasProperty('curseforge.api_key')) {
|
|
|
|
curseforge {
|
|
|
|
apiKey = project.getProperty('curseforge.api_key')
|
|
|
|
project {
|
|
|
|
id = project.curseforge_id
|
|
|
|
changelog = 'A changelog can be found at https://gitea.thebrokenrail.com/TheBrokenRail/ScriptCraft/src/branch/master/CHANGELOG.md'
|
|
|
|
releaseType = 'release'
|
|
|
|
addGameVersion project.simple_minecraft_version
|
|
|
|
addGameVersion 'Fabric'
|
|
|
|
mainArtifact(remapJar) {
|
|
|
|
displayName = "ScriptCraft v${mod_version} for ${project.minecraft_version}"
|
|
|
|
}
|
|
|
|
afterEvaluate {
|
|
|
|
uploadTask.dependsOn('remapJar')
|
|
|
|
}
|
|
|
|
relations {
|
|
|
|
requiredDependency 'fabric-api'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
options {
|
|
|
|
forgeGradleIntegration = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|