diff --git a/build.gradle b/build.gradle
index 3997dd0..99f3da7 100644
--- a/build.gradle
+++ b/build.gradle
@@ -17,17 +17,60 @@
* along with this program. If not, see .
*/
+
+import org.apache.tools.ant.taskdefs.condition.Os
+
+import java.util.function.BiConsumer
+
plugins {
+ // Adding the base plugin fixes the following gradle warnings in IntelliJ:
+ //
+ // Warning: root project 'module-work-multi': Unable to resolve all content root directories
+ // Details: java.lang.IllegalStateException: No value has been specified for this provider.
+ //
+ // Warning: root project 'module-work-multi': Unable to resolve additional project configuration.
+ // Details: java.lang.IllegalStateException: No value has been specified for this provider.
id 'base'
id 'java'
id 'application'
id 'com.github.johnrengelman.shadow' version '8.1.1'
- id 'de.steamwar.gradle' version '1.0.0'
+}
+
+ext.swdep = { s ->
+ if (file("${rootDir}/lib/${s}.jar").exists()) {
+ return files("${rootDir}/lib/${s}.jar")
+ } else {
+ if (s.contains("-")) {
+ return "de.steamwar:${s.toLowerCase().replace('-', ':')}"
+ } else {
+ return "de.steamwar:${s.toLowerCase()}:RELEASE"
+ }
+ }
}
group 'de.steamwar'
-version 'RELEASE'
+version ''
+
+Properties steamwarProperties = new Properties()
+if (file("steamwar.properties").exists()) {
+ steamwarProperties.load(file("steamwar.properties").newDataInputStream())
+}
+
+ext {
+ buildName = 'TowerRun'
+ artifactName = 'towerrun'
+
+ uberJarName = "${buildName}-all.jar"
+ jarName = "${artifactName}.jar"
+ libs = "${buildDir}/libs"
+
+ if (Os.isFamily(Os.FAMILY_WINDOWS)) {
+ operatingSystem = "windows"
+ } else {
+ operatingSystem = "unix"
+ }
+}
compileJava.options.encoding = 'UTF-8'
@@ -58,6 +101,14 @@ repositories {
maven {
url = uri('https://hub.spigotmc.org/nexus/content/repositories/snapshots/')
}
+
+ maven {
+ url = uri('https://steamwar.de/maven/')
+ credentials {
+ username = steamwarProperties.getProperty("maven.username")
+ password = steamwarProperties.getProperty("maven.password")
+ }
+ }
}
dependencies {
@@ -75,3 +126,151 @@ dependencies {
compileOnly swdep("WorldEdit-1.15")
compileOnly swdep("SpigotCore")
}
+
+task buildProject {
+ description 'Build this project'
+ group "Steamwar"
+
+ dependsOn build
+}
+
+task finalizeProject {
+ description 'Finalize this project'
+ group "Steamwar"
+
+ doLast {
+ if ("${buildDir}" == null) {
+ return
+ }
+ delete fileTree("${libs}").matching {
+ exclude("${uberJarName}")
+ }
+ file(libs + "/" + uberJarName).renameTo(file(libs + "/" + jarName))
+ }
+}
+build.finalizedBy(finalizeProject)
+
+if (steamwarProperties.containsKey("hostname")) {
+ String hostname = steamwarProperties.get("hostname")
+ String uploadPath = steamwarProperties.getOrDefault("uploadPath", "~")
+
+ String server = steamwarProperties.getOrDefault("server", "DevBungee")
+ String serverStartFlags = steamwarProperties.getOrDefault("serverStartFlags", "")
+
+ task uploadProject {
+ description 'Upload this project'
+ group "Steamwar"
+
+ doLast {
+ await(shell("scp ${libs}/${jarName} ${hostname}:${uploadPath}/${server}/plugins"))
+ if (steamwarProperties.getOrDefault("directStart", "false") == "false" && !answer("Start ${server} server?")) {
+ return
+ }
+ serverStart(server, serverStartFlags, hostname)
+ }
+ }
+ uploadProject.dependsOn(buildProject)
+
+ task startDevServer {
+ description 'Start the DevBungee'
+ group "Steamwar"
+
+ doLast {
+ serverStart(server, serverStartFlags, hostname)
+ }
+ }
+}
+
+private def await(Process proc) {
+ def out = new StringBuilder()
+ def err = new StringBuilder()
+ proc.waitForProcessOutput(out, err)
+ return [out, err, proc.exitValue()]
+}
+
+private def shell(String command) {
+ if (operatingSystem == "unix") {
+ return ['bash', '-c', command].execute()
+ } else {
+ return ["cmd", "/c", command].execute()
+ }
+}
+
+private def serverStart(String serverName, String serverFlags, String hostname) {
+ def proc = shell("ssh -t ${hostname} \"./mc ${serverFlags} ${serverName}\"")
+
+ Set strings = new HashSet<>()
+ File file = new File("${projectDir}/ignoredlog");
+ if (file.exists()) {
+ new BufferedReader(new InputStreamReader(new FileInputStream(file))).readLines().forEach({ s ->
+ strings.add(s)
+ })
+ }
+
+ Thread outputThread = new Thread({
+ Reader reader = proc.getInputStream().newReader();
+ Writer writer = System.out.newWriter();
+ try {
+ while (proc.alive) {
+ String s = reader.readLine()
+ if (s == null) {
+ return
+ }
+ if (strings.stream().anyMatch({check -> s.contains(check)})) {
+ continue
+ }
+ writer.write(s + "\n")
+ writer.flush()
+ }
+ } catch (IOException e) {
+ // Ignored
+ }
+ })
+ outputThread.setName("${serverName} - OutputThread")
+ outputThread.start()
+
+ Writer writer
+ Thread inputThread = new Thread({
+ Reader reader = System.in.newReader()
+ writer = proc.getOutputStream().newWriter()
+ try {
+ while (proc.alive) {
+ String s = reader.readLine()
+ writer.write(s + "\n")
+ writer.flush()
+ }
+ } catch (IOException e) {
+ // Ignored
+ }
+ })
+ inputThread.setName("${serverName} - InputThread")
+ inputThread.start()
+
+ gradle.buildFinished { buildResult ->
+ if (!proc.alive) {
+ return
+ }
+ writer = proc.getOutputStream().newWriter()
+ writer.write("stop\n")
+ writer.flush()
+ awaitClose(proc, outputThread, inputThread)
+ }
+ awaitClose(proc, outputThread, inputThread)
+};
+
+private static def awaitClose(Process proc, Thread outputThread, Thread inputThread) {
+ while (proc.alive) {
+ Thread.sleep(10)
+ }
+ proc.closeStreams()
+ outputThread.interrupt()
+ inputThread.interrupt()
+}
+
+private def answer(String question) {
+ while (System.in.available() > 0) System.in.read()
+ println(question)
+ boolean valid = "Yy".contains(((char) System.in.read()).toString())
+ while (System.in.available() > 0) System.in.read()
+ return valid
+}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index cbacdd2..4d05bc2 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,8 +1 @@
-pluginManagement {
- repositories {
- mavenLocal()
- gradlePluginPortal()
- }
-}
rootProject.name = 'TowerRun'
-