diff --git a/Forge/resource/transformers.js b/Forge/resource/transformers.js index c3a5f27..0e05d02 100644 --- a/Forge/resource/transformers.js +++ b/Forge/resource/transformers.js @@ -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, "") && 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", "", "(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': { diff --git a/Forge/source/customskinloader/forge/transformer/SkinManagerTransformer.java b/Forge/source/customskinloader/forge/transformer/SkinManagerTransformer.java index c945c25..71a0bcb 100644 --- a/Forge/source/customskinloader/forge/transformer/SkinManagerTransformer.java +++ b/Forge/source/customskinloader/forge/transformer/SkinManagerTransformer.java @@ -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="", - 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 = "", + 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", "", "(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","","()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","", - "(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; } } diff --git a/Forge/source/net/minecraft/client/resources/SkinManager.java b/Forge/source/net/minecraft/client/resources/SkinManager.java deleted file mode 100644 index e06027e..0000000 --- a/Forge/source/net/minecraft/client/resources/SkinManager.java +++ /dev/null @@ -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 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 { - - } -} \ No newline at end of file