diff --git a/common/src/main/java/net/lionarius/skinrestorer/mixin/PlayerListMixin.java b/common/src/main/java/net/lionarius/skinrestorer/mixin/PlayerListMixin.java index 6f49c96..92982ab 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/mixin/PlayerListMixin.java +++ b/common/src/main/java/net/lionarius/skinrestorer/mixin/PlayerListMixin.java @@ -16,6 +16,7 @@ import java.util.Collections; @Mixin(PlayerList.class) public abstract class PlayerListMixin { + @Inject(method = "remove", at = @At("TAIL")) private void remove(ServerPlayer player, CallbackInfo ci) { SkinRestorer.Events.onPlayerDisconnect(player); diff --git a/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplAccessorInvoker.java b/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplAccessorInvoker.java new file mode 100644 index 0000000..aab07c3 --- /dev/null +++ b/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplAccessorInvoker.java @@ -0,0 +1,13 @@ +package net.lionarius.skinrestorer.mixin; + +import com.mojang.authlib.GameProfile; +import net.minecraft.server.network.ServerLoginPacketListenerImpl; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ServerLoginPacketListenerImpl.class) +public interface ServerLoginPacketListenerImplAccessorInvoker { + + @Accessor + GameProfile getAuthenticatedProfile(); +} diff --git a/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplMixin.java b/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplMixin.java index 28e588e..5ce9df9 100644 --- a/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplMixin.java +++ b/common/src/main/java/net/lionarius/skinrestorer/mixin/ServerLoginPacketListenerImplMixin.java @@ -7,9 +7,7 @@ import net.lionarius.skinrestorer.skin.provider.SkinProviderContext; import net.lionarius.skinrestorer.util.PlayerUtils; import net.lionarius.skinrestorer.util.Result; import net.minecraft.server.network.ServerLoginPacketListenerImpl; -import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -20,9 +18,6 @@ import java.util.concurrent.CompletableFuture; @Mixin(ServerLoginPacketListenerImpl.class) public abstract class ServerLoginPacketListenerImplMixin { - @Shadow @Nullable - private GameProfile authenticatedProfile; - @Unique private CompletableFuture skinrestorer$pendingSkin; @@ -32,7 +27,7 @@ public abstract class ServerLoginPacketListenerImplMixin { public void waitForSkin(CallbackInfo ci) { if (skinrestorer$pendingSkin == null) { skinrestorer$pendingSkin = CompletableFuture.supplyAsync(() -> { - final var profile = authenticatedProfile; + final var profile = ((ServerLoginPacketListenerImplAccessorInvoker) this).getAuthenticatedProfile(); assert profile != null; var originalSkin = PlayerUtils.getPlayerSkin(profile); diff --git a/common/src/main/resources/skinrestorer.mixins.json b/common/src/main/resources/skinrestorer.mixins.json index 224662d..939d827 100644 --- a/common/src/main/resources/skinrestorer.mixins.json +++ b/common/src/main/resources/skinrestorer.mixins.json @@ -8,6 +8,7 @@ "mixins": [ "ChunkMapAccessor", "PlayerListMixin", + "ServerLoginPacketListenerImplAccessorInvoker", "ServerLoginPacketListenerImplMixin", "TrackedEntityAccessorInvoker" ],