User: strokkur24 Date: 09 Jan 26 17:32 Revision: f21969d04435878d00c5635aa83ee16696287d1a Summary: feat: prepare other misc changes TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=10389&personal=false Index: src/main/kotlin/creator/custom/derivation/ExtractPaperApiVersionPropertyDerivation.kt =================================================================== --- src/main/kotlin/creator/custom/derivation/ExtractPaperApiVersionPropertyDerivation.kt (revision f21969d04435878d00c5635aa83ee16696287d1a) +++ src/main/kotlin/creator/custom/derivation/ExtractPaperApiVersionPropertyDerivation.kt (revision f21969d04435878d00c5635aa83ee16696287d1a) @@ -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 . + */ + +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 { + 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?>?, + 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() + } + } +} Index: src/main/kotlin/creator/custom/derivation/ExtractVersionMajorMinorPropertyDerivation.kt =================================================================== --- src/main/kotlin/creator/custom/derivation/ExtractVersionMajorMinorPropertyDerivation.kt (revision fdfb0b898595c10f5aec091b5c5d9344e97214a0) +++ src/main/kotlin/creator/custom/derivation/ExtractVersionMajorMinorPropertyDerivation.kt (revision f21969d04435878d00c5635aa83ee16696287d1a) @@ -25,7 +25,7 @@ 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? { val from = parentValues[0] as SemanticVersion Index: src/main/kotlin/creator/custom/model/StringList.kt =================================================================== --- src/main/kotlin/creator/custom/model/StringList.kt (revision fdfb0b898595c10f5aec091b5c5d9344e97214a0) +++ src/main/kotlin/creator/custom/model/StringList.kt (revision f21969d04435878d00c5635aa83ee16696287d1a) @@ -28,4 +28,7 @@ @JvmOverloads fun toString(separator: String, prefix: String = "", postfix: String = ""): String = values.joinToString(separator, prefix, postfix) + + fun toStringQuoted(): String = + values.joinToString(", ", transform = { '"' + it + '"' }) } Index: src/main/kotlin/creator/custom/types/SemanticVersionCreatorProperty.kt =================================================================== --- src/main/kotlin/creator/custom/types/SemanticVersionCreatorProperty.kt (revision fdfb0b898595c10f5aec091b5c5d9344e97214a0) +++ src/main/kotlin/creator/custom/types/SemanticVersionCreatorProperty.kt (revision f21969d04435878d00c5635aa83ee16696287d1a) @@ -24,6 +24,7 @@ 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 @@ -64,6 +65,11 @@ ExtractVersionMajorMinorPropertyDerivation.create(reporter, parents, derives) } + "extractPaperApiVersion" -> { + val parents = collectDerivationParents(reporter) + ExtractPaperApiVersionPropertyDerivation.create(reporter, parents, derives) + } + null -> { SelectPropertyDerivation.create(reporter, emptyList(), derives) }