From 6ac8ec625df536fe0509d10788b178105ec59bb9 Mon Sep 17 00:00:00 2001
From: RaphiMC <50594595+RaphiMC@users.noreply.github.com>
Date: Sat, 23 Sep 2023 19:21:55 +0200
Subject: [PATCH] Fixed skin loading in <= 1.20.1
---
.../viafabricplus/ViaFabricPlus.java | 1 -
.../fixes/minecraft/MixinPlayerListEntry.java | 50 +++++++++++++++++++
src/main/resources/viafabricplus.mixins.json | 7 +--
3 files changed, 54 insertions(+), 4 deletions(-)
create mode 100644 src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinPlayerListEntry.java
diff --git a/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java b/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java
index 98ab4e69..4d620aec 100644
--- a/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java
+++ b/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java
@@ -41,7 +41,6 @@ import java.io.File;
/*
* TODO | Port
- * - Skin loading has changed (Server doesn't send the whole skin data anymore)
* - Entity passenger points and heights/offsets are completely broken across all entities
*
* TODO | General
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinPlayerListEntry.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinPlayerListEntry.java
new file mode 100644
index 00000000..5429a288
--- /dev/null
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinPlayerListEntry.java
@@ -0,0 +1,50 @@
+/*
+ * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
+ * Copyright (C) 2021-2023 FlorianMichael/EnZaXD and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft;
+
+import com.mojang.authlib.GameProfile;
+import com.mojang.authlib.yggdrasil.ProfileResult;
+import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.network.PlayerListEntry;
+import net.minecraft.client.texture.PlayerSkinProvider;
+import net.minecraft.client.util.SkinTextures;
+import net.minecraft.util.Util;
+import net.raphimc.vialoader.util.VersionEnum;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Redirect;
+
+import java.util.concurrent.CompletableFuture;
+
+@Mixin(PlayerListEntry.class)
+public abstract class MixinPlayerListEntry {
+
+ @Redirect(method = "texturesSupplier", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/texture/PlayerSkinProvider;fetchSkinTextures(Lcom/mojang/authlib/GameProfile;)Ljava/util/concurrent/CompletableFuture;"))
+ private static CompletableFuture fetchGameProfileProperties(PlayerSkinProvider instance, GameProfile profile) {
+ if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(VersionEnum.r1_20tor1_20_1) && !profile.getProperties().containsKey("textures")) {
+ return CompletableFuture.supplyAsync(() -> {
+ final ProfileResult profileResult = MinecraftClient.getInstance().getSessionService().fetchProfile(profile.getId(), true);
+ return profileResult == null ? profile : profileResult.profile();
+ }, Util.getMainWorkerExecutor()).thenCompose(instance::fetchSkinTextures);
+ } else {
+ return instance.fetchSkinTextures(profile);
+ }
+ }
+
+}
diff --git a/src/main/resources/viafabricplus.mixins.json b/src/main/resources/viafabricplus.mixins.json
index 9f9dea32..80794888 100644
--- a/src/main/resources/viafabricplus.mixins.json
+++ b/src/main/resources/viafabricplus.mixins.json
@@ -36,6 +36,7 @@
"fixes.minecraft.MixinMinecraftClient",
"fixes.minecraft.MixinPendingUpdateManager",
"fixes.minecraft.MixinPlayerEntityRenderer",
+ "fixes.minecraft.MixinPlayerListEntry",
"fixes.minecraft.MixinPlayerPublicKey_PublicKeyData",
"fixes.minecraft.MixinProfileKeysImpl",
"fixes.minecraft.MixinServerResourcePackProvider",
@@ -58,6 +59,7 @@
"fixes.minecraft.block.MixinFarmlandBlock",
"fixes.minecraft.block.MixinFenceBlock",
"fixes.minecraft.block.MixinFireBlock",
+ "fixes.minecraft.block.MixinFlowerbedBlock",
"fixes.minecraft.block.MixinFlowerPotBlock",
"fixes.minecraft.block.MixinHopperBlock",
"fixes.minecraft.block.MixinLadderBlock",
@@ -98,6 +100,7 @@
"fixes.minecraft.item.MixinBrushItem",
"fixes.minecraft.item.MixinElytraItem",
"fixes.minecraft.item.MixinEnderPearlItem",
+ "fixes.minecraft.item.MixinEquipment",
"fixes.minecraft.item.MixinFireworkRocketItem",
"fixes.minecraft.item.MixinHeldItemRenderer",
"fixes.minecraft.item.MixinHoeItem",
@@ -170,9 +173,7 @@
"fixes.viaversion.protocol1_9to1_8.MixinViaIdleThread",
"jsonwebtoken.MixinClasses",
"jsonwebtoken.MixinDefaultCompressionCodecResolver",
- "jsonwebtoken.MixinDefaultJwtParserBuilder",
- "fixes.minecraft.block.MixinFlowerbedBlock",
- "fixes.minecraft.item.MixinEquipment"
+ "jsonwebtoken.MixinDefaultJwtParserBuilder"
],
"injectors": {
"defaultRequire": 1