import cn.lalaki.pub.BaseCentralPortalPlusExtension import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { kotlin("jvm") version "2.0.21" java id("org.jetbrains.dokka").version("1.9.20") id("com.gradleup.shadow").version("8.3.3") // Maven publish `maven-publish` signing id("cn.lalaki.central").version("1.2.5") // Paper id("io.papermc.paperweight.userdev") version "1.7.3" apply false } group = "xyz.alexcrea" version = "1.6.12-debug" repositories { // EcoEnchants maven(url = "https://repo.auxilor.io/repository/maven-public/") } dependencies { // Spigot api compileOnly("org.spigotmc:spigot-api:1.18-R0.1-SNAPSHOT") // Gui library val inventoryFramework = "xyz.alexcrea.cuanvil.inventoryframework:IF-CustomAnvil:0.10.18" implementation(inventoryFramework) testRuntimeOnly(inventoryFramework) // EnchantsSquaredRewritten compileOnly(files("libs/EnchantsSquared.jar")) // EcoEnchants compileOnly("com.willfp:EcoEnchants:12.5.1") compileOnly("com.willfp:eco:6.70.1") // ExcellentEnchants compileOnly(files("libs/nightcore-2.6.4.jar")) compileOnly(files("libs/ExcellentEnchants-4.2.2.jar")) // Disenchantment compileOnly("cz.kominekjan:Disenchantment:v5.4.0") // Include nms implementation(project(":nms:nms-common")) implementation(project(":nms:v1_17R1", configuration = "reobf")) implementation(project(":nms:v1_18R1", configuration = "reobf")) implementation(project(":nms:v1_18R2", configuration = "reobf")) implementation(project(":nms:v1_19R1", configuration = "reobf")) implementation(project(":nms:v1_19R2", configuration = "reobf")) implementation(project(":nms:v1_19R3", configuration = "reobf")) implementation(project(":nms:v1_20R1", configuration = "reobf")) implementation(project(":nms:v1_20R2", configuration = "reobf")) implementation(project(":nms:v1_20R3", configuration = "reobf")) implementation(project(":nms:v1_20R4", configuration = "reobf")) implementation(project(":nms:v1_21R1", configuration = "reobf")) implementation(project(":nms:v1_21R2", configuration = "reobf")) implementation(project(":nms:v1_21R3"))//, configuration = "reobf")) // TODO add again when paperweigh 1.21.4 update // include kotlin for the offline jar implementation(kotlin("stdlib")) // Test dependency testImplementation("org.mockbukkit.mockbukkit:mockbukkit-v1.21:4.9.3") //lower bound: 4.9.2 upper bound: 4.9.3 testRuntimeOnly("commons-lang:commons-lang:2.6") } allprojects { apply(plugin = "java") apply(plugin = "kotlin") repositories { mavenCentral() // Spigot repository maven(url = "https://hub.spigotmc.org/nexus/content/repositories/snapshots/") // Paper repository maven("https://repo.papermc.io/repository/maven-public/") } dependencies { compileOnly(kotlin("stdlib")) // Test dependency testImplementation(platform("org.junit:junit-bom:5.11.3")) testImplementation("org.junit.jupiter:junit-jupiter") } tasks.getByName("test") { useJUnitPlatform() } // Configure used version of kotlin and java java { disableAutoTargetJvm() toolchain.languageVersion.set(JavaLanguageVersion.of(21)) } // Set target version tasks.withType().configureEach { sourceCompatibility = "16" // We aim for java 16 for minecraft 1.16.5. even if it not really suported by custom anvil. targetCompatibility = "16" options.encoding = "UTF-8" } kotlin { compilerOptions { apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0) jvmTarget.set(JvmTarget.JVM_16) } } } // Fat-jar builder val fatJar = tasks.register("fatJar") { manifest { attributes.apply { put("Main-Class", "io.delilaheve.CustomAnvil") } } archiveFileName.set("${rootProject.name}-${project.version}.jar") exclude("META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA") duplicatesStrategy = DuplicatesStrategy.WARN from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) }) with(tasks.jar.get() as CopySpec) } tasks { // Online jar (use of libraries) shadowJar { // No suffix for this jar archiveClassifier.set("") // Exclude kotlin std and its annotation exclude("**/kotlin-stdlib*.jar") exclude("**/annotations*.jar") // Shadow necessary dependency relocate("com.github.stefvanschie.inventoryframework", "xyz.alexcrea.inventoryframework") // Replace version and example fields in plugin.yml filesMatching("plugin.yml") { expand( "version" to project.version, "libraries" to " \"org.jetbrains.kotlin:kotlin-stdlib:2.0.21\" " ) } // Process resource for plugin.yml dependsOn(processResources) } // Offline jar (include kotlin std in the final jar fine) val offlineJar by creating(ShadowJar::class) { archiveClassifier.set("offline") // Shadow necessary dependency relocate("com.github.stefvanschie.inventoryframework", "xyz.alexcrea.inventoryframework") filesMatching("plugin.yml") { expand( "version" to "${project.version}-offline", "libraries" to "" ) } // Include all project other dependencies from(project.configurations.runtimeClasspath) // Add custom anvil compiled from(sourceSets.main.get().output) dependsOn(processResources) } // Make the online and offline jar on build named("build") { dependsOn(shadowJar, offlineJar) } } val sourcesJar by tasks.registering(Jar::class) { archiveClassifier.set("sources") from(kotlin.sourceSets.main.get().kotlin) } val javadocJar by tasks.creating(Jar::class) { group = JavaBasePlugin.DOCUMENTATION_GROUP description = "Assembles Javadoc JAR" archiveClassifier.set("javadoc") from(tasks.named("dokkaHtml")) } signing { useGpgCmd() val extension = extensions .getByName("publishing") as PublishingExtension sign(extension.publications) } // ------------------------------------ // PUBLISHING TO SONATYPE CONFIGURATION // ------------------------------------ // The path is recommended to be set to an empty directory val localMavenRepo = uri( project.findProperty("localMavenRepo") as String? ?: rootProject.layout.buildDirectory.dir("local-maven-repo").get().asFile.toURI() // Convert to URI ) centralPortalPlus { url = localMavenRepo username = System.getenv("SONATYPE_USERNAME") password = System.getenv("SONATYPE_PASSWORD") publishingType = BaseCentralPortalPlusExtension.PublishingType.USER_MANAGED // or PublishingType.AUTOMATIC } object Meta { const val desc = "spigot plugin to control every aspect of the anvil." const val license = "GPL-3.0" const val githubRepo = "alexcrea/CustomAnvil" const val release = "https://s01.oss.sonatype.org/service/local/" const val snapshot = "https://s01.oss.sonatype.org/content/repositories/snapshots/" } publishing { repositories { maven { url = localMavenRepo // Specify the same local repo path in the configuration. } } publications { create("maven") { groupId = project.group.toString() artifactId = project.name version = project.version.toString() from(components["kotlin"]) artifact(tasks["sourcesJar"]) artifact(tasks["javadocJar"]) pom { name.set(project.name) description.set(Meta.desc) url.set("https://github.com/${Meta.githubRepo}") licenses { license { name.set(Meta.license) url.set("https://www.gnu.org/licenses/gpl-3.0.en.html") } } developers { developer { id.set("alexcrea") name.set("alexcrea") email.set("alexcrea.of@laposte.net") url.set("https://github.com/alexcrea") } } scm { url.set( "https://github.com/${Meta.githubRepo}.git" ) connection.set( "scm:git:git://github.com/${Meta.githubRepo}.git" ) developerConnection.set( "scm:git:git://github.com/${Meta.githubRepo}.git" ) } issueManagement { url.set("https://github.com/${Meta.githubRepo}/issues") } } } } }