From 04b39a7e7d3caef914f21f150f1e1bc57830b693 Mon Sep 17 00:00:00 2001 From: jack <181404551+JackOfNoneTrades@users.noreply.github.com> Date: Thu, 22 Oct 2026 23:56:32 +0200 Subject: [PATCH] Preserve player model rotation when toggling baubles inventory (#39) --- .../java/baubles/client/gui/GuiEvents.java | 8 ++++- .../gui/GuiInventoryReflectionHelper.java | 29 +++++++++++++++++++ .../baubles/client/gui/GuiPlayerExpanded.java | 10 ++++++- 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 src/main/java/baubles/client/gui/GuiInventoryReflectionHelper.java diff --git a/src/main/java/baubles/client/gui/GuiEvents.java b/src/main/java/baubles/client/gui/GuiEvents.java index e9de9e5..a7e6f0d 100644 --- a/src/main/java/baubles/client/gui/GuiEvents.java +++ b/src/main/java/baubles/client/gui/GuiEvents.java @@ -55,7 +55,13 @@ public class GuiEvents { if (event.gui instanceof GuiPlayerExpanded) { if (event.button.id == 55) { - event.gui.mc.displayGuiScreen(new GuiInventory(event.gui.mc.thePlayer)); + GuiPlayerExpanded expandedInventory = (GuiPlayerExpanded) event.gui; + GuiInventory inventory = new GuiInventory(event.gui.mc.thePlayer); + GuiInventoryReflectionHelper.setMousePosition( + inventory, + expandedInventory.getMouseX(), + expandedInventory.getMouseY()); + event.gui.mc.displayGuiScreen(inventory); PacketHandler.INSTANCE.sendToServer(new PacketOpenNormalInventory(event.gui.mc.thePlayer)); } } diff --git a/src/main/java/baubles/client/gui/GuiInventoryReflectionHelper.java b/src/main/java/baubles/client/gui/GuiInventoryReflectionHelper.java new file mode 100644 index 0000000..3e983bf --- /dev/null +++ b/src/main/java/baubles/client/gui/GuiInventoryReflectionHelper.java @@ -0,0 +1,29 @@ +package baubles.client.gui; + +import java.lang.reflect.Field; + +import cpw.mods.fml.relauncher.ReflectionHelper; +import net.minecraft.client.gui.inventory.GuiInventory; + +final class GuiInventoryReflectionHelper { + + private static final Field MOUSE_X = ReflectionHelper.findField( + GuiInventory.class, + "xSizeFloat", + "field_147048_u"); + private static final Field MOUSE_Y = ReflectionHelper.findField( + GuiInventory.class, + "ySizeFloat", + "field_147047_v"); + + private GuiInventoryReflectionHelper() {} + + static void setMousePosition(GuiInventory inventory, float mouseX, float mouseY) { + try { + MOUSE_X.setFloat(inventory, mouseX); + MOUSE_Y.setFloat(inventory, mouseY); + } catch (IllegalAccessException e) { + throw new IllegalStateException("Could not initialize the inventory mouse position", e); + } + } +} diff --git a/src/main/java/baubles/client/gui/GuiPlayerExpanded.java b/src/main/java/baubles/client/gui/GuiPlayerExpanded.java index a08b5ed..509f4e6 100644 --- a/src/main/java/baubles/client/gui/GuiPlayerExpanded.java +++ b/src/main/java/baubles/client/gui/GuiPlayerExpanded.java @@ -113,9 +113,9 @@ public class GuiPlayerExpanded extends GuiContainer implements INEIGuiHandler { */ @Override public void drawScreen(int mouseX, int mouseY, float partialTicks) { - super.drawScreen(mouseX, mouseY, partialTicks); xSizeFloat = (float) mouseX; ySizeFloat = (float) mouseY; + super.drawScreen(mouseX, mouseY, partialTicks); if(BaublesConfig.displayTooltipOnHover) { handleMouseHover(mouseX, mouseY); @@ -124,6 +124,14 @@ public class GuiPlayerExpanded extends GuiContainer implements INEIGuiHandler { handleScrollbar(mouseX, mouseY); } + float getMouseX() { + return xSizeFloat; + } + + float getMouseY() { + return ySizeFloat; + } + @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { if (!useOldGuiRendering) {