Skip to content

Commit

Permalink
fix ASM error
Browse files Browse the repository at this point in the history
  • Loading branch information
FalsePattern committed Nov 28, 2023
1 parent f607137 commit ccb2901
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,17 @@
import com.falsepattern.falsetweaks.config.ModuleConfig;
import com.falsepattern.falsetweaks.modules.animfix.AnimFixCompat;
import com.falsepattern.falsetweaks.modules.occlusion.OcclusionCompat;
import lombok.Getter;

import cpw.mods.fml.relauncher.IFMLLoadingPlugin;

import java.util.Map;

@IFMLLoadingPlugin.TransformerExclusions(Tags.GROUPNAME + ".asm")
public class CoreLoadingPlugin implements IFMLLoadingPlugin {
@Getter
private static boolean obfuscated;

static {
ModuleConfig.init();

Expand Down Expand Up @@ -55,6 +59,7 @@ public String getSetupClass() {

@Override
public void injectData(Map<String, Object> data) {
obfuscated = (Boolean) data.get("runtimeDeobfuscationEnabled");
//Doing this here because this runs after coremod init, but before minecraft classes start loading and mixins start colliding and crashing.
if (ModuleConfig.OCCLUSION_TWEAKS)
OcclusionCompat.ArchaicFixCompat.crashIfUnsupportedConfigsAreActive();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,21 @@
import com.falsepattern.falsetweaks.asm.modules.occlusion.optifine.RenderGlobalDeOptimizer;
import com.falsepattern.falsetweaks.asm.modules.threadedupdates.Threading_RenderBlocksASM;
import com.falsepattern.falsetweaks.config.ModuleConfig;
import com.falsepattern.lib.asm.ASMUtil;
import com.falsepattern.lib.asm.IClassNodeTransformer;
import com.falsepattern.lib.asm.SmartTransformer;
import com.falsepattern.lib.optifine.OptiFineTransformerHooks;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.val;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

@Getter
Expand All @@ -47,5 +52,39 @@ public class FalseTweaksTransformer implements SmartTransformer {
}
}

@Override
public byte[] transform(String name, String transformedName, byte[] bytes) {
if (bytes == null) {
return null;
}
val transformers = new ArrayList<IClassNodeTransformer>();
val cn = ASMUtil.parseClass(bytes, 0);
for (val transformer : transformers()) {
if (transformer.shouldTransform(cn, transformedName, CoreLoadingPlugin.isObfuscated())) {
transformers.add(transformer);
}
}
if (transformers.isEmpty()) {
return bytes;
}
transformers.sort(Comparator.comparingInt(IClassNodeTransformer::internalSortingOrder));
val log = logger();
for (val transformer : transformers) {
log.debug("Patching {} with {}...", transformedName, transformer.getName());
try {
transformer.transform(cn, transformedName, CoreLoadingPlugin.isObfuscated());
} catch (RuntimeException | Error t) {
log.error("Error transforming {} with {}: {}", transformedName, transformer.getName(), t.getMessage());
throw t;
} catch (Throwable t) {
log.error("Error transforming {} with {}: {}", transformedName, transformer.getName(), t.getMessage());
throw new RuntimeException(t);
}
}
val result = ASMUtil.serializeClass(cn, 0);
log.debug("Patched {} successfully.", transformedName);
return result;
}

private final List<IClassNodeTransformer> transformers = TRANSFORMERS;
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ private void transformRenderBlockByRenderType(ClassNode cn) {
list.add(new InsnNode(Opcodes.ISUB));
list.add(new InsnNode(Opcodes.IRETURN));
list.add(lbl);
list.add(new FrameNode(Opcodes.F_SAME1, 0, null, 1, new Object[]{"I"}));
list.add(new InsnNode(Opcodes.POP));
}
}

0 comments on commit ccb2901

Please sign in to comment.