import org.apache.http.HttpEntity import org.apache.http.client.methods.CloseableHttpResponse import org.apache.http.client.methods.HttpPost import org.apache.http.entity.ContentType import org.apache.http.entity.mime.MultipartEntityBuilder import org.apache.http.impl.client.CloseableHttpClient import org.apache.http.impl.client.HttpClients buildscript { repositories { maven {url "https://plugins.gradle.org/m2/"} mavenCentral() mavenLocal() } dependencies { classpath "org.apache.httpcomponents:httpmime:4.5.13" } } plugins { id "com.matthewprenger.cursegradle" version "1.4.0" } apply plugin: 'java' apply plugin: 'maven-publish' apply plugin: 'idea' apply plugin: 'eclipse' def branch = System.getenv("GITHUB_REF"); def sha = System.getenv("GITHUB_SHA"); def isDevBranch = branch == null || (!(branch.startsWith("refs/heads/release/") || branch.startsWith("refs/tags/"))) group = 'com.sekwah.advancedportals' version = getPluginData("version") + (isDevBranch ? '-SNAPSHOT' : '') description = "" sourceCompatibility = 1.8 targetCompatibility = 1.8 tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } String getPluginData(String tag) { File file = file("src/main/resources/plugin.yml") String version = "notfound" file.readLines("UTF-8").each {String line -> line = line.trim() if(line.startsWith(tag)) { version = line.substring(tag.length() + 2, line.length()) } } println "Advanced Portals v" + version return version } configurations { // configuration that holds jars to copy into lib includeLibs } repositories { maven { url "https://repo.maven.apache.org/maven2" } maven { url "https://hub.spigotmc.org/nexus/content/repositories/snapshots/" } maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } maven { url "https://nexus.velocitypowered.com/repository/maven-public/" } maven { url 'https://papermc.io/repo/repository/maven-public/' } } // includeLibs just says to include the library in the final jar dependencies { //implementation "org.bukkit:bukkit:1.16.1-R0.1-SNAPSHOT" implementation "org.spigotmc:spigot-api:1.16.1-R0.1-SNAPSHOT" implementation "net.md-5:bungeecord-api:1.15-SNAPSHOT" implementation "com.velocitypowered:velocity-api:1.1.0-SNAPSHOT" annotationProcessor "com.velocitypowered:velocity-api:1.1.0-SNAPSHOT" implementation "io.netty:netty-all:4.0.4.Final" compileOnly 'com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT' //compile fileTree(dir: 'libs', include: ['*.jar']) } /** For pre-releases and testers to be able to try the latest commits if they want. * If the builds start exceeding 8MB then we may want to upload to s3 instead and periodically clear. * TODO possibly add a task that announces when builds are made? * Though add a note that it may take a while for Curse to approve the files. */ task discordupload { dependsOn(jar) doLast { String discordWebhook = System.getenv("DISCORD_WEBHOOK") if(discordWebhook != null) { println("Logging Into Discord") CloseableHttpClient httpClient = HttpClients.createDefault() HttpPost uploadFile = new HttpPost(discordWebhook) MultipartEntityBuilder builder = MultipartEntityBuilder.create() builder.addTextBody("content", "New automated dev build\n\n" + "Current Features: <${project.github}/blob/${sha}/CHANGELOG.md>") builder.addBinaryBody("file", file(jar.archiveFile).newInputStream(), ContentType.APPLICATION_OCTET_STREAM, jar.archiveName) HttpEntity multipart = builder.build() uploadFile.setEntity(multipart) CloseableHttpResponse response = httpClient.execute(uploadFile) response.getEntity() println("Posted build") } else { println("Discord webhook unspecified") } } } tasks.curseforge.enabled = System.getenv("CURSE_API") != null curseforge { logger.info("Curse api: " + System.getenv("CURSE_API")) if (System.getenv("CURSE_API") != null) { apiKey = System.getenv("CURSE_API") } project { id = project.curse_project_id // TODO add code to reference this but also cut the latest change logs in for the files changelog = "${project.github}/blob/${sha}/CHANGELOG.md" changelogType = 'markdown' releaseType = 'release' addGameVersion '1.16' addGameVersion '1.15' addGameVersion '1.14' addGameVersion '1.13' mainArtifact(jar){ } //addArtifact sourcesJar //addArtifact deobfJar //addArtifact javadocJar } } task copyPlugin { doLast { copy { if(System.env.MC_SERVER_LOC == null) { throw new Exception('You must set the server location and jar to use') } println "$buildDir/libs/Advanced-Portals-${version}.jar" println "${System.env.MC_SERVER_LOC}/plugins/Advanced-Portals-${version}.jar" try { delete fileTree("${System.env.MC_SERVER_LOC}/plugins/") { include "*.jar" } } catch(RuntimeException e) { println e.getLocalizedMessage() } from file("$buildDir/libs/Advanced-Portals-${version}.jar") into file("${System.env.MC_SERVER_LOC}/plugins/") } } } // Set SPIGOT_LOC to the location of your server and SPIGOT_JAR as the name of the jar file in the server you want to run // DIReallyKnowWhatIAmDoingISwear is to remove the stupid pause spigot has at the start task runJar() { doLast { if(System.env.MC_SERVER_LOC == null || System.env.MC_SERVER_JAR == null) { throw new Exception('You must set the server location and jar to use MC_SERVER_LOC and MC_SERVER_JAR') } javaexec { main "-jar" args "${System.env.MC_SERVER_LOC}\\${System.env.MC_SERVER_JAR}.jar" jvmArgs = ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005", "-DIReallyKnowWhatIAmDoingISwear=true"] workingDir "${System.env.MC_SERVER_LOC}" } } }