feat: added basic UI, started on backend
chore: added coroutines Signed-off-by: limited_dev <loginakkisativ@gmail.com>
This commit is contained in:
parent
56f797f7a3
commit
74d09702a8
8 changed files with 338 additions and 2 deletions
|
@ -51,6 +51,7 @@ repositories {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("com.formdev:flatlaf:2.4")
|
implementation("com.formdev:flatlaf:2.4")
|
||||||
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
|
||||||
}
|
}
|
||||||
|
|
||||||
val targetJavaVersion = 17
|
val targetJavaVersion = 17
|
||||||
|
@ -91,6 +92,7 @@ tasks {
|
||||||
withType<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar> {
|
withType<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar> {
|
||||||
dependencies {
|
dependencies {
|
||||||
include(dependency("com.formdev:flatlaf:2.4"))
|
include(dependency("com.formdev:flatlaf:2.4"))
|
||||||
|
include(dependency("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4"))
|
||||||
}
|
}
|
||||||
dependsOn("generateTemplates", "processResources")
|
dependsOn("generateTemplates", "processResources")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 limited_dev
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
package de.limited_dev.modpackinstaller
|
package de.limited_dev.modpackinstaller
|
||||||
|
|
||||||
|
import com.formdev.flatlaf.FlatDarculaLaf
|
||||||
import de.limited_dev.modpackinstaller.build.BuildConstants
|
import de.limited_dev.modpackinstaller.build.BuildConstants
|
||||||
|
import de.limited_dev.modpackinstaller.gui.GUI
|
||||||
|
|
||||||
fun main() {
|
fun main() {
|
||||||
println("Hello World")
|
println("Launching installer...")
|
||||||
println("${BuildConstants.version} ${BuildConstants.fabricDownloadLocation} ${BuildConstants.modpackDownloadLocation}")
|
println("${BuildConstants.version}")
|
||||||
|
println("Download Location Fabric: ${BuildConstants.fabricDownloadLocation}")
|
||||||
|
println("Download Modpacka Fabric: ${BuildConstants.modpackDownloadLocation}")
|
||||||
|
FlatDarculaLaf.setup()
|
||||||
|
GUI()
|
||||||
}
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 limited_dev
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.limited_dev.modpackinstaller.backend
|
||||||
|
|
||||||
|
import kotlinx.coroutines.GlobalScope
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
|
|
||||||
|
object Manager {
|
||||||
|
fun startDownloadAndInstall(dotMcLocation: String) {
|
||||||
|
val modloaderCoroutine = GlobalScope.launch {
|
||||||
|
println("Downloading Modloader")
|
||||||
|
}
|
||||||
|
|
||||||
|
val modpackCoroutine = GlobalScope.launch {
|
||||||
|
println("Downloading Modpack")
|
||||||
|
}
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
modloaderCoroutine.join()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 limited_dev
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.limited_dev.modpackinstaller.gui
|
||||||
|
|
||||||
|
import java.awt.GridLayout
|
||||||
|
import javax.swing.JLabel
|
||||||
|
import javax.swing.JPanel
|
||||||
|
import javax.swing.JSeparator
|
||||||
|
import javax.swing.border.EmptyBorder
|
||||||
|
|
||||||
|
class BottomBar : JPanel() {
|
||||||
|
init {
|
||||||
|
this.layout = GridLayout(2, 4)
|
||||||
|
this.border = EmptyBorder(0, 10, 10, 10)
|
||||||
|
|
||||||
|
val label = JLabel("(c) 2023 limited_dev, Licensed under GPL-3.0")
|
||||||
|
|
||||||
|
this.add(JSeparator())
|
||||||
|
this.add(label)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
43
src/main/kotlin/de/limited_dev/modpackinstaller/gui/GUI.kt
Normal file
43
src/main/kotlin/de/limited_dev/modpackinstaller/gui/GUI.kt
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 limited_dev
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.limited_dev.modpackinstaller.gui
|
||||||
|
|
||||||
|
import de.limited_dev.modpackinstaller.build.BuildConstants
|
||||||
|
import java.awt.BorderLayout
|
||||||
|
import javax.swing.JFrame
|
||||||
|
import javax.swing.WindowConstants
|
||||||
|
|
||||||
|
class GUI : JFrame("Modpack installer " + BuildConstants.version) {
|
||||||
|
init {
|
||||||
|
this.isResizable = false
|
||||||
|
this.defaultCloseOperation = WindowConstants.EXIT_ON_CLOSE
|
||||||
|
|
||||||
|
val contentPane = this.contentPane
|
||||||
|
contentPane.layout = BorderLayout()
|
||||||
|
|
||||||
|
contentPane.add(MainPanel(), BorderLayout.CENTER)
|
||||||
|
contentPane.add(BottomBar(), BorderLayout.SOUTH)
|
||||||
|
|
||||||
|
this.pack()
|
||||||
|
this.setLocationRelativeTo(null)
|
||||||
|
this.isVisible = true
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
103
src/main/kotlin/de/limited_dev/modpackinstaller/gui/MainPanel.kt
Normal file
103
src/main/kotlin/de/limited_dev/modpackinstaller/gui/MainPanel.kt
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 limited_dev
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.limited_dev.modpackinstaller.gui
|
||||||
|
|
||||||
|
import de.limited_dev.modpackinstaller.backend.Manager
|
||||||
|
import de.limited_dev.modpackinstaller.util.OSHelper
|
||||||
|
import de.limited_dev.modpackinstaller.util.PopupFactory
|
||||||
|
import java.awt.*
|
||||||
|
import java.io.File
|
||||||
|
import javax.swing.*
|
||||||
|
import javax.swing.border.EmptyBorder
|
||||||
|
|
||||||
|
|
||||||
|
class MainPanel : JPanel() {
|
||||||
|
private val generatorButton = JButton("Download & Install")
|
||||||
|
private var fabricLabel: JLabel
|
||||||
|
private var modpackLabel: JLabel
|
||||||
|
private var dotMcLocationBar: JTextField
|
||||||
|
private var dotMcLocation: String = OSHelper.os.oSType
|
||||||
|
|
||||||
|
init {
|
||||||
|
val layout = GridLayout(6, 1)
|
||||||
|
|
||||||
|
this.layout = layout
|
||||||
|
border = EmptyBorder(10, 10, 10, 10)
|
||||||
|
|
||||||
|
val info = JLabel("Modpack Installer")
|
||||||
|
info.horizontalAlignment = SwingConstants.CENTER
|
||||||
|
info.font = Font(font.name, font.style, font.size + 6)
|
||||||
|
this.add(info, BorderLayout.NORTH)
|
||||||
|
|
||||||
|
val flayout = FlowLayout()
|
||||||
|
flayout.hgap = 10
|
||||||
|
flayout.alignment = SwingConstants.VERTICAL
|
||||||
|
|
||||||
|
fabricLabel = JLabel("Fabric mod loader")
|
||||||
|
modpackLabel = JLabel("Modpack")
|
||||||
|
|
||||||
|
this.add(fabricLabel)
|
||||||
|
this.add(modpackLabel)
|
||||||
|
|
||||||
|
dotMcLocationBar = JTextField(dotMcLocation)
|
||||||
|
dotMcLocationBar.isEditable = false
|
||||||
|
this.add(dotMcLocationBar)
|
||||||
|
|
||||||
|
val openFileChooser = JButton("Select .minecraft Folder")
|
||||||
|
openFileChooser.addActionListener {
|
||||||
|
dotMcLocation = promptForFolder(openFileChooser)
|
||||||
|
dotMcLocationBar.text = dotMcLocation
|
||||||
|
}
|
||||||
|
this.add(openFileChooser)
|
||||||
|
generatorButton.addActionListener {
|
||||||
|
Manager.startDownloadAndInstall(dotMcLocation)
|
||||||
|
val dotMcMods = File(dotMcLocation + File.separator + "mods")
|
||||||
|
if (dotMcMods.exists()) {
|
||||||
|
val bool = PopupFactory.getYesOrNoError(
|
||||||
|
"Warning! .minecraft/mods folder found",
|
||||||
|
"This installer will clear your mods folder in order to install the right Modpack."
|
||||||
|
)
|
||||||
|
if (bool) {
|
||||||
|
generatorButton.isEnabled = false
|
||||||
|
Manager.startDownloadAndInstall(dotMcLocation)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
generatorButton.isEnabled = false
|
||||||
|
Manager.startDownloadAndInstall(dotMcLocation)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.add(generatorButton)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun promptForFolder(parent: Component?): String {
|
||||||
|
val fc = JFileChooser()
|
||||||
|
fc.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY
|
||||||
|
return if (fc.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
fc.selectedFile.absolutePath
|
||||||
|
} else "Error"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updateFabricModloader(tx: String) {
|
||||||
|
fabricLabel.text = "Fabric mod loader $tx"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updateModpack(tx: String) {
|
||||||
|
modpackLabel.text = "Modpack $tx"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 limited_dev
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.limited_dev.modpackinstaller.util
|
||||||
|
|
||||||
|
import java.io.File
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
enum class OSHelper(val oSType: String) {
|
||||||
|
WINDOWS(System.getenv("APPDATA") + File.separator + ".minecraft"),
|
||||||
|
MAC("Please select your .minecraft folder"),
|
||||||
|
LINUX(System.getProperty("user.home") + File.separator + ".minecraft");
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val os: OSHelper
|
||||||
|
get() {
|
||||||
|
val currentOS = System.getProperty("os.name").lowercase(Locale.getDefault())
|
||||||
|
if (currentOS.startsWith("windows")) {
|
||||||
|
return WINDOWS
|
||||||
|
} else if (currentOS.startsWith("mac")) {
|
||||||
|
return MAC
|
||||||
|
}
|
||||||
|
return LINUX
|
||||||
|
}
|
||||||
|
val dotMinecraftLocation: String
|
||||||
|
get() = System.getProperty("os.name")
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 limited_dev
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.limited_dev.modpackinstaller.util
|
||||||
|
|
||||||
|
import javax.swing.JOptionPane
|
||||||
|
|
||||||
|
object PopupFactory {
|
||||||
|
|
||||||
|
fun getYesOrNoError(title: String, msg: String): Boolean {
|
||||||
|
println("Popup created")
|
||||||
|
val res = JOptionPane.showConfirmDialog(
|
||||||
|
null,
|
||||||
|
msg,
|
||||||
|
title,
|
||||||
|
JOptionPane.OK_CANCEL_OPTION
|
||||||
|
)
|
||||||
|
if (res == 0) {
|
||||||
|
println("Pressed OK")
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
println("Pressed CANCEL")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue