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