No longer remove any elements in SkinManager. (#151)

This commit is contained in:
ZekerZhayard authored and GitHub committed 2021-03-27 19:32:00 +08:00
1 parent fb50a3db6d
commit 8befcb32d8
3 files changed
+180 -127

No files matched your search

+104 -3
View File
@@ -1,10 +1,12 @@
var ASMAPI = Java.type('net.minecraftforge.coremod.api.ASMAPI');
var Opcodes = Java.type('org.objectweb.asm.Opcodes');
var FieldInsnNode = Java.type('org.objectweb.asm.tree.FieldInsnNode');
var FieldNode = Java.type('org.objectweb.asm.tree.FieldNode');
var InsnNode = Java.type('org.objectweb.asm.tree.InsnNode');
var JumpInsnNode = Java.type('org.objectweb.asm.tree.JumpInsnNode');
var LabelNode = Java.type('org.objectweb.asm.tree.LabelNode');
var MethodInsnNode = Java.type('org.objectweb.asm.tree.MethodInsnNode');
var MethodNode = Java.type('org.objectweb.asm.tree.MethodNode');
var TypeInsnNode = Java.type('org.objectweb.asm.tree.TypeInsnNode');
var VarInsnNode = Java.type('org.objectweb.asm.tree.VarInsnNode');
// Compare method and field names, doesn't support forge-1.13.2-25.0.194 and earlier version.
@@ -15,8 +17,8 @@ function checkName(name, srgName) {
// De-obfuscate method and field names.
function mapName(srgName) {
try {
if (srgName.startsWith("field_")) return ASMAPI.mapField(srgName);
if (srgName.startsWith("func_")) return ASMAPI.mapMethod(srgName);
if (srgName.startsWith("field_")) return net.minecraftforge.coremod.api.ASMAPI.mapField(srgName);
if (srgName.startsWith("func_")) return net.minecraftforge.coremod.api.ASMAPI.mapMethod(srgName);
} catch (ignored) {
// Before forge-1.13.2-25.0.194
}
@@ -25,6 +27,66 @@ function mapName(srgName) {
function initializeCoreMod() {
return {
'SkinManagerTransformer': {
'target': {
'type': 'CLASS',
'name': 'net.minecraft.client.resources.SkinManager'
},
'transformer': function (cn) {
cn.fields.removeIf(function (fn) {
return fn.name.equals("fakeManager") && fn.desc.equals("Lcustomskinloader/fake/FakeSkinManager;");
});
cn.fields.add(new FieldNode(Opcodes.ACC_PRIVATE, "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;", null, null));
cn.methods.forEach(function (mn) {
if (checkName(mn.name, "<init>") && mn.desc.equals("(Lnet/minecraft/client/renderer/texture/TextureManager;Ljava/io/File;Lcom/mojang/authlib/minecraft/MinecraftSessionService;)V")) {
for (var iterator = mn.instructions.iterator(); iterator.hasNext();) {
var node = iterator.next();
if (node.getOpcode() === Opcodes.RETURN) {
mn.instructions.insertBefore(node, new VarInsnNode(Opcodes.ALOAD, 0));
mn.instructions.insertBefore(node, new TypeInsnNode(Opcodes.NEW, "customskinloader/fake/FakeSkinManager"));
mn.instructions.insertBefore(node, new InsnNode(Opcodes.DUP));
mn.instructions.insertBefore(node, new VarInsnNode(Opcodes.ALOAD, 1));
mn.instructions.insertBefore(node, new VarInsnNode(Opcodes.ALOAD, 2));
mn.instructions.insertBefore(node, new VarInsnNode(Opcodes.ALOAD, 3));
mn.instructions.insertBefore(node, new MethodInsnNode(Opcodes.INVOKESPECIAL, "customskinloader/fake/FakeSkinManager", "<init>", "(Lnet/minecraft/client/renderer/texture/TextureManager;Ljava/io/File;Lcom/mojang/authlib/minecraft/MinecraftSessionService;)V", false));
mn.instructions.insertBefore(node, new FieldInsnNode(Opcodes.PUTFIELD, "net/minecraft/client/resources/SkinManager", "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;"));
}
}
} else if (checkName(mn.name, "func_152789_a")
&& (mn.desc.equals("(Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;)Lnet/minecraft/util/ResourceLocation;") // 1.13.2-
|| mn.desc.equals("(Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/client/resources/SkinManager$ISkinAvailableCallback;)Lnet/minecraft/util/ResourceLocation;"))) { // 1.14.2+
var first = mn.instructions.getFirst();
mn.instructions.insertBefore(first, new VarInsnNode(Opcodes.ALOAD, 0));
mn.instructions.insertBefore(first, new FieldInsnNode(Opcodes.GETFIELD, "net/minecraft/client/resources/SkinManager", "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;"));
mn.instructions.insertBefore(first, new VarInsnNode(Opcodes.ALOAD, 1));
mn.instructions.insertBefore(first, new VarInsnNode(Opcodes.ALOAD, 2));
mn.instructions.insertBefore(first, new VarInsnNode(Opcodes.ALOAD, 3));
mn.instructions.insertBefore(first, new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "customskinloader/fake/FakeSkinManager", "loadSkin", "(Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;)Lnet/minecraft/util/ResourceLocation;", false));
mn.instructions.insertBefore(first, new InsnNode(Opcodes.ARETURN));
} else if (checkName(mn.name, "func_152790_a")
&& (mn.desc.equals("(Lcom/mojang/authlib/GameProfile;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;Z)V") // 1.13.2-
|| mn.desc.equals("(Lcom/mojang/authlib/GameProfile;Lnet/minecraft/client/resources/SkinManager$ISkinAvailableCallback;Z)V"))) { // 1.14.2+
var first = mn.instructions.getFirst();
mn.instructions.insertBefore(first, new VarInsnNode(Opcodes.ALOAD, 0));
mn.instructions.insertBefore(first, new FieldInsnNode(Opcodes.GETFIELD, "net/minecraft/client/resources/SkinManager", "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;"));
mn.instructions.insertBefore(first, new VarInsnNode(Opcodes.ALOAD, 1));
mn.instructions.insertBefore(first, new VarInsnNode(Opcodes.ALOAD, 2));
mn.instructions.insertBefore(first, new VarInsnNode(Opcodes.ILOAD, 3));
mn.instructions.insertBefore(first, new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "customskinloader/fake/FakeSkinManager", "loadProfileTextures", "(Lcom/mojang/authlib/GameProfile;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;Z)V", false));
mn.instructions.insertBefore(first, new InsnNode(Opcodes.RETURN));
} else if (checkName(mn.name, "func_152788_a") && mn.desc.equals("(Lcom/mojang/authlib/GameProfile;)Ljava/util/Map;")) {
var first = mn.instructions.getFirst();
mn.instructions.insertBefore(first, new VarInsnNode(Opcodes.ALOAD, 0));
mn.instructions.insertBefore(first, new FieldInsnNode(Opcodes.GETFIELD, "net/minecraft/client/resources/SkinManager", "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;"));
mn.instructions.insertBefore(first, new VarInsnNode(Opcodes.ALOAD, 1));
mn.instructions.insertBefore(first, new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "customskinloader/fake/FakeSkinManager", "loadSkinFromCache", "(Lcom/mojang/authlib/GameProfile;)Ljava/util/Map;", false));
mn.instructions.insertBefore(first, new InsnNode(Opcodes.ARETURN));
}
});
return cn;
}
},
'PlayerTabTransformer': {
'target': {
'type': 'CLASS',
@@ -107,6 +169,45 @@ function initializeCoreMod() {
return cn;
}
},
'SkinAvailableCallbackTransformer': {
'target': {
'type': 'CLASS',
'name': 'net/minecraft/client/resources/SkinManager$SkinAvailableCallback'
},
'transformer': function (cn) {
var mn = new MethodNode(Opcodes.ACC_PUBLIC, mapName("func_180521_a"), "(Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/util/ResourceLocation;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;)V", null, null);
if (cn.access === 0) { // 1.14.2+
cn.access = Opcodes.ACC_PUBLIC | Opcodes.ACC_INTERFACE | Opcodes.ACC_ABSTRACT;
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
mn.instructions.add(new TypeInsnNode(Opcodes.CHECKCAST, "net/minecraft/client/resources/SkinManager$ISkinAvailableCallback"));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD, 1));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD, 2));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD, 3));
mn.instructions.add(new MethodInsnNode(Opcodes.INVOKEINTERFACE, "net/minecraft/client/resources/SkinManager$ISkinAvailableCallback", "onSkinTextureAvailable", "(Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/util/ResourceLocation;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;)V", true));
mn.instructions.add(new InsnNode(Opcodes.RETURN));
} else { // 1.13.2
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD, 1));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD, 2));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD, 3));
mn.instructions.add(new MethodInsnNode(Opcodes.INVOKEINTERFACE, "net/minecraft/client/resources/SkinManager$SkinAvailableCallback", "onSkinTextureAvailable", "(Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/util/ResourceLocation;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;)V", true));
mn.instructions.add(new InsnNode(Opcodes.RETURN));
}
cn.methods.add(mn);
return cn;
}
},
'ISkinAvailableCallbackTransformer': {
'target': {
'type': 'CLASS',
'name': 'net/minecraft/client/resources/SkinManager$ISkinAvailableCallback'
},
'transformer': function (cn) {
cn.interfaces.add("net/minecraft/client/resources/SkinManager$SkinAvailableCallback");
return cn;
}
},
// For 1.15+
'TextureManagerTransformer': {
@@ -2,9 +2,12 @@ package customskinloader.forge.transformer;
import customskinloader.forge.TransformerManager;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.FieldInsnNode;
import org.objectweb.asm.tree.FieldNode;
import org.objectweb.asm.tree.FrameNode;
import org.objectweb.asm.tree.InsnList;
import org.objectweb.asm.tree.InsnNode;
import org.objectweb.asm.tree.MethodInsnNode;
import org.objectweb.asm.tree.MethodNode;
@@ -12,90 +15,98 @@ import org.objectweb.asm.tree.TypeInsnNode;
import org.objectweb.asm.tree.VarInsnNode;
public class SkinManagerTransformer {
@TransformerManager.TransformTarget(className="net.minecraft.client.resources.SkinManager",
methodNameSrg="<init>",
desc="(Lnet/minecraft/client/renderer/texture/TextureManager;Ljava/io/File;Lcom/mojang/authlib/minecraft/MinecraftSessionService;)V")
public static class InitTransformer implements TransformerManager.IMethodTransformer{
@TransformerManager.TransformTarget(
className = "net.minecraft.client.resources.SkinManager",
methodNameSrg = "<init>",
desc = "(Lnet/minecraft/client/renderer/texture/TextureManager;Ljava/io/File;Lcom/mojang/authlib/minecraft/MinecraftSessionService;)V"
)
public static class InitTransformer implements TransformerManager.IMethodTransformer {
@Override
public MethodNode transform(ClassNode cn, MethodNode mn) {
boolean hasField = false;
for (FieldNode fn : cn.fields) {
if (fn.name.equals("fakeManager")) {
hasField = true;
break;
cn.fields.removeIf(fn -> fn.name.equals("fakeManager") && fn.desc.equals("Lcustomskinloader/fake/FakeSkinManager;"));
cn.fields.add(new FieldNode(Opcodes.ACC_PRIVATE, "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;", null, null));
for (AbstractInsnNode ain : mn.instructions.toArray()) {
if (ain.getOpcode() == Opcodes.RETURN) {
InsnList il = new InsnList();
il.add(new VarInsnNode(Opcodes.ALOAD, 0));
il.add(new TypeInsnNode(Opcodes.NEW, "customskinloader/fake/FakeSkinManager"));
il.add(new InsnNode(Opcodes.DUP));
il.add(new VarInsnNode(Opcodes.ALOAD, 1));
il.add(new VarInsnNode(Opcodes.ALOAD, 2));
il.add(new VarInsnNode(Opcodes.ALOAD, 3));
il.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, "customskinloader/fake/FakeSkinManager", "<init>", "(Lnet/minecraft/client/renderer/texture/TextureManager;Ljava/io/File;Lcom/mojang/authlib/minecraft/MinecraftSessionService;)V", false));
il.add(new FieldInsnNode(Opcodes.PUTFIELD, "net/minecraft/client/resources/SkinManager", "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;"));
mn.instructions.insert(il);
}
}
if (!hasField) {
cn.fields.add(new FieldNode(Opcodes.ACC_PRIVATE, "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;", null, null));
}
mn.instructions.clear();
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,0));
mn.instructions.add(new MethodInsnNode(Opcodes.INVOKESPECIAL,"java/lang/Object","<init>","()V", false));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,0));
mn.instructions.add(new TypeInsnNode(Opcodes.NEW, "customskinloader/fake/FakeSkinManager"));
mn.instructions.add(new InsnNode(Opcodes.DUP));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,1));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,2));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,3));
mn.instructions.add(new MethodInsnNode(Opcodes.INVOKESPECIAL,"customskinloader/fake/FakeSkinManager","<init>",
"(Lnet/minecraft/client/renderer/texture/TextureManager;Ljava/io/File;Lcom/mojang/authlib/minecraft/MinecraftSessionService;)V", false));
mn.instructions.add(new FieldInsnNode(Opcodes.PUTFIELD, "net/minecraft/client/resources/SkinManager", "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;"));
mn.instructions.add(new InsnNode(Opcodes.RETURN));
return mn;
}
}
@TransformerManager.TransformTarget(className="net.minecraft.client.resources.SkinManager",
methodNameSrg="func_152789_a",
methodNames="loadSkin",
desc="(Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;)Lnet/minecraft/util/ResourceLocation;")
public static class LoadSkinTransformer implements TransformerManager.IMethodTransformer{
@TransformerManager.TransformTarget(
className = "net.minecraft.client.resources.SkinManager",
methodNameSrg = "func_152789_a",
methodNames = "loadSkin",
desc = "(Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;)Lnet/minecraft/util/ResourceLocation;"
)
public static class LoadSkinTransformer implements TransformerManager.IMethodTransformer {
@Override
public MethodNode transform(ClassNode cn, MethodNode mn) {
mn.instructions.clear();
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,0));
mn.instructions.add(new FieldInsnNode(Opcodes.GETFIELD, "net/minecraft/client/resources/SkinManager", "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;"));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,1));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,2));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,3));
mn.instructions.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL,"customskinloader/fake/FakeSkinManager","loadSkin",
"(Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;)Lnet/minecraft/util/ResourceLocation;", false));
mn.instructions.add(new InsnNode(Opcodes.ARETURN));
InsnList il = new InsnList();
il.add(new VarInsnNode(Opcodes.ALOAD, 0));
il.add(new FieldInsnNode(Opcodes.GETFIELD, "net/minecraft/client/resources/SkinManager", "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;"));
il.add(new VarInsnNode(Opcodes.ALOAD, 1));
il.add(new VarInsnNode(Opcodes.ALOAD, 2));
il.add(new VarInsnNode(Opcodes.ALOAD, 3));
il.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "customskinloader/fake/FakeSkinManager", "loadSkin", "(Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;)Lnet/minecraft/util/ResourceLocation;", false));
il.add(new InsnNode(Opcodes.ARETURN));
il.add(new FrameNode(Opcodes.F_SAME, 0, null, 0, null));
mn.instructions.insert(il);
return mn;
}
}
@TransformerManager.TransformTarget(className="net.minecraft.client.resources.SkinManager",
methodNameSrg="func_152790_a",
methodNames="loadProfileTextures",
desc="(Lcom/mojang/authlib/GameProfile;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;Z)V")
public static class LoadProfileTexturesTransformer implements TransformerManager.IMethodTransformer{
@TransformerManager.TransformTarget(
className = "net.minecraft.client.resources.SkinManager",
methodNameSrg = "func_152790_a",
methodNames = "loadProfileTextures",
desc = "(Lcom/mojang/authlib/GameProfile;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;Z)V"
)
public static class LoadProfileTexturesTransformer implements TransformerManager.IMethodTransformer {
@Override
public MethodNode transform(ClassNode cn, MethodNode mn) {
mn.instructions.clear();
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,0));
mn.instructions.add(new FieldInsnNode(Opcodes.GETFIELD, "net/minecraft/client/resources/SkinManager", "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;"));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,1));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,2));
mn.instructions.add(new VarInsnNode(Opcodes.ILOAD,3));
mn.instructions.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL,"customskinloader/fake/FakeSkinManager","loadProfileTextures",
"(Lcom/mojang/authlib/GameProfile;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;Z)V", false));
mn.instructions.add(new InsnNode(Opcodes.RETURN));
InsnList il = new InsnList();
il.add(new VarInsnNode(Opcodes.ALOAD, 0));
il.add(new FieldInsnNode(Opcodes.GETFIELD, "net/minecraft/client/resources/SkinManager", "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;"));
il.add(new VarInsnNode(Opcodes.ALOAD, 1));
il.add(new VarInsnNode(Opcodes.ALOAD, 2));
il.add(new VarInsnNode(Opcodes.ILOAD, 3));
il.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "customskinloader/fake/FakeSkinManager", "loadProfileTextures", "(Lcom/mojang/authlib/GameProfile;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;Z)V", false));
il.add(new InsnNode(Opcodes.RETURN));
il.add(new FrameNode(Opcodes.F_SAME, 0, null, 0, null));
mn.instructions.insert(il);
return mn;
}
}
@TransformerManager.TransformTarget(className="net.minecraft.client.resources.SkinManager",
methodNameSrg="func_152788_a",
methodNames="loadSkinFromCache",
desc="(Lcom/mojang/authlib/GameProfile;)Ljava/util/Map;")
public static class LoadSkinFromCacheTransformer implements TransformerManager.IMethodTransformer{
@TransformerManager.TransformTarget(
className = "net.minecraft.client.resources.SkinManager",
methodNameSrg = "func_152788_a",
methodNames = "loadSkinFromCache",
desc = "(Lcom/mojang/authlib/GameProfile;)Ljava/util/Map;"
)
public static class LoadSkinFromCacheTransformer implements TransformerManager.IMethodTransformer {
@Override
public MethodNode transform(ClassNode cn, MethodNode mn) {
mn.instructions.clear();
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,0));
mn.instructions.add(new FieldInsnNode(Opcodes.GETFIELD, "net/minecraft/client/resources/SkinManager", "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;"));
mn.instructions.add(new VarInsnNode(Opcodes.ALOAD,1));
mn.instructions.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL,"customskinloader/fake/FakeSkinManager","loadSkinFromCache",
"(Lcom/mojang/authlib/GameProfile;)Ljava/util/Map;", false));
mn.instructions.add(new InsnNode(Opcodes.ARETURN));
InsnList il = new InsnList();
il.add(new VarInsnNode(Opcodes.ALOAD, 0));
il.add(new FieldInsnNode(Opcodes.GETFIELD, "net/minecraft/client/resources/SkinManager", "fakeManager", "Lcustomskinloader/fake/FakeSkinManager;"));
il.add(new VarInsnNode(Opcodes.ALOAD, 1));
il.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "customskinloader/fake/FakeSkinManager", "loadSkinFromCache", "(Lcom/mojang/authlib/GameProfile;)Ljava/util/Map;", false));
il.add(new InsnNode(Opcodes.ARETURN));
il.add(new FrameNode(Opcodes.F_SAME, 0, null, 0, null));
mn.instructions.insert(il);
return mn;
}
}
@@ -1,59 +0,0 @@
package net.minecraft.client.resources;
import java.io.File;
import java.util.Map;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.minecraft.MinecraftProfileTexture;
import com.mojang.authlib.minecraft.MinecraftSessionService;
import customskinloader.fake.FakeSkinManager;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.util.ResourceLocation;
public class SkinManager {
private FakeSkinManager fakeManager;
public SkinManager(TextureManager textureManagerInstance, File skinCacheDirectory, MinecraftSessionService sessionService) {
this.fakeManager = new FakeSkinManager(textureManagerInstance, skinCacheDirectory, sessionService);
}
public ResourceLocation loadSkin(MinecraftProfileTexture profileTexture, MinecraftProfileTexture.Type textureType) {
return this.loadSkin(profileTexture, textureType, null);
}
public ResourceLocation loadSkin(MinecraftProfileTexture profileTexture, MinecraftProfileTexture.Type textureType, SkinManager.SkinAvailableCallback skinAvailableCallback) {
return this.fakeManager.loadSkin(profileTexture, textureType, skinAvailableCallback);
}
// For 1.14+
public ResourceLocation func_152789_a(MinecraftProfileTexture profileTexture, MinecraftProfileTexture.Type textureType, SkinManager.ISkinAvailableCallback skinAvailableCallback) {
return this.loadSkin(profileTexture, textureType, skinAvailableCallback);
}
public void loadProfileTextures(GameProfile profile, SkinManager.SkinAvailableCallback skinAvailableCallback, boolean requireSecure) {
this.fakeManager.loadProfileTextures(profile, skinAvailableCallback, requireSecure);
}
// For 1.14+
public void func_152790_a(GameProfile profile, SkinManager.ISkinAvailableCallback skinAvailableCallback, boolean requireSecure) {
this.loadProfileTextures(profile, skinAvailableCallback, requireSecure);
}
public Map<MinecraftProfileTexture.Type, MinecraftProfileTexture> loadSkinFromCache(GameProfile profile) {
return this.fakeManager.loadSkinFromCache(profile);
}
public interface SkinAvailableCallback {
default void skinAvailable(MinecraftProfileTexture.Type typeIn, ResourceLocation location, MinecraftProfileTexture profileTexture) {
this.onSkinTextureAvailable(typeIn, location, profileTexture);
}
default void onSkinTextureAvailable(MinecraftProfileTexture.Type typeIn, ResourceLocation location, MinecraftProfileTexture profileTexture) {
this.skinAvailable(typeIn, location, profileTexture);
}
}
public interface ISkinAvailableCallback extends SkinAvailableCallback {
}
}