implemented opening directories and starting servers
This commit is contained in:
parent
0522f0aae1
commit
bbf11561cf
1 changed files with 101 additions and 16 deletions
|
@ -6,6 +6,8 @@ import org.rauschig.jarchivelib.*
|
|||
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.io.BufferedReader
|
||||
import java.io.InputStreamReader
|
||||
import java.awt.Checkbox
|
||||
import java.util.Properties
|
||||
import java.net.URL
|
||||
|
@ -108,6 +110,9 @@ class PrimaryController {
|
|||
lateinit private var buildButton: Button
|
||||
|
||||
private var building = false
|
||||
private var directory = ""
|
||||
private var asyncResult = false
|
||||
private var started = false
|
||||
|
||||
@FXML
|
||||
private fun onDirectoryButtonClick() {
|
||||
|
@ -117,10 +122,17 @@ class PrimaryController {
|
|||
val result = dirChooser.showDialog(null)
|
||||
if (result != null) {
|
||||
currentDirectoryLabel.text = result.absolutePath
|
||||
val real = loadServerDir(result.absolutePath)
|
||||
val res = loadServerDir(result.absolutePath)
|
||||
if (res) {
|
||||
parentPane.isDisable = false
|
||||
worldSettingsPane.isDisable = false
|
||||
buttonBar.isDisable = false
|
||||
} else {
|
||||
currentDirectoryLabel.text = "<NONE>"
|
||||
parentPane.isDisable = true
|
||||
worldSettingsPane.isDisable = true
|
||||
buttonBar.isDisable = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -198,17 +210,59 @@ class PrimaryController {
|
|||
|
||||
@FXML
|
||||
private fun onStart() {
|
||||
if (started) {
|
||||
createDialog("warning", "You should only kill the server if\nabsolutely necessary. Data loss may occur.\nContinue anyway?", "Yes", "No", false)
|
||||
return;
|
||||
}
|
||||
started = true
|
||||
statusBar.text = "The Minecraft Server is now running. Shutdown the server to unlock the settings."
|
||||
worldSettingsPane.isDisable = true
|
||||
directoryPane.isDisable = true
|
||||
parentPane.isDisable = true
|
||||
buildButton.isDisable = true
|
||||
startButton.text = "Kill Server"
|
||||
@Suppress("OPT_IN_USAGE")
|
||||
GlobalScope.launch(Dispatchers.Default) {
|
||||
val proc = Runtime.getRuntime().exec("java -jar /home/bryson/test/testserver/server.jar");
|
||||
val builder = ProcessBuilder("java", "-jar", "${directory}server.jar")
|
||||
builder.directory(File(directory))
|
||||
val proc = builder.start()
|
||||
val reader = InputStreamReader(proc.inputStream)
|
||||
val br = BufferedReader(reader)
|
||||
try {
|
||||
var line = br.readLine()
|
||||
while (line != null) {
|
||||
if (asyncResult) {
|
||||
proc.destroy()
|
||||
}
|
||||
println(line);
|
||||
line = br.readLine()
|
||||
}
|
||||
} catch (e: IOException) {
|
||||
println("Stream closed")
|
||||
}
|
||||
withContext(Dispatchers.JavaFx) {
|
||||
statusBar.text = if (asyncResult) {
|
||||
asyncResult = false
|
||||
"Server killed."
|
||||
} else {
|
||||
"Server stopped."
|
||||
}
|
||||
worldSettingsPane.isDisable = false
|
||||
directoryPane.isDisable = false
|
||||
parentPane.isDisable = false
|
||||
buildButton.isDisable = false
|
||||
startButton.text = "Start Server"
|
||||
started = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun createDialog(type: String, msg: String, yes: String, no: String) {
|
||||
private fun createDialog(type: String, msg: String, yes: String, no: String, hold: Boolean): Boolean {
|
||||
var result = false
|
||||
val resources = this.javaClass.getResource("icons/$type.png")
|
||||
val dialog = Stage();
|
||||
dialog.initModality(Modality.APPLICATION_MODAL);
|
||||
dialog.title = directory
|
||||
val scenePane = Pane()
|
||||
val dialogScene = Scene(scenePane, 400.0, 150.0);
|
||||
val imagePane = Pane()
|
||||
|
@ -220,25 +274,45 @@ class PrimaryController {
|
|||
imagePane.children.add(ImageView(icon))
|
||||
val label = Label(msg)
|
||||
label.layoutX = 115.0
|
||||
label.layoutY = 40.0
|
||||
label.layoutY = if (type == "warning") {10.0} else {40.0}
|
||||
val buttonBar = ButtonBar()
|
||||
buttonBar.padding = Insets(10.0, 10.0, 10.0, 10.0)
|
||||
buttonBar.layoutX = 0.0
|
||||
buttonBar.layoutY = 107.0
|
||||
buttonBar.prefWidth = 400.0
|
||||
val noButton = Button(no)
|
||||
noButton.onMouseClicked = EventHandler<MouseEvent>() {
|
||||
if (hold) {
|
||||
result = false
|
||||
} else {
|
||||
asyncResult = false
|
||||
}
|
||||
dialog.hide()
|
||||
}
|
||||
val yesButton = Button(yes)
|
||||
yesButton.onMouseClicked = EventHandler<MouseEvent>() {
|
||||
if (hold) {
|
||||
result = true
|
||||
} else {
|
||||
asyncResult = true
|
||||
}
|
||||
dialog.hide()
|
||||
}
|
||||
yesButton.isDefaultButton = true
|
||||
buttonBar.buttons.add(noButton)
|
||||
buttonBar.buttons.add(yesButton)
|
||||
scenePane.children.addAll(imagePane, label, buttonBar)
|
||||
dialog.setScene(dialogScene);
|
||||
if (hold) {
|
||||
dialog.showAndWait();
|
||||
} else {
|
||||
dialog.show();
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
private fun loadServerDir(dir: String): Boolean {
|
||||
createDialog("info", "There is no server in this directory.\nCreate one?", "Yes", "No")
|
||||
var directory = dir
|
||||
directory = dir
|
||||
var hasServer = false
|
||||
if (!File(directory).isDirectory) {
|
||||
return false;
|
||||
|
@ -249,7 +323,9 @@ class PrimaryController {
|
|||
|
||||
val hasDummy = File(directory + "ServerForDummies").isDirectory
|
||||
|
||||
for (i in 20 downTo 8) {
|
||||
// major version
|
||||
for (i in 25 downTo 8) {
|
||||
// patch number
|
||||
for (j in 15 downTo 0) {
|
||||
var spigotFile: String = ""
|
||||
if (j == 0)
|
||||
|
@ -266,17 +342,26 @@ class PrimaryController {
|
|||
val hasProperties = File(directory + File.separator + "server.properties").isFile
|
||||
|
||||
if (hasDummy && hasServer) {
|
||||
// read jproperties
|
||||
println("read jproperties")
|
||||
// server complete, just read jproperties
|
||||
statusBar.text = "Server found!"
|
||||
startButton.isDisable = false
|
||||
} else if (hasDummy && !hasServer && hasProperties) {
|
||||
// just needs to be built
|
||||
println("build")
|
||||
startButton.isDisable = true
|
||||
statusBar.text = "Server needs to be built before starting."
|
||||
} else if (!hasDummy && hasServer) {
|
||||
// server created externally
|
||||
println("server made externally")
|
||||
val result = createDialog("warning", "This server directory was not created by \nServerForDummies. Errors may occur; copying\nthe world directories to a new folder may be\nsafer. Proceed anyway?", "Yes", "No", true)
|
||||
statusBar.text = "Ready."
|
||||
if (result) {
|
||||
startButton.isDisable = false
|
||||
}
|
||||
return result
|
||||
} else {
|
||||
// assume clean directory
|
||||
println("none")
|
||||
val result = createDialog("info", "There is no server in this directory.\nCreate one?", "Yes", "No", true)
|
||||
statusBar.text = "Ready."
|
||||
return result
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
Loading…
Add table
Reference in a new issue