From dc103d53d1d2ebbdc71b17c7d58fcb70f3bbfd11 Mon Sep 17 00:00:00 2001 From: tterrag1098 Date: Fri, 9 Oct 2015 00:18:00 -0400 Subject: [PATCH] Preserve scroll position in mod list GUI after GUI resize/reopen --- .../gui/bettermodlist/GuiEnhancedModList.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/enderio/core/client/gui/bettermodlist/GuiEnhancedModList.java b/src/main/java/com/enderio/core/client/gui/bettermodlist/GuiEnhancedModList.java index f19d10a..a1f14a5 100644 --- a/src/main/java/com/enderio/core/client/gui/bettermodlist/GuiEnhancedModList.java +++ b/src/main/java/com/enderio/core/client/gui/bettermodlist/GuiEnhancedModList.java @@ -101,7 +101,7 @@ public class GuiEnhancedModList extends GuiModList { } private static Field _mods, _selected, _selectedMod; - private static Field _modList, _modListRight, _modListBottom, _modListMods, _listWidth; + private static Field _modList, _modListRight, _modListBottom, _modListMods, _listWidth, _scrollDistance; static { try { _mods = GuiModList.class.getDeclaredField("mods"); @@ -120,6 +120,8 @@ public class GuiEnhancedModList extends GuiModList { _modListMods.setAccessible(true); _listWidth = GuiModList.class.getDeclaredField("listWidth"); _listWidth.setAccessible(true); + _scrollDistance = GuiScrollingList.class.getDeclaredField("scrollDistance"); + _scrollDistance.setAccessible(true); } catch (Exception e) { throw new RuntimeException(e); } @@ -141,6 +143,9 @@ public class GuiEnhancedModList extends GuiModList { @SuppressWarnings("unchecked") @Override public void initGui() { + // Super code reinitializes the mod list every time, need to preserve scroll state + float scroll = getGuiModListScroll(); + super.initGui(); // Let's move some buttons @@ -173,9 +178,11 @@ public class GuiEnhancedModList extends GuiModList { buttonList.add(new GuiButton(SortType.Z_TO_A.buttonID, x, y, width - buttonMargin, 20, "Z-A")); buttonList.add(new InfoButton()); - + reloadMods(); disableButton(); + + setGuiModListScroll(scroll); } @Override @@ -311,6 +318,7 @@ public class GuiEnhancedModList extends GuiModList { } _mods.set(this, getMods()); + sorted = false; } @SneakyThrows @@ -332,6 +340,16 @@ public class GuiEnhancedModList extends GuiModList { private int getGuiModListBottom() { return _modListBottom.getInt(getGuiModList()); } + + @SneakyThrows + private float getGuiModListScroll() { + return _scrollDistance.getFloat(getGuiModList()); + } + + @SneakyThrows + private void setGuiModListScroll(float scroll) { + _scrollDistance.setFloat(getGuiModList(), scroll); + } @SuppressWarnings("unchecked") @SneakyThrows