⁠
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.buildsystem.maven
- import com.demonwav.mcdev.creator.CreateDirectoriesStep
- import com.demonwav.mcdev.creator.CreatorStep
- import com.demonwav.mcdev.creator.ProjectConfig
- import com.demonwav.mcdev.creator.ProjectCreator
- import com.demonwav.mcdev.creator.buildsystem.BuildSystem
- import com.demonwav.mcdev.creator.buildsystem.BuildSystemTemplate
- import com.demonwav.mcdev.creator.buildsystem.BuildSystemType
- import com.demonwav.mcdev.platform.PlatformType
- import com.intellij.openapi.module.Module
- import java.nio.file.Path
- import java.util.Locale
- class MavenBuildSystem(
- groupId: String,
- artifactId: String,
- version: String,
- override val parent: MavenBuildSystem? = null
- ) : BuildSystem(groupId, artifactId, version) {
- override val type = BuildSystemType.MAVEN
- override fun createSub(artifactId: String): BuildSystem {
- return MavenBuildSystem(this.groupId, artifactId, this.version, this)
- }
- override fun multiModuleBaseSteps(
- module: Module,
- types: List<PlatformType>,
- rootDirectory: Path
- ): Iterable<CreatorStep> {
- val project = module.project
- val pomText = BuildSystemTemplate.applyPom(project)
- val baseName = artifactId.lowercase(Locale.ENGLISH)
- val moduleNames = mutableListOf("$baseName-common")
- moduleNames += types.map { "$baseName-${it.name.lowercase(Locale.ENGLISH)}" }
- return listOf(
- BasicMavenStep(
- project = project,
- rootDirectory = rootDirectory,
- buildSystem = this,
- config = null,
- pomText = pomText,
- parts = listOf(BasicMavenStep.setupCore(), BasicMavenStep.setupModules(moduleNames))
- )
- )
- }
- override fun multiModuleBaseFinalizer(module: Module, rootDirectory: Path): Iterable<CreatorStep> {
- return listOf(
- MavenGitignoreStep(module.project, rootDirectory),
- BasicMavenFinalizerStep(module, rootDirectory)
- )
- }
- override fun multiModuleCommonSteps(module: Module, rootDirectory: Path): Iterable<CreatorStep> {
- val project = module.project
- val pomText = BuildSystemTemplate.applyCommonPom(project)
- return listOf(
- CreateDirectoriesStep(this, rootDirectory),
- BasicMavenStep(
- project = project,
- rootDirectory = rootDirectory,
- buildSystem = this,
- config = null,
- pomText = pomText,
- parts = listOf(BasicMavenStep.setupSubCore(this.parentOrError.artifactId))
- )
- )
- }
- override fun buildCreator(obj: Any, rootDirectory: Path, module: Module): ProjectCreator {
- if (obj !is MavenCreator) {
- throw IllegalStateException("Cannot create a Maven module from ${obj.javaClass.name}")
- }
- return obj.buildMavenCreator(rootDirectory, module, this)
- }
- override fun configure(config: ProjectConfig, rootDirectory: Path) {
- if (config is MavenCreator) {
- config.configureRootMaven(rootDirectory, this)
- }
- }
- }
- /**
- * A [ProjectConfig][com.demonwav.mcdev.creator.ProjectConfig] must implement this interface in order to support
- * creating `Maven` projects.
- */
- interface MavenCreator {
- fun buildMavenCreator(rootDirectory: Path, module: Module, buildSystem: MavenBuildSystem): ProjectCreator
- /**
- * This method allows extra configuration of the root [MavenBuildSystem] before any [CreatorStep]s have been
- * created or executed. Not typically needed.
- */
- fun configureRootMaven(rootDirectory: Path, buildSystem: MavenBuildSystem) {}
- }