Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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
21 changes: 21 additions & 0 deletions adapters/mc-forge-1-12-2/adapter-build-logic/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
plugins {
`kotlin-dsl`
}

repositories {
gradlePluginPortal()
mavenCentral()
maven {
// RetroFuturaGradle
name = "GTNH Maven"
setUrl("https://nexus.gtnewhorizons.com/repository/public/")
mavenContent {
includeGroupByRegex("com\\.gtnewhorizons\\..+")
includeGroup("com.gtnewhorizons")
}
}
}

dependencies {
implementation("com.gtnewhorizons:retrofuturagradle:1.4.9")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
pluginManagement {
includeBuild("../../../build-logic")
repositories {
gradlePluginPortal()
mavenCentral()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
plugins {
id("com.gtnewhorizons.retrofuturagradle")
}

val gameVersion: String by project
val forgeVersion: String by project

repositories {
gradlePluginPortal()
mavenCentral()
}

minecraft {
mcVersion.set("1.12.2")
username.set("Developer")
}

java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}

18 changes: 18 additions & 0 deletions adapters/mc-forge-1-12-2/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
plugins {
id("dsgl-mc-adapter.conventions")
id("dsgl-mc-forge-1-12-2.conventions")
id("dsgl-releaseable-module.conventions")
}

dsglRelease {
syncKeys.add("modVersion")
}

dependencies {
val coreProject = findProject(":core")
?: findProject(":dsgl:core")
?: error("DSGL core project not found (expected :core or :dsgl:core).")
implementation(coreProject)
testImplementation(kotlin("test-junit"))
testImplementation(kotlin("test"))
}
200 changes: 200 additions & 0 deletions adapters/mc-forge-1-12-2/demo/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
plugins {
id("dsgl-mc-adapter.conventions")
id("dsgl-mc-forge-1-12-2.conventions")
}

val modId: String by project
val modGroup: String by project
val modName: String by project
val modVersion: String by project
val modAuthor: String by project
val modDescription: String by project
val modCredits: String by project
val modIcon: String by project
val gameVersion: String by project

val hotReload: String by project
val msdfDebug: String by project
val msdfDebugDecorations: String by project
val msdfDebugPerformance: String by project
val rebuildTrace: String by project
val perfDebug: String by project
val dsglOverlayDebug: String by project
val dsglOverlayControls: String by project
val hotReloadAgentLibraryName: String? by project

val baseModMetadataTokens = mapOf(
"modId" to modId,
"modGroup" to modGroup,
"modName" to modName,
"modAuthor" to modAuthor,
"modDescription" to modDescription,
"modCredits" to modCredits,
"modIcon" to modIcon,
"gameVersion" to gameVersion
)

fun currentModVersion(): String {
val dynamic = (findProperty("modVersion") as? String)?.trim()
if (!dynamic.isNullOrEmpty()) return dynamic
if (modVersion.isNotBlank()) return modVersion
throw GradleException("Missing required property 'modVersion' for mc-forge-1-7-10-demo module.")
}

fun currentModMetadataTokens(): Map<String, String> {
return baseModMetadataTokens + ("modVersion" to currentModVersion())
}

fun hotReloadAgentLibraryFile(): File {
val explicitLibraryName = hotReloadAgentLibraryName?.trim()?.takeIf { it.isNotEmpty() }
val osName = System.getProperty("os.name")?.lowercase()
val libraryName = explicitLibraryName ?: when {
osName == null -> throw GradleException(
"Unable to determine current operating system for DSGL hot-reload agent, and 'hotReloadAgentLibraryName' is not set."
)

osName.startsWith("windows") -> "dsgl_hot_reload_agent.dll"
osName.startsWith("linux") -> "libdsgl_hot_reload_agent.so"
osName.startsWith("mac") || osName.startsWith("darwin") -> "libdsgl_hot_reload_agent.dylib"
else -> throw GradleException(
"Unsupported operating system for DSGL hot-reload agent: $osName, and 'hotReloadAgentLibraryName' is not set."
)
}

return project.rootDir.resolve("dsgl-hot-reload-agent/target/release/$libraryName")
}

val generatedModMetadataDir: Provider<Directory> = layout.buildDirectory.dir("generated/sources/modMetadata/kotlin")

val generateModMetadata by tasks.registering {
description = "Generate mod metadata"
inputs.properties(currentModMetadataTokens())
outputs.dir(generatedModMetadataDir)

doLast {
val tokens = currentModMetadataTokens()
val outputDir = generatedModMetadataDir.get().asFile
val packagePath = File(outputDir, "org/dreamfinity/dsgl/mcForge1122")
packagePath.mkdirs()
val outputFile = File(packagePath, "DsglMc1122DemoGeneratedMetadata.kt")

outputFile.writeText(
"""
package org.dreamfinity.dsgl.mcForge1122

/**
* Generated from Gradle properties to keep @Mod metadata consistent.
*/
object DsglMc1122DemoGeneratedMetadata {
const val MOD_ID: String = "${tokens["modId"]}"
const val MOD_NAME: String = "${tokens["modName"]}"
const val MOD_VERSION: String = "${tokens["modVersion"]}"
const val MC_VERSION_RANGE: String = "[${tokens["gameVersion"]}]"
const val MOD_AUTHOR: String = "${tokens["modAuthor"]}"
const val MOD_DESCRIPTION: String = "${tokens["modDescription"]}"
const val MOD_CREDITS: String = "${tokens["modCredits"]}"
const val MOD_ICON: String = "${tokens["modIcon"]}"
}
""".trimIndent()
)
}
}

tasks {
runClient {
var jvmArgs = listOf(
"-Ddsgl.msdf.debug=$msdfDebug",
"-Ddsgl.msdf.debug.decorations=$msdfDebugDecorations",
"-Ddsgl.msdf.debug.performance=$msdfDebugPerformance",
"-Ddsgl.rebuild.trace=$rebuildTrace",
"-Ddsgl.perf.debug=$perfDebug",
"-Ddsgl.overlay.debug=$dsglOverlayDebug",
"-Ddsgl.overlay.controls=$dsglOverlayControls",
)

if (hotReload.toBoolean()) {
jvmArgs = jvmArgs + listOf("-agentpath:${hotReloadAgentLibraryFile().absolutePath}")
}

jvmArgs(jvmArgs)

if (project.hasProperty("clientRunArgs")) {
println("clientRunArgs: ${project.property("clientRunArgs")}")
args(project.property("clientRunArgs"))
}
}

runServer {
if (project.hasProperty("serverRunArgs")) {
println("serverRunArgs: ${project.property("serverRunArgs")}")
args(project.property("serverRunArgs"))
}
}
}

kotlin {
sourceSets.getByName("main").kotlin.srcDir(generatedModMetadataDir)
}

tasks.named("compileKotlin") {
dependsOn(generateModMetadata)
}

tasks.named("sourcesJar") {
dependsOn(generateModMetadata)
}

tasks.named("devSourcesJar") {
dependsOn(generateModMetadata)
}

tasks.named("dokkaGeneratePublicationHtml") {
dependsOn(generateModMetadata)
}

tasks.named<ProcessResources>("processResources") {
inputs.properties(baseModMetadataTokens)
inputs.property("modVersion", providers.provider { currentModVersion() })

filesMatching(listOf("mcmod.info", "META-INF/MANIFEST.MF")) {
expand(currentModMetadataTokens())
}
}

tasks.named<Jar>("jar") {
dependsOn(tasks.named("processResources"))
val processedManifest = layout.buildDirectory.file("resources/main/META-INF/MANIFEST.MF")
manifest.from(processedManifest)
exclude("META-INF/MANIFEST.MF")
}

tasks.named("reobfJar") {
dependsOn(":adapters:mc-forge-1-12-2:reobfJar")
}

tasks.withType<PublishToMavenLocal>().configureEach {
enabled = false
}
tasks.withType<PublishToMavenRepository>().configureEach {
enabled = false
}
tasks.named("publish") {
enabled = false
}
tasks.named("publishToMavenLocal") {
enabled = false
}

repositories {
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/Dreamfinity/DSGL")
}
}

dependencies {
implementation(project(":core"))
implementation(project(":adapters:mc-forge-1-12-2"))
testImplementation(kotlin("test-junit"))
testImplementation(kotlin("test"))
}
35 changes: 35 additions & 0 deletions adapters/mc-forge-1-12-2/demo/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
publishEnabled=false

# Minecraft and Forge params
gameVersion=1.12.2
forgeVersion=14.23.5.2864

# Mod params
modGroup=org.dreamfinity
modId=dsgl-demo
modName=dsgl-demo
modArchivesName=dsgl-demo
modAuthor=Veritaris
modIcon=
modDescription=Dreamfinity Simple GUI Library Demo
modCredits=Veritaris
buildVersion=1
modVersion=0.0.1

# Mod dev params
isClientBuild=false
clientRunArgs="--username" "Dreamfinity"
serverRunArgs="--no-gui"
hotReload=true
msdfDebug=false
msdfDebugDecorations=false
msdfDebugPerformance=false
rebuildTrace=false
perfDebug=false
dsglOverlayDebug=true
dsglOverlayControls=true

startParameter.offline=true

# Publishing params
publishProjectDepsOnly=true
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.dreamfinity.dsgl.mcForge1122

import net.minecraft.client.Minecraft
import net.minecraft.client.settings.KeyBinding
import net.minecraftforge.common.MinecraftForge
import net.minecraftforge.fml.client.registry.ClientRegistry
import net.minecraftforge.fml.common.FMLCommonHandler
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import net.minecraftforge.fml.common.gameevent.InputEvent
import org.dreamfinity.dsgl.mcForge1122.demo.ShowcaseWindow
import org.lwjgl.input.Keyboard

/**
* Client-only hotkeys for DSGL.
*/
object DsglClientHotkeys {
private val openShowcaseKey = KeyBinding(
"key.dsgl.open_showcase",
Keyboard.KEY_J,
"key.categories.dsgl"
)
private var registered: Boolean = false

fun register() {
if (registered) return
ClientRegistry.registerKeyBinding(openShowcaseKey)
MinecraftForge.EVENT_BUS.register(this)
registered = true
}

@SubscribeEvent
fun onKeyInput(event: InputEvent.KeyInputEvent) {
when {
openShowcaseKey.isPressed -> Minecraft
.getMinecraft()
.displayGuiScreen(object : DsglScreenHost({ ShowcaseWindow() }) {})
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.dreamfinity.dsgl.mcForge1122

import net.minecraft.client.Minecraft
import net.minecraftforge.fml.common.FMLCommonHandler
import net.minecraftforge.fml.common.Mod
import net.minecraftforge.fml.common.event.FMLInitializationEvent

/**
* Minimal Forge mod container so FML can discover and load the DSGL MC 1.7.10 adapter module.
*/
@Mod(
modid = DsglMc1122DemoGeneratedMetadata.MOD_ID,
name = DsglMc1122DemoGeneratedMetadata.MOD_NAME,
version = DsglMc1122DemoGeneratedMetadata.MOD_VERSION,
acceptedMinecraftVersions = DsglMc1122DemoGeneratedMetadata.MC_VERSION_RANGE,
useMetadata = true
)
class DsglMc1122ModContainer {
@Mod.EventHandler
fun onInit(event: FMLInitializationEvent) {
if (FMLCommonHandler.instance().side.isClient) {
DsglFonts.ensureInitialized(Minecraft.getMinecraft().gameDir, javaClass.classLoader)
DsglClientHotkeys.register()
}
}
}
Loading