From 338b28be9cdf62eb78d59683e311b63c626df9f7 Mon Sep 17 00:00:00 2001
From: nea <romangraef@gmail.com>
Date: Thu, 6 Oct 2022 20:40:09 +0200
Subject: [PATCH] Add kotlin to template

---
 README.md                                     |  5 ++++-
 build.gradle.kts                              |  9 ++++++++
 src/main/java/com/example/ExampleMod.java     | 13 -----------
 src/main/kotlin/com/example/ExampleMod.kt     | 22 +++++++++++++++++++
 .../com/example/mixin/MixinGuiMainMenu.java   |  0
 src/main/resources/assets/test/test.txt       |  3 +++
 6 files changed, 38 insertions(+), 14 deletions(-)
 delete mode 100644 src/main/java/com/example/ExampleMod.java
 create mode 100644 src/main/kotlin/com/example/ExampleMod.kt
 rename src/main/{java => kotlin}/com/example/mixin/MixinGuiMainMenu.java (100%)
 create mode 100644 src/main/resources/assets/test/test.txt

diff --git a/README.md b/README.md
index de9e3bd..37b54b7 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Architectury Loom based template for 1.8.9 forge mods
+ Architectury Loom based template for 1.8.9 kotlin forge mods
 
 **For other templates, do check out the [other branches of this repository](https://github.com/romangraef/Forge1.8.9Template/branches/all)**
 
@@ -11,6 +11,9 @@ The `com.example` package needs to be renamed to match the value of `baseGroup`.
 If you don't want mixins (which allow for modifying vanilla code), then you can remove the references to mixins from
 the `build.gradle.kts` at the lines specified with comments and the `com.example.mixin` package.
 
+Please note that Mixins should be kept in their own package, and should exclusively be written in Java, since older versions
+of Mixin don't play well with Kotlin.
+
 This project uses [DevAuth](https://github.com/DJtheRedstoner/DevAuth) per default, so you can log in using your real
 minecraft account. If you don't need that, you can remove it from the buildscript.
 
diff --git a/build.gradle.kts b/build.gradle.kts
index 7286e59..e982b74 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -6,6 +6,7 @@ plugins {
     id("gg.essential.loom") version "0.10.0.+"
     id("dev.architectury.architectury-pack200") version "0.1.3"
     id("com.github.johnrengelman.shadow") version "8.1.1"
+    kotlin("jvm") version "1.8.21"
 }
 
 //Constants:
@@ -52,8 +53,14 @@ loom {
     }
 }
 
+tasks.compileJava {
+    dependsOn(tasks.processResources)
+}
+
 sourceSets.main {
     output.setResourcesDir(sourceSets.main.flatMap { it.java.classesDirectory })
+    java.srcDir(layout.projectDirectory.dir("src/main/kotlin"))
+    kotlin.destinationDirectory.set(java.destinationDirectory)
 }
 
 // Dependencies:
@@ -74,6 +81,8 @@ dependencies {
     mappings("de.oceanlabs.mcp:mcp_stable:22-1.8.9")
     forge("net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9")
 
+    shadowImpl(kotlin("stdlib-jdk8"))
+
     // If you don't want mixins, remove these lines
     shadowImpl("org.spongepowered:mixin:0.7.11-SNAPSHOT") {
         isTransitive = false
diff --git a/src/main/java/com/example/ExampleMod.java b/src/main/java/com/example/ExampleMod.java
deleted file mode 100644
index c18b591..0000000
--- a/src/main/java/com/example/ExampleMod.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.example;
-
-import net.minecraft.init.Blocks;
-import net.minecraftforge.fml.common.Mod;
-import net.minecraftforge.fml.common.event.FMLInitializationEvent;
-
-@Mod(modid = "examplemod", useMetadata=true)
-public class ExampleMod {
-    @Mod.EventHandler
-    public void init(FMLInitializationEvent event) {
-        System.out.println("Dirt: " + Blocks.dirt.getUnlocalizedName());
-    }
-}
diff --git a/src/main/kotlin/com/example/ExampleMod.kt b/src/main/kotlin/com/example/ExampleMod.kt
new file mode 100644
index 0000000..bf32496
--- /dev/null
+++ b/src/main/kotlin/com/example/ExampleMod.kt
@@ -0,0 +1,22 @@
+package com.example
+
+import net.minecraft.client.Minecraft
+import net.minecraft.init.Blocks
+import net.minecraftforge.fml.common.Mod
+import net.minecraftforge.fml.common.event.FMLInitializationEvent
+
+@Mod(modid = "examplemod", useMetadata = true)
+class ExampleMod {
+    @Mod.EventHandler
+    fun init(event: FMLInitializationEvent) {
+        try {
+            val resource: net.minecraft.client.resources.IResource = Minecraft.getMinecraft().getResourceManager()
+                .getResource(net.minecraft.util.ResourceLocation("test:test.txt"))
+            org.apache.commons.io.IOUtils.copy(resource.getInputStream(), java.lang.System.out)
+        } catch (e: java.io.IOException) {
+            throw java.lang.RuntimeException(e)
+        }
+
+        println("Dirt: ${Blocks.dirt.unlocalizedName}")
+    }
+}
diff --git a/src/main/java/com/example/mixin/MixinGuiMainMenu.java b/src/main/kotlin/com/example/mixin/MixinGuiMainMenu.java
similarity index 100%
rename from src/main/java/com/example/mixin/MixinGuiMainMenu.java
rename to src/main/kotlin/com/example/mixin/MixinGuiMainMenu.java
diff --git a/src/main/resources/assets/test/test.txt b/src/main/resources/assets/test/test.txt
new file mode 100644
index 0000000..ea839e2
--- /dev/null
+++ b/src/main/resources/assets/test/test.txt
@@ -0,0 +1,3 @@
+test
+from resource pack
+