-
Notifications
You must be signed in to change notification settings - Fork 191
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Repo-based creator templates (#2304)
* Initial custom template system * Add remember, editable and property derivation * Add hidden properties * Implement property derivation for all types * Actual types implementation Also fix template condition evaluation * Some more stuff * Some more refactoring to get things working nicely * Move CreatorProperties to an EP * Add property UI order * Move custom template to a separate module builder * Add default values to template descriptor * Add option to output null value if default * Add group/collapsibleGroup support * Dropdown labels * Use segmented buttons for options by default * Support comma separated string lists * Add TemplateProviders * WIP Sponge creator * Support built-in templates * Support multiple templates per provider * Remove commented code * Remember used templates * Move CustomPlatformStep to the appropriate package * Fix recent template provider being saved in the recent list Also always show the templates list in recent templates * Switch BuiltInTemplateProvider to flat dir * Add NeoForge specific stuff * Add TemplateApi marker annotation for template models * Move RecentProjectTemplates out of the models package * Remove old commented code * Replace usage of kotlin plugin function by stdlib one * Always refresh template files * Add fabric_versions * Add license property * Handle template descriptor deserialization errors * Basic template inheritance and template labels * Add basic versioning * Display all yarn/fabric api versions if none match the selected game version * Add property validation support * Don't even call buildUi if property is hidden * Add "select" derivation * Fix templates not getting access to builtin properties * Include license displayname in LicenseData * Add 1.16 & 1.20.6 to MinecraftVersions * Remove unused class * Some ClassFqn doc & withClassName * Add ForgeVersions * Allow to get template from outside the template root * Builtin templates update * Add templates repo as resource modules Helps with template completion using velocity implicit hints * Flatten a bit the builtin template update code * Ktlint fixes * Add licenses * Revert unneeded change * Make properties & files properly optional Also log when a template cannot be loaded because of and unhandled version * Restore required nonnull assert * Run gradle wrapper task after project import * Add .gitignore and git add generated files after gradle wrapper task * Architectury template * Add paper manifest warning * Fix ktlint warnings * Include templates repo as submodule * Include templates in publish workflow * Bump templates submodule * Switch builtin url to org repo * Fix directory name in builtin provider * Explicitly import Gradle and Maven projects * Remove unused imports * Use org repo * Promote new wizard I'd like to keep the old one for some time until all the new templates are proven to be fully working * Actually use the correct org name I swear... * Get rid of AbstractLongRunningAssetsStep usage Also improve robustness of the creator * Reformat and open main files * Remove unused import * Specify TemplateApi target and retention * Improve loading UI/UX * Localization support * Display validation and unhandled errors to user * Split templates into groups * Bump templates * Add user-configurable repositories instead of raw providers * Add back builtin provider * Remove recent templates related code * Convert recursive virtualfile loop into visitor * Make provider label a property and localize it * Move repo table code outside of MinecraftConfigurable * Fix differences in creator properties naming and ctor parameters order * Some work towards more extensible derivations * Add missing licenses * Remove unused imports * Get rid of builtin sponge specific derivation * Rework how all derivations work, with validation now! * Fix imports, again * MavenArtifactVersion should load versions in setupProperty * Invert hidden -> visible and added custom visibility conditions * Add build coords default group and version * Add rawVersionFilter to maven artifact version property * Add versionFilter to maven artifact version property * Fix dropdown default values and add validation to ensure selection is valid * Add Bungeecord and Spigot Kotlin templates Also fix IntegerCreatorProperty default value * Fix Parchment property not matching first release of a major mc version * NeoForge Kotlin templates * Add $version placeholder to remote url * Fixup github archive matcher * Add Fabric split sources * Use Neo's ModDev plugin in 1.21 * Improve template error reporting * Fix Loom's default version selection * No longer unzip remote templates Instead read directly inside them, and allow to configure a different repo root in cases like GitHub's zips, that have a root directory named after the repo and branch name * Cache downloaded versions * Remove superfluous blank line * Actually add the builtin repo by default * Hide the repositories row if only one repo is configured * Proper module generation for finalizers * Update templates submodule * Add customizable storage keys * Rename FabricApi -> Fabric API and ArchitecturyApi -> Architectury API * Remove dead code * Add versions download indicator
- Loading branch information
Showing
81 changed files
with
6,633 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
[submodule "templates"] | ||
path = templates | ||
branch = main | ||
url = https://github.com/minecraft-dev/templates |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
/* | ||
* Minecraft Development for IntelliJ | ||
* | ||
* https://mcdev.io/ | ||
* | ||
* Copyright (C) 2024 minecraft-dev | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU Lesser General Public License as published | ||
* by the Free Software Foundation, version 3.0 only. | ||
* | ||
* 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 Lesser General Public License | ||
* along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
package com.demonwav.mcdev.creator.custom | ||
|
||
import com.demonwav.mcdev.asset.MCDevBundle | ||
import com.demonwav.mcdev.platform.fabric.util.FabricVersions | ||
import com.demonwav.mcdev.util.SemanticVersion | ||
import com.intellij.openapi.ui.ComboBox | ||
import com.intellij.openapi.ui.ValidationInfo | ||
import com.intellij.openapi.ui.validation.DialogValidation | ||
import com.intellij.openapi.ui.validation.validationErrorIf | ||
import com.intellij.openapi.util.text.StringUtil | ||
import javax.swing.JComponent | ||
|
||
object BuiltinValidations { | ||
val nonBlank = validationErrorIf<String>(MCDevBundle("creator.validation.blank")) { it.isBlank() } | ||
|
||
val validVersion = validationErrorIf<String>(MCDevBundle("creator.validation.semantic_version")) { | ||
SemanticVersion.tryParse(it) == null | ||
} | ||
|
||
val nonEmptyVersion = DialogValidation.WithParameter<ComboBox<SemanticVersion>> { combobox -> | ||
DialogValidation { | ||
if (combobox.item?.parts.isNullOrEmpty()) { | ||
ValidationInfo(MCDevBundle("creator.validation.semantic_version")) | ||
} else { | ||
null | ||
} | ||
} | ||
} | ||
|
||
val nonEmptyYarnVersion = DialogValidation.WithParameter<ComboBox<FabricVersions.YarnVersion>> { combobox -> | ||
DialogValidation { | ||
if (combobox.item == null) { | ||
ValidationInfo(MCDevBundle("creator.validation.semantic_version")) | ||
} else { | ||
null | ||
} | ||
} | ||
} | ||
|
||
val validClassFqn = validationErrorIf<String>(MCDevBundle("creator.validation.class_fqn")) { | ||
it.isBlank() || it.split('.').any { part -> !StringUtil.isJavaIdentifier(part) } | ||
} | ||
|
||
fun byRegex(regex: Regex): DialogValidation.WithParameter<() -> String> = | ||
validationErrorIf<String>(MCDevBundle("creator.validation.regex", regex)) { !it.matches(regex) } | ||
|
||
fun <T> isAnyOf( | ||
selectionGetter: () -> T, | ||
options: Collection<T>, | ||
component: JComponent? = null | ||
): DialogValidation = DialogValidation { | ||
if (selectionGetter() !in options) { | ||
return@DialogValidation ValidationInfo(MCDevBundle("creator.validation.invalid_option"), component) | ||
} | ||
|
||
return@DialogValidation null | ||
} | ||
} |
58 changes: 58 additions & 0 deletions
58
src/main/kotlin/creator/custom/CreatorProgressIndicator.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
/* | ||
* Minecraft Development for IntelliJ | ||
* | ||
* https://mcdev.io/ | ||
* | ||
* Copyright (C) 2024 minecraft-dev | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU Lesser General Public License as published | ||
* by the Free Software Foundation, version 3.0 only. | ||
* | ||
* 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 Lesser General Public License | ||
* along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
package com.demonwav.mcdev.creator.custom | ||
|
||
import com.intellij.openapi.observable.properties.GraphProperty | ||
import com.intellij.openapi.progress.TaskInfo | ||
import com.intellij.openapi.progress.util.ProgressIndicatorBase | ||
|
||
class CreatorProgressIndicator( | ||
val loadingProperty: GraphProperty<Boolean>? = null, | ||
val textProperty: GraphProperty<String>? = null, | ||
val text2Property: GraphProperty<String>? = null, | ||
) : ProgressIndicatorBase(false, false) { | ||
|
||
init { | ||
loadingProperty?.set(false) | ||
textProperty?.set("") | ||
text2Property?.set("") | ||
} | ||
|
||
override fun start() { | ||
super.start() | ||
loadingProperty?.set(true) | ||
} | ||
|
||
override fun finish(task: TaskInfo) { | ||
super.finish(task) | ||
loadingProperty?.set(false) | ||
} | ||
|
||
override fun setText(text: String?) { | ||
super.setText(text) | ||
textProperty?.set(text ?: "") | ||
} | ||
|
||
override fun setText2(text: String?) { | ||
super.setText2(text) | ||
text2Property?.set(text ?: "") | ||
} | ||
} |
Oops, something went wrong.