Skip to content

Commit

Permalink
1.4.3+4 rebuild & fix bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
3093FengMing committed Oct 18, 2024
1 parent fee0f41 commit 3ec84b5
Show file tree
Hide file tree
Showing 33 changed files with 404 additions and 311 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jar {

manifest {
attributes([
"TweakClass": "me.fengming.vaultpatcher_asm.loader.forge.VPLaunchTweaker",
"TweakClass": "me.fengming.vaultpatcher_asm.loader.launchwrapper.VPLaunchTweaker",
"TweakOrder": 209
])
}
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false

mod_version=1.4.3+3
mod_version=1.4.4+1
13 changes: 10 additions & 3 deletions src/main/java/me/fengming/vaultpatcher_asm/VaultPatcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import me.fengming.vaultpatcher_asm.config.VaultPatcherModule;
import me.fengming.vaultpatcher_asm.core.cache.Caches;
import me.fengming.vaultpatcher_asm.core.patch.ClassPatcher;
import me.fengming.vaultpatcher_asm.core.transformers.TransformChecker;
import me.fengming.vaultpatcher_asm.core.utils.I18n;
import me.fengming.vaultpatcher_asm.core.utils.Platform;
import me.fengming.vaultpatcher_asm.core.utils.Utils;
import me.fengming.vaultpatcher_asm.plugin.VaultPatcherPlugin;
import org.apache.logging.log4j.LogManager;
Expand All @@ -24,9 +26,14 @@ public class VaultPatcher {
public static Logger LOGGER = LogManager.getLogger("VaultPatcher");

public static List<VaultPatcherPlugin> plugins = new ArrayList<>();
public static Path mcPath = null;
public static String mcVersion = null;
public static Platform platform = Platform.UNDEFINED;
public static boolean isClient = false;

public static void init(Path mcPath) {
Utils.mcPath = mcPath;
public static void init(Path mcPath, String mcVersion, Platform platform) {
VaultPatcher.mcPath = mcPath;
VaultPatcher.mcVersion = mcVersion;

Path pluginsPath = Utils.getVpPath().resolve("plugins");
if (Files.notExists(pluginsPath)) {
Expand Down Expand Up @@ -108,7 +115,7 @@ private static void _init(Path mcPath) {
throw new RuntimeException("Failed to load modules: ", e);
}

Utils.translationInfos.forEach(info -> Utils.transformed.put(info, false));
Utils.translationInfos.forEach(info -> TransformChecker.transformed.put(info, false));

// optimization
Utils.needStacktrace = Utils.dynTranslationInfos.stream().anyMatch(e -> !e.getTargetClassInfo().getName().isEmpty());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
import me.fengming.vaultpatcher_asm.core.utils.Utils;
import me.fengming.vaultpatcher_asm.core.utils.StringUtils;

import java.io.IOException;

Expand Down Expand Up @@ -69,7 +69,7 @@ public String getName() {
}

public void setName(String name) {
if (Utils.isBlank(name)) return;
if (StringUtils.isBlank(name)) return;
char first = name.charAt(0);
if (first == '@') {
matchMode = MatchMode.STARTS;
Expand All @@ -96,7 +96,7 @@ public String getLocal() {
}

public void setLocal(String local) {
if (Utils.isBlank(local)) {
if (StringUtils.isBlank(local)) {
this.local = local;
} else {
char first = local.charAt(0);
Expand All @@ -106,7 +106,7 @@ public void setLocal(String local) {
} else if (first == 'M') {
localMode = LocalMode.METHOD_RETURN;
} else if (first == 'R') {
localMode = LocalMode.CALL_RETURN;
localMode = LocalMode.INVOKE_RETURN;
} else if (first == 'G' || first == 'F') {
localMode = LocalMode.GLOBAL_VARIABLE;
} else {
Expand Down Expand Up @@ -151,7 +151,7 @@ public String toString() {
'}';
}

public enum LocalMode { CALL_RETURN, LOCAL_VARIABLE, METHOD_RETURN, GLOBAL_VARIABLE, NONE }
public enum LocalMode { INVOKE_RETURN, LOCAL_VARIABLE, METHOD_RETURN, GLOBAL_VARIABLE, NONE }

public enum MatchMode { FULL, STARTS, ENDS }
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package me.fengming.vaultpatcher_asm.core.cache;

import me.fengming.vaultpatcher_asm.config.VaultPatcherConfig;
import me.fengming.vaultpatcher_asm.core.utils.ASMUtils;
import me.fengming.vaultpatcher_asm.core.utils.Utils;
import org.objectweb.asm.tree.ClassNode;

Expand Down Expand Up @@ -42,7 +40,7 @@ public static ClassCache getClassCache(String className) {
}

public static void addClassCache(String className, ClassNode node, byte[] hash) {
File classFile = ASMUtils.exportClass(node, Utils.getVpPath().resolve("cache"));
File classFile = Utils.exportClass(node, Utils.getVpPath().resolve("cache"));
try {
ClassCache cache = new ClassCache(classFile.getParentFile().toPath().resolve(classFile.getName() + ".sha256"), classFile.toPath());
cache.create(hash);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package me.fengming.vaultpatcher_asm.core.cache;

import me.fengming.vaultpatcher_asm.core.utils.ASMUtils;
import me.fengming.vaultpatcher_asm.core.utils.Utils;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
Expand Down Expand Up @@ -86,7 +85,7 @@ public ClassNode take() {
public void put(ClassNode node, byte[] bytesToHash) {
if (this.updated) return;
this.clazz = node;
ASMUtils.exportClass(node, Utils.getVpPath().resolve("cache"));
Utils.exportClass(node, Utils.getVpPath().resolve("cache"));
String hash = getSha256(bytesToHash);
writeHash(hash, this.hashFile);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

import me.fengming.vaultpatcher_asm.core.node.HandlerDebugInfo;
import me.fengming.vaultpatcher_asm.core.node.NodeHandlerParameters;
import me.fengming.vaultpatcher_asm.core.utils.ASMUtils;
import me.fengming.vaultpatcher_asm.core.utils.Utils;
import me.fengming.vaultpatcher_asm.core.utils.MatchUtils;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.FieldInsnNode;

Expand All @@ -16,9 +15,9 @@ public FieldNodeHandler(FieldInsnNode node, NodeHandlerParameters params) {
public FieldInsnNode modifyNode() {
if (!params.disableLocal
&& (this.node.getOpcode() == Opcodes.GETFIELD || this.node.getOpcode() == Opcodes.PUTFIELD)
&& Utils.matchOrdinal(params.info, params.ordinal)
&& Utils.matchLocal(params.info, this.node.name, false)) {
Utils.insertReplace(params.classNode.name, params.methodNode, this.node, this.node.desc.equals("Ljava/lang/String;"));
&& MatchUtils.matchOrdinal(params.info, params.ordinal)
&& MatchUtils.matchLocal(params.info, this.node.name, false)) {
insertReplace(params.classNode.name, params.methodNode, this.node, this.node.desc.equals("Ljava/lang/String;"));
debugInfo(params.ordinal, "ASMTransformMethod-InsertGlobalVariablePut/Get", "Runtime Determination", "Runtime Determination");
}
return this.node;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

import me.fengming.vaultpatcher_asm.core.node.HandlerDebugInfo;
import me.fengming.vaultpatcher_asm.core.node.NodeHandlerParameters;
import me.fengming.vaultpatcher_asm.core.utils.ASMUtils;
import me.fengming.vaultpatcher_asm.core.utils.Utils;
import me.fengming.vaultpatcher_asm.core.utils.MatchUtils;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.InsnNode;

Expand All @@ -16,9 +15,9 @@ public InsnNodeHandler(InsnNode node, NodeHandlerParameters params) {
public InsnNode modifyNode() {
if (!params.disableLocal
&& this.node.getOpcode() == Opcodes.ARETURN
&& Utils.matchOrdinal(params.info, params.ordinal)
&& Utils.matchLocal(params.info, params.methodNode.name, true)) {
Utils.insertReplace(params.classNode.name, params.methodNode, this.node, false);
&& MatchUtils.matchOrdinal(params.info, params.ordinal)
&& MatchUtils.matchLocal(params.info, params.methodNode.name, true)) {
insertReplace(params.classNode.name, params.methodNode, this.node, false);
debugInfo(params.ordinal, "ASMTransformMethod-InsertMethodReturn", "Runtime Determination", "Runtime Determination");
}
return this.node;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

import me.fengming.vaultpatcher_asm.core.node.HandlerDebugInfo;
import me.fengming.vaultpatcher_asm.core.node.NodeHandlerParameters;
import me.fengming.vaultpatcher_asm.core.utils.ASMUtils;
import me.fengming.vaultpatcher_asm.core.utils.Utils;
import me.fengming.vaultpatcher_asm.core.utils.MatchUtils;
import org.objectweb.asm.tree.InvokeDynamicInsnNode;

// jdk8+
Expand All @@ -14,14 +13,14 @@ public InvokeDynamicNodeHandler(InvokeDynamicInsnNode node, NodeHandlerParameter

@Override
public InvokeDynamicInsnNode modifyNode() {
if (this.node.name.equals("makeConcatWithConstants") && Utils.matchOrdinal(params.info, params.ordinal)) {
if (this.node.name.equals("makeConcatWithConstants") && MatchUtils.matchOrdinal(params.info, params.ordinal)) {
Object[] bsmArgs = this.node.bsmArgs;
for (int i = 0; i < bsmArgs.length; i++) {
if (bsmArgs[i] instanceof String) {
String str = (String) bsmArgs[i];
String[] parts = str.split("\u0001", -1);
for (int j = 0; j < parts.length; j++) {
parts[j] = Utils.matchPairs(params.info.getPairs(), parts[j], false);
parts[j] = MatchUtils.matchPairs(params.info.getPairs(), parts[j], false);
}
String v = String.join("\u0001", parts);
debugInfo(-1, "ASMTransformMethod-StringConcat", str.replace("\u0001", "<p>"), v.replace("\u0001", "<p>"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
import me.fengming.vaultpatcher_asm.VaultPatcher;
import me.fengming.vaultpatcher_asm.core.node.HandlerDebugInfo;
import me.fengming.vaultpatcher_asm.core.node.NodeHandlerParameters;
import me.fengming.vaultpatcher_asm.core.utils.ASMUtils;
import me.fengming.vaultpatcher_asm.core.utils.Utils;
import me.fengming.vaultpatcher_asm.core.utils.MatchUtils;
import org.objectweb.asm.tree.LdcInsnNode;

public class LdcNodeHandler extends NodeHandler<LdcInsnNode> {
Expand All @@ -18,9 +17,9 @@ public LdcInsnNode modifyNode() {
VaultPatcher.debugInfo("[VaultPatcher] LdcNodeHandler");
VaultPatcher.debugInfo("[VaultPatcher] Params: " + params.toString());
VaultPatcher.debugInfo("[VaultPatcher] Node Cst: " + this.node.cst);
if (this.node.cst instanceof String && Utils.matchOrdinal(params.info, params.ordinal)) {
if (this.node.cst instanceof String && MatchUtils.matchOrdinal(params.info, params.ordinal)) {
String s = (String) this.node.cst;
String v = Utils.matchPairs(params.info.getPairs(), s, false);
String v = MatchUtils.matchPairs(params.info.getPairs(), s, false);
debugInfo(-1, "ASMTransformMethod-Ldc", s, v);
this.node.cst = v;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

import me.fengming.vaultpatcher_asm.core.node.HandlerDebugInfo;
import me.fengming.vaultpatcher_asm.core.node.NodeHandlerParameters;
import me.fengming.vaultpatcher_asm.core.utils.ASMUtils;
import me.fengming.vaultpatcher_asm.core.utils.Utils;
import me.fengming.vaultpatcher_asm.core.utils.MatchUtils;
import org.objectweb.asm.tree.MethodInsnNode;

public class MethodNodeHandler extends NodeHandler<MethodInsnNode> {
Expand All @@ -14,9 +13,9 @@ public MethodNodeHandler(MethodInsnNode node, NodeHandlerParameters params) {
@Override
public MethodInsnNode modifyNode() {
if (!params.disableLocal
&& Utils.matchOrdinal(params.info, params.ordinal)
&& Utils.matchLocal(params.info, this.node.name, true)) {
Utils.insertReplace(params.classNode.name, params.methodNode, this.node, this.node.desc.endsWith(")Ljava/lang/String"));
&& MatchUtils.matchOrdinal(params.info, params.ordinal)
&& MatchUtils.matchLocal(params.info, this.node.name, true)) {
insertReplace(params.classNode.name, params.methodNode, this.node, this.node.desc.endsWith(")Ljava/lang/String"));
debugInfo(params.ordinal, "ASMTransformMethod-InsertCalledMethodReturn", "Runtime Determination", "Runtime Determination");
}
return this.node;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import me.fengming.vaultpatcher_asm.config.VaultPatcherConfig;
import me.fengming.vaultpatcher_asm.core.node.HandlerDebugInfo;
import me.fengming.vaultpatcher_asm.core.node.NodeHandlerParameters;
import me.fengming.vaultpatcher_asm.core.utils.StringUtils;
import me.fengming.vaultpatcher_asm.core.utils.Utils;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.*;

public abstract class NodeHandler<E extends AbstractInsnNode> {
Expand All @@ -16,6 +18,10 @@ public NodeHandler(E node, NodeHandlerParameters params) {
this.params = params;
}

public static void insertReplace(String className, MethodNode method, AbstractInsnNode nodePosition, boolean isString) {
method.instructions.insert(nodePosition, new MethodInsnNode(Opcodes.INVOKESTATIC, StringUtils.rawPackage(className), "__vp_replace", isString ? "(Ljava/lang/String;)Ljava/lang/String;" : "(Ljava/lang/Object;)Ljava/lang/String;", false));
}

public E _modifyNode() {
if (Utils.debug.isEnable() && Utils.debug.isOutputNodeDebug()) {
HandlerDebugInfo debugInfo = new HandlerDebugInfo(this, params, node.getOpcode());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

import me.fengming.vaultpatcher_asm.core.node.HandlerDebugInfo;
import me.fengming.vaultpatcher_asm.core.node.NodeHandlerParameters;
import me.fengming.vaultpatcher_asm.core.utils.ASMUtils;
import me.fengming.vaultpatcher_asm.core.utils.Utils;
import me.fengming.vaultpatcher_asm.core.utils.MatchUtils;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.VarInsnNode;

Expand All @@ -17,9 +16,9 @@ public VarNodeHandler(VarInsnNode node, NodeHandlerParameters params) {
public VarInsnNode modifyNode() {
if (!params.disableLocal
&& (this.node.getOpcode() == Opcodes.ASTORE || this.node.getOpcode() == Opcodes.ALOAD)
&& Utils.matchOrdinal(params.info, params.ordinal)
&& Utils.matchLocal(params.info, params.localVariableMap.getOrDefault(this.node.var, null), false)) {
Utils.insertReplace(params.classNode.name, params.methodNode, this.node, false);
&& MatchUtils.matchOrdinal(params.info, params.ordinal)
&& MatchUtils.matchLocal(params.info, params.localVariableMap.getOrDefault(this.node.var, null), false)) {
insertReplace(params.classNode.name, params.methodNode, this.node, false);
debugInfo(params.ordinal, "ASMTransformMethod-InsertLocalVariableStore/Load", "Runtime Determination", "Runtime Determination");
}
// // Parameters
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package me.fengming.vaultpatcher_asm.core.transformers;

import me.fengming.vaultpatcher_asm.config.TranslationInfo;
import me.fengming.vaultpatcher_asm.core.utils.StringUtils;

import java.util.HashMap;
import java.util.Map;

public class TransformChecker {

public static Map<TranslationInfo, Boolean> transformed = new HashMap<>();

public static boolean isTransformed(String className) {
for (Map.Entry<TranslationInfo, Boolean> entry : transformed.entrySet()) {
TranslationInfo info = entry.getKey();
String rClassName = StringUtils.rawPackage(info.getTargetClassInfo().getName());
if (className.equals(rClassName) && !entry.getValue()) {
return false;
}
}
return true;
}

public static boolean setTransformed(TranslationInfo info) {
if (!transformed.containsKey(info)) return false;
transformed.put(info, true);
return true;
}
}
Loading

0 comments on commit 3ec84b5

Please sign in to comment.