aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/xyz
diff options
context:
space:
mode:
authorBryson Steck <brysonsteck@protonmail.com>2023-05-07 16:52:51 -0600
committerBryson Steck <brysonsteck@protonmail.com>2023-05-07 16:52:51 -0600
commit47de8220d52dde525d107ee076d090a48ee02c2e (patch)
tree762089f9c92d550c99dc5576cbf7864a8bc1b4d8 /app/src/main/kotlin/xyz
downloadServerCraft-47de8220d52dde525d107ee076d090a48ee02c2e.tar
ServerCraft-47de8220d52dde525d107ee076d090a48ee02c2e.tar.gz
ServerCraft-47de8220d52dde525d107ee076d090a48ee02c2e.tar.bz2
might as well commit before I go further
Diffstat (limited to 'app/src/main/kotlin/xyz')
-rw-r--r--app/src/main/kotlin/xyz/brysonsteck/serverfordummies/App.kt30
-rw-r--r--app/src/main/kotlin/xyz/brysonsteck/serverfordummies/Main.kt5
-rw-r--r--app/src/main/kotlin/xyz/brysonsteck/serverfordummies/PrimaryController.kt124
-rw-r--r--app/src/main/kotlin/xyz/brysonsteck/serverfordummies/downloadFile.kt37
4 files changed, 196 insertions, 0 deletions
diff --git a/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/App.kt b/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/App.kt
new file mode 100644
index 0000000..0547a8f
--- /dev/null
+++ b/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/App.kt
@@ -0,0 +1,30 @@
+/*
+ * This Kotlin source file was generated by the Gradle 'init' task.
+ */
+package xyz.brysonsteck.serverfordummies
+
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+
+class App : Application() {
+
+ override fun start(stage: Stage) {
+ var scene = Scene(loadFXML("primary"), 1500.0, 900.0)
+ stage.title = "Server For Dummies"
+ stage.scene = scene
+ stage.show()
+ }
+
+ private fun loadFXML(fxml: String) : Parent {
+ val fxmlLoader = FXMLLoader(this.javaClass.getResource(fxml + ".fxml"))
+ return fxmlLoader.load()
+ }
+
+ public fun run() {
+ launch()
+ }
+
+}
diff --git a/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/Main.kt b/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/Main.kt
new file mode 100644
index 0000000..604825f
--- /dev/null
+++ b/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/Main.kt
@@ -0,0 +1,5 @@
+package xyz.brysonsteck.serverfordummies
+
+fun main() {
+ App().run()
+} \ No newline at end of file
diff --git a/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/PrimaryController.kt b/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/PrimaryController.kt
new file mode 100644
index 0000000..6e05579
--- /dev/null
+++ b/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/PrimaryController.kt
@@ -0,0 +1,124 @@
+package xyz.brysonsteck.serverfordummies
+
+import java.io.File
+import java.io.IOException
+import java.awt.Checkbox
+import java.util.Properties
+
+import javafx.beans.value.ChangeListener
+import javafx.beans.value.ObservableValue
+import javafx.beans.property.BooleanProperty
+import javafx.collections.FXCollections
+import javafx.fxml.FXML
+import javafx.geometry.Insets
+import javafx.scene.control.Button
+import javafx.scene.control.ChoiceBox
+import javafx.scene.control.Label
+import javafx.scene.control.TextField
+import javafx.scene.control.Spinner
+import javafx.scene.control.TitledPane
+import javafx.scene.control.ButtonBar
+import javafx.scene.control.CheckBox
+import javafx.scene.layout.Border
+import javafx.scene.layout.BorderStroke
+import javafx.scene.layout.GridPane
+import javafx.scene.layout.Pane
+import javafx.scene.layout.HBox
+import javafx.scene.text.TextAlignment
+import javafx.scene.Scene
+import javafx.scene.input.MouseEvent
+import javafx.stage.FileChooser
+import javafx.stage.FileChooser.ExtensionFilter
+import javafx.stage.DirectoryChooser
+import javafx.event.EventHandler
+
+class PrimaryController {
+ @FXML
+ lateinit private var currentDirectoryLabel: Label
+ @FXML
+ lateinit private var worldNameField: TextField
+ @FXML
+ lateinit private var seedField: TextField
+ @FXML
+ lateinit private var portSpinner: Spinner<kotlin.Int>
+ @FXML
+ lateinit private var difficultyBox: ChoiceBox<String>
+ @FXML
+ lateinit private var gamemodeBox: ChoiceBox<String>
+ @FXML
+ lateinit private var worldTypeBox: ChoiceBox<String>
+ @FXML
+ lateinit private var worldSettingsPane: HBox
+ @FXML
+ lateinit private var parentPane: Pane
+ @FXML
+ lateinit private var buttonBar: ButtonBar
+ @FXML
+ lateinit private var flightCheckbox: CheckBox
+ @FXML
+ lateinit private var netherCheckbox: CheckBox
+ @FXML
+ lateinit private var structuresCheckbox: CheckBox
+ @FXML
+ lateinit private var pvpCheckbox: CheckBox
+ @FXML
+ lateinit private var whitelistCheckbox: CheckBox
+ @FXML
+ lateinit private var cmdBlocksCheckbox: CheckBox
+ @FXML
+ lateinit private var playerCountCheckbox: CheckBox
+ @FXML
+ lateinit private var maxPlayersSpinner: Spinner<kotlin.Int>
+ @FXML
+ lateinit private var maxSizeSpinner: Spinner<kotlin.Int>
+ @FXML
+ lateinit private var memorySpinner: Spinner<kotlin.Int>
+ @FXML
+ lateinit private var spawnSpinner: Spinner<kotlin.Int>
+ @FXML
+ lateinit private var simulationSpinner: Spinner<kotlin.Int>
+ @FXML
+ lateinit private var renderSpinner: Spinner<kotlin.Int>
+ @FXML
+ lateinit private var maxTickSpinner: Spinner<kotlin.Int>
+ @FXML
+ lateinit private var progressBar: ProgressBar
+
+ @FXML
+ private fun onDirectoryButtonClick() {
+ val dirChooser = DirectoryChooser()
+ dirChooser.title = "Open a server directory"
+ dirChooser.initialDirectory = File(System.getProperty("user.home"))
+ val result = dirChooser.showDialog(null)
+ if (result != null) {
+ currentDirectoryLabel.text = result.absolutePath
+ parentPane.isDisable = false
+ worldSettingsPane.isDisable = false
+ buttonBar.isDisable = false
+ }
+ }
+
+ @FXML
+ private fun onWorldNameChange() {
+
+ }
+
+ @FXML
+ private fun onSeedChange() {
+
+ }
+
+ @FXML
+ private fun onPortChange() {
+
+ }
+
+ @FXML
+ private fun onCheckboxClick() {
+ }
+
+ @FXML
+ private fun onSpinnerChange() {
+
+ }
+} \ No newline at end of file
diff --git a/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/downloadFile.kt b/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/downloadFile.kt
new file mode 100644
index 0000000..bbaeab5
--- /dev/null
+++ b/app/src/main/kotlin/xyz/brysonsteck/serverfordummies/downloadFile.kt
@@ -0,0 +1,37 @@
+import java.net.http.HttpClient
+import kotlinx.coroutines.flow
+
+sealed class DownloadStatus {
+
+ object Success : DownloadStatus()
+
+ data class Error(val message: String) : DownloadStatus()
+
+ data class Progress(val progress: Int): DownloadStatus()
+
+}
+
+// function from https://gist.githubusercontent.com/SG-K/63e379efcc3d1cd3ce4fb56ee0e29c42/raw/cd9a4a016401b7c54ec01303415b5871ffa26066/downloadFile.kt
+suspend fun HttpClient.downloadFile(file: File, url: String): Flow<DownloadStatus> {
+ return flow {
+ val response = call {
+ url(url)
+ method = HttpMethod.Get
+ }.response
+ val byteArray = ByteArray(response.contentLength()!!.toInt())
+ var offset = 0
+ do {
+ val currentRead = response.content.readAvailable(byteArray, offset, byteArray.size)
+ offset += currentRead
+ val progress = (offset * 100f / byteArray.size).roundToInt()
+ emit(DownloadStatus.Progress(progress))
+ } while (currentRead > 0)
+ response.close()
+ if (response.status.isSuccess()) {
+ file.writeBytes(byteArray)
+ emit(DownloadStatus.Success)
+ } else {
+ emit(DownloadStatus.Error("File not downloaded"))
+ }
+ }
+} \ No newline at end of file