From 6a4677b5996a3a9210200bccc5043cd997b78761 Mon Sep 17 00:00:00 2001 From: Treetrain1 Date: Mon, 15 Jul 2024 09:42:06 -0500 Subject: [PATCH] Make the language adapter --- build.gradle.kts | 2 + .../unforked/FabricLoaderInterface.java | 37 +++++++++++++++++++ .../unforked/UnforkedLanguageAdapter.java | 14 +++++++ .../frozenblock/unforked/UnforkedLoader.java | 13 +++++++ src/main/resources/fabric.mod.json | 3 ++ 5 files changed, 69 insertions(+) create mode 100644 src/main/java/net/frozenblock/unforked/FabricLoaderInterface.java create mode 100644 src/main/java/net/frozenblock/unforked/UnforkedLanguageAdapter.java create mode 100644 src/main/java/net/frozenblock/unforked/UnforkedLoader.java diff --git a/build.gradle.kts b/build.gradle.kts index 0b5e39c..dde00d1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -210,6 +210,8 @@ dependencies { } else { modImplementation("maven.modrinth:frozenlib:${frozenlib_version}")?.let { include(it) } } + + compileOnly("org.projectlombok:lombok:1.18.34")?.let { annotationProcessor(it) } } tasks { diff --git a/src/main/java/net/frozenblock/unforked/FabricLoaderInterface.java b/src/main/java/net/frozenblock/unforked/FabricLoaderInterface.java new file mode 100644 index 0000000..ca3ea14 --- /dev/null +++ b/src/main/java/net/frozenblock/unforked/FabricLoaderInterface.java @@ -0,0 +1,37 @@ +package net.frozenblock.unforked; + +import lombok.experimental.UtilityClass; +import net.fabricmc.loader.impl.FabricLoaderImpl; +import net.fabricmc.loader.impl.discovery.ModCandidate; +import net.fabricmc.loader.impl.metadata.LoaderModMetadata; +import org.jetbrains.annotations.ApiStatus; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.List; + +// Inspired by ModsMod +@ApiStatus.Internal +@UtilityClass +public class FabricLoaderInterface { + static void init() {} + + private static final Method ADD_MOD; + private static final Method CREATE_PLAIN; + private static final Field MODS; + + static { + try { + ADD_MOD = FabricLoaderImpl.class.getDeclaredMethod("addMod", ModCandidate.class); + ADD_MOD.setAccessible(true); + + MODS = FabricLoaderImpl.class.getDeclaredField("mods"); + MODS.setAccessible(true); + + CREATE_PLAIN = ModCandidate.class.getDeclaredMethod("createPlain", List.class, LoaderModMetadata.class, boolean.class, Collection.class); + CREATE_PLAIN.setAccessible(true); + } catch (NoSuchMethodException | NoSuchFieldException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/net/frozenblock/unforked/UnforkedLanguageAdapter.java b/src/main/java/net/frozenblock/unforked/UnforkedLanguageAdapter.java new file mode 100644 index 0000000..4a0be12 --- /dev/null +++ b/src/main/java/net/frozenblock/unforked/UnforkedLanguageAdapter.java @@ -0,0 +1,14 @@ +package net.frozenblock.unforked; + + +import net.fabricmc.loader.api.LanguageAdapter; +import net.fabricmc.loader.api.ModContainer; + +public final class UnforkedLanguageAdapter implements LanguageAdapter { + @Override + public native T create(ModContainer mod, String value, Class type); + + static { + UnforkedLoader.init(); + } +} diff --git a/src/main/java/net/frozenblock/unforked/UnforkedLoader.java b/src/main/java/net/frozenblock/unforked/UnforkedLoader.java new file mode 100644 index 0000000..81a99c9 --- /dev/null +++ b/src/main/java/net/frozenblock/unforked/UnforkedLoader.java @@ -0,0 +1,13 @@ +package net.frozenblock.unforked; + +import lombok.experimental.UtilityClass; +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.Internal +@UtilityClass +public class UnforkedLoader { + + void init() { + System.out.println("This is working"); + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 16cd000..46ab173 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -29,6 +29,9 @@ "net.frozenblock.unforked.datagen.UnforkedDataGenerator" ] }, + "languageAdapters": { + "unforked": "net.frozenblock.unforked.UnforkedLanguageAdapter" + }, "mixins": [ "unforked.mixins.json" ],