diff --git a/README.md b/README.md index 83817b1..ce34825 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,8 @@ If you are still using 0.1.0 Cleanroom, use 0.5.4. But that's not recommended. * Offline Skins * Worse Hurt Time * Inventory Tweaks +* More Sound Config +* NBTPeripheral ## Note Add + to start of the file if it's not there. \ No newline at end of file diff --git a/src/main/java/com/cleanroommc/fugue/common/TransformerHelper.java b/src/main/java/com/cleanroommc/fugue/common/TransformerHelper.java index f1d08ad..0240fc7 100644 --- a/src/main/java/com/cleanroommc/fugue/common/TransformerHelper.java +++ b/src/main/java/com/cleanroommc/fugue/common/TransformerHelper.java @@ -42,6 +42,7 @@ import com.cleanroommc.fugue.transformer.loliasm.LoliReflectorTransformer; import com.cleanroommc.fugue.transformer.loliasm.ModIdentifierTransformer; import com.cleanroommc.fugue.transformer.moresoundconfig.SoundDevicesTransformer; +import com.cleanroommc.fugue.transformer.nbtperipheral.LinkedTreeMapTransformer; import com.cleanroommc.fugue.transformer.nothirium.BufferBuilderTransformer; import com.cleanroommc.fugue.transformer.nothirium.FreeSectorManagerTransformer; import com.cleanroommc.fugue.transformer.nothirium.MixinBufferBuilderTransformer; @@ -514,6 +515,14 @@ public static void registerTransformers() { "ichttt.mods.moresoundconfig.SoundDevices" ); } + if (FugueConfig.modPatchConfig.enableNBTPeripheral) { + TransformerDelegate.registerExplicitTransformer( + new LinkedTreeMapTransformer(), + "nl.makertim.nbtperipheral.cc.BlockStateUtil", + "nl.makertim.nbtperipheral.cc.CCUtil", + "nl.makertim.nbtperipheral.cc.NBTUtil" + ); + } //Common patches below diff --git a/src/main/java/com/cleanroommc/fugue/config/ModPatchConfig.java b/src/main/java/com/cleanroommc/fugue/config/ModPatchConfig.java index 012d624..dc551a5 100644 --- a/src/main/java/com/cleanroommc/fugue/config/ModPatchConfig.java +++ b/src/main/java/com/cleanroommc/fugue/config/ModPatchConfig.java @@ -168,4 +168,6 @@ public class ModPatchConfig { public boolean enableInvTweaks = true; @Config.Name("Enable Sound Device Options / More Sound Config Patch") public boolean enableMoreSoundConfig = true; + @Config.Name("Enable NBT Peripheral Patch") + public boolean enableNBTPeripheral = true; } diff --git a/src/main/java/com/cleanroommc/fugue/transformer/nbtperipheral/LinkedTreeMapTransformer.java b/src/main/java/com/cleanroommc/fugue/transformer/nbtperipheral/LinkedTreeMapTransformer.java new file mode 100644 index 0000000..b82b75c --- /dev/null +++ b/src/main/java/com/cleanroommc/fugue/transformer/nbtperipheral/LinkedTreeMapTransformer.java @@ -0,0 +1,50 @@ +package com.cleanroommc.fugue.transformer.nbtperipheral; + +import com.cleanroommc.fugue.common.Fugue; +import javassist.*; +import javassist.expr.ConstructorCall; +import javassist.expr.ExprEditor; +import javassist.expr.MethodCall; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; +import org.objectweb.asm.tree.*; +import top.outlands.foundation.IExplicitTransformer; + +import java.io.ByteArrayInputStream; + +public class LinkedTreeMapTransformer implements IExplicitTransformer { + @Override + public byte[] transform(byte[] bytes) { + ClassNode classNode = new ClassNode(); + ClassReader classReader = new ClassReader(bytes); + classReader.accept(classNode, 0); + if (classNode.methods != null) + { + for (MethodNode methodNode : classNode.methods) + { + InsnList instructions = methodNode.instructions; + if (instructions != null) + { + for (AbstractInsnNode insnNode : instructions) + { + if (insnNode instanceof MethodInsnNode methodInsnNode + && methodInsnNode.owner.equals("com/google/gson/internal/LinkedTreeMap") + && methodInsnNode.name.equals("") + ) + { + methodInsnNode.desc = "(Ljava/util/Comparator;Z)V"; + instructions.insertBefore(methodInsnNode, new InsnNode(Opcodes.ICONST_0)); + } + } + } + + } + } + ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES); + + classNode.accept(classWriter); + return classWriter.toByteArray(); + } +}