⁠
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.fabric.util
- import com.demonwav.mcdev.creator.selectProxy
- import com.demonwav.mcdev.update.PluginUtil
- import com.demonwav.mcdev.util.SemanticVersion
- import com.github.kittinunf.fuel.core.FuelManager
- import com.github.kittinunf.fuel.core.requests.suspendable
- import com.google.gson.JsonParser
- import com.google.gson.JsonSyntaxException
- import com.intellij.openapi.diagnostic.logger
- import java.io.IOException
- private val LOGGER = logger<FabricVersions>()
- class FabricVersions(val game: List<Game>, val mappings: List<Mappings>, val loader: List<SemanticVersion>) {
- class Game(val version: String, val stable: Boolean)
- class Mappings(val gameVersion: String, val version: YarnVersion)
- class YarnVersion(val name: String, val build: Int) : Comparable<YarnVersion> {
- override fun toString() = name
- override fun compareTo(other: YarnVersion) = build.compareTo(other.build)
- }
- companion object {
- suspend fun downloadData(): FabricVersions? {
- try {
- val url = "https://meta.fabricmc.net/v2/versions"
- val manager = FuelManager()
- manager.proxy = selectProxy(url)
- val response = manager.get(url)
- .header("User-Agent", PluginUtil.useragent)
- .suspendable()
- .await()
- val gameList = mutableListOf<Game>()
- val mappingsList = mutableListOf<Mappings>()
- val loaderList = mutableListOf<SemanticVersion>()
- response.body().toStream().use { stream ->
- val json = JsonParser.parseReader(stream.reader())?.asJsonObject ?: return null
- val game = json["game"]?.asJsonArray ?: return null
- for (version in game) {
- val versionObj = version?.asJsonObject ?: return null
- val gameVer = versionObj["version"]?.asString ?: return null
- val stable = versionObj["stable"]?.asBoolean ?: return null
- gameList += Game(gameVer, stable)
- }
- val mappings = json["mappings"]?.asJsonArray ?: return null
- for (mapping in mappings) {
- val mappingObj = mapping?.asJsonObject ?: return null
- val gameVersion = mappingObj["gameVersion"]?.asString ?: return null
- val version = mappingObj["version"]?.asString ?: return null
- val build = mappingObj["build"]?.asInt ?: return null
- mappingsList += Mappings(gameVersion, YarnVersion(version, build))
- }
- val loaders = json["loader"]?.asJsonArray ?: return null
- for (loader in loaders) {
- val loaderObj = loader?.asJsonObject ?: return null
- val version = loaderObj["version"]?.asString?.let(SemanticVersion::tryParse) ?: return null
- loaderList += version
- }
- }
- return FabricVersions(gameList, mappingsList, loaderList)
- } catch (e: IOException) {
- LOGGER.error(e)
- } catch (e: JsonSyntaxException) {
- LOGGER.error(e)
- } catch (e: IllegalStateException) {
- LOGGER.error(e)
- } catch (e: UnsupportedOperationException) {
- LOGGER.error(e)
- }
- return null
- }
- }
- }