Skip to content

Commit

Permalink
1.2.13
Browse files Browse the repository at this point in the history
  • Loading branch information
3093FengMing committed Jul 16, 2023
1 parent 8cb9b17 commit c773e30
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 34 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ apply plugin: 'org.spongepowered.mixin'
apply plugin: 'org.parchmentmc.librarian.forgegradle'


version = 'forge-1.2.12-asm'
version = 'forge-1.2.13-asm'
group = 'me.fengming.vaultpatcher' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'vaultpatcher'

Expand Down
21 changes: 3 additions & 18 deletions src/main/java/me/fengming/vaultpatcher/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
import me.fengming.vaultpatcher.config.TranslationInfo;
import me.fengming.vaultpatcher.config.VaultPatcherConfig;
import me.fengming.vaultpatcher.config.VaultPatcherPatch;
import org.objectweb.asm.tree.ClassNode;

import java.util.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Utils {
public static List<VaultPatcherPatch> vpps = new ArrayList<>();
Expand Down Expand Up @@ -51,21 +52,5 @@ public static void outputDebugIndo(String s, String m, String ret, String c, Deb
}
}

public static String removeUnicodeEscapes(String s) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (i + 5 < s.length() && s.charAt(i) == '\\' && s.charAt(i + 1) == 'u' &&
isHexChar(s.charAt(i + 2)) && isHexChar(s.charAt(i + 3)) &&
isHexChar(s.charAt(i + 4)) && isHexChar(s.charAt(i + 5))) {
i += 5;
} else {
sb.append(s.charAt(i));
}
}
return sb.toString();
}

private static boolean isHexChar(char c) {
return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');
}
}
27 changes: 14 additions & 13 deletions src/main/java/me/fengming/vaultpatcher/core/VPClassTransformer.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package me.fengming.vaultpatcher.core;

import cpw.mods.modlauncher.api.ITransformationService;
import cpw.mods.modlauncher.api.ITransformer;
import cpw.mods.modlauncher.api.ITransformerVotingContext;
import cpw.mods.modlauncher.api.TransformerVoteResult;
Expand All @@ -9,13 +8,11 @@
import me.fengming.vaultpatcher.config.DebugMode;
import me.fengming.vaultpatcher.config.TranslationInfo;
import me.fengming.vaultpatcher.config.VaultPatcherConfig;
import me.fengming.vaultpatcher.config.VaultPatcherPatch;
import org.jetbrains.annotations.NotNull;
import org.objectweb.asm.tree.*;

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class VPClassTransformer implements ITransformer<ClassNode> {
Expand All @@ -35,9 +32,8 @@ public class VPClassTransformer implements ITransformer<ClassNode> {
methodReplace(input, info, debug);
// Field
fieldReplace(input, info, debug);
it.remove();
}

it.remove();
}
return input;
}
Expand All @@ -58,17 +54,21 @@ private static void methodReplace(ClassNode input, TranslationInfo info, DebugMo
}
} else if (instruction.getType() == AbstractInsnNode.INVOKE_DYNAMIC_INSN) { // 字符串拼接
InvokeDynamicInsnNode invokeDynamicInsnNode = (InvokeDynamicInsnNode) instruction;
if (invokeDynamicInsnNode.name.equals("makeConcatWithConstants") && invokeDynamicInsnNode.desc.equals("(I)Ljava/lang/String;")) {
if (invokeDynamicInsnNode.name.equals("makeConcatWithConstants")) {
for (int i = 0; i < invokeDynamicInsnNode.bsmArgs.length; i++) {
if (invokeDynamicInsnNode.bsmArgs[i] instanceof String v) {
v = Utils.removeUnicodeEscapes(v);
if (v.equals(info.getKey())) {
if (debug.isEnable()) {
VaultPatcher.LOGGER.warn("[VaultPatcher] Trying replacing!");
Utils.outputDebugIndo(v, "ASMTransformMethod-Invoke", info.getValue(), input.name, debug);
if (invokeDynamicInsnNode.bsmArgs[i] instanceof String str) {
String[] parts = str.split("\u0001", -1);
for (int j = 0; j < parts.length; j++) {
if (parts[j].equals(info.getKey())) {
parts[j] = info.getValue();
}
invokeDynamicInsnNode.bsmArgs[i] = info.getValue();
}
String v = String.join("\u0001", parts);
if (debug.isEnable()) {
VaultPatcher.LOGGER.warn("[VaultPatcher] Trying replacing!");
Utils.outputDebugIndo(str, "ASMTransformMethod-InvokeDynamic", v, input.name, debug);
}
invokeDynamicInsnNode.bsmArgs[i] = v;
}
}
}
Expand Down Expand Up @@ -97,6 +97,7 @@ private static void fieldReplace(ClassNode input, TranslationInfo info, DebugMod

@Override
public @NotNull Set<Target> targets() {
// TODO all classes
return VaultPatcherConfig.isAllClasses() ? new HashSet<>() : new HashSet<>(Utils.addTargetClasses());
}
}
5 changes: 3 additions & 2 deletions src/test/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import net.minecraft.network.chat.TextComponent;

public class Main {
public void main() {
public void main(String[] args) {
TextComponent text = new TextComponent("1234aa");
TextComponent textw = new TextComponent("1suus34aa");

System.out.println("text = " + text.getText());
System.out.println("text = " + "sss" + "bbb" + text.getText() + textw.getText());
}
}

0 comments on commit c773e30

Please sign in to comment.