diff options
| author | thedarkcolour <30441001+thedarkcolour@users.noreply.github.com> | 2019-11-03 13:59:32 -0800 |
|---|---|---|
| committer | thedarkcolour <30441001+thedarkcolour@users.noreply.github.com> | 2019-11-03 13:59:32 -0800 |
| commit | 9333b91f5c4104e5c52e0af4d2a4aa80da87294b (patch) | |
| tree | b405a0009aa96eb76ce3b2514e914e799475334d /src/main/resources | |
| parent | 7955daf73c0b84c5044920e52523e1fa7491247f (diff) | |
| download | KotlinForForge-9333b91f5c4104e5c52e0af4d2a4aa80da87294b.tar.gz KotlinForForge-9333b91f5c4104e5c52e0af4d2a4aa80da87294b.tar.bz2 KotlinForForge-9333b91f5c4104e5c52e0af4d2a4aa80da87294b.zip | |
Initial 1.14 release
Diffstat (limited to 'src/main/resources')
| -rw-r--r-- | src/main/resources/META-INF/mods.toml | 39 | ||||
| -rw-r--r-- | src/main/resources/META-INF/services/net.minecraftforge.forgespi.language.IModLanguageProvider | 1 | ||||
| -rw-r--r-- | src/main/resources/pack.mcmeta | 7 | ||||
| -rw-r--r-- | src/main/resources/patcher.js | 50 |
4 files changed, 97 insertions, 0 deletions
diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..ff8cd97 --- /dev/null +++ b/src/main/resources/META-INF/mods.toml @@ -0,0 +1,39 @@ +modLoader="kotlinforforge" # IModLanguageProvider +loaderVersion="[25,)" # IModLanguageProvider version + +issueTrackerURL="https://github.com/thedarkcolour/Future-MC/issues" # Issues page + + +#displayURL="https://minecraft.curseforge.com/projects/kotlinforforge" #optional + +description=''' +Kotlin for Forge. Allows mods to use the Kotlin programming language. +''' # A description + +# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. +[[dependencies.kotlinforforge]] #optional + modId="forge" #mandatory + mandatory=true #mandatory + versionRange="[25,)" #mandatory + # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory + ordering="NONE" + + side="BOTH" +# Dependency +[[dependencies.kotlinforforge]] + modId="minecraft" + mandatory=true + versionRange="[1.14.4]" + ordering="NONE" + side="BOTH" + +# --------------------------------------------------------- # +# --------------------------------------------------------- # +# --------------------------------------------------------- # + +[[mods]] #mandatory +displayName="Kotlin for Forge" # Name of mod +modId="kotlinforforge" # Modid +version="1.0.0" # Version of kotlinforforge +authors="TheDarkColour" # Author +credits="Herobrine knows all." # Credits
\ No newline at end of file diff --git a/src/main/resources/META-INF/services/net.minecraftforge.forgespi.language.IModLanguageProvider b/src/main/resources/META-INF/services/net.minecraftforge.forgespi.language.IModLanguageProvider new file mode 100644 index 0000000..c78667e --- /dev/null +++ b/src/main/resources/META-INF/services/net.minecraftforge.forgespi.language.IModLanguageProvider @@ -0,0 +1 @@ +thedarkcolour.kotlinforforge.KotlinLanguageProvider diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..167eba8 --- /dev/null +++ b/src/main/resources/pack.mcmeta @@ -0,0 +1,7 @@ +{ + "pack": { + "description": "kotlinforforge resources", + "pack_format": 4, + "_comment": "A pack_format of 4 requires json lang files. Note: we require v4 pack meta for all mods." + } +}
\ No newline at end of file diff --git a/src/main/resources/patcher.js b/src/main/resources/patcher.js new file mode 100644 index 0000000..fcfe312 --- /dev/null +++ b/src/main/resources/patcher.js @@ -0,0 +1,50 @@ +function initializeCoreMod() { +// Unused, remove + return { + 'KotlinPatcher': { + 'target': { + 'type': 'METHOD', + 'class': 'net.minecraftforge.fml.javafmlmod.FMLModContainer', + 'methodName': 'constructMod', + 'methodDesc': '(Lnet/minecraftforge/fml/LifecycleEventProvider$LifecycleEvent;)V' + }, + 'transformer': function (methodNode) { + var VarInsnNode = Java.type('org.objectweb.asm.tree.VarInsnNode'); + var FieldInsnNode = Java.type('org.objectweb.asm.tree.FieldInsnNode'); + var MethodInsnNode = Java.type('org.objectweb.asm.tree.MethodInsnNode'); + var InsnList = Java.type('org.objectweb.asm.tree.InsnList'); + var Opcodes = Java.type('org.objectweb.asm.Opcodes'); + var list = new InsnList(); + list.add(new FieldInsnNode(Opcodes.GETSTATIC, "thedarkcolour/kotlinforforge/AutoKotlinEventBusSubscriber", "INSTANCE", "Lthedarkcolour/kotlinforforge/AutoKotlinEventBusSubscriber;")); + list.add(new VarInsnNode(Opcodes.ALOAD, 0)); + list.add(new VarInsnNode(Opcodes.ALOAD, 0)); + list.add(new FieldInsnNode(Opcodes.GETFIELD, 'net/minecraftforge/fml/javafmlmod/FMLModContainer', 'scanResults', 'Lnet/minecraftforge/forgespi/language/ModFileScanData;')); + list.add(new VarInsnNode(Opcodes.ALOAD, 0)); + list.add(new FieldInsnNode(Opcodes.GETFIELD, 'net/minecraftforge/fml/javafmlmod/FMLModContainer', 'modClass', 'Ljava/lang/Class;')); + list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, 'java/lang/Class', 'getClassLoader', '()Ljava/lang/ClassLoader;', false)); + list.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "thedarkcolour/kotlinforforge/AutoKotlinEventBusSubscriber", "inject", "(Lnet/minecraftforge/fml/ModContainer;Lnet/minecraftforge/forgespi/language/ModFileScanData;Ljava/lang/ClassLoader;)V", false)); + + for (var i = 0; i < 1000; ++i) { + var insn = methodNode.instructions.get(i); + //print('bruh moment'); + if (insn instanceof MethodInsnNode) { + //print('FOUND A METHODINSNNODE'); + if (insn.desc === '(Lnet/minecraftforge/fml/ModContainer;Lnet/minecraftforge/forgespi/language/ModFileScanData;Ljava/lang/ClassLoader;)V') { + methodNode.instructions.insertBefore(insn.getPrevious().getPrevious().getPrevious().getPrevious().getPrevious().getPrevious(), list); + //print('PATCHED FMLMODCONTAINER'); + break; + } + } + } + + //var writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); + //methodNode.accept(writer); + //var reader = new ClassReader(writer.toByteArray()); + //var cn = new ClassNode(); + //reader.accept(cn, 0); + + return methodNode; + } + } + } +}
\ No newline at end of file |
