From 75111c61eb6d4f49d14d8f4c1de1790aace06217 Mon Sep 17 00:00:00 2001 From: ZekerZhayard Date: Sun, 3 May 2020 13:39:34 +0800 Subject: [PATCH] Fix transformer wrapper for MoreCrashInfo mod. --- README.md | 9 ++++++--- gradle.properties | 2 +- .../zekerzhayard/optiforge/asm/MixinConnector.java | 2 -- .../asm/fml/OptiForgeTransformationService.java | 8 +++++--- .../optiforge/asm/fml/OptiForgeTransformer.java | 5 +++++ 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b8c7c20..6abf4c9 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,23 @@ # OptiForge ([CurseForge](https://www.curseforge.com/minecraft/mc-mods/optiforge)) -*Compatibility: (2020-05-01)* - *OptiForge-MC1.14.4-0.1.0* +*Compatibility: (2020-05-03)* + *OptiForge-MC1.14.4-0.1.1*  *Forge-1.14.4-28.2.2 or newer version*  *OptiFine-1.14.4-F4-pre1 or newer version* ## How to Use 1. Download [OptiFine](https://www.optifine.net/downloads) 1.14.4 -2. Download [MixinBootstrap](https://github.com/LXGaming/MixinBootstrap/releases/download/v1.0.2/MixinBootstrap-1.0.2.jar) +2. Download [MixinBootstrap](https://github.com/LXGaming/MixinBootstrap/releases) 3. Download [OptiForge](https://github.com/ZekerZhayard/OptiForge/releases) at the release page 4. Put the above mods into the `mods` folder. 5. Launch Minecraft! *Notice: If you find a bug, please report it to OptiForge first unless you are sure it is an OptiFine bug.* +### About reporting crash +I recommend installing [MoreCrashInfo](https://github.com/xfl03/MoreCrashInfo/releases) mod. This mod will print more useful information to crash reports, and these can help us locate errors faster. + ### For Development Environment 1. There is a project called [OptiFineDevTweaker](https://github.com/OpenCubicChunks/OptiFineDevTweaker) can help us use OptiFine under development environment. You should put OptiFine itself and OptiFineDevTweaker mod to `/run/mods` folder. diff --git a/gradle.properties b/gradle.properties index a72df07..479f66f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -mod_version=0.1.0 +mod_version=0.1.1 # F4_pre1 optifine_version=6.4.1 minecraft_version=1.14.4 diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/MixinConnector.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/MixinConnector.java index 24b8e22..b28aaf2 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/MixinConnector.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/MixinConnector.java @@ -1,13 +1,11 @@ package io.github.zekerzhayard.optiforge.asm; -import org.spongepowered.asm.launch.MixinBootstrap; import org.spongepowered.asm.mixin.Mixins; import org.spongepowered.asm.mixin.connect.IMixinConnector; public class MixinConnector implements IMixinConnector { @Override public void connect() { - MixinBootstrap.init(); Mixins.addConfigurations("mixins.optiforge.json"); } } diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/fml/OptiForgeTransformationService.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/fml/OptiForgeTransformationService.java index eaf0af0..4338452 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/fml/OptiForgeTransformationService.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/fml/OptiForgeTransformationService.java @@ -18,6 +18,7 @@ import cpw.mods.modlauncher.TransformStore; import cpw.mods.modlauncher.TransformTargetLabel; import cpw.mods.modlauncher.TransformationServiceDecorator; +import cpw.mods.modlauncher.TransformerHolder; import cpw.mods.modlauncher.api.IEnvironment; import cpw.mods.modlauncher.api.ITransformationService; import cpw.mods.modlauncher.api.ITransformer; @@ -122,7 +123,6 @@ public void onLoad(@Nonnull IEnvironment env, @Nonnull Set otherServices "unchecked" }) public List transformers() { - List list = new ArrayList<>(); if (checked) { // See https://github.com/cpw/modlauncher/issues/37 // OptiFine transformer overwrite all JavaScript field and method transformers. @@ -138,7 +138,9 @@ public List transformers() { Map>> transformersMap = (Map>>) FieldUtils.readDeclaredField(transformListEntry.getValue(), "transformers", true); for (Map.Entry>> entry : transformersMap.entrySet()) { for (ITransformer transformer : entry.getValue()) { - list.add(new OptiForgeTransformer(transformer, transformListEntry.getKey().equals(TransformTargetLabel.LabelType.FIELD) ? ITransformer.Target.targetField(((Type) MethodUtils.invokeMethod(entry.getKey(), true, "getClassName")).getInternalName(), entry.getKey().getElementName()) : ITransformer.Target.targetMethod(((Type) MethodUtils.invokeMethod(entry.getKey(), true, "getClassName")).getInternalName(), entry.getKey().getElementName(), entry.getKey().getElementDescriptor().getInternalName()))); + // assert transformer instanceof TransformerHolder + String className = ((Type) MethodUtils.invokeMethod(entry.getKey(), true, "getClassName")).getInternalName(); + MethodUtils.invokeMethod(transformers.get(TransformTargetLabel.LabelType.CLASS), true, "addTransformer", new TransformTargetLabel(className), new TransformerHolder<>(new OptiForgeTransformer<>(transformer, transformListEntry.getKey().equals(TransformTargetLabel.LabelType.FIELD) ? ITransformer.Target.targetField(className, entry.getKey().getElementName()) : ITransformer.Target.targetMethod(className, entry.getKey().getElementName(), entry.getKey().getElementDescriptor().getInternalName())), ((TransformerHolder) transformer).owner())); } } transformersMap.clear(); @@ -147,6 +149,6 @@ public List transformers() { LOGGER.error("", e); } } - return list; + return new ArrayList<>(); } } diff --git a/src/main/java/io/github/zekerzhayard/optiforge/asm/fml/OptiForgeTransformer.java b/src/main/java/io/github/zekerzhayard/optiforge/asm/fml/OptiForgeTransformer.java index ef0cf03..b746559 100644 --- a/src/main/java/io/github/zekerzhayard/optiforge/asm/fml/OptiForgeTransformer.java +++ b/src/main/java/io/github/zekerzhayard/optiforge/asm/fml/OptiForgeTransformer.java @@ -68,4 +68,9 @@ public TransformerVoteResult castVote(@Nonnull ITransformerVotingContext context public Set targets() { return Sets.newHashSet(Target.targetClass(this.target.getClassName())); } + + @Override + public String[] labels() { + return this.wrappedTransformer.labels(); + } }