Skip to content
This repository was archived by the owner on Jan 3, 2020. It is now read-only.

Commit d29bc01

Browse files
committed
updates
1 parent c7b6494 commit d29bc01

5 files changed

Lines changed: 124 additions & 146 deletions

File tree

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ archivesBaseName = "UniSkinMod"
2323

2424
minecraft {
2525
version = "1.7.10-10.13.2.1230"
26+
mappings = 'stable_12'
2627
runDir = "eclipse"
2728
}
2829

src/main/java/org/devinprogress/uniskinmod/ASMHelper.java

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.devinprogress.uniskinmod;
22

33

4+
import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper;
45
import org.objectweb.asm.ClassReader;
56
import org.objectweb.asm.ClassWriter;
67
import org.objectweb.asm.Opcodes;
@@ -14,48 +15,46 @@
1415
*/
1516
public class ASMHelper {
1617
private Object obj;
17-
private List<MethodRecord> map=null;
18-
private Set<String> classMap=null;
18+
//Map<DeobfuscatedClassName,Map<methodName+Desc,processMethod>>
19+
private Map<String,Map<String,Method>> map;
1920

2021
public ASMHelper(Object o){
2122
obj=o;
22-
map=new ArrayList<MethodRecord>();
23-
classMap=new HashSet<String>();
23+
map=new HashMap<String, Map<String,Method>>();
2424
}
2525

26-
public void add(String className,String methodName,String methodNameDeobf,String Descripton,String DescriptionDeobf,String targetTransformer){
27-
map.add(new MethodRecord(
28-
className,
29-
methodName,
30-
methodNameDeobf,
31-
Descripton,
32-
DescriptionDeobf,
33-
targetTransformer
34-
));
35-
classMap.add(className);
26+
public void hookMethod(String className,String srgName,String mcpName,String desc,String targetTransformer){
27+
if(!map.containsKey(className))
28+
map.put(className,new HashMap<String, Method>());
29+
Method m=null;
30+
try{
31+
m= obj.getClass().getDeclaredMethod(targetTransformer,MethodNode.class);
32+
}catch(Exception e){
33+
e.printStackTrace();
34+
}
35+
map.get(className).put(srgName + desc, m);
36+
map.get(className).put(mcpName + desc, m);
3637
}
3738

38-
public byte[] transform(String className,byte[] bytes){
39+
public byte[] transform(String obfClassName,String className,byte[] bytes){
40+
if(!map.containsKey(className))return bytes;
41+
Map<String,Method> transMap=map.get(className);
3942

40-
if(!classMap.contains(className))return bytes;
41-
//System.out.println("Examing Class:"+className);
4243
ClassReader cr=new ClassReader(bytes);
4344
ClassNode cn=new ClassNode();
4445
cr.accept(cn, 0);
4546

4647
for(MethodNode mn:cn.methods){
4748
//System.out.println(String.format("Examing Method: %s%s",mn.name,mn.desc));
48-
for(MethodRecord r:map){
49-
r.preProcess(!SkinCore.ObfuscatedEnv,obj);
50-
if(mn.name.equals(r.MethodName)&&mn.desc.equals(r.Desc)&&className.equals(r.ClassName)){
51-
try{
52-
//System.out.println(String.format("Invoking Method: %s%s",mn.name,mn.desc));
53-
r.ProcessMethod.invoke(obj,mn);
54-
}catch(Exception e){
55-
e.printStackTrace();
56-
return bytes;
57-
}
58-
break;
49+
String methodName=FMLDeobfuscatingRemapper.INSTANCE.mapMethodName(obfClassName,mn.name,mn.desc);
50+
String methodDesc=FMLDeobfuscatingRemapper.INSTANCE.mapMethodDesc(mn.desc);
51+
if(transMap.containsKey(methodName+methodDesc)){
52+
try{
53+
//System.out.println(String.format("Invoking Method: %s%s",mn.name,mn.desc));
54+
transMap.get(methodName+methodDesc).invoke(obj,mn);
55+
}catch(Exception e){
56+
e.printStackTrace();
57+
return bytes;
5958
}
6059
}
6160
}

src/main/java/org/devinprogress/uniskinmod/CoreContainer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public CoreContainer()
1616
meta.name = "Universal Skin Mod";
1717
meta.version = "1.1";
1818
meta.authorList = Arrays.asList("RecursiveG");
19-
meta.description = "A Coremod provided the ability to access to many skin servers.\nView config/UniSkinMod.cfg for more information.";
19+
meta.description = "A Coremod provided the ability to access to many skin servers.";
2020
meta.url = "https://github.com/RecursiveG/UniSkinMod";
2121
}
2222

src/main/java/org/devinprogress/uniskinmod/CoreTransformer.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,17 @@ public class CoreTransformer implements IClassTransformer {
3838

3939
public CoreTransformer(){
4040
asm=new ASMHelper(this);
41-
asm.add("net.minecraft.client.resources.SkinManager$3","run","run","()V","()V","injectCode");
42-
asm.add("net.minecraft.client.renderer.ImageBufferDownload","b","setAreaOpaque","(IIII)V","(IIII)V","noOpaque");
43-
asm.add("com.mojang.authlib.minecraft.MinecraftProfileTexture", "getHash", "getHash", "()Ljava/lang/String;", "()Ljava/lang/String;","newHash");
41+
asm.hookMethod("net.minecraft.client.resources.SkinManager$3", "run", "run", "()V", "injectCode");
42+
asm.hookMethod("net.minecraft.client.renderer.ImageBufferDownload", "func_78433_b","setAreaOpaque","(IIII)V", "noOpaque");
43+
asm.hookMethod("com.mojang.authlib.minecraft.MinecraftProfileTexture","getHash", "getHash", "()Ljava/lang/String;","newHash");
4444
}
4545

4646
public static void injectCode(MethodNode mn){
4747
// Code to be inserted:
4848
// org.devinprogress.uniskinmod.SkinCore.injectTexture(hashmap,p_152790_1_);
4949
// load hashmap using ALOAD_1
50-
SkinCore.log("ASMTransformer Invoked");
5150
AbstractInsnNode n=ASMHelper.getNthInsnNode(mn,Opcodes.GETFIELD,2);
52-
FieldInsnNode loadGameProfileToStack=(FieldInsnNode) ((FieldInsnNode)n).clone(null);
51+
FieldInsnNode loadGameProfileToStack=(FieldInsnNode)(n.clone(null));
5352
n=ASMHelper.getNthInsnNode(mn, Opcodes.IFEQ,1);
5453
n=ASMHelper.getLabel(n).getNext();
5554

@@ -66,8 +65,6 @@ public static void noOpaque(MethodNode mn){
6665
}
6766

6867
public static void newHash(MethodNode mn){
69-
SkinCore.log("hash Transformer Hit");
70-
if(SkinCore.useMojangStyledHash)return;
7168
mn.instructions.clear();
7269
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,0));
7370
mn.instructions.add(new FieldInsnNode(Opcodes.GETFIELD,"com/mojang/authlib/minecraft/MinecraftProfileTexture","url","Ljava/lang/String;"));
@@ -79,6 +76,6 @@ public static void newHash(MethodNode mn){
7976

8077
@Override
8178
public byte[] transform(String name, String transformedName, byte[] bytes) {
82-
return asm.transform(transformedName,bytes);
79+
return asm.transform(name,transformedName,bytes);
8380
}
8481
}

0 commit comments

Comments
 (0)