⁠
joseph burton: Minecraft new project wizard (#1933 )
* Forge creator almost working
* Store authors and website for next time the user uses the creator
* Don't allow for dialog submission before a latent step is finished
* Fabric mod creator
* Add modid.mixins.json to Forge project creator
* Start with Architectury creator
* Fix long-running tasks that need to run after one another
* Apply website in Forge creator
* Set the correct gradle version in the Forge project creator
* Architectury should be finished but it's not working, not sure why
* Add support for custom build systems via extension points
* Sponge project creator, first maven implementation
* Remove unsupported platforms from the readme
* Add missing platforms to readme
* Replace some silly code with less silly code
* Add Spigot and Paper creators
* Add Velocity creator
* Add BungeeCord and Waterfall creator
* Delete unused code
* ktlint format
* Apply the correct JDK version depending on the platform and version
* Fix license years after merge
* Improvements and fixes to JDK selector UI
* Fix architectury template
* Fix issues with Sponge creator
* Fix IncorrectOperationException in AbstractLatentStep
* Add option to create a git repo (which also creates a gitignore)
* UI improvements
* Add a message encouraging users to report outdated templates
* Add note to project wizard outdated form warning not to request new platforms
* Paper before Spigot
* Remove dependency on TemplateMakerFabric
* Reorganize creators into multiple files and repackage some things
* Improve documentation
* Improve ergonomics for build system properties, main class name, repository, issue tracker
* Limit Sponge API version to 8 and above in dropdown box
* Prevent class name from messing up when the project name contains dots
* Forge creator almost working
* Store authors and website for next time the user uses the creator
* Don't allow for dialog submission before a latent step is finished
* Fabric mod creator
* Add modid.mixins.json to Forge project creator
* Start with Architectury creator
* Fix long-running tasks that need to run after one another
* Apply website in Forge creator
* Set the correct gradle version in the Forge project creator
* Architectury should be finished but it's not working, not sure why
* Add support for custom build systems via extension points
* Sponge project creator, first maven implementation
* Remove unsupported platforms from the readme
* Add missing platforms to readme
* Replace some silly code with less silly code
* Add Spigot and Paper creators
* Add Velocity creator
* Add BungeeCord and Waterfall creator
* Delete unused code
* ktlint format
* Apply the correct JDK version depending on the platform and version
* Fix license years after merge
* Improvements and fixes to JDK selector UI
* Fix architectury template
* Fix issues with Sponge creator
* Fix IncorrectOperationException in AbstractLatentStep
* Add option to create a git repo (which also creates a gitignore)
* UI improvements
* Add a message encouraging users to report outdated templates
* Add note to project wizard outdated form warning not to request new platforms
* Paper before Spigot
* Remove dependency on TemplateMakerFabric
* Reorganize creators into multiple files and repackage some things
* Improve documentation
* Improve ergonomics for build system properties, main class name, repository, issue tracker
* Limit Sponge API version to 8 and above in dropdown box
* Prevent class name from messing up when the project name contains dots
- /*
- * Minecraft Dev for IntelliJ
- *
- * https://minecraftdev.org
- *
- * Copyright (c) 2023 minecraft-dev
- *
- * MIT License
- */
- package com.demonwav.mcdev.platform.bukkit.creator
- import com.demonwav.mcdev.asset.PlatformAssets
- import com.demonwav.mcdev.creator.MinecraftModuleWizardStep
- import com.demonwav.mcdev.creator.MinecraftProjectCreator
- import com.demonwav.mcdev.creator.ValidatedField
- import com.demonwav.mcdev.creator.ValidatedFieldType.CLASS_NAME
- import com.demonwav.mcdev.creator.ValidatedFieldType.LIST
- import com.demonwav.mcdev.creator.ValidatedFieldType.NON_BLANK
- import com.demonwav.mcdev.creator.getVersionSelector
- import com.demonwav.mcdev.platform.PlatformType
- import com.demonwav.mcdev.platform.bukkit.data.LoadOrder
- import javax.swing.JComboBox
- import javax.swing.JComponent
- import javax.swing.JLabel
- import javax.swing.JPanel
- import javax.swing.JTextField
- import kotlinx.coroutines.CoroutineScope
- import kotlinx.coroutines.Dispatchers
- import kotlinx.coroutines.launch
- import kotlinx.coroutines.swing.Swing
- import kotlinx.coroutines.withContext
- class BukkitProjectSettingsWizard(private val creator: MinecraftProjectCreator) : MinecraftModuleWizardStep() {
- @ValidatedField(NON_BLANK)
- private lateinit var pluginNameField: JTextField
- @ValidatedField(NON_BLANK, CLASS_NAME)
- private lateinit var mainClassField: JTextField
- private lateinit var panel: JPanel
- private lateinit var descriptionField: JTextField
- @ValidatedField(LIST)
- private lateinit var authorsField: JTextField
- private lateinit var websiteField: JTextField
- private lateinit var prefixField: JTextField
- private lateinit var loadOrderBox: JComboBox<*>
- private lateinit var loadBeforeField: JTextField
- @ValidatedField(LIST)
- private lateinit var dependField: JTextField
- private lateinit var softDependField: JTextField
- private lateinit var title: JLabel
- private lateinit var minecraftVersionBox: JComboBox<String>
- private lateinit var errorLabel: JLabel
- private var config: BukkitProjectConfig? = null
- private var versionsLoaded: Boolean = false
- override fun getComponent(): JComponent {
- return panel
- }
- override fun isStepVisible(): Boolean {
- return creator.config is BukkitProjectConfig
- }
- override fun updateStep() {
- config = creator.config as? BukkitProjectConfig
- if (config == null) {
- return
- }
- val conf = config ?: return
- basicUpdateStep(creator, pluginNameField, mainClassField)
- when (conf.type) {
- PlatformType.BUKKIT -> {
- title.icon = PlatformAssets.BUKKIT_ICON_2X
- title.text = "<html><font size=\"5\">Bukkit Settings</font></html>"
- }
- PlatformType.SPIGOT -> {
- title.icon = PlatformAssets.SPIGOT_ICON_2X
- title.text = "<html><font size=\"5\">Spigot Settings</font></html>"
- }
- PlatformType.PAPER -> {
- title.icon = PlatformAssets.PAPER_ICON_2X
- title.text = "<html><font size=\"5\">Paper Settings</font></html>"
- }
- else -> {
- }
- }
- if (versionsLoaded) {
- return
- }
- versionsLoaded = true
- CoroutineScope(Dispatchers.Swing).launch {
- try {
- withContext(Dispatchers.IO) { getVersionSelector(conf.type) }.set(minecraftVersionBox)
- } catch (e: Exception) {
- errorLabel.isVisible = true
- }
- }
- }
- override fun validate(): Boolean {
- return super.validate() && minecraftVersionBox.selectedItem != null
- }
- override fun updateDataModel() {
- val conf = this.config ?: return
- conf.pluginName = this.pluginNameField.text
- conf.mainClass = this.mainClassField.text
- conf.description = this.descriptionField.text
- conf.website = this.websiteField.text
- conf.loadOrder = if (this.loadOrderBox.selectedIndex == 0) LoadOrder.POSTWORLD else LoadOrder.STARTUP
- conf.prefix = this.prefixField.text
- conf.minecraftVersion = this.minecraftVersionBox.selectedItem as String
- conf.setLoadBefore(this.loadBeforeField.text)
- conf.setAuthors(this.authorsField.text)
- conf.setDependencies(this.dependField.text)
- conf.setSoftDependencies(this.softDependField.text)
- }
- }