Skip to content

Commit 144063c

Browse files
committed
Fix Forge project generation for MC1.12+
1 parent 730fd99 commit 144063c

File tree

6 files changed

+81
-6
lines changed

6 files changed

+81
-6
lines changed

src/main/kotlin/com/demonwav/mcdev/creator/ForgeProjectSettingsWizard.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ class ForgeProjectSettingsWizard(private val creator: MinecraftProjectCreator) :
201201
if (fullVersion != null) {
202202
settings!!.forgeVersion = fullVersion
203203
}
204+
settings!!.mcVersion = minecraftVersionBox.selectedItem as String
204205
}
205206

206207
fun error() {

src/main/kotlin/com/demonwav/mcdev/platform/forge/ForgeProjectConfiguration.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ open class ForgeProjectConfiguration : ProjectConfiguration() {
2727

2828
var mcpVersion: String = ""
2929
var forgeVersion: String = ""
30+
var mcVersion: String = ""
3031

3132
init {
3233
type = PlatformType.FORGE

src/main/kotlin/com/demonwav/mcdev/platform/forge/ForgeTemplate.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ package com.demonwav.mcdev.platform.forge
1313
import com.demonwav.mcdev.platform.BaseTemplate
1414
import com.demonwav.mcdev.platform.hybrid.SpongeForgeProjectConfiguration
1515
import com.demonwav.mcdev.util.MinecraftFileTemplateGroupFactory
16+
import com.demonwav.mcdev.util.SemanticVersion
1617
import com.intellij.openapi.project.Project
1718
import com.intellij.openapi.vfs.VirtualFile
1819
import java.util.Properties
1920

2021
object ForgeTemplate {
22+
private val MC_1_12 = SemanticVersion("1.12")
2123

2224
fun applyBuildGradleTemplate(project: Project,
2325
file: VirtualFile,
@@ -32,6 +34,13 @@ object ForgeTemplate {
3234
if (configuration is SpongeForgeProjectConfiguration) {
3335
properties.setProperty("SPONGE_FORGE", "true")
3436
}
37+
// Fixes builds for MC1.12+, requires FG 2.3
38+
val mcVersion = SemanticVersion(configuration.mcVersion)
39+
if (mcVersion >= MC_1_12) {
40+
properties.setProperty("FORGEGRADLE_VERSION", "2.3")
41+
} else {
42+
properties.setProperty("FORGEGRADLE_VERSION", "2.2")
43+
}
3544

3645
BaseTemplate.applyTemplate(project, file, MinecraftFileTemplateGroupFactory.FORGE_BUILD_GRADLE_TEMPLATE, properties)
3746

src/main/kotlin/com/demonwav/mcdev/platform/forge/version/ForgeVersion.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
package com.demonwav.mcdev.platform.forge.version
1212

1313
import com.demonwav.mcdev.util.gson
14+
import com.demonwav.mcdev.util.SemanticVersion
1415
import com.demonwav.mcdev.util.sortVersions
1516
import java.io.IOException
1617
import java.net.URL
@@ -23,16 +24,16 @@ class ForgeVersion private constructor(private val map: Map<*, *>) {
2324
}
2425

2526
fun getRecommended(versions: List<String>): String {
26-
var recommended = "1.7"
27+
var recommended = SemanticVersion("1.7")
2728
for (version in versions) {
2829
getPromo(version) ?: continue
29-
30-
if (recommended < version) {
31-
recommended = version
30+
val semantic = SemanticVersion(version)
31+
if (recommended < semantic) {
32+
recommended = semantic
3233
}
3334
}
3435

35-
return recommended
36+
return recommended.value
3637
}
3738

3839
fun getPromo(version: String): Double? {
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Minecraft Dev for IntelliJ
3+
*
4+
* https://minecraftdev.org
5+
*
6+
* Copyright (c) 2017 minecraft-dev
7+
*
8+
* MIT License
9+
*/
10+
11+
package com.demonwav.mcdev.util
12+
13+
import com.demonwav.mcdev.util.SemanticVersion.Companion.VersionPart.PreReleasePart
14+
import com.demonwav.mcdev.util.SemanticVersion.Companion.VersionPart.ReleasePart
15+
16+
class SemanticVersion(val value: String) : Comparable<SemanticVersion> {
17+
val parts = value.split(".").map {
18+
if (it.contains("_pre")) {
19+
val subParts = it.split("_pre")
20+
PreReleasePart(subParts[0].toInt(), subParts[1].toInt())
21+
} else {
22+
ReleasePart(it.toInt())
23+
}
24+
}
25+
26+
override fun compareTo(other: SemanticVersion): Int {
27+
val result = parts.zip(other.parts).fold(0, { acc, (a, b) -> if (acc == -1) acc else a.compareTo(b) })
28+
if (parts.size != other.parts.size && result == 0) {
29+
return parts.size - other.parts.size
30+
}
31+
return result
32+
}
33+
34+
override fun equals(other: Any?) =
35+
when (other) {
36+
is SemanticVersion -> parts.size == other.parts.size && parts.zip(other.parts).all { (a, b) -> a == b }
37+
else -> false
38+
}
39+
40+
override fun hashCode(): Int {
41+
return parts.hashCode()
42+
}
43+
44+
companion object {
45+
sealed class VersionPart : Comparable<VersionPart> {
46+
data class ReleasePart(val version: Int) : VersionPart() {
47+
override fun compareTo(other: VersionPart) =
48+
when (other) {
49+
is PreReleasePart -> if (version != other.version) version - other.version else 1
50+
is ReleasePart -> version - other.version
51+
}
52+
}
53+
54+
data class PreReleasePart(val version: Int, val pre: Int) : VersionPart() {
55+
override fun compareTo(other: VersionPart) =
56+
when (other) {
57+
is PreReleasePart -> if (version != other.version) version - other.version else pre - other.pre
58+
is ReleasePart -> if (version != other.version) version - other.version else -1
59+
}
60+
}
61+
}
62+
}
63+
}

src/main/resources/fileTemplates/j2ee/forge_build.gradle.ft

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ buildscript {
1212
#end
1313
}
1414
dependencies {
15-
classpath "net.minecraftforge.gradle:ForgeGradle:2.2-SNAPSHOT"
15+
classpath "net.minecraftforge.gradle:ForgeGradle:${FORGEGRADLE_VERSION}-SNAPSHOT"
1616
#if (${SPONGE_FORGE})
1717
classpath "gradle.plugin.org.spongepowered:spongegradle:0.8.1"
1818
#end

0 commit comments

Comments
 (0)