From 2888cf18141aec7a97a71e105d987dae5507dfe7 Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 8 Jun 2026 15:51:08 +0000 Subject: [PATCH] 0.6.1: pre-size sub-panels in addWidgets to fix blank panel content MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FTB Library's Panel.refreshWidgets runs in this order: 1. clearWidgets 2. addWidgets (parent creates sub-panels, default size 0x0) 3. for each Panel child: refreshWidgets() ← recurses HERE 4. alignWidgets (parent sizes children, but it's too late) Step 3 means sub-panels' own addWidgets/alignWidgets run with width=height=0. Children sized via setSize(width, 12) end up 0 wide, visible content disappears. Fix is mechanical: every screen now sizes its sub-panels in addWidgets() BEFORE the add() call. By the time the recursive refreshWidgets hits the sub-panel, its dimensions are correct. Caught when HubScreen rendered blank (status panel was set up to fill the body but its Row children were 0px wide). Same latent issue in TierUpgrade, CountingHouse, Bounty, Plot, Quest Log — all fixed. Co-Authored-By: Claude Opus 4.7 --- gradle.properties | 2 +- .../client/screens/BountyBoardScreen.java | 16 ++++++++------ .../client/screens/CountingHouseScreen.java | 16 ++++++++------ .../bnstoolkit/client/screens/HubScreen.java | 18 ++++++++++------ .../client/screens/PlotPurchaseScreen.java | 16 ++++++++------ .../client/screens/QuestLogScreen.java | 8 ++++--- .../client/screens/TierUpgradeScreen.java | 21 ++++++++++++------- 7 files changed, 62 insertions(+), 35 deletions(-) diff --git a/gradle.properties b/gradle.properties index f100321..9fd3025 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,5 +19,5 @@ loader_version_range=[1,) mod_id=bnstoolkit mod_name=Brass and Sigil Toolkit mod_license=All Rights Reserved -mod_version=0.6.0 +mod_version=0.6.1 mod_group_id=uk.sijbers.bnstoolkit diff --git a/src/main/java/uk/sijbers/bnstoolkit/client/screens/BountyBoardScreen.java b/src/main/java/uk/sijbers/bnstoolkit/client/screens/BountyBoardScreen.java index ade38ea..101da3d 100644 --- a/src/main/java/uk/sijbers/bnstoolkit/client/screens/BountyBoardScreen.java +++ b/src/main/java/uk/sijbers/bnstoolkit/client/screens/BountyBoardScreen.java @@ -34,8 +34,16 @@ public final class BountyBoardScreen extends BaseBnsScreen { @Override public void addWidgets() { - add(new BountyList(this)); - add(new BountyDetail(this)); + BountyList list = new BountyList(this); + list.setPos(8, contentTop()); + list.setSize(170, getHeight() - 30); + add(list); + + BountyDetail detail = new BountyDetail(this); + detail.setPos(186, contentTop()); + detail.setSize(getWidth() - 194, getHeight() - 30); + add(detail); + add(SimpleTextButton.create(this, Component.literal("Refresh"), Icons.REFRESH, @@ -44,10 +52,6 @@ public final class BountyBoardScreen extends BaseBnsScreen { @Override public void alignWidgets() { - getWidgets().get(0).setPos(8, contentTop()); - getWidgets().get(0).setSize(170, getHeight() - 30); - getWidgets().get(1).setPos(186, contentTop()); - getWidgets().get(1).setSize(getWidth() - 194, getHeight() - 30); Widget rf = getWidgets().get(2); rf.setSize(60, 16); rf.setPos(getWidth() - 68, getHeight() - 22); diff --git a/src/main/java/uk/sijbers/bnstoolkit/client/screens/CountingHouseScreen.java b/src/main/java/uk/sijbers/bnstoolkit/client/screens/CountingHouseScreen.java index 24eed9b..6e28373 100644 --- a/src/main/java/uk/sijbers/bnstoolkit/client/screens/CountingHouseScreen.java +++ b/src/main/java/uk/sijbers/bnstoolkit/client/screens/CountingHouseScreen.java @@ -47,8 +47,16 @@ public final class CountingHouseScreen extends BaseBnsScreen { @Override public void addWidgets() { - add(new ItemGrid(this)); - add(new SellDetail(this)); + ItemGrid grid = new ItemGrid(this); + grid.setPos(8, contentTop()); + grid.setSize(170, getHeight() - 30); + add(grid); + + SellDetail detail = new SellDetail(this); + detail.setPos(186, contentTop()); + detail.setSize(getWidth() - 194, getHeight() - 30); + add(detail); + add(SimpleTextButton.create(this, Component.literal("Refresh"), Icons.REFRESH, @@ -57,10 +65,6 @@ public final class CountingHouseScreen extends BaseBnsScreen { @Override public void alignWidgets() { - getWidgets().get(0).setPos(8, contentTop()); - getWidgets().get(0).setSize(170, getHeight() - 30); - getWidgets().get(1).setPos(186, contentTop()); - getWidgets().get(1).setSize(getWidth() - 194, getHeight() - 30); Widget rf = getWidgets().get(2); rf.setSize(60, 16); rf.setPos(getWidth() - 68, getHeight() - 22); diff --git a/src/main/java/uk/sijbers/bnstoolkit/client/screens/HubScreen.java b/src/main/java/uk/sijbers/bnstoolkit/client/screens/HubScreen.java index a39970e..cfc365a 100644 --- a/src/main/java/uk/sijbers/bnstoolkit/client/screens/HubScreen.java +++ b/src/main/java/uk/sijbers/bnstoolkit/client/screens/HubScreen.java @@ -33,7 +33,16 @@ public final class HubScreen extends BaseBnsScreen { @Override public void addWidgets() { - add(new StatusPanel(this)); + // CRITICAL: size the sub-panel BEFORE adding. FTB Library's + // Panel.refreshWidgets() recurses into sub-panels BEFORE the + // parent's alignWidgets runs, so a sub-panel sized in + // alignWidgets shows up with width=height=0 to its own children + // (every Row gets setSize(0,12) → invisible). + StatusPanel sp = new StatusPanel(this); + sp.setPos(8, contentTop()); + sp.setSize(getWidth() - 16, getHeight() - 50); + add(sp); + add(SimpleTextButton.create(this, Component.literal("Quest Log"), Icons.INFO, btn -> { NetSend.requestSnapshot("ALL"); new QuestLogScreen().openGui(); })); add(SimpleTextButton.create(this, Component.literal("Refresh"), Icons.REFRESH, @@ -44,11 +53,8 @@ public final class HubScreen extends BaseBnsScreen { @Override public void alignWidgets() { - // Status panel fills most of the body - getWidgets().get(0).setPos(8, contentTop()); - getWidgets().get(0).setSize(getWidth() - 16, getHeight() - 50); - - // Bottom action row + // Sub-panel already sized + positioned in addWidgets; only the + // action-row buttons need placement here. int btnY = getHeight() - 22; int btnH = 16; Widget quest = getWidgets().get(1); diff --git a/src/main/java/uk/sijbers/bnstoolkit/client/screens/PlotPurchaseScreen.java b/src/main/java/uk/sijbers/bnstoolkit/client/screens/PlotPurchaseScreen.java index d788d74..4c80fc9 100644 --- a/src/main/java/uk/sijbers/bnstoolkit/client/screens/PlotPurchaseScreen.java +++ b/src/main/java/uk/sijbers/bnstoolkit/client/screens/PlotPurchaseScreen.java @@ -33,8 +33,16 @@ public final class PlotPurchaseScreen extends BaseBnsScreen { @Override public void addWidgets() { - add(new PlotList(this)); - add(new PlotDetail(this)); + PlotList list = new PlotList(this); + list.setPos(8, contentTop()); + list.setSize(170, getHeight() - 30); + add(list); + + PlotDetail detail = new PlotDetail(this); + detail.setPos(186, contentTop()); + detail.setSize(getWidth() - 194, getHeight() - 30); + add(detail); + add(SimpleTextButton.create(this, Component.literal("Refresh"), Icons.REFRESH, @@ -43,10 +51,6 @@ public final class PlotPurchaseScreen extends BaseBnsScreen { @Override public void alignWidgets() { - getWidgets().get(0).setPos(8, contentTop()); - getWidgets().get(0).setSize(170, getHeight() - 30); - getWidgets().get(1).setPos(186, contentTop()); - getWidgets().get(1).setSize(getWidth() - 194, getHeight() - 30); Widget rf = getWidgets().get(2); rf.setSize(60, 16); rf.setPos(getWidth() - 68, getHeight() - 22); diff --git a/src/main/java/uk/sijbers/bnstoolkit/client/screens/QuestLogScreen.java b/src/main/java/uk/sijbers/bnstoolkit/client/screens/QuestLogScreen.java index f2045b8..73a1144 100644 --- a/src/main/java/uk/sijbers/bnstoolkit/client/screens/QuestLogScreen.java +++ b/src/main/java/uk/sijbers/bnstoolkit/client/screens/QuestLogScreen.java @@ -32,15 +32,17 @@ public final class QuestLogScreen extends BaseBnsScreen { @Override public void addWidgets() { - add(new SummaryPanel(this)); + SummaryPanel summary = new SummaryPanel(this); + summary.setPos(8, contentTop()); + summary.setSize(getWidth() - 16, getHeight() - 30); + add(summary); + add(SimpleTextButton.create(this, Component.literal("Refresh"), Icons.REFRESH, btn -> NetSend.requestSnapshot("ALL"))); } @Override public void alignWidgets() { - getWidgets().get(0).setPos(8, contentTop()); - getWidgets().get(0).setSize(getWidth() - 16, getHeight() - 30); Widget rf = getWidgets().get(1); rf.setSize(60, 16); rf.setPos(getWidth() - 68, getHeight() - 22); diff --git a/src/main/java/uk/sijbers/bnstoolkit/client/screens/TierUpgradeScreen.java b/src/main/java/uk/sijbers/bnstoolkit/client/screens/TierUpgradeScreen.java index 341c2c1..ecced32 100644 --- a/src/main/java/uk/sijbers/bnstoolkit/client/screens/TierUpgradeScreen.java +++ b/src/main/java/uk/sijbers/bnstoolkit/client/screens/TierUpgradeScreen.java @@ -37,8 +37,19 @@ public final class TierUpgradeScreen extends BaseBnsScreen { @Override public void addWidgets() { - add(new LadderPanel(this)); - add(new DetailPanel(this)); + // Pre-size sub-panels so their addWidgets/alignWidgets (called + // via the recursive Panel.refreshWidgets BEFORE our own + // alignWidgets) see the correct dimensions. + LadderPanel ladder = new LadderPanel(this); + ladder.setPos(8, contentTop()); + ladder.setSize(180, getHeight() - 28); + add(ladder); + + DetailPanel detail = new DetailPanel(this); + detail.setPos(196, contentTop()); + detail.setSize(getWidth() - 204, getHeight() - 50); + add(detail); + add(SimpleTextButton.create(this, Component.literal("Refresh"), Icons.REFRESH, @@ -47,11 +58,7 @@ public final class TierUpgradeScreen extends BaseBnsScreen { @Override public void alignWidgets() { - // FTB Library setPos uses parent-relative coords. - getWidgets().get(0).setPos(8, contentTop()); - getWidgets().get(0).setSize(180, getHeight() - 28); - getWidgets().get(1).setPos(196, contentTop()); - getWidgets().get(1).setSize(getWidth() - 204, getHeight() - 50); + // Sub-panels are sized in addWidgets; only position the refresh button here. Widget rf = getWidgets().get(2); rf.setSize(60, 16); rf.setPos(getWidth() - 68, getHeight() - 22);