import groovy.json.JsonSlurper import java.nio.file.Files plugins { id 'java' id 'io.papermc.paperweight.userdev' version '1.5.5' id 'maven-publish' id 'com.github.johnrengelman.shadow' version '8.1.1' } group = 'me.unurled.sacredrealms' version = '0.1.2' def minecraft_version = '1.20.1' repositories { mavenCentral() maven { name = "papermc-repo" url = "https://repo.papermc.io/repository/maven-public/" } maven { name = "sonatype" url = "https://oss.sonatype.org/content/groups/public/" } maven { name = "citizens" url = "https://maven.citizensnpcs.co/repo" } maven { name = "SacredRealms" url = "https://git.unurled.me/api/packages/SacredRealms/maven" } } dependencies { // PaperMc compileOnly "io.papermc.paper:paper-api:${minecraft_version}-R0.1-SNAPSHOT" // NMS paperweightDevelopmentBundle("io.papermc.paper:dev-bundle:${minecraft_version}-R0.1-SNAPSHOT") // Citizens compileOnly ("net.citizensnpcs:citizens-main:2.0.32-SNAPSHOT") { exclude group: '*', module: '*' } // Redis implementation "redis.clients:jedis:4.3.1" } def targetJavaVersion = 17 java { def javaVersion = JavaVersion.toVersion(targetJavaVersion) sourceCompatibility = javaVersion targetCompatibility = javaVersion if (JavaVersion.current() < javaVersion) { toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) } } shadowJar { archiveClassifier.set('') } tasks { assemble { dependsOn(reobfJar) } build { dependsOn(shadowJar) } } tasks.withType(JavaCompile).configureEach { if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { options.release = targetJavaVersion } } processResources { def props = [version: version] inputs.properties props filteringCharset 'UTF-8' filesMatching('plugin.yml') { expand props } } publishing { publications { maven(MavenPublication) { artifactId = project.name from components.java } } repositories { maven { name = 'SacredRealms' url = uri('https://git.unurled.me/api/packages/SacredRealms/maven') credentials(HttpHeaderCredentials) { name = "Authorization" value = "token ${System.getenv('TOKEN')}" } authentication { header(HttpHeaderAuthentication) } } } } def serverDir = file("${project.buildDir}/server") def serverJar = file("${serverDir}/paper-${minecraft_version}.jar") def pluginsDir = file("${serverDir}/plugins") def pluginJar = file("${pluginsDir}/${archivesBaseName}.jar") def buildJar = file("${project.buildDir}/libs/${archivesBaseName}-${version}.jar") def semver = minecraft_version.tokenize('.') tasks.register('prepare') { group 'server' onlyIf { !serverJar.exists() } doFirst { serverDir.mkdirs() def baseUrl = 'https://papermc.io/api/v2/projects/paper' def builds = new URL("${baseUrl}/version_group/${semver[0]}.${semver[1]}/builds") def latest = new JsonSlurper() .parseText(builds.text) .builds .reverse() .find { it.version == minecraft_version } def fileName = latest.downloads.application.name def jarUrl = new URL("${baseUrl}/versions/${latest.version}/builds/${latest.build}/downloads/${fileName}") serverJar << jarUrl.openStream() } } tasks.register('start', JavaExec) { group 'server' dependsOn 'prepare', 'build' doFirst { pluginsDir.mkdirs() pluginJar.delete() Files.createSymbolicLink(pluginJar.toPath(), buildJar.toPath()) } classpath = files(serverJar) workingDir = serverDir mainClass = 'io.papermc.paperclip.Main' jvmArgs = [ '-Ddisable.watchdog=true', '-Dcom.mojang.eula.agree=true' ] args = [ '--nogui' ] standardInput = System.in }