From ba5adbd6e3923f0d24a371ecde06d79122d93ba2 Mon Sep 17 00:00:00 2001 From: arcade_kappa Date: Wed, 1 May 2024 11:48:37 +0800 Subject: [PATCH] Add optifine check in nothirium patch, add patch for two other mods --- README.md | 2 + build.gradle | 2 +- gradle.properties | 2 +- .../fugue/common/FugueLoadingPlugin.java | 13 ++++++- .../cleanroommc/fugue/config/FugueConfig.java | 5 +++ .../fugue/config/ModPatchConfig.java | 4 ++ .../fugue/modifiers/IC2ExtraFixer.java | 38 +++++++++++++++++++ .../Ic2cExtrasLoadingPluginTransformer.java | 25 ++++++++++++ .../SimplyHotSpringsConfigTransformer.java | 31 +++++++++++++++ .../loliasm/LoliFMLCallHookTransformer.java | 1 - .../MixinBufferBuilderTransformer.java | 19 +++++----- .../NothiriumClassTransformerTransformer.java | 2 + 12 files changed, 130 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/cleanroommc/fugue/modifiers/IC2ExtraFixer.java create mode 100644 src/main/java/com/cleanroommc/fugue/transformer/Ic2cExtrasLoadingPluginTransformer.java create mode 100644 src/main/java/com/cleanroommc/fugue/transformer/SimplyHotSpringsConfigTransformer.java diff --git a/README.md b/README.md index 7d7e314..1ba4578 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,8 @@ https://github.com/CleanroomMC/Fugue/releases/latest * Survival Inc. * Subauqatic (Temporary) * Nothirium +* IC2C Extra +* Simply Hot Spring ## Note Add + to start of the file if it's not there. \ No newline at end of file diff --git a/build.gradle b/build.gradle index 7a082aa..9b471a8 100644 --- a/build.gradle +++ b/build.gradle @@ -128,7 +128,7 @@ repositories { } dependencies { - minecraft "com.cleanroommc:cleanroom:15.24.0.3038" + minecraft "com.cleanroommc:cleanroom:15.24.0.3039" //Charset Lib compileOnly(fg.deobf("curse.maven:charset-284523:3656492")) diff --git a/gradle.properties b/gradle.properties index d8d2614..a42ee15 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,7 @@ mappings_version=39-1.12 mod_id=fugue mod_name=Fugue mod_main_class=Fugue -mod_version=0.14.3-beta +mod_version=0.14.4-beta mod_base_package=com.cleanroommc.fugue mod_authors=kappa_maintainer mod_description=A mod that patch dead mods for Cleanroom diff --git a/src/main/java/com/cleanroommc/fugue/common/FugueLoadingPlugin.java b/src/main/java/com/cleanroommc/fugue/common/FugueLoadingPlugin.java index 358b019..6547f56 100644 --- a/src/main/java/com/cleanroommc/fugue/common/FugueLoadingPlugin.java +++ b/src/main/java/com/cleanroommc/fugue/common/FugueLoadingPlugin.java @@ -1,6 +1,7 @@ package com.cleanroommc.fugue.common; import com.cleanroommc.fugue.config.FugueConfig; +import com.cleanroommc.fugue.modifiers.IC2ExtraFixer; import com.cleanroommc.fugue.transformer.*; import com.cleanroommc.fugue.transformer.groovyscript.GroovyClassLoaderTransformer; import com.cleanroommc.fugue.transformer.logisticpipes.LogisticPipesTransformer; @@ -19,6 +20,8 @@ import net.minecraft.launchwrapper.Launch; import net.minecraftforge.common.config.ConfigManager; import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; +import org.spongepowered.asm.mixin.transformer.Config; +import org.spongepowered.asm.service.mojang.MixinServiceLaunchWrapper; import top.outlands.foundation.TransformerDelegate; import top.outlands.foundation.boot.ActualClassLoader; @@ -26,6 +29,7 @@ import java.util.Map; @IFMLLoadingPlugin.MCVersion("1.12.2") +@IFMLLoadingPlugin.Name("Fugue") public class FugueLoadingPlugin implements IFMLLoadingPlugin { static { @@ -100,13 +104,20 @@ public class FugueLoadingPlugin implements IFMLLoadingPlugin { } if (FugueConfig.modPatchConfig.enableNothirium){ TransformerDelegate.registerExplicitTransformerByInstance(new NothiriumClassTransformerTransformer(), "meldexun.nothirium.mc.asm.NothiriumClassTransformer"); - TransformerDelegate.registerTransformerByInstance(new MixinBufferBuilderTransformer()); + MixinServiceLaunchWrapper.registerMixinClassTransformer(new MixinBufferBuilderTransformer(), "meldexun.nothirium.mc.mixin.vertex.MixinBufferBuilder"); TransformerDelegate.registerExplicitTransformerByInstance(new BufferBuilderTransformer(), "net.minecraft.client.renderer.BufferBuilder"); TransformerDelegate.registerExplicitTransformerByInstance(new FreeSectorManagerTransformer(), "meldexun.nothirium.util.FreeSectorManager$AVL", "meldexun.nothirium.util.FreeSectorManager$RB"); } if (FugueConfig.modPatchConfig.enableGroovyScript) { TransformerDelegate.registerExplicitTransformerByInstance(new GroovyClassLoaderTransformer(), "groovy.lang.GroovyClassLoader$ClassCollector"); } + if (FugueConfig.modPatchConfig.enableIC2CE) { + Config.registerConfigModifier(new IC2ExtraFixer(), "mixins.ic2c_extras.json"); + TransformerDelegate.registerExplicitTransformerByInstance(new Ic2cExtrasLoadingPluginTransformer(), "trinsdar.ic2c_extras.asm.Ic2cExtrasLoadingPlugin"); + } + if (FugueConfig.modPatchConfig.enableSimplyHotSpring) { + TransformerDelegate.registerExplicitTransformerByInstance(new SimplyHotSpringsConfigTransformer(), "connor135246.simplyhotsprings.util.SimplyHotSpringsConfig"); + } if (FugueConfig.getCodeSourcePatchTargets.length > 0) { TransformerDelegate.registerExplicitTransformerByInstance(new ITweakerTransformer(), FugueConfig.getCodeSourcePatchTargets); } diff --git a/src/main/java/com/cleanroommc/fugue/config/FugueConfig.java b/src/main/java/com/cleanroommc/fugue/config/FugueConfig.java index 51606d3..3704f7d 100644 --- a/src/main/java/com/cleanroommc/fugue/config/FugueConfig.java +++ b/src/main/java/com/cleanroommc/fugue/config/FugueConfig.java @@ -44,6 +44,8 @@ public class FugueConfig { "com.noobanidus.variegated.compat.vanilla.handlers.MansionBiomeTypesHandler", "youyihj.zenutils.ZenUtils", "com.codetaylor.mc.athenaeum.util.Injector", + "org.valkyrienskies.mod.common.ValkyrienSkiesMod", + "com.legacy.lostaether.client.LostClientEvents", }; @Config.Comment( @@ -99,6 +101,9 @@ public class FugueConfig { "net.silentchaos512.lib.tile.SyncVariable", "appeng.me.GridStorage", "net.creeperhost.minetogether.misc.Callbacks", + "com.matez.wildnature.util.IProxy", + "com.matez.wildnature.proxy.ClientProxy", + "com.matez.wildnature.proxy.ServerProxy", }; @Config.Comment( diff --git a/src/main/java/com/cleanroommc/fugue/config/ModPatchConfig.java b/src/main/java/com/cleanroommc/fugue/config/ModPatchConfig.java index fe4c3a3..8868211 100644 --- a/src/main/java/com/cleanroommc/fugue/config/ModPatchConfig.java +++ b/src/main/java/com/cleanroommc/fugue/config/ModPatchConfig.java @@ -73,4 +73,8 @@ public class ModPatchConfig { public boolean enableNothirium = true; @Config.Name("Enable GroovyScript Patch") public boolean enableGroovyScript = true; + @Config.Name("Enable IC2C Extra Patch") + public boolean enableIC2CE = true; + @Config.Name("Enable SimplyHotSpring Patch") + public boolean enableSimplyHotSpring = true; } diff --git a/src/main/java/com/cleanroommc/fugue/modifiers/IC2ExtraFixer.java b/src/main/java/com/cleanroommc/fugue/modifiers/IC2ExtraFixer.java new file mode 100644 index 0000000..cdd6488 --- /dev/null +++ b/src/main/java/com/cleanroommc/fugue/modifiers/IC2ExtraFixer.java @@ -0,0 +1,38 @@ +package com.cleanroommc.fugue.modifiers; + +import com.cleanroommc.fugue.common.Fugue; +import org.spongepowered.asm.mixin.MixinEnvironment; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigModifier; + +import java.util.List; + +public class IC2ExtraFixer implements IMixinConfigModifier { + @Override + public void injectConfig(String s) { + } + + @Override + public List modifyMixinClasses(List list) { + return list; + } + + @Override + public List modifyMixinClassesClient(List list) { + return list; + } + + @Override + public List modifyMixinClassesServer(List list) { + return list; + } + + @Override + public MixinEnvironment modifyEnvironment(MixinEnvironment mixinEnvironment) { + return MixinEnvironment.getEnvironment(MixinEnvironment.Phase.MOD); + } + + @Override + public boolean shouldAddMixinConfig(boolean b) { + return true; + } +} diff --git a/src/main/java/com/cleanroommc/fugue/transformer/Ic2cExtrasLoadingPluginTransformer.java b/src/main/java/com/cleanroommc/fugue/transformer/Ic2cExtrasLoadingPluginTransformer.java new file mode 100644 index 0000000..7ff3bb3 --- /dev/null +++ b/src/main/java/com/cleanroommc/fugue/transformer/Ic2cExtrasLoadingPluginTransformer.java @@ -0,0 +1,25 @@ +package com.cleanroommc.fugue.transformer; + +import com.cleanroommc.fugue.common.Fugue; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.tree.*; +import top.outlands.foundation.IExplicitTransformer; + +public class Ic2cExtrasLoadingPluginTransformer implements IExplicitTransformer { + @Override + public byte[] transform(byte[] bytes) { + ClassNode classNode = new ClassNode(); + ClassReader classReader = new ClassReader(bytes); + classReader.accept(classNode, 0); + for (AnnotationNode anno : classNode.visibleAnnotations) { + if (anno.desc.equals("Lnet/minecraftforge/fml/relauncher/IFMLLoadingPlugin$TransformerExclusions;")) { + classNode.visibleAnnotations.remove(anno); + } + } + ClassWriter classWriter = new ClassWriter(0); + + classNode.accept(classWriter); + return classWriter.toByteArray(); + } +} diff --git a/src/main/java/com/cleanroommc/fugue/transformer/SimplyHotSpringsConfigTransformer.java b/src/main/java/com/cleanroommc/fugue/transformer/SimplyHotSpringsConfigTransformer.java new file mode 100644 index 0000000..307a400 --- /dev/null +++ b/src/main/java/com/cleanroommc/fugue/transformer/SimplyHotSpringsConfigTransformer.java @@ -0,0 +1,31 @@ +package com.cleanroommc.fugue.transformer; + +import com.cleanroommc.fugue.common.Fugue; +import javassist.CannotCompileException; +import javassist.ClassPool; +import javassist.CtClass; +import javassist.expr.ExprEditor; +import javassist.expr.NewExpr; +import top.outlands.foundation.IExplicitTransformer; + +import java.io.ByteArrayInputStream; + +public class SimplyHotSpringsConfigTransformer implements IExplicitTransformer { + @Override + public byte[] transform(byte[] bytes) { + try { + CtClass cc = ClassPool.getDefault().makeClass(new ByteArrayInputStream(bytes)); + cc.getClassInitializer().instrument(new ExprEditor(){ + public void edit(NewExpr e) throws CannotCompileException { + if (e.getClassName().equals("it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap")) { + e.replace("$_ = $proceed(255, 0.75F);"); + } + } + }); + bytes = cc.toBytecode(); + } catch (Throwable t) { + Fugue.LOGGER.error(t); + } + return bytes; + } +} diff --git a/src/main/java/com/cleanroommc/fugue/transformer/loliasm/LoliFMLCallHookTransformer.java b/src/main/java/com/cleanroommc/fugue/transformer/loliasm/LoliFMLCallHookTransformer.java index 4104cc5..df82569 100644 --- a/src/main/java/com/cleanroommc/fugue/transformer/loliasm/LoliFMLCallHookTransformer.java +++ b/src/main/java/com/cleanroommc/fugue/transformer/loliasm/LoliFMLCallHookTransformer.java @@ -11,7 +11,6 @@ public class LoliFMLCallHookTransformer implements IExplicitTransformer { @Override public byte[] transform(byte[] bytes) { ClassReader reader = new ClassReader(bytes); - Fugue.LOGGER.info(reader.getClassName()); ClassNode classNode = new ClassNode(); reader.accept(classNode, 0); classNode.methods.forEach(methodNode -> methodNode.instructions.forEach(abstractInsnNode -> { diff --git a/src/main/java/com/cleanroommc/fugue/transformer/nothirium/MixinBufferBuilderTransformer.java b/src/main/java/com/cleanroommc/fugue/transformer/nothirium/MixinBufferBuilderTransformer.java index 54b279c..a08c60a 100644 --- a/src/main/java/com/cleanroommc/fugue/transformer/nothirium/MixinBufferBuilderTransformer.java +++ b/src/main/java/com/cleanroommc/fugue/transformer/nothirium/MixinBufferBuilderTransformer.java @@ -4,21 +4,20 @@ import javassist.ClassPool; import javassist.CtClass; import net.minecraft.launchwrapper.IClassTransformer; +import top.outlands.foundation.IExplicitTransformer; import java.io.ByteArrayInputStream; -public class MixinBufferBuilderTransformer implements IClassTransformer { +public class MixinBufferBuilderTransformer implements IExplicitTransformer { @Override - public byte[] transform(String s, String s1, byte[] bytes) { - if (s1.equals("meldexun.nothirium.mc.mixin.vertex.MixinBufferBuilder")) { - try { - CtClass cc = ClassPool.getDefault().makeClass(new ByteArrayInputStream(bytes)); - cc.removeMethod(cc.getDeclaredMethod("growBuffer")); - bytes = cc.toBytecode(); - } catch (Throwable t) { - Fugue.LOGGER.error(t); - } + public byte[] transform(byte[] bytes) { + try { + CtClass cc = ClassPool.getDefault().makeClass(new ByteArrayInputStream(bytes)); + cc.removeMethod(cc.getDeclaredMethod("growBuffer")); + bytes = cc.toBytecode(); + } catch (Throwable t) { + Fugue.LOGGER.error(t); } return bytes; } diff --git a/src/main/java/com/cleanroommc/fugue/transformer/nothirium/NothiriumClassTransformerTransformer.java b/src/main/java/com/cleanroommc/fugue/transformer/nothirium/NothiriumClassTransformerTransformer.java index d39c3be..4b08d6d 100644 --- a/src/main/java/com/cleanroommc/fugue/transformer/nothirium/NothiriumClassTransformerTransformer.java +++ b/src/main/java/com/cleanroommc/fugue/transformer/nothirium/NothiriumClassTransformerTransformer.java @@ -1,5 +1,6 @@ package com.cleanroommc.fugue.transformer.nothirium; +import net.minecraft.launchwrapper.Launch; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; @@ -9,6 +10,7 @@ public class NothiriumClassTransformerTransformer implements IExplicitTransformer { @Override public byte[] transform(byte[] bytes) { + if (Launch.classLoader.isClassExist("Config")) return bytes; ClassNode classNode = new ClassNode(); ClassReader classReader = new ClassReader(bytes); classReader.accept(classNode, 0);