Skip to content

Commit

Permalink
Fix transformer wrapper for MoreCrashInfo mod.
Browse files Browse the repository at this point in the history
  • Loading branch information
ZekerZhayard committed May 3, 2020
1 parent c08aa2d commit 75111c6
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 9 deletions.
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -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 `<projectDir>/run/mods` folder.
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -122,7 +123,6 @@ public void onLoad(@Nonnull IEnvironment env, @Nonnull Set<String> otherServices
"unchecked"
})
public List<ITransformer> transformers() {
List<ITransformer> list = new ArrayList<>();
if (checked) {
// See https://github.com/cpw/modlauncher/issues/37
// OptiFine transformer overwrite all JavaScript field and method transformers.
Expand All @@ -138,7 +138,9 @@ public List<ITransformer> transformers() {
Map<TransformTargetLabel, List<ITransformer<?>>> transformersMap = (Map<TransformTargetLabel, List<ITransformer<?>>>) FieldUtils.readDeclaredField(transformListEntry.getValue(), "transformers", true);
for (Map.Entry<TransformTargetLabel, List<ITransformer<?>>> 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();
Expand All @@ -147,6 +149,6 @@ public List<ITransformer> transformers() {
LOGGER.error("", e);
}
}
return list;
return new ArrayList<>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,9 @@ public TransformerVoteResult castVote(@Nonnull ITransformerVotingContext context
public Set<Target> targets() {
return Sets.newHashSet(Target.targetClass(this.target.getClassName()));
}

@Override
public String[] labels() {
return this.wrappedTransformer.labels();
}
}

0 comments on commit 75111c6

Please sign in to comment.