From 85a46c0bba8c17e1d60d3ab7382a38aa2c7277dd Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sun, 27 Sep 2026 18:43:27 +0200 Subject: [PATCH 1/3] Close the emote wheel with its key The emote wheel key only opened the wheel. It now closes it too while the wheel is open. This is done in the key handler: closing from the screen would reopen it on the next tick, since the key is still down by then. Co-Authored-By: Claude Opus 5.5 --- .../saturnclient/event/KeyInputHandler.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java b/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java index adecfba..5f7d9d7 100644 --- a/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java +++ b/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java @@ -12,6 +12,7 @@ import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.common.provider.Providers; import org.saturnclient.client.ServiceClient; import org.saturnclient.emotes.fabric.Emotes; +import org.saturnclient.impl.ui.SaturnScreenFabric; import org.saturnclient.ui.screens.EmoteWheel; import org.saturnclient.ui.screens.ShiftMenu; @@ -51,12 +52,20 @@ public class KeyInputHandler { Providers.saturn.getClient().setScreen(new ShiftMenu()); } - if (Config.openEmoteWheel.wasKeyPressed() && client.currentScreen == null + // The emote wheel key opens the wheel, and closes it again while it's open. Closing it + // from the screen's own key handling would reopen it on the next tick, since the key is + // still down and no screen is open by then. + if (Config.openEmoteWheel.wasKeyPressed() //? if >=1.21.9 { && !InputUtil.isKeyPressed(client.getWindow(), GLFW.GLFW_KEY_F3)) { //?} else //&& !InputUtil.isKeyPressed(client.getWindow().getHandle(), GLFW.GLFW_KEY_F3)) { - Providers.saturn.getClient().setScreen(new EmoteWheel()); + if (client.currentScreen == null) { + Providers.saturn.getClient().setScreen(new EmoteWheel()); + } else if (client.currentScreen instanceof SaturnScreenFabric saturnScreen + && saturnScreen.screen instanceof EmoteWheel) { + saturnScreen.close(); + } } // Sneaking cancels your own emote, for everyone. From 02f6cf7d71dffdb2af79887e1664f62e1dda04db Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sun, 27 Sep 2026 19:01:42 +0200 Subject: [PATCH 2/3] Give common the player's skin texture SaturnProvider.getPlayerSkin returns the signed-in player's skin texture, or the default skin until it loads, for the title screen's player chip. 1.21.9 moved SkinTextures and renamed the skin provider's lookup, so each side has its own version. Co-Authored-By: Claude Opus 5.5 --- .../impl/provider/SaturnProviderImpl.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/main/java/org/saturnclient/impl/provider/SaturnProviderImpl.java b/src/main/java/org/saturnclient/impl/provider/SaturnProviderImpl.java index 87dd445..fb9b976 100644 --- a/src/main/java/org/saturnclient/impl/provider/SaturnProviderImpl.java +++ b/src/main/java/org/saturnclient/impl/provider/SaturnProviderImpl.java @@ -2,11 +2,17 @@ package org.saturnclient.impl.provider; import java.awt.image.BufferedImage; import java.util.UUID; +import java.util.function.Supplier; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.toast.SystemToast; +//? if >=1.21.9 { +import net.minecraft.entity.player.SkinTextures; +//?} else +//import net.minecraft.client.util.SkinTextures; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; import org.saturnclient.common.provider.SaturnProvider; import org.saturnclient.common.ref.asset.IdentifierRef; @@ -16,6 +22,9 @@ import org.saturnclient.impl.cosmetics.utils.IdentifierUtils; import org.saturnclient.saturnclient.SaturnClient; public class SaturnProviderImpl implements SaturnProvider { + /** Looks up the signed-in player's skin; made once, since the skin provider caches it */ + private Supplier playerSkin; + @Override public MinecraftClientRef getClient() { return (MinecraftClientRef) SaturnClient.client; @@ -50,6 +59,23 @@ public class SaturnProviderImpl implements SaturnProvider { /** Shown longer than the vanilla default, since these ask the player to act. */ private static final SystemToast.Type WARNING_TOAST = new SystemToast.Type(15_000L); + @Override + public IdentifierRef getPlayerSkin() { + if (playerSkin == null) { + MinecraftClient client = MinecraftClient.getInstance(); + // 1.21.9 moved SkinTextures and renamed the skin provider's lookup. + //? if >=1.21.9 { + Supplier textures = client.getSkinProvider().supplySkinTextures(client.getGameProfile(), false); + playerSkin = () -> textures.get().body().texturePath(); + //?} else { + /*Supplier textures = client.getSkinProvider().getSkinTexturesSupplier(client.getGameProfile()); + playerSkin = () -> textures.get().texture(); + *///?} + } + + return (IdentifierRef) (Object) playerSkin.get(); + } + @Override public String getModVersion() { return FabricLoader.getInstance().getModContainer(SaturnClient.MOD_ID) From 8677837a8f1abde021ddc1c728638b20a3c6d30b Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sun, 27 Sep 2026 19:15:55 +0200 Subject: [PATCH 3/3] Point common at the UI fixes common#7 fixes the emote wheel and restyles the buttons, title screen and HUD editor, which the two commits before this one support. Co-Authored-By: Claude Opus 5.5 --- common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common b/common index caf472d..ef0ead6 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit caf472da9611eb537ab38db04677629e46bfe871 +Subproject commit ef0ead6bf895f723a78ddf5426f3881ef13f426a