Skip to content

Commit

Permalink
1.3.2 b2
Browse files Browse the repository at this point in the history
  • Loading branch information
3093FengMing committed Sep 27, 2023
1 parent 87587a3 commit e638f9a
Show file tree
Hide file tree
Showing 10 changed files with 136 additions and 130 deletions.
17 changes: 0 additions & 17 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
buildscript {
repositories {
}
}

plugins {
id 'com.github.johnrengelman.shadow' version '7.1.2'
id 'maven-publish'
id 'java'
}
Expand Down Expand Up @@ -41,15 +35,6 @@ tasks.compileJava {
options.encoding = 'UTF-8'
}

tasks.shadowJar {
classifier = ""
minimize()
archiveBaseName.set("vaultpatcher")
dependencies {
include(dependency("com.github.Chocohead:Fabric-ASM:2.3"))
}
}

repositories {
mavenCentral()
maven {
Expand All @@ -74,7 +59,5 @@ dependencies {
implementation 'cpw.mods:modlauncher:8.1.3'

implementation 'com.github.Chocohead:Fabric-ASM:2.3'


}

1 change: 1 addition & 0 deletions src/main/java/me/fengming/vaultpatcher_asm/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public static void printDebugInfo(String s, String m, String ret, String c, Tran

public static boolean isOldVersion(String version) {
String _116 = "1.16.5";
if (_116.equals(version)) return true;
for (int i = 0; i < 6; i++) {
if (version.charAt(i) < _116.charAt(i)) return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import java.util.*;
import java.util.function.Consumer;

public class VPClassTransformer implements ITransformer<ClassNode>, Consumer<ClassNode> {
public class VPClassTransformer implements Consumer<ClassNode> {
private final DebugMode debug = VaultPatcherConfig.getDebugMode();
private final TranslationInfo translationInfo;
public VPClassTransformer(TranslationInfo info) {
Expand All @@ -38,8 +38,6 @@ private static void methodReplace(ClassNode input, TranslationInfo info) {
method.localVariables.stream().filter(node -> node.desc.equals("Ljava/lang/String;")).forEach(node -> localVariableMap.put(node.index, node.name));
}

insnReplce(method.instructions);

for (ListIterator<AbstractInsnNode> it = method.instructions.iterator(); it.hasNext(); ) {
AbstractInsnNode instruction = it.next();
Pairs pairs = info.getPairs();
Expand Down Expand Up @@ -100,6 +98,18 @@ && matchLocal(info, localVariableMap.getOrDefault(varInsnNode.var, null), false)
}
}

private static void fieldReplace(ClassNode input, TranslationInfo info) {
Pairs pairs = info.getPairs();
for (FieldNode field : input.fields) {
if (field.value instanceof String) {
String o = (String) field.value;
String v = Utils.matchPairs(pairs, o, false);
Utils.printDebugInfo(o, "ASMTransformField", v, input.name, info);
field.value = v;
}
}
}

private static void insertPairs(TranslationInfo info, MethodNode method, AbstractInsnNode nodePosition) {
InsnList list = new InsnList();
// array
Expand All @@ -111,10 +121,6 @@ private static void insertPairs(TranslationInfo info, MethodNode method, Abstrac
method.instructions.insert(nodePosition, list);
}

private static void insnReplce(InsnList insnList) {

}

public static InsnList __makeNewArray(Set<Map.Entry<String, String>> set) {
// insert two arrays (keys & values)
int size = set.size();
Expand Down Expand Up @@ -163,67 +169,19 @@ public static boolean matchLocal(TranslationInfo info, String name, boolean isMe
return false;
}

private static void fieldReplace(ClassNode input, TranslationInfo info) {
Pairs pairs = info.getPairs();
for (FieldNode field : input.fields) {
if (field.value instanceof String) {
String o = (String) field.value;
String v = Utils.matchPairs(pairs, o, false);
Utils.printDebugInfo(o, "ASMTransformField", v, input.name, info);
field.value = v;
}
}
}

// for Forge
// for Fabric
@Override
public @NotNull ClassNode transform(ClassNode input, ITransformerVotingContext context) {
if (translationInfo == null) {
public void accept(ClassNode input) {
if (this.translationInfo == null) {
for (TranslationInfo info : Utils.translationInfos) {
if (Utils.isBlank(info.getTargetClassInfo().getName()) || input.name.equals(Utils.rawPackage(info.getTargetClassInfo().getName()))) {
methodReplace(input, info);
fieldReplace(input, info);
if (Utils.isBlank(this.translationInfo.getTargetClassInfo().getName()) || input.name.equals(Utils.rawPackage(this.translationInfo.getTargetClassInfo().getName()))) {
methodReplace(input, this.translationInfo);
fieldReplace(input, this.translationInfo);
}
}
} else {
if (Utils.isBlank(this.translationInfo.getTargetClassInfo().getName()) || input.name.equals(Utils.rawPackage(this.translationInfo.getTargetClassInfo().getName()))) {
methodReplace(input, this.translationInfo);
fieldReplace(input, this.translationInfo);
}
}
return input;
}

// for Fabric
@Override
public void accept(ClassNode input) {
if (Utils.isBlank(this.translationInfo.getTargetClassInfo().getName()) || input.name.equals(Utils.rawPackage(this.translationInfo.getTargetClassInfo().getName()))) {
} else if (Utils.isBlank(this.translationInfo.getTargetClassInfo().getName()) || input.name.equals(Utils.rawPackage(this.translationInfo.getTargetClassInfo().getName()))) {
methodReplace(input, this.translationInfo);
fieldReplace(input, this.translationInfo);
}
}

@Override
public @org.jetbrains.annotations.NotNull TransformerVoteResult castVote(ITransformerVotingContext context) {
return TransformerVoteResult.YES;
}

@Override
public @NotNull Set<Target> targets() {
Set<Target> targets = new HashSet<>();

if (translationInfo == null) {
targets.addAll(Utils.addConfigApplyMods()); // May cause unnecessary resource waste
targets.addAll(Utils.addConfigClasses());
} else {
Target t = Utils.addTargetClasses(this.translationInfo);
if (t != null) targets.add(t);
}

if (debug.isEnable()) {
targets.iterator().forEachRemaining(t -> VaultPatcher.LOGGER.debug(String.format("[VaultPatcher Debug] VPClassTransformer Target = %s", t.getClassName())));
}

return targets;
}
}
Original file line number Diff line number Diff line change
@@ -1,30 +1,18 @@
package me.fengming.vaultpatcher_asm.core;

import cpw.mods.modlauncher.api.ITransformer;
import cpw.mods.modlauncher.api.ITransformerVotingContext;
import cpw.mods.modlauncher.api.TransformerVoteResult;
import me.fengming.vaultpatcher_asm.VaultPatcher;
import org.jetbrains.annotations.NotNull;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.*;

import java.util.HashSet;
import java.util.ListIterator;
import java.util.Set;
import java.util.function.Consumer;

public class VPMinecraftTransformer implements ITransformer<ClassNode>, Consumer<ClassNode> {
public class VPMinecraftTransformer implements Consumer<ClassNode> {

public VPMinecraftTransformer() {
VaultPatcher.LOGGER.info("[VaultPatcher] Loading MinecraftTransformer");
}

// for Forge
@Override
public ClassNode transform(ClassNode input, ITransformerVotingContext context) {
return classTransform(input);
}

private static ClassNode classTransform(ClassNode input) {
if (input.name.equals("net/minecraft/util/text/StringTextComponent") || input.name.equals("net/minecraft/network/chat/TextComponent") /* Forge */
|| input.name.equals("net/minecraft/class_2585") /* Fabric */) {
Expand Down Expand Up @@ -65,23 +53,4 @@ private static ClassNode classTransform(ClassNode input) {
public void accept(ClassNode input) {
classTransform(input);
}

@NotNull
@Override
public TransformerVoteResult castVote(ITransformerVotingContext context) {
return TransformerVoteResult.YES;
}

@NotNull
@Override
public Set<Target> targets() {
Set<Target> targets = new HashSet<>();
// TextComponent
targets.add(Target.targetClass("net.minecraft.util.text.StringTextComponent"));
targets.add(Target.targetClass("net.minecraft.network.chat.TextComponent"));
// Font
targets.add(Target.targetClass("net.minecraft.client.gui.Font"));
targets.add(Target.targetClass("net.minecraft.client.gui.FontRenderer"));
return targets;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,6 @@ public class EarlyRiser implements Runnable {
public void run() {
VaultPatcher.LOGGER.warn("[VaultPatcher] Loading VPTransformationService!");

// String minecraftVersion = getMinecraftVersion();

// if (Utils.isBlank(minecraftVersion)) VaultPatcher.LOGGER.error("[VaultPatcher] Failed to get minecraft version!");
// VaultPatcher.LOGGER.info("[VaultPatcher] Get minecraft version: " + minecraftVersion);

VaultPatcher.init(FabricLoader.getInstance().getGameDir());
// initial transformers

Expand All @@ -45,10 +40,6 @@ public void run() {
VaultPatcherConfig.getClasses().forEach((s) -> ClassTinkerers.addTransformation(s, new VPClassTransformer(null)));

ClassTinkerers.addTransformation("net.minecraft.class_327", new VPMinecraftTransformer());
ClassTinkerers.addReplacement("net.minecraft.class_2585", new VPMinecraftTransformer());
ClassTinkerers.addTransformation("net.minecraft.class_2585", new VPMinecraftTransformer());
}

// private static String getMinecraftVersion() {
// return FabricLoaderImpl.INSTANCE.getGameProvider().getNormalizedGameVersion();
// }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package me.fengming.vaultpatcher_asm.forge;

import cpw.mods.modlauncher.api.ITransformer;
import cpw.mods.modlauncher.api.ITransformerVotingContext;
import cpw.mods.modlauncher.api.TransformerVoteResult;
import me.fengming.vaultpatcher_asm.Utils;
import me.fengming.vaultpatcher_asm.VaultPatcher;
import me.fengming.vaultpatcher_asm.config.DebugMode;
import me.fengming.vaultpatcher_asm.config.TranslationInfo;
import me.fengming.vaultpatcher_asm.config.VaultPatcherConfig;
import me.fengming.vaultpatcher_asm.core.VPClassTransformer;
import org.objectweb.asm.tree.ClassNode;

import java.util.HashSet;
import java.util.Set;

public class ForgeClassTransformer implements ITransformer<ClassNode> {

private final TranslationInfo translationInfo;
private final DebugMode debug = VaultPatcherConfig.getDebugMode();

public ForgeClassTransformer(TranslationInfo info) {
this.translationInfo = info;
// if (info != null && debug.isEnable()) {
// VaultPatcher.LOGGER.debug(String.format("[VaultPatcher Debug] Loading VPTransformer for Class: %s, Method: %s, Local: %s, Pairs: %s", info.getTargetClassInfo().getName(), info.getTargetClassInfo().getMethod(), info.getTargetClassInfo().getLocal(), info.getPairs()));
// }
}

// for Forge
@Override
public ClassNode transform(ClassNode input, ITransformerVotingContext context) {
new VPClassTransformer(this.translationInfo).accept(input);
return input;
}

@Override
public TransformerVoteResult castVote(ITransformerVotingContext context) {
return TransformerVoteResult.YES;
}

@Override
public Set<Target> targets() {
Set<Target> targets = new HashSet<>();

if (translationInfo == null) {
targets.addAll(Utils.addConfigApplyMods()); // May cause unnecessary resource waste
targets.addAll(Utils.addConfigClasses());
} else {
Target t = Utils.addTargetClasses(this.translationInfo);
if (t != null) targets.add(t);
}

if (debug.isEnable()) {
targets.iterator().forEachRemaining(t -> VaultPatcher.LOGGER.debug(String.format("[VaultPatcher Debug] VPClassTransformer Target = %s", t.getClassName())));
}

return targets;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package me.fengming.vaultpatcher_asm.forge;

import cpw.mods.modlauncher.api.ITransformer;
import cpw.mods.modlauncher.api.ITransformerVotingContext;
import cpw.mods.modlauncher.api.TransformerVoteResult;
import me.fengming.vaultpatcher_asm.VaultPatcher;
import me.fengming.vaultpatcher_asm.core.VPMinecraftTransformer;
import org.objectweb.asm.tree.ClassNode;

import java.util.HashSet;
import java.util.Set;

public class ForgeMinecraftTransformer implements ITransformer<ClassNode> {
public ForgeMinecraftTransformer() {
VaultPatcher.LOGGER.info("[VaultPatcher] Loading MinecraftTransformer");
}

// for Forge
@Override
public ClassNode transform(ClassNode input, ITransformerVotingContext context) {
new VPMinecraftTransformer().accept(input);
return input;
}

@Override
public TransformerVoteResult castVote(ITransformerVotingContext context) {
return TransformerVoteResult.YES;
}


@Override
public Set<Target> targets() {
Set<Target> targets = new HashSet<>();
// TextComponent
targets.add(Target.targetClass("net.minecraft.util.text.StringTextComponent"));
targets.add(Target.targetClass("net.minecraft.network.chat.TextComponent"));
// Font
targets.add(Target.targetClass("net.minecraft.client.gui.Font"));
targets.add(Target.targetClass("net.minecraft.client.gui.FontRenderer"));
return targets;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import cpw.mods.modlauncher.api.ITransformer;
import me.fengming.vaultpatcher_asm.Utils;
import me.fengming.vaultpatcher_asm.VaultPatcher;
import me.fengming.vaultpatcher_asm.core.VPClassTransformer;
import me.fengming.vaultpatcher_asm.core.VPMinecraftTransformer;
import org.jetbrains.annotations.NotNull;

Expand Down Expand Up @@ -43,7 +42,7 @@ public void initialize(IEnvironment environment) {
if (Utils.isBlank(minecraftVersion)) VaultPatcher.LOGGER.error("[VaultPatcher] Failed to get minecraft version!");
// VaultPatcher.LOGGER.info("[VaultPatcher] Get minecraft version: " + minecraftVersion);
if (Utils.isOldVersion(minecraftVersion)) {
VaultPatcher.LOGGER.warn("[VaultPatcher] Disable dynamic mod because you are in old version (" + minecraftVersion + "<=1.16.5)");
VaultPatcher.LOGGER.warn("[VaultPatcher] Disable dynamic replace because you are in old version (" + minecraftVersion + "<=1.16.5)");
oldVersion = true;
}

Expand Down Expand Up @@ -80,8 +79,8 @@ public void onLoad(IEnvironment env, Set<String> otherServices) {}
@Override
public @NotNull List<ITransformer> transformers() {
List<ITransformer> list = new ArrayList<>();
list.addAll(Utils.translationInfos.stream().collect(ArrayList::new, (l1, info) -> l1.add(new VPClassTransformer(info)), ArrayList::addAll));
if (!oldVersion) list.add(new VPMinecraftTransformer());
list.addAll(Utils.translationInfos.stream().collect(ArrayList::new, (l1, info) -> l1.add(new ForgeClassTransformer(info)), ArrayList::addAll));
if (!oldVersion) list.add(new ForgeMinecraftTransformer());
return list;
}
}
Loading

0 comments on commit e638f9a

Please sign in to comment.