diff --git a/.gitignore b/.gitignore index b7523806f..1c84c6c0f 100644 --- a/.gitignore +++ b/.gitignore @@ -138,3 +138,4 @@ build !lib/*.jar .idea/Terra.iml /run/ +.idea/**.iml \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 1296a32f2..c5ce2b2ed 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,138 +1,11 @@ -//import java.util.zip.ZipFile -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import java.io.ByteArrayOutputStream -import java.net.URL - - -plugins { - java - maven - idea - id("com.github.johnrengelman.shadow").version("6.1.0") -} +import com.dfsek.terra.getGitHash val versionObj = Version("2", "2", "0", true) allprojects { version = versionObj group = "com.dfsek.terra" - } - -repositories { - maven { url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") } - maven { url = uri("http://maven.enginehub.org/repo/") } - maven { url = uri("https://repo.codemc.org/repository/maven-public") } - maven { url = uri("https://papermc.io/repo/repository/maven-public/") } - maven { url = uri("https://maven.fabricmc.net/") } - gradlePluginPortal() - jcenter() -} - -java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - -dependencies { - implementation("org.apache.commons:commons-rng-core:1.3") - implementation("net.jafama:jafama:2.3.2") - - - implementation("commons-io:commons-io:2.4") - implementation("org.apache.commons:commons-imaging:1.0-alpha2") - - compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.2.0-SNAPSHOT") - implementation("org.bstats:bstats-bukkit:1.7") - - compileOnly("com.googlecode.json-simple:json-simple:1.1") - - implementation("com.scireum:parsii:1.2.1") - - implementation("net.jafama:jafama:2.3.2") - - implementation("com.dfsek:Tectonic:1.0.3") - - - - - // JUnit. - testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0") -} - - - -val compileJava: JavaCompile by tasks -val mainSourceSet: SourceSet = sourceSets["main"] - -tasks.withType { - include("**/*.yml") - filter( - "tokens" to mapOf( - "VERSION" to project.version.toString() - ) - ) -} - -compileJava.apply { - options.encoding = "UTF-8" - doFirst { - options.compilerArgs = mutableListOf("-Xlint:all") - } -} - -tasks.test { - useJUnitPlatform() - - maxHeapSize = "4G" - ignoreFailures = false - failFast = true - maxParallelForks = 12 -} - -tasks.named("shadowJar") { - // Tell shadow to download the packs - dependsOn(downloadDefaultPacks) - - archiveClassifier.set("") - archiveBaseName.set("Terra") - setVersion(project.version) - relocate("org.apache.commons", "com.dfsek.terra.lib.commons") - relocate("org.bstats.bukkit", "com.dfsek.terra.lib.bstats") - relocate("parsii", "com.dfsek.terra.lib.parsii") - relocate("io.papermc.lib", "com.dfsek.terra.lib.paperlib") - relocate("net.jafama", "com.dfsek.terra.lib.jafama") - relocate("com.dfsek.tectonic", "com.dfsek.terra.lib.tectonic") - relocate("net.jafama", "com.dfsek.terra.lib.jafama") - minimize() -} - -tasks.build { - dependsOn(tasks.shadowJar) -// dependsOn(testWithPaper) -// testWithPaper.mustRunAfter(tasks.shadowJar) -} - - - -val downloadDefaultPacks = tasks.create("downloadDefaultPacks") { - doFirst { - // Downloading latest paper jar. -// if (file("${buildDir}/resources/main/packs/default").exists() && file("${buildDir}/resources/main/packs/nether").exists()) -// return@doFirst -// else - file("${buildDir}/resources/main/packs/").deleteRecursively() - - val defaultPackUrl = URL("https://github.com/PolyhedralDev/TerraDefaultConfig/releases/download/latest/default.zip") - downloadPack(defaultPackUrl) - val netherPackUrl = URL("https://github.com/PolyhedralDev/TerraDefaultConfig/releases/download/latest/nether.zip") - downloadPack(netherPackUrl) - } -} - - - /** * Version class that does version stuff. */ @@ -145,28 +18,4 @@ class Version(val major: String, val minor: String, val revision: String, val pr else //Only use git hash if it's a prerelease. "$major.$minor.$revision-BETA+${getGitHash()}" } -} - -fun getGitHash(): String { - val stdout = ByteArrayOutputStream() - exec { - commandLine = mutableListOf("git", "rev-parse", "--short", "HEAD") - standardOutput = stdout - } - return stdout.toString().trim() -} - -fun gitClone(name: String) { - val stdout = ByteArrayOutputStream() - exec { - commandLine = mutableListOf("git", "clone", name) - standardOutput = stdout - } -} - -fun downloadPack(packUrl: URL) { - val fileName = packUrl.file.substring(packUrl.file.lastIndexOf("/")) - val file = file("${buildDir}/resources/main/packs/${fileName}") - file.parentFile.mkdirs() - file.outputStream().write(packUrl.readBytes()) } \ No newline at end of file diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 000000000..ecf0454d8 --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + `kotlin-dsl` + kotlin("jvm") version embeddedKotlinVersion +} + +repositories { + mavenCentral() + gradlePluginPortal() +} + +dependencies { + "implementation"("com.github.jengelman.gradle.plugins:shadow:+") +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/CommonConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/CommonConfig.kt new file mode 100644 index 000000000..2405568cd --- /dev/null +++ b/buildSrc/src/main/kotlin/com/dfsek/terra/CommonConfig.kt @@ -0,0 +1,47 @@ +package com.dfsek.terra + +import org.gradle.api.Project +import org.gradle.api.tasks.testing.Test +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.withType +import java.io.ByteArrayOutputStream + +fun Project.configureCommon() { + apply(plugin = "java-library") + apply(plugin = "maven-publish") + apply(plugin = "idea") + + configureDependencies() + configureCompilation() + configureDistribution() + + version = rootProject.version + + + + tasks.withType().configureEach { + useJUnitPlatform() + + maxHeapSize = "2G" + ignoreFailures = false + failFast = true + maxParallelForks = 12 + } +} + +fun Project.getGitHash(): String { + val stdout = java.io.ByteArrayOutputStream() + exec { + commandLine = mutableListOf("git", "rev-parse", "--short", "HEAD") + standardOutput = stdout + } + return stdout.toString().trim() +} + +fun Project.gitClone(name: String) { + val stdout = ByteArrayOutputStream() + exec { + commandLine = mutableListOf("git", "clone", name) + standardOutput = stdout + } +} diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt new file mode 100644 index 000000000..ae2f81b9c --- /dev/null +++ b/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt @@ -0,0 +1,27 @@ +package com.dfsek.terra + +import org.gradle.api.JavaVersion +import org.gradle.api.Project +import org.gradle.api.plugins.JavaPluginConvention +import org.gradle.api.tasks.compile.JavaCompile +import org.gradle.api.tasks.javadoc.Javadoc +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.withType + +fun Project.configureCompilation() { + configure { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + tasks.withType { + options.encoding = "UTF-8" + doFirst { + options.compilerArgs = mutableListOf("-Xlint:all") + } + } + + tasks.withType { + options.encoding = "UTF-8" + } +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/DependencyConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/DependencyConfig.kt new file mode 100644 index 000000000..28a6f8e00 --- /dev/null +++ b/buildSrc/src/main/kotlin/com/dfsek/terra/DependencyConfig.kt @@ -0,0 +1,25 @@ +package com.dfsek.terra + +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.repositories + +fun Project.configureDependencies() { + + repositories { + maven { url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") } + maven { url = uri("http://maven.enginehub.org/repo/") } + maven { url = uri("https://repo.codemc.org/repository/maven-public") } + maven { url = uri("https://papermc.io/repo/repository/maven-public/") } + maven { url = uri("https://maven.fabricmc.net/") } + gradlePluginPortal() + jcenter() + mavenCentral() + } + + dependencies { + "testImplementation"("org.junit.jupiter:junit-jupiter-api:5.7.0") + "testRuntimeOnly"("org.junit.jupiter:junit-jupiter-engine:5.7.0") + "compileOnly"("org.jetbrains:annotations:20.1.0") + } +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/DistributionConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/DistributionConfig.kt new file mode 100644 index 000000000..4f5392ca6 --- /dev/null +++ b/buildSrc/src/main/kotlin/com/dfsek/terra/DistributionConfig.kt @@ -0,0 +1,87 @@ +package com.dfsek.terra + +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import org.gradle.api.DefaultTask +import org.gradle.api.Project +import org.gradle.api.plugins.BasePluginConvention +import org.gradle.api.tasks.bundling.Jar +import org.gradle.api.tasks.javadoc.Javadoc +import org.gradle.kotlin.dsl.* +import java.io.File +import java.net.URL + +fun Project.configureDistribution() { + apply(plugin = "java-library") + apply(plugin = "com.github.johnrengelman.shadow") + + +// configurations.create("shaded") + + configurations { + val shaded = create("shaded") + getByName("compile").extendsFrom(shaded) +// shaded.extendsFrom(getByName("compile")) + val shadedApi = create("shadedApi") + shaded.extendsFrom(shadedApi) + getByName("api").extendsFrom(shadedApi) + val shadedImplementation = create("shadedImplementation") + shaded.extendsFrom(shadedImplementation) + getByName("implementation").extendsFrom(shadedImplementation) + } + +// tasks.withType { +// classpath += +// } + + val downloadDefaultPacks = tasks.create("downloadDefaultPacks") { + doFirst { + file("${buildDir}/resources/main/packs/").deleteRecursively() + + val defaultPackUrl = URL("https://github.com/PolyhedralDev/TerraDefaultConfig/releases/download/latest/default.zip") + downloadPack(defaultPackUrl, project) + val netherPackUrl = URL("https://github.com/PolyhedralDev/TerraDefaultConfig/releases/download/latest/nether.zip") + downloadPack(netherPackUrl, project) + } + } + tasks["processResources"].dependsOn(downloadDefaultPacks) + + tasks.register("sourcesJar") { + archiveClassifier.set("sources") + } + + tasks.withType { + from("../LICENSE", "../../LICENSE") + } + + tasks.register("javadocJar") { + dependsOn("javadoc") + archiveClassifier.set("javadoc") + from(tasks.getByName("javadoc").destinationDir) + } + + tasks.named("shadowJar") { + // Tell shadow to download the packs + dependsOn(downloadDefaultPacks) + + configurations = listOf(project.configurations["shaded"]) + + archiveClassifier.set("shaded") + setVersion(project.version) + relocate("org.apache.commons", "com.dfsek.terra.lib.commons") + relocate("parsii", "com.dfsek.terra.lib.parsii") + relocate("net.jafama", "com.dfsek.terra.lib.jafama") + minimize() + } + convention.getPlugin().archivesBaseName = project.name + + tasks.named("build") { + dependsOn(tasks["shadowJar"]) + } +} + +fun downloadPack(packUrl: URL, project: Project) { + val fileName = packUrl.file.substring(packUrl.file.lastIndexOf("/")) + val file = File("${project.buildDir}/resources/main/packs/${fileName}") + file.parentFile.mkdirs() + file.outputStream().write(packUrl.readBytes()) +} \ No newline at end of file diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 07524d9e2..46bcce8d3 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -1,47 +1,23 @@ +import com.dfsek.terra.configureCommon + plugins { - java - maven - idea - id("com.github.johnrengelman.shadow") + `java-library` } +configureCommon() + group = "com.dfsek.terra.common" -repositories { - mavenCentral() - maven { url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") } - maven { url = uri("http://maven.enginehub.org/repo/") } - maven { url = uri("https://repo.codemc.org/repository/maven-public") } - maven { url = uri("https://papermc.io/repo/repository/maven-public/") } -} - dependencies { - compileOnly("org.jetbrains:annotations:20.1.0") - testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0") - implementation("org.apache.commons:commons-rng-core:1.3") - implementation("commons-io:commons-io:2.4") + "shadedApi"("org.apache.commons:commons-rng-core:1.3") + "shadedApi"("commons-io:commons-io:2.4") - implementation("com.scireum:parsii:1.2.1") - implementation("com.dfsek:Tectonic:1.0.3") - implementation("net.jafama:jafama:2.3.2") + "shadedApi"("com.scireum:parsii:1.2.1") + "shadedApi"("com.dfsek:Tectonic:1.0.3") + "shadedApi"("net.jafama:jafama:2.3.2") + "shadedApi"("org.yaml:snakeyaml:1.27") - compileOnly("com.googlecode.json-simple:json-simple:1.1") + "compileOnly"("com.googlecode.json-simple:json-simple:1.1") - implementation("com.google.guava:guava:30.0-jre") -} - -tasks.named("shadowJar") { - - archiveClassifier.set("") - archiveBaseName.set("Terra") - setVersion(project.version) - relocate("org.apache.commons", "com.dfsek.terra.lib.commons") - relocate("org.bstats.bukkit", "com.dfsek.terra.lib.bstats") - relocate("parsii", "com.dfsek.terra.lib.parsii") - relocate("io.papermc.lib", "com.dfsek.terra.lib.paperlib") - relocate("net.jafama", "com.dfsek.terra.lib.jafama") - relocate("com.dfsek.tectonic", "com.dfsek.terra.lib.tectonic") - relocate("net.jafama", "com.dfsek.terra.lib.jafama") - minimize() + "shadedApi"("com.google.guava:guava:30.0-jre") } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 62d4c0535..e708b1c02 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 12d38de6a..be52383ef 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/platforms/bukkit/build.gradle.kts b/platforms/bukkit/build.gradle.kts index 913bba658..4e7299944 100644 --- a/platforms/bukkit/build.gradle.kts +++ b/platforms/bukkit/build.gradle.kts @@ -1,4 +1,6 @@ -import java.io.ByteArrayOutputStream +import com.dfsek.terra.configureCommon +import com.dfsek.terra.gitClone +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import java.net.URL import java.nio.channels.Channels import java.nio.file.Files @@ -6,11 +8,9 @@ import java.nio.file.Paths import java.nio.file.StandardCopyOption plugins { - java - maven - idea - id("com.github.johnrengelman.shadow") + `java-library` } +configureCommon() group = "com.dfsek.terra.bukkit" @@ -23,27 +23,14 @@ repositories { } dependencies { - testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0") - implementation(project(":common")) - implementation("org.apache.commons:commons-rng-core:1.3") + "shadedApi"(project(":common")) - compileOnly("org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT") - implementation("io.papermc:paperlib:1.0.5") + "compileOnly"("org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT") + "shadedImplementation"("io.papermc:paperlib:1.0.5") - implementation("com.scireum:parsii:1.2.1") - implementation("com.dfsek:Tectonic:1.0.3") - implementation("net.jafama:jafama:2.3.2") - - compileOnly("com.googlecode.json-simple:json-simple:1.1") - - implementation("com.google.guava:guava:30.0-jre") - implementation("org.bstats:bstats-bukkit:1.7") - - compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.2.0-SNAPSHOT") - - compileOnly("org.jetbrains:annotations:20.1.0") + "shadedImplementation"("org.bstats:bstats-bukkit:1.7") + "compileOnly"("com.sk89q.worldedit:worldedit-bukkit:7.2.0-SNAPSHOT") } tasks.withType { @@ -58,7 +45,7 @@ tasks.withType { val testDir = "target/server/" val setupServer = tasks.create("setupServer") { - dependsOn(tasks.shadowJar) + dependsOn("shadowJar") doFirst { // clean file("${testDir}/").deleteRecursively() @@ -93,7 +80,7 @@ val setupServer = tasks.create("setupServer") { val testWithPaper = task(name = "testWithPaper") { standardInput = System.`in` - dependsOn(tasks.shadowJar) + dependsOn("shadowJar") // Copy Terra into dir doFirst { copy { @@ -117,25 +104,7 @@ val testWithPaper = task(name = "testWithPaper") { classpath = files("${testDir}/paper.jar") } -tasks.named("shadowJar") { - - archiveClassifier.set("") - archiveBaseName.set("Terra") - setVersion(project.version) - relocate("org.apache.commons", "com.dfsek.terra.lib.commons") +tasks.named("shadowJar") { relocate("org.bstats.bukkit", "com.dfsek.terra.lib.bstats") - relocate("parsii", "com.dfsek.terra.lib.parsii") relocate("io.papermc.lib", "com.dfsek.terra.lib.paperlib") - relocate("net.jafama", "com.dfsek.terra.lib.jafama") - relocate("com.dfsek.tectonic", "com.dfsek.terra.lib.tectonic") - relocate("net.jafama", "com.dfsek.terra.lib.jafama") - minimize() -} - -fun gitClone(name: String) { - val stdout = ByteArrayOutputStream() - exec { - commandLine = mutableListOf("git", "clone", name) - standardOutput = stdout - } } \ No newline at end of file diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index f74e60e21..e99ef6882 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -1,67 +1,47 @@ -plugins { - java - maven - idea - id("fabric-loom").version("0.5-SNAPSHOT") - id("com.github.johnrengelman.shadow") -} +import com.dfsek.terra.configureCommon +import net.fabricmc.loom.LoomGradleExtension -group = "com.dfsek.terra.bukkit" - -repositories { - mavenCentral() - maven { url = uri("http://maven.enginehub.org/repo/") } - maven { url = uri("https://repo.codemc.org/repository/maven-public") } - maven { url = uri("https://papermc.io/repo/repository/maven-public/") } - jcenter() - maven { - name = "Fabric" - url = uri("https://maven.fabricmc.net/") +buildscript { + repositories { + mavenCentral() + maven { + name = "Fabric" + url = uri("https://maven.fabricmc.net/") + } } - gradlePluginPortal() +// dependencies { +// classpath("net.fabricmc:fabric-loom:+") +// } } +plugins { + id("fabric-loom").version("0.5.9") + `java-library` +} +//apply(plugin = "fabric-loom") -minecraft { +configureCommon() + +group = "com.dfsek.terra.fabric" + + +configure { accessWidener("src/main/resources/terra.accesswidener") } dependencies { - testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0") - implementation(project(":common")) - implementation("org.apache.commons:commons-rng-core:1.3") + "shadedApi"(project(":common")) - implementation("com.scireum:parsii:1.2.1") - implementation("com.dfsek:Tectonic:1.0.3") - implementation("net.jafama:jafama:2.3.2") - - implementation("com.googlecode.json-simple:json-simple:1.1") - - implementation("com.google.guava:guava:30.0-jre") - - compileOnly("org.jetbrains:annotations:20.1.0") - - implementation("org.yaml:snakeyaml:1.27") - // To change the versions see the gradle.properties file - minecraft("com.mojang:minecraft:1.16.4") - mappings("net.fabricmc:yarn:1.16.4+build.6:v2") - modImplementation("net.fabricmc:fabric-loader:0.10.6+build.214") + "minecraft"("com.mojang:minecraft:1.16.4") + "mappings"("net.fabricmc:yarn:1.16.4+build.6:v2") + "modImplementation"("net.fabricmc:fabric-loader:0.10.6+build.214") // Fabric API. This is technically optional, but you probably want it anyway. - modImplementation("net.fabricmc.fabric-api:fabric-api:0.25.1+build.416-1.16") -} + "modImplementation"("net.fabricmc.fabric-api:fabric-api:0.25.1+build.416-1.16") -tasks.named("shadowJar") { - - archiveClassifier.set("") - archiveBaseName.set("Terra") - setVersion(project.version) - relocate("org.apache.commons", "com.dfsek.terra.lib.commons") - relocate("parsii", "com.dfsek.terra.lib.parsii") - relocate("net.jafama", "com.dfsek.terra.lib.jafama") - relocate("com.dfsek.tectonic", "com.dfsek.terra.lib.tectonic") - minimize() + "compileOnly"("net.fabricmc:sponge-mixin:+") + "annotationProcessor"("net.fabricmc:sponge-mixin:+") + "annotationProcessor"("net.fabricmc:fabric-loom:+") } \ No newline at end of file