Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/*
* Minecraft Development for IntelliJ
*
* https://mcdev.io/
*
* Copyright (C) 2025 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.derivation

import com.demonwav.mcdev.creator.custom.PropertyDerivation
import com.demonwav.mcdev.creator.custom.TemplateValidationReporter
import com.demonwav.mcdev.creator.custom.types.CreatorProperty
import com.demonwav.mcdev.util.SemanticVersion

class ExtractPaperApiVersionPropertyDerivation : ExtractVersionMajorMinorPropertyDerivation() {

override fun derive(parentValues: List<Any?>): Any {
val from = parentValues[0] as SemanticVersion
if (from.parts.size < 2) {
return SemanticVersion(emptyList())
}

if (from.parts.size == 3) {
val (part1, part2, part3) = from.parts
if (part1 is SemanticVersion.Companion.VersionPart.ReleasePart &&
part2 is SemanticVersion.Companion.VersionPart.ReleasePart &&
part3 is SemanticVersion.Companion.VersionPart.ReleasePart
) {
// From Minecraft version 1.20.5 onwards, the Paper API version also contains the 'minor' number.
if (part1.version >= 26 || (part2.version >= 21) || (part2.version == 20 && part3.version >= 5)) {
return SemanticVersion(listOf(part1, part2, part3))
}
}
}

val (part1, part2) = from.parts
if (part1 is SemanticVersion.Companion.VersionPart.ReleasePart &&
part2 is SemanticVersion.Companion.VersionPart.ReleasePart
) {
return SemanticVersion(listOf(part1, part2))
}

return SemanticVersion(emptyList())
}

companion object : PropertyDerivationFactory {

override fun create(
reporter: TemplateValidationReporter,
parents: List<CreatorProperty<*>?>?,
derivation: PropertyDerivation
): PreparedDerivation? {
if (parents.isNullOrEmpty()) {
reporter.error("Expected a parent")
return null
}

if (!parents[0]!!.acceptsType(SemanticVersion::class.java)) {
reporter.error("First parent must produce a semantic version")
return null
}

return ExtractPaperApiVersionPropertyDerivation()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import com.demonwav.mcdev.creator.custom.TemplateValidationReporter
import com.demonwav.mcdev.creator.custom.types.CreatorProperty
import com.demonwav.mcdev.util.SemanticVersion

class ExtractVersionMajorMinorPropertyDerivation : PreparedDerivation {
open class ExtractVersionMajorMinorPropertyDerivation : PreparedDerivation {

override fun derive(parentValues: List<Any?>): Any? {
val from = parentValues[0] as SemanticVersion
Expand Down
3 changes: 3 additions & 0 deletions src/main/kotlin/creator/custom/model/StringList.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,7 @@ data class StringList(val values: List<String>) : List<String> by values {
@JvmOverloads
fun toString(separator: String, prefix: String = "", postfix: String = ""): String =
values.joinToString(separator, prefix, postfix)

fun toStringQuoted(): String =
values.joinToString(", ", transform = { '"' + it + '"' })
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import com.demonwav.mcdev.creator.custom.CreatorContext
import com.demonwav.mcdev.creator.custom.PropertyDerivation
import com.demonwav.mcdev.creator.custom.TemplatePropertyDescriptor
import com.demonwav.mcdev.creator.custom.TemplateValidationReporter
import com.demonwav.mcdev.creator.custom.derivation.ExtractPaperApiVersionPropertyDerivation
import com.demonwav.mcdev.creator.custom.derivation.ExtractVersionMajorMinorPropertyDerivation
import com.demonwav.mcdev.creator.custom.derivation.PreparedDerivation
import com.demonwav.mcdev.creator.custom.derivation.SelectPropertyDerivation
Expand Down Expand Up @@ -64,6 +65,11 @@ open class SemanticVersionCreatorProperty(
ExtractVersionMajorMinorPropertyDerivation.create(reporter, parents, derives)
}

"extractPaperApiVersion" -> {
val parents = collectDerivationParents(reporter)
ExtractPaperApiVersionPropertyDerivation.create(reporter, parents, derives)
}

null -> {
SelectPropertyDerivation.create(reporter, emptyList(), derives)
}
Expand Down
11 changes: 11 additions & 0 deletions src/main/resources/messages/MinecraftDevelopment.properties
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,17 @@ creator.ui.use_fabricapi.label=Use Fabric API
creator.ui.spongeapi_version.label=Sponge Version\:
creator.ui.velocity_version.label=Velocity Version\:
creator.ui.versions_download.label=Downloading versions...
creator.ui.use_version_catalog.label=Use Gradle version catalog\:
creator.ui.include_plugin_bootstrap.label=Include plugin bootstrap file\:
creator.ui.use_gremlin.label=Use Gremlin for dependency resolution\:
creator.ui.include_plugin_loader.label=Include plugin loader file\:
creator.ui.java_plugin_loader.label=Generate the plugin loader in Java\:
creator.ui.use_resource_factory_plugin.label=Use the resource-factory Gradle plugin\:
creator.ui.use_paperweight_userdev.label=Use the paperweight-userdev Gradle plugin\:
creator.ui.include_shadow_plugin.label=Include the shadow Gradle plugin\:
creator.ui.include_run_paper_plugin.label=Include the run-paper Gradle plugin\:
creator.ui.accept_eula.label=Add eula-agree runServer JVM flag\:
creator.ui.accept_eula.warning=By using this feature, you agree to the <a href='https://www.minecraft.net/en-us/eula'>Minecraft EULA</a>.

creator.ui.warn.no_yarn_to_mc_match=Unable to match Yarn versions to Minecraft version
creator.ui.warn.no_fabricapi_to_mc_match=Unable to match API versions to Minecraft version
Expand Down