From a82ed48ef790d665150ad24814275259ac19d1b2 Mon Sep 17 00:00:00 2001 From: ZekerZhayard Date: Tue, 23 Dec 2025 00:18:17 +0800 Subject: [PATCH] Support 26.1 --- .../customskinloader/fake/FakeSkinBuffer.java | 5 +++- .../fake/FakeSkinManager.java | 13 +--------- .../fake/itf/FakeInterfaceManager.java | 9 +++++++ .../fake/itf/IFakeNativeImage.java | 5 ++++ .../fake/texture/FakeNativeImage.java | 18 ------------- .../texture/FakeThreadDownloadImageData.java | 7 ++++-- .../utils/LIFOBlockingQueue.java | 2 +- Fabric/mixin.tsrg | 2 ++ .../fabric/DevEnvRemapper.java | 2 +- .../resources/customskinloader.accesswidener | 1 - Fabric/src/main/resources/fabric.mod.json | 6 ++++- Forge/V2/src/main/resources/transformers.js | 14 +++++------ .../V3/Forge.tsrg => Universal/Universal.tsrg | 0 {Forge/V3 => Universal}/build.gradle | 0 {Forge/V3 => Universal}/build.properties | 8 +++--- {Forge/V3 => Universal}/mixin.tsrg | 2 ++ .../java/customskinloader/forge/ForgeMod.java | 0 .../forge/MixinConfigPlugin.java | 0 .../customskinloader/forge/NeoForgeMod.java | 0 .../resources/META-INF/accesstransformer.cfg | 1 - .../src/main/resources/META-INF/mods.toml | 0 .../resources/META-INF/neoforge.mods.toml | 0 .../resources/customskinloader.accesswidener | 4 +++ Universal/src/main/resources/fabric.mod.json | 25 +++++++++++++++++++ .../resources/mixins.customskinloader.json | 0 .../src/main/resources/pack.mcmeta | 0 .../mixin/MixinGuiPlayerTabOverlay.java | 3 ++- .../mixin/MixinNativeImage.java | 11 ++++++++ .../mixin/MixinSkinManager.java | 15 ----------- build.properties | 2 +- settings.gradle | 7 +++--- 31 files changed, 94 insertions(+), 68 deletions(-) rename Forge/V3/Forge.tsrg => Universal/Universal.tsrg (100%) rename {Forge/V3 => Universal}/build.gradle (100%) rename {Forge/V3 => Universal}/build.properties (56%) rename {Forge/V3 => Universal}/mixin.tsrg (96%) rename {Forge/V3 => Universal}/src/main/java/customskinloader/forge/ForgeMod.java (100%) rename {Forge/V3 => Universal}/src/main/java/customskinloader/forge/MixinConfigPlugin.java (100%) rename {Forge/V3 => Universal}/src/main/java/customskinloader/forge/NeoForgeMod.java (100%) rename {Forge/V3 => Universal}/src/main/resources/META-INF/accesstransformer.cfg (86%) rename {Forge/V3 => Universal}/src/main/resources/META-INF/mods.toml (100%) rename {Forge/V3 => Universal}/src/main/resources/META-INF/neoforge.mods.toml (100%) create mode 100644 Universal/src/main/resources/customskinloader.accesswidener create mode 100644 Universal/src/main/resources/fabric.mod.json rename {Forge/V3 => Universal}/src/main/resources/mixins.customskinloader.json (100%) rename {Forge/V3 => Universal}/src/main/resources/pack.mcmeta (100%) diff --git a/Common/src/main/java/customskinloader/fake/FakeSkinBuffer.java b/Common/src/main/java/customskinloader/fake/FakeSkinBuffer.java index 1c3affd0..cf99dac8 100644 --- a/Common/src/main/java/customskinloader/fake/FakeSkinBuffer.java +++ b/Common/src/main/java/customskinloader/fake/FakeSkinBuffer.java @@ -7,6 +7,7 @@ import java.util.function.Predicate; import customskinloader.CustomSkinLoader; +import customskinloader.fake.itf.FakeInterfaceManager; import customskinloader.fake.texture.FakeBufferedImage; import customskinloader.fake.texture.FakeImage; import customskinloader.fake.texture.FakeNativeImage; @@ -28,7 +29,9 @@ public static NativeImage processLegacySkin(NativeImage image, String url) { FakeImage img = parseUserSkin0(new FakeNativeImage(image)); if (img instanceof FakeNativeImage) { - return FakeNativeImage.Extended.create((FakeNativeImage) img); + image = ((FakeNativeImage) img).getImage(); + FakeInterfaceManager.NativeImage_setFakeImage(image, img); + return image; } CustomSkinLoader.logger.warning("Failed to parseUserSkin(downloadAndRegisterSkin)."); diff --git a/Common/src/main/java/customskinloader/fake/FakeSkinManager.java b/Common/src/main/java/customskinloader/fake/FakeSkinManager.java index 1cc6e5ed..e4676e9c 100644 --- a/Common/src/main/java/customskinloader/fake/FakeSkinManager.java +++ b/Common/src/main/java/customskinloader/fake/FakeSkinManager.java @@ -52,17 +52,6 @@ public static void setSkinCacheDir(Path skinCacheDirectory) { HttpTextureUtil.defaultCacheDir = skinCacheDirectory.toFile(); } - /** - * 23w42a ~ 25w33a - * Invoked from {@link SkinManager#getOrLoad(GameProfile)} - * - * 25w34a+ - * Invoked from {@link SkinManager#get(GameProfile)} - */ - public static Property createProperty(Property property) { - return property == null ? new Property(null, null) : property; - } - /** * 1.20.1- * Invoked from {@link SkinManager#loadSkin(MinecraftProfileTexture, MinecraftProfileTexture.Type, SkinManager$SkinAvailableCallback)} @@ -234,7 +223,7 @@ public GameProfile profile() { * Invoked from {@link SkinManager#get(GameProfile)} */ public static SkinManager$CacheKey createFakeCacheKey(UUID uuid, Property property, GameProfile profile) { - return new FakeCacheKey(uuid, property, profile); + return new FakeCacheKey(uuid, property == null ? new Property(null, null) : property, profile); } public static Object createMinecraftProfileTextures(Map textures) { diff --git a/Common/src/main/java/customskinloader/fake/itf/FakeInterfaceManager.java b/Common/src/main/java/customskinloader/fake/itf/FakeInterfaceManager.java index fa2bda9d..56ec3df4 100644 --- a/Common/src/main/java/customskinloader/fake/itf/FakeInterfaceManager.java +++ b/Common/src/main/java/customskinloader/fake/itf/FakeInterfaceManager.java @@ -4,6 +4,7 @@ import java.util.Optional; import customskinloader.fake.FakeMinecraftProfileTexture; +import customskinloader.fake.texture.FakeNativeImage; import net.minecraft.client.resources.IResource; import net.minecraft.client.resources.IResourceManager; import net.minecraft.util.ResourceLocation; @@ -32,6 +33,14 @@ public static void NativeImage_setPixel(Object nativeImage, int x, int y, int co ((IFakeNativeImage) nativeImage).setPixel(x, y, color); } + public static FakeNativeImage NativeImage_getFakeImage(Object nativeImage) { + return ((IFakeNativeImage) nativeImage).getFakeImage(); + } + + public static void NativeImage_setFakeImage(Object nativeImage, Object fakeImage) { + ((IFakeNativeImage) nativeImage).setFakeImage((FakeNativeImage) fakeImage); + } + public static FakeMinecraftProfileTexture ResourceLocation_getTexture(Object location) { return ((IFakeResourceLocation) location).getTexture(); } diff --git a/Common/src/main/java/customskinloader/fake/itf/IFakeNativeImage.java b/Common/src/main/java/customskinloader/fake/itf/IFakeNativeImage.java index 063d8c14..82d6f35f 100644 --- a/Common/src/main/java/customskinloader/fake/itf/IFakeNativeImage.java +++ b/Common/src/main/java/customskinloader/fake/itf/IFakeNativeImage.java @@ -1,5 +1,6 @@ package customskinloader.fake.itf; +import customskinloader.fake.texture.FakeNativeImage; import net.minecraft.client.renderer.texture.NativeImage; public interface IFakeNativeImage { @@ -10,4 +11,8 @@ default int getPixel(int x, int y) { default void setPixel(int x, int y, int color) { ((NativeImage) this).func_195700_a(x, y, color); } + + FakeNativeImage getFakeImage(); + + void setFakeImage(FakeNativeImage fakeImage); } diff --git a/Common/src/main/java/customskinloader/fake/texture/FakeNativeImage.java b/Common/src/main/java/customskinloader/fake/texture/FakeNativeImage.java index ab58d460..496baa65 100644 --- a/Common/src/main/java/customskinloader/fake/texture/FakeNativeImage.java +++ b/Common/src/main/java/customskinloader/fake/texture/FakeNativeImage.java @@ -71,22 +71,4 @@ public void copyArea(int x0, int y0, int dx, int dy, int width, int height, bool public void close() { image.close(); } - - public static class Extended extends NativeImage { - public static NativeImage create(FakeNativeImage fakeImage) { - return new FakeNativeImage.Extended(fakeImage); - } - - private final FakeNativeImage fakeImage; - - public Extended(FakeNativeImage fakeImage) { - super(fakeImage.getWidth(), fakeImage.getHeight(), true); - this.func_195703_a(fakeImage.getImage()); - this.fakeImage = fakeImage; - } - - public FakeNativeImage getFakeImage() { - return this.fakeImage; - } - } } diff --git a/Common/src/main/java/customskinloader/fake/texture/FakeThreadDownloadImageData.java b/Common/src/main/java/customskinloader/fake/texture/FakeThreadDownloadImageData.java index 0f3b9d51..a2701732 100644 --- a/Common/src/main/java/customskinloader/fake/texture/FakeThreadDownloadImageData.java +++ b/Common/src/main/java/customskinloader/fake/texture/FakeThreadDownloadImageData.java @@ -4,6 +4,7 @@ import java.util.function.Function; import customskinloader.fake.FakeCapeBuffer; +import customskinloader.fake.FakeMinecraftProfileTexture; import customskinloader.fake.FakeSkinBuffer; import customskinloader.fake.FakeSkinManager; import customskinloader.fake.itf.FakeInterfaceManager; @@ -36,8 +37,10 @@ public static Function> createTextureV2(Functi public static Function> createTexture(Function> function, Function> cape, Object location, boolean bl) { return bl ? _image -> { - if (FakeInterfaceManager.ResourceLocation_getTexture(location) != null && _image instanceof FakeNativeImage.Extended) { - FakeSkinManager.BaseBuffer.judgeType(FakeInterfaceManager.ResourceLocation_getTexture(location), () -> FakeSkinBuffer.judgeType0(((FakeNativeImage.Extended) _image).getFakeImage())); + FakeMinecraftProfileTexture texture = FakeInterfaceManager.ResourceLocation_getTexture(location); + FakeNativeImage image = FakeInterfaceManager.NativeImage_getFakeImage(_image); + if (texture != null && image != null) { + FakeSkinManager.BaseBuffer.judgeType(texture, () -> FakeSkinBuffer.judgeType0(image)); } return function.apply(_image); } : _image -> function.apply(_image).thenApply(cape.apply(_image)); diff --git a/Common/src/main/java/customskinloader/utils/LIFOBlockingQueue.java b/Common/src/main/java/customskinloader/utils/LIFOBlockingQueue.java index d8f5be1f..6f122257 100644 --- a/Common/src/main/java/customskinloader/utils/LIFOBlockingQueue.java +++ b/Common/src/main/java/customskinloader/utils/LIFOBlockingQueue.java @@ -47,4 +47,4 @@ public E poll(long timeout, TimeUnit unit) throws InterruptedException { public E peek() { return deque.peekFirst(); } -} \ No newline at end of file +} diff --git a/Fabric/mixin.tsrg b/Fabric/mixin.tsrg index d92a95c7..2cfe570d 100644 --- a/Fabric/mixin.tsrg +++ b/Fabric/mixin.tsrg @@ -3,10 +3,12 @@ net/minecraft/client/Minecraft net/minecraft/class_310 isIntegratedServerRunning ()Z method_1542 net/minecraft/client/entity/AbstractClientPlayer net/minecraft/class_742 net/minecraft/client/gui/Gui net/minecraft/class_332 +net/minecraft/client/gui/GuiGraphicsExtractor net/minecraft/client/gui/GuiGraphicsExtractor net/minecraft/client/gui/GuiPlayerTabOverlay net/minecraft/class_355 renderPlayerlist (ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V method_1919 renderPlayerlist (Lcom/mojang/blaze3d/matrix/MatrixStack;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V method_1919 renderPlayerlist (Lnet/minecraft/client/gui/Gui;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V method_1919 + renderPlayerlist (Lnet/minecraft/client/gui/GuiGraphicsExtractor;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V extractRenderState net/minecraft/client/model/ModelRenderer net/minecraft/class_630 net/minecraft/client/renderer/IImageBuffer net/minecraft/class_760 net/minecraft/client/renderer/IRenderTypeBuffer net/minecraft/class_4597 diff --git a/Fabric/src/main/java/customskinloader/fabric/DevEnvRemapper.java b/Fabric/src/main/java/customskinloader/fabric/DevEnvRemapper.java index 4f5f889a..4131e9d7 100644 --- a/Fabric/src/main/java/customskinloader/fabric/DevEnvRemapper.java +++ b/Fabric/src/main/java/customskinloader/fabric/DevEnvRemapper.java @@ -52,7 +52,7 @@ public class DevEnvRemapper extends SimpleRemapper { remappedClasses.put( "net.minecraft.class_3300", new AbstractMap.SimpleEntry<>( - Lists.newArrayList("customskinloader.fake.itf.IFakeIResourceManager"), + Lists.newArrayList("customskinloader.fake.itf.IFakeIResourceManager$V1", "customskinloader.fake.itf.IFakeIResourceManager$V2"), Lists.newArrayList("customskinloader.fake.itf.FakeInterfaceManager") ) ); diff --git a/Fabric/src/main/resources/customskinloader.accesswidener b/Fabric/src/main/resources/customskinloader.accesswidener index e3527544..bcd66a55 100644 --- a/Fabric/src/main/resources/customskinloader.accesswidener +++ b/Fabric/src/main/resources/customskinloader.accesswidener @@ -1,6 +1,5 @@ accessWidener v2 intermediary extendable class net/minecraft/class_1011 # 24w46a+ extendable class net/minecraft/class_1071$class_8686 # 23w31a+ -extendable class net/minecraft/class_2960 # 24w46a+ accessible method net/minecraft/class_1071$class_8686 (Ljava/util/UUID;Lcom/mojang/authlib/properties/Property;)V # 23w42a+ accessible method net/minecraft/class_2960 (Ljava/lang/String;Ljava/lang/String;)V # 24w18a+ diff --git a/Fabric/src/main/resources/fabric.mod.json b/Fabric/src/main/resources/fabric.mod.json index d41b2f2a..dc021952 100644 --- a/Fabric/src/main/resources/fabric.mod.json +++ b/Fabric/src/main/resources/fabric.mod.json @@ -17,5 +17,9 @@ "mixins": [ "mixins.customskinloader.json" ], - "accessWidener": "customskinloader.accesswidener" + "accessWidener": "customskinloader.accesswidener", + + "depends": { + "minecraft": "<=1.21.11" + } } diff --git a/Forge/V2/src/main/resources/transformers.js b/Forge/V2/src/main/resources/transformers.js index deaebb60..46bdadd9 100644 --- a/Forge/V2/src/main/resources/transformers.js +++ b/Forge/V2/src/main/resources/transformers.js @@ -49,8 +49,6 @@ function initializeCoreMod() { if (node.getOpcode() === Opcodes.RETURN) { mn.instructions.insertBefore(node, new VarInsnNode(Opcodes.ALOAD, 2)); mn.instructions.insertBefore(node, new MethodInsnNode(Opcodes.INVOKESTATIC, "customskinloader/fake/FakeSkinManager", "setSkinCacheDir", "(Ljava/nio/file/Path;)V", false)); - } else if (node.getOpcode() === Opcodes.INVOKEVIRTUAL && node.owner.equals("com/google/common/cache/CacheBuilder") && checkName(node.name, "build") && node.desc.equals("(Lcom/google/common/cache/CacheLoader;)Lcom/google/common/cache/LoadingCache;")) { - mn.instructions.insertBefore(node, new MethodInsnNode(Opcodes.INVOKESTATIC, "customskinloader/fake/FakeSkinManager", "setCacheLoader", "(Lcom/google/common/cache/CacheLoader;)Lcom/google/common/cache/CacheLoader;", false)); } } } else if (checkName(mn.name, "m_118828_") && mn.desc.equals("(Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/client/resources/SkinManager$SkinTextureCallback;)Lnet/minecraft/resources/ResourceLocation;")) { // 1.20.1- @@ -120,11 +118,13 @@ function initializeCoreMod() { } else if (checkName(mn.name, "m_293351_") && mn.desc.equals("(Lcom/mojang/authlib/GameProfile;)Ljava/util/concurrent/CompletableFuture;")) { // 1.20.2+ for (var iterator = mn.instructions.iterator(); iterator.hasNext();) { var node = iterator.next(); - if (node.getOpcode() === Opcodes.INVOKESPECIAL && node.owner.equals("net/minecraft/client/resources/SkinManager$CacheKey") && checkName(node.name, "") && node.desc.equals("(Ljava/util/UUID;Lcom/mojang/authlib/properties/Property;)V")) { - mn.instructions.insertBefore(node, new MethodInsnNode(Opcodes.INVOKESTATIC, "customskinloader/fake/FakeSkinManager", "createProperty", "(Lcom/mojang/authlib/properties/Property;)Lcom/mojang/authlib/properties/Property;", false)); - } else if (node.getOpcode() === Opcodes.INVOKEINTERFACE && node.owner.equals("com/google/common/cache/LoadingCache") && checkName(node.name, "getUnchecked") && node.desc.equals("(Ljava/lang/Object;)Ljava/lang/Object;")) { + if (node.getOpcode() === Opcodes.NEW && node.desc.equals("net/minecraft/client/resources/SkinManager$CacheKey")) { + iterator.remove(); + iterator.next(); // DUP + iterator.remove(); + } else if (node.getOpcode() === Opcodes.INVOKESPECIAL && node.owner.equals("net/minecraft/client/resources/SkinManager$CacheKey") && checkName(node.name, "") && node.desc.equals("(Ljava/util/UUID;Lcom/mojang/authlib/properties/Property;)V")) { mn.instructions.insertBefore(node, new VarInsnNode(Opcodes.ALOAD, 1)); - mn.instructions.insertBefore(node, new MethodInsnNode(Opcodes.INVOKESTATIC, "customskinloader/fake/FakeSkinManager", "loadCache", "(Ljava/lang/Object;Lcom/mojang/authlib/GameProfile;)Ljava/lang/Object;", false)); + mn.instructions.set(node, new MethodInsnNode(Opcodes.INVOKESTATIC, "customskinloader/fake/FakeSkinManager$FakeCacheKey", "createFakeCacheKey", "(Ljava/util/UUID;Lcom/mojang/authlib/properties/Property;Lcom/mojang/authlib/GameProfile;)Lnet/minecraft/client/resources/SkinManager$CacheKey;", false)); } } } @@ -163,7 +163,7 @@ function initializeCoreMod() { for (var iterator = mn.instructions.iterator(); iterator.hasNext();) { var node = iterator.next(); if (node.getOpcode() === Opcodes.INVOKEINTERFACE && node.owner.equals("com/mojang/authlib/minecraft/MinecraftSessionService") && checkName(node.name, "unpackTextures") && node.desc.equals("(Lcom/mojang/authlib/properties/Property;)Lcom/mojang/authlib/minecraft/MinecraftProfileTextures;")) { - mn.instructions.insertBefore(node, new VarInsnNode(Opcodes.ALOAD, 1)); + mn.instructions.insertBefore(node, new VarInsnNode(Opcodes.ALOAD, 0)); mn.instructions.insert(node, new TypeInsnNode(Opcodes.CHECKCAST, "com/mojang/authlib/minecraft/MinecraftProfileTextures")); mn.instructions.set(node, new MethodInsnNode(Opcodes.INVOKESTATIC, "customskinloader/fake/FakeSkinManager", "loadSkinFromCache", "(Lcom/mojang/authlib/minecraft/MinecraftSessionService;Lcom/mojang/authlib/properties/Property;Lnet/minecraft/client/resources/SkinManager$CacheKey;)Ljava/lang/Object;", false)); } diff --git a/Forge/V3/Forge.tsrg b/Universal/Universal.tsrg similarity index 100% rename from Forge/V3/Forge.tsrg rename to Universal/Universal.tsrg diff --git a/Forge/V3/build.gradle b/Universal/build.gradle similarity index 100% rename from Forge/V3/build.gradle rename to Universal/build.gradle diff --git a/Forge/V3/build.properties b/Universal/build.properties similarity index 56% rename from Forge/V3/build.properties rename to Universal/build.properties index 10d6c2c3..bf0f8732 100644 --- a/Forge/V3/build.properties +++ b/Universal/build.properties @@ -1,8 +1,10 @@ -dependencies=Forge|1.20.6,1.21,1.21.1,1.21.3,1.21.4,1.21.5,1.21.6,1.21.7,1.21.8,1.21.9,1.21.10,1.21.11;\ - NeoForge|1.20.2,1.20.3,1.20.4,1.20.5,1.20.6,1.21,1.21.1,1.21.2,1.21.3,1.21.4,1.21.5,1.21.6,1.21.7,1.21.8,1.21.9,1.21.10,1.21.11 +dependencies=Fabric|26.1;\ + Forge|1.20.6,1.21,1.21.1,1.21.3,1.21.4,1.21.5,1.21.6,1.21.7,1.21.8,1.21.9,1.21.10,1.21.11,26.1;\ + NeoForge|1.20.2,1.20.3,1.20.4,1.20.5,1.20.6,1.21,1.21.1,1.21.2,1.21.3,1.21.4,1.21.5,1.21.6,1.21.7,1.21.8,1.21.9,1.21.10,1.21.11,26.1;\ + Quilt|26.1 java_full_versions=17,18,19,20,21,22 #forge gradle needs forge version forge_mc_version=1.12.2 forge_version=14.23.5.2768 mappings_version=stable_39 -srg_notch_map=Forge.tsrg +srg_notch_map=Universal.tsrg diff --git a/Forge/V3/mixin.tsrg b/Universal/mixin.tsrg similarity index 96% rename from Forge/V3/mixin.tsrg rename to Universal/mixin.tsrg index bd9011cc..d737192c 100644 --- a/Forge/V3/mixin.tsrg +++ b/Universal/mixin.tsrg @@ -3,10 +3,12 @@ net/minecraft/client/Minecraft net/minecraft/client/Minecraft isIntegratedServerRunning ()Z isLocalServer net/minecraft/client/entity/AbstractClientPlayer net/minecraft/client/player/AbstractClientPlayer net/minecraft/client/gui/Gui net/minecraft/client/gui/GuiGraphics +net/minecraft/client/gui/GuiGraphicsExtractor net/minecraft/client/gui/GuiGraphicsExtractor net/minecraft/client/gui/GuiPlayerTabOverlay net/minecraft/client/gui/components/PlayerTabOverlay renderPlayerlist (ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V render renderPlayerlist (Lcom/mojang/blaze3d/matrix/MatrixStack;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V render renderPlayerlist (Lnet/minecraft/client/gui/Gui;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V render + renderPlayerlist (Lnet/minecraft/client/gui/GuiGraphicsExtractor;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V extractRenderState net/minecraft/client/model/ModelRenderer net/minecraft/client/model/geom/ModelPart net/minecraft/client/renderer/IImageBuffer net/minecraft/client/renderer/HttpTextureProcessor net/minecraft/client/renderer/IRenderTypeBuffer net/minecraft/client/renderer/MultiBufferSource diff --git a/Forge/V3/src/main/java/customskinloader/forge/ForgeMod.java b/Universal/src/main/java/customskinloader/forge/ForgeMod.java similarity index 100% rename from Forge/V3/src/main/java/customskinloader/forge/ForgeMod.java rename to Universal/src/main/java/customskinloader/forge/ForgeMod.java diff --git a/Forge/V3/src/main/java/customskinloader/forge/MixinConfigPlugin.java b/Universal/src/main/java/customskinloader/forge/MixinConfigPlugin.java similarity index 100% rename from Forge/V3/src/main/java/customskinloader/forge/MixinConfigPlugin.java rename to Universal/src/main/java/customskinloader/forge/MixinConfigPlugin.java diff --git a/Forge/V3/src/main/java/customskinloader/forge/NeoForgeMod.java b/Universal/src/main/java/customskinloader/forge/NeoForgeMod.java similarity index 100% rename from Forge/V3/src/main/java/customskinloader/forge/NeoForgeMod.java rename to Universal/src/main/java/customskinloader/forge/NeoForgeMod.java diff --git a/Forge/V3/src/main/resources/META-INF/accesstransformer.cfg b/Universal/src/main/resources/META-INF/accesstransformer.cfg similarity index 86% rename from Forge/V3/src/main/resources/META-INF/accesstransformer.cfg rename to Universal/src/main/resources/META-INF/accesstransformer.cfg index 1a98473a..5ff808e2 100644 --- a/Forge/V3/src/main/resources/META-INF/accesstransformer.cfg +++ b/Universal/src/main/resources/META-INF/accesstransformer.cfg @@ -1,5 +1,4 @@ public-f com.mojang.blaze3d.platform.NativeImage # 24w46a+ public-f net.minecraft.client.resources.SkinManager$CacheKey # 23w42a+ -public-f net.minecraft.resources.ResourceLocation # 24w46a+ public net.minecraft.client.resources.SkinManager$CacheKey (Ljava/util/UUID;Lcom/mojang/authlib/properties/Property;)V # 23w42a+ public net.minecraft.resources.ResourceLocation (Ljava/lang/String;Ljava/lang/String;)V # 24w18a+ diff --git a/Forge/V3/src/main/resources/META-INF/mods.toml b/Universal/src/main/resources/META-INF/mods.toml similarity index 100% rename from Forge/V3/src/main/resources/META-INF/mods.toml rename to Universal/src/main/resources/META-INF/mods.toml diff --git a/Forge/V3/src/main/resources/META-INF/neoforge.mods.toml b/Universal/src/main/resources/META-INF/neoforge.mods.toml similarity index 100% rename from Forge/V3/src/main/resources/META-INF/neoforge.mods.toml rename to Universal/src/main/resources/META-INF/neoforge.mods.toml diff --git a/Universal/src/main/resources/customskinloader.accesswidener b/Universal/src/main/resources/customskinloader.accesswidener new file mode 100644 index 00000000..43ec9315 --- /dev/null +++ b/Universal/src/main/resources/customskinloader.accesswidener @@ -0,0 +1,4 @@ +accessWidener v2 official +extendable class com/mojang/blaze3d/platform/NativeImage # 24w46a+ +extendable class net/minecraft/client/resources/SkinManager$CacheKey # 23w31a+ +accessible method net/minecraft/client/resources/SkinManager$CacheKey (Ljava/util/UUID;Lcom/mojang/authlib/properties/Property;)V # 23w42a+ diff --git a/Universal/src/main/resources/fabric.mod.json b/Universal/src/main/resources/fabric.mod.json new file mode 100644 index 00000000..ea1a3e96 --- /dev/null +++ b/Universal/src/main/resources/fabric.mod.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "id": "customskinloader", + "version": "${modFullVersion}", + + "name": "CustomSkinLoader", + "description": "Custom Skin Loader for Minecraft", + "authors": ["xfl03", "JLChnToZ", "ZekerZhayard"], + "contact": { + "homepage": "https://github.com/xfl03/MCCustomSkinLoader", + "issues": "https://github.com/xfl03/MCCustomSkinLoader/issues", + "sources": "https://github.com/xfl03/MCCustomSkinLoader" + }, + "license": "GPL-3.0-only", + + "environment": "client", + "mixins": [ + "mixins.customskinloader.json" + ], + "accessWidener": "customskinloader.accesswidener", + + "depends": { + "minecraft": ">1.21.11" + } +} diff --git a/Forge/V3/src/main/resources/mixins.customskinloader.json b/Universal/src/main/resources/mixins.customskinloader.json similarity index 100% rename from Forge/V3/src/main/resources/mixins.customskinloader.json rename to Universal/src/main/resources/mixins.customskinloader.json diff --git a/Forge/V3/src/main/resources/pack.mcmeta b/Universal/src/main/resources/pack.mcmeta similarity index 100% rename from Forge/V3/src/main/resources/pack.mcmeta rename to Universal/src/main/resources/pack.mcmeta diff --git a/Vanilla/Common/src/main/java/customskinloader/mixin/MixinGuiPlayerTabOverlay.java b/Vanilla/Common/src/main/java/customskinloader/mixin/MixinGuiPlayerTabOverlay.java index cf65da72..7a2605f8 100644 --- a/Vanilla/Common/src/main/java/customskinloader/mixin/MixinGuiPlayerTabOverlay.java +++ b/Vanilla/Common/src/main/java/customskinloader/mixin/MixinGuiPlayerTabOverlay.java @@ -13,7 +13,8 @@ public abstract class MixinGuiPlayerTabOverlay { method = { "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;renderPlayerlist(ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V", // 20w16a- "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;renderPlayerlist(Lcom/mojang/blaze3d/matrix/MatrixStack;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V", // 20w17a ~ 23w14a - "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;renderPlayerlist(Lnet/minecraft/client/gui/Gui;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V" // 23w16a+ + "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;renderPlayerlist(Lnet/minecraft/client/gui/Gui;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V", // 23w16a ~ 26.1-snapshot-11 + "Lnet/minecraft/client/gui/GuiPlayerTabOverlay;renderPlayerlist(Lnet/minecraft/client/gui/GuiGraphicsExtractor;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreObjective;)V" // 26.1-pre-1+ }, at = @At( value = "INVOKE", diff --git a/Vanilla/Common/src/main/java/customskinloader/mixin/MixinNativeImage.java b/Vanilla/Common/src/main/java/customskinloader/mixin/MixinNativeImage.java index 433a1a35..9a44683b 100644 --- a/Vanilla/Common/src/main/java/customskinloader/mixin/MixinNativeImage.java +++ b/Vanilla/Common/src/main/java/customskinloader/mixin/MixinNativeImage.java @@ -1,10 +1,21 @@ package customskinloader.mixin; import customskinloader.fake.itf.IFakeNativeImage; +import customskinloader.fake.texture.FakeNativeImage; import net.minecraft.client.renderer.texture.NativeImage; import org.spongepowered.asm.mixin.Mixin; @Mixin(NativeImage.class) public abstract class MixinNativeImage implements IFakeNativeImage { + private FakeNativeImage fakeImage; + @Override + public FakeNativeImage getFakeImage() { + return this.fakeImage; + } + + @Override + public void setFakeImage(FakeNativeImage fakeImage) { + this.fakeImage = fakeImage; + } } diff --git a/Vanilla/Common/src/main/java/customskinloader/mixin/MixinSkinManager.java b/Vanilla/Common/src/main/java/customskinloader/mixin/MixinSkinManager.java index 157131ce..9e9e8a01 100644 --- a/Vanilla/Common/src/main/java/customskinloader/mixin/MixinSkinManager.java +++ b/Vanilla/Common/src/main/java/customskinloader/mixin/MixinSkinManager.java @@ -22,7 +22,6 @@ import org.spongepowered.asm.mixin.injection.Coerce; import org.spongepowered.asm.mixin.injection.Group; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.ModifyArgs; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -242,20 +241,6 @@ private ImmutableList redirect_func_229297_b_(Obje // 23w42a+ @Mixin(SkinManager.class) public abstract static class V3 { - @ModifyArg( - method = { - "Lnet/minecraft/client/resources/SkinManager;getOrLoad(Lcom/mojang/authlib/GameProfile;)Ljava/util/concurrent/CompletableFuture;", // 23w42a ~ 25w33a - "Lnet/minecraft/client/resources/SkinManager;get(Lcom/mojang/authlib/GameProfile;)Ljava/util/concurrent/CompletableFuture;" // 25w34a+ - }, - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/resources/SkinManager$CacheKey;(Ljava/util/UUID;Lcom/mojang/authlib/properties/Property;)V" - ) - ) - private Property modifyArg_getOrLoad(Property property) { - return FakeSkinManager.createProperty(property); - } - @Redirect( method = { "Lnet/minecraft/client/resources/SkinManager;getOrLoad(Lcom/mojang/authlib/GameProfile;)Ljava/util/concurrent/CompletableFuture;", // 23w42a ~ 25w33a diff --git a/build.properties b/build.properties index 73658e85..17da25b7 100644 --- a/build.properties +++ b/build.properties @@ -1,3 +1,3 @@ name=CustomSkinLoader group=customskinloader -version=14.27 +version=14.28 diff --git a/settings.gradle b/settings.gradle index d6ee6c8c..fba167ed 100644 --- a/settings.gradle +++ b/settings.gradle @@ -13,8 +13,9 @@ include "Forge/Common" include "Forge/V1" //Forge Edition for [1.17,1.20.4] include "Forge/V2" -//Forge Edition for [1.20.5,) and NeoForge Edition for [1.20.2,) -include "Forge/V3" -//Fabric Edition for [1.14,) +//Fabric Edition for [26.1,), Forge Edition for [1.20.6,) and NeoForge Edition for [1.20.2,) +include "Universal" + +//Fabric Edition for [1.14,1.21.11] include "Fabric"