From a6abc783b433f87d266dd5ad5cc9a880839d2c31 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sun, 25 Feb 2024 19:56:10 +0700 Subject: [PATCH] Minecraft mod adapter --- .idea/gradle.xml | 1 + build.gradle.kts | 9 +++ gradle.properties | 2 +- kommons-mc/build.gradle.kts | 66 +++++++++++++++++++ .../ru/dbotthepony/kommons/KommonsMod.java | 40 +++++++++++ .../src/main/resources/META-INF/mods.toml | 10 +++ kommons-mc/src/main/resources/pack.mcmeta | 6 ++ settings.gradle.kts | 16 +++++ 8 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 kommons-mc/build.gradle.kts create mode 100644 kommons-mc/src/main/java/ru/dbotthepony/kommons/KommonsMod.java create mode 100644 kommons-mc/src/main/resources/META-INF/mods.toml create mode 100644 kommons-mc/src/main/resources/pack.mcmeta diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 93b9c80..e8c287a 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,6 +12,7 @@ diff --git a/build.gradle.kts b/build.gradle.kts index a3af6b5..effcc0e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,6 +5,15 @@ plugins { } repositories { + maven(url = "https://maven.minecraftforge.net") { + name = "Minecraft Forge" + + content { + includeGroup("net.minecraftforge.gradle") + includeGroup("net.minecraftforge") + } + } + mavenCentral() } diff --git a/gradle.properties b/gradle.properties index 8612f80..2db2647 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ kotlin.code.style=official specifyKotlinAsDependency=false projectGroup=ru.dbotthepony.kommons -projectVersion=2.9.13 +projectVersion=2.9.15 guavaDepVersion=33.0.0 gsonDepVersion=2.8.9 diff --git a/kommons-mc/build.gradle.kts b/kommons-mc/build.gradle.kts new file mode 100644 index 0000000..56653e9 --- /dev/null +++ b/kommons-mc/build.gradle.kts @@ -0,0 +1,66 @@ + +// this whole shit is required because you can't have non-mods be +// loaded on the GAME layer in Minecraft Forge, and hence, +// Kommons can not see Kotlin at runtime (because Kommons being +// loaded with system classloader, while Kotlin is loaded by +// FML classloader). + +plugins { + kotlin("jvm") + id("net.minecraftforge.gradle").version("[6.0.14,6.2)") + `maven-publish` +} + +repositories { + mavenCentral() +} + +dependencies { + minecraft("net.minecraftforge:forge:1.20.2-48.1.0") + + testImplementation("org.jetbrains.kotlin:kotlin-test") + + implementation(project(":")) { setTransitive(false) } + implementation(project(":gson")) { setTransitive(false) } + implementation(project(":guava")) { setTransitive(false) } +} + +tasks.jar { + dependsOn(":jar") + dependsOn(":gson:jar") + dependsOn(":guava:jar") + from(zipTree(project(":").tasks.jar.get().outputs.files.asPath)) + from(zipTree(project(":gson").tasks.jar.get().outputs.files.asPath)) + from(zipTree(project(":guava").tasks.jar.get().outputs.files.asPath)) +} + +minecraft { + mappings("official", "1.20.2") +} + +val projectVersion: String by project + +publishing { + publications { + create("mavenJava") { + from(components["java"]) + artifact(tasks["sourceJar"]) + artifactId = "kommons-mc" + + pom { + dependencies { + + } + } + } + } +} + +tasks.withType(ProcessResources::class.java) { + val replaceProperties = mapOf("mod_version" to projectVersion) + inputs.properties(replaceProperties) + + filesMatching(arrayListOf("META-INF/mods.toml")) { + expand(replaceProperties) + } +} diff --git a/kommons-mc/src/main/java/ru/dbotthepony/kommons/KommonsMod.java b/kommons-mc/src/main/java/ru/dbotthepony/kommons/KommonsMod.java new file mode 100644 index 0000000..f37484b --- /dev/null +++ b/kommons-mc/src/main/java/ru/dbotthepony/kommons/KommonsMod.java @@ -0,0 +1,40 @@ +package ru.dbotthepony.kommons; + +import kotlin.KotlinVersion; +import net.minecraftforge.fml.common.Mod; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@Mod("kommons") +public class KommonsMod { + private static final Logger LOGGER = LogManager.getLogger(); + + private static void checkIfKotlinIsInstalled() { + if (!KotlinVersion.CURRENT.isAtLeast(1, 8, 0)) { + throw new UnsupportedClassVersionError("Installed kotlin version is " + KotlinVersion.CURRENT + ", when at least 1.9.0 is required."); + } + } + + public KommonsMod() { + try { + checkIfKotlinIsInstalled(); + } catch (Throwable err) { + if (err instanceof NoClassDefFoundError) { + for (int i = 0; i < 16; i++) + LOGGER.fatal("Kommons requires Kotlin to be installed, get Kotlin for Forge from https://github.com/thedarkcolour/KotlinForForge"); + + LOGGER.fatal("Kommons requires Kotlin to be installed, get Kotlin for Forge from https://github.com/thedarkcolour/KotlinForForge", err); + throw new RuntimeException("Kommons requires Kotlin to be installed, get Kotlin for Forge from https://github.com/thedarkcolour/KotlinForForge"); + } + + for (int i = 0; i < 16; i++) + LOGGER.fatal("Kommons' Kotlin version is not satisfied, get newer Kotlin for Forge from https://github.com/thedarkcolour/KotlinForForge"); + + LOGGER.fatal("Kommons' Kotlin version is not satisfied, get newer Kotlin for Forge from https://github.com/thedarkcolour/KotlinForForge", err); + + throw err; + } + + LOGGER.info("Kommons seems to be loaded"); + } +} diff --git a/kommons-mc/src/main/resources/META-INF/mods.toml b/kommons-mc/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..60554de --- /dev/null +++ b/kommons-mc/src/main/resources/META-INF/mods.toml @@ -0,0 +1,10 @@ + +modLoader="javafml" +loaderVersion="[41,)" +license="2 Clause BSD" +[[mods]] #mandatory +modId="kommons" +version="${mod_version}" +displayName="Kommons" +authors="DBotThePony" +description='''Adapter "mod" to load my library "Kommons" in minecraft environment''' diff --git a/kommons-mc/src/main/resources/pack.mcmeta b/kommons-mc/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..98ea59b --- /dev/null +++ b/kommons-mc/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Kommons resources", + "pack_format": 18 + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 1c6b94a..602a7e7 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,19 @@ +pluginManagement { + repositories { + maven(url = "https://maven.minecraftforge.net") { + name = "Minecraft Forge" + + content { + includeGroup("net.minecraftforge.gradle") + includeGroup("net.minecraftforge") + } + } + + gradlePluginPortal() + } +} + plugins { //kotlin("jvm") version "1.9.21" id("org.gradle.toolchains.foojay-resolver-convention") version "0.5.0" @@ -9,3 +24,4 @@ include("guava") include("gson") include("linear-algebra") include("gson-linear-algebra") +include("kommons-mc")