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")