⁠
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.creator
- import com.demonwav.mcdev.creator.buildsystem.BuildSystem
- import com.intellij.openapi.module.Module
- /**
- * This class represents a specific configuration for a project to be created. Typically these configurations represent
- * ([PlatformType][com.demonwav.mcdev.platform.PlatformType], [BuildSystem][com.demonwav.mcdev.creator.buildsystem.BuildSystem])
- * pairs, but this API does not apply any such restriction. Each `BuildSystem` defines how to create a [ProjectCreator]
- * instance for the given configuration using the [buildCreator][com.demonwav.mcdev.creator.buildsystem.BuildSystem.buildCreator]
- * method.
- *
- *
- *
- * In the current implementation the creation of [ProjectCreator] instances are delegated to project configurations via
- * implementing the [GradleCreator][com.demonwav.mcdev.creator.buildsystem.gradle.GradleCreator] and/or
- * [MavenCreator][com.demonwav.mcdev.creator.buildsystem.maven.MavenCreator] interfaces. This allows some configurations
- * to produce different [ProjectCreator] instances based on their specific configuration, such as
- * [ForgeProjectConfig][com.demonwav.mcdev.platform.forge.creator.ForgeProjectConfig].
- */
- interface ProjectCreator {
- /**
- * Returns the [CreatorStep]s which should be executed in order to create the project configuration represented by
- * this [ProjectCreator].
- */
- fun getSteps(): Iterable<CreatorStep>
- }
- typealias JavaClassTextMapper = (packageName: String, className: String) -> String
- abstract class BaseProjectCreator(
- private val rootModule: Module,
- private val buildSystem: BuildSystem
- ) : ProjectCreator {
- protected val project
- get() = rootModule.project
- protected fun createJavaClassStep(
- qualifiedClassName: String,
- mapper: JavaClassTextMapper
- ): BasicJavaClassStep {
- val (packageName, className) = splitPackage(qualifiedClassName)
- val classText = mapper(packageName, className)
- return BasicJavaClassStep(project, buildSystem, qualifiedClassName, classText)
- }
- protected fun splitPackage(text: String): Pair<String, String> {
- val index = text.lastIndexOf('.')
- val className = text.substring(index + 1)
- val packageName = text.substring(0, index)
- return packageName to className
- }
- }