SteamWar/BauSystem
Archiviert
13
0
Dieses Repository wurde am 2024-08-04 archiviert. Du kannst Dateien ansehen und es klonen, aber nicht pushen oder Issues/Pull-Requests öffnen.
BauSystem/build.gradle

209 Zeilen
5.3 KiB
Groovy

/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2020 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
2021-04-11 16:53:44 +02:00
import org.apache.tools.ant.taskdefs.condition.Os
2021-04-11 18:56:02 +02:00
import org.codehaus.groovy.runtime.ProcessGroovyMethods
2021-04-11 16:53:44 +02:00
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 'application'
id 'com.github.johnrengelman.shadow' version '5.0.0'
}
group 'steamwar'
version ''
ext {
artifact = 'BauSystem'
uberJarName = "${artifact}-all.jar"
jarName = "${artifact}.jar"
libs = "${buildDir}/libs"
2021-04-11 16:53:44 +02:00
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
operatingSystem = "windows"
} else {
operatingSystem = "unix"
}
}
compileJava.options.encoding = 'UTF-8'
sourceCompatibility = 1.8
targetCompatibility = 1.8
mainClassName = ''
allprojects {
repositories {
mavenCentral()
jcenter()
}
}
dependencies {
implementation project(":BauSystem_Main")
}
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 (project.hasProperty("hostname")) {
2021-04-12 10:49:52 +02:00
def server = "Dev1.15"
// def server = "Developer"
task uploadProject {
description 'Upload this project'
group "Steamwar"
doLast {
await(shell("scp ${libs}/${jarName} ${hostname}:~/${server}/plugins"))
if (!answer("Start ${server} server?")) {
return
}
serverStart(server)
}
}
2021-04-12 10:49:52 +02:00
task startDevServer {
description 'Start the DevServer'
group "Steamwar"
doLast {
serverStart(server)
}
}
}
2021-04-11 18:56:02 +02:00
def await(Process proc) {
def out = new StringBuilder()
def err = new StringBuilder()
proc.waitForProcessOutput(out, err)
2021-04-12 09:24:27 +02:00
return [out, err, proc.exitValue()]
2021-04-11 18:56:02 +02:00
}
def shell(String command) {
2021-04-11 16:53:44 +02:00
if (operatingSystem == "unix") {
2021-04-12 09:23:42 +02:00
return ['bash', '-c', command].execute()
2021-04-11 16:53:44 +02:00
} else {
2021-04-12 09:23:42 +02:00
return ["cmd", "/c", command].execute()
2021-04-11 16:53:44 +02:00
}
}
def serverStart(String serverName) {
def proc = shell("ssh -t ${hostname} \"./mc ${serverName}\"")
2021-04-11 18:56:02 +02:00
2021-04-12 10:49:52 +02:00
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 (s.contains("SteamWar? Unbekannter Befehl.")) {
continue
}
writer.write(s + "\n")
writer.flush()
}
} catch (IOException e) {
// Ignored
}
})
outputThread.setName("${serverName} - OutputThread")
2021-04-12 10:49:52 +02:00
outputThread.start()
2021-04-11 18:56:02 +02:00
2021-04-12 10:49:52 +02:00
Writer writer
Thread inputThread = new Thread({
Reader reader = System.in.newReader()
2021-04-12 10:49:52 +02:00
writer = proc.getOutputStream().newWriter()
try {
while (proc.alive) {
String s = reader.readLine()
writer.write(s + "\n")
writer.flush()
2021-04-11 18:56:02 +02:00
}
} catch (IOException e) {
// Ignored
2021-04-11 18:56:02 +02:00
}
})
inputThread.setName("${serverName} - InputThread")
2021-04-11 18:56:02 +02:00
inputThread.start()
gradle.buildFinished { buildResult ->
if (!proc.alive) {
return
}
2021-04-12 10:49:52 +02:00
writer = proc.getOutputStream().newWriter()
writer.write("stop\n")
writer.flush()
2021-04-12 10:49:52 +02:00
while (proc.alive) {
Thread.sleep(10)
}
proc.closeStreams()
outputThread.interrupt()
inputThread.interrupt()
}
2021-04-11 18:56:02 +02:00
while (proc.alive) {
Thread.sleep(10)
}
outputThread.interrupt()
inputThread.interrupt()
2021-04-12 11:04:15 +02:00
}
2021-04-11 18:56:02 +02:00
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
}