From 06df2b3dea4e9d1a5b61ef1a86cb0eca61b2ff11 Mon Sep 17 00:00:00 2001 From: Chrys Chrysanthemum Date: Sat, 18 Jul 2026 21:56:54 +1000 Subject: [PATCH] fix: Show tootlip whilst hovering over a ViaConfigGameRuleEntry value. --- .../Mixin_AbstractGameRulesScreenRuleList1.java | 11 +++++++---- ...useConfigExtensionsGameRulesClientNeoForge.java | 4 +++- .../screen/gamerule/ViaConfigGameRuleEntry.java | 14 +++++++++----- .../lang/en_us.json | 4 ++++ 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/gamerules/fabric/src/main/java/lgbt/greenhouse/config_extensions/gamerules/fabric/impl/mixin/Mixin_AbstractGameRulesScreenRuleList1.java b/gamerules/fabric/src/main/java/lgbt/greenhouse/config_extensions/gamerules/fabric/impl/mixin/Mixin_AbstractGameRulesScreenRuleList1.java index c3902b7..ff29f16 100644 --- a/gamerules/fabric/src/main/java/lgbt/greenhouse/config_extensions/gamerules/fabric/impl/mixin/Mixin_AbstractGameRulesScreenRuleList1.java +++ b/gamerules/fabric/src/main/java/lgbt/greenhouse/config_extensions/gamerules/fabric/impl/mixin/Mixin_AbstractGameRulesScreenRuleList1.java @@ -20,6 +20,7 @@ import net.minecraft.util.FormattedCharSequence; import net.minecraft.util.Unit; import net.minecraft.world.level.gamerules.GameRule; import net.minecraft.world.level.gamerules.GameRuleTypeVisitor; +import org.jspecify.annotations.NonNull; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -56,15 +57,17 @@ public abstract class Mixin_AbstractGameRulesScreenRuleList1 implements Duck_Via } @Override - public void greenhouse_config_extensions_gamerules$visitConfigBacked(final ViaConfigGameRule gameRule) { - addEntry(gameRule, (_, _, _, _) -> { + public void greenhouse_config_extensions_gamerules$visitConfigBacked(final @NonNull ViaConfigGameRule gameRule) { + addEntry(gameRule, (component, tooltip, _, _) -> { ScopedValue.where(GreenhouseConfigExtensionsGameRulesClient.OBTAIN_INNER_VALUE, Unit.INSTANCE) .run(() -> gameRule.innerVisitorCaller().call((GameRuleTypeVisitor) this, gameRule)); ViaConfigGameRuleEntry entry = new ViaConfigGameRuleEntry<>( - ((Accessor_AbstractGameRulesScreenRuleList)this$1).greenhouse_config_extensions_gamerules$getThis(), + ((Accessor_AbstractGameRulesScreenRuleList) this$1).greenhouse_config_extensions_gamerules$getThis(), + gameRule, greenhouse_config_extensions_gamerules$innerEntry, - gameRule + tooltip, + component ); greenhouse_config_extensions_gamerules$innerEntry = null; return entry; diff --git a/gamerules/neoforge/src/main/java/lgbt/greenhouse/config_extensions/gamerules/neoforge/impl/client/GreenhouseConfigExtensionsGameRulesClientNeoForge.java b/gamerules/neoforge/src/main/java/lgbt/greenhouse/config_extensions/gamerules/neoforge/impl/client/GreenhouseConfigExtensionsGameRulesClientNeoForge.java index 430a31f..fe40e19 100644 --- a/gamerules/neoforge/src/main/java/lgbt/greenhouse/config_extensions/gamerules/neoforge/impl/client/GreenhouseConfigExtensionsGameRulesClientNeoForge.java +++ b/gamerules/neoforge/src/main/java/lgbt/greenhouse/config_extensions/gamerules/neoforge/impl/client/GreenhouseConfigExtensionsGameRulesClientNeoForge.java @@ -81,8 +81,10 @@ public class GreenhouseConfigExtensionsGameRulesClientNeoForge { ViaConfigGameRuleEntry entry = new ViaConfigGameRuleEntry<>( screen, + viaConfigRule, INNER_RULE_ENTRY.get(), - viaConfigRule + tooltip, + component ); INNER_RULE_ENTRY.remove(); diff --git a/gamerules/xplat/src/main/java/lgbt/greenhouse/config_extensions/gamerules/impl/client/screen/gamerule/ViaConfigGameRuleEntry.java b/gamerules/xplat/src/main/java/lgbt/greenhouse/config_extensions/gamerules/impl/client/screen/gamerule/ViaConfigGameRuleEntry.java index 009085e..f60785a 100644 --- a/gamerules/xplat/src/main/java/lgbt/greenhouse/config_extensions/gamerules/impl/client/screen/gamerule/ViaConfigGameRuleEntry.java +++ b/gamerules/xplat/src/main/java/lgbt/greenhouse/config_extensions/gamerules/impl/client/screen/gamerule/ViaConfigGameRuleEntry.java @@ -17,13 +17,15 @@ import net.minecraft.client.gui.components.*; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.worldselection.AbstractGameRulesScreen; import net.minecraft.network.chat.Component; +import net.minecraft.util.FormattedCharSequence; import net.minecraft.world.level.gamerules.GameRules; -import org.jspecify.annotations.NonNull; -import java.util.Collections; +import java.util.List; import java.util.Objects; import java.util.function.Consumer; +// TODO: Test with GUI Narrator. +// FIXME: Allow for arrow keys to select the inner widgets. public class ViaConfigGameRuleEntry extends AbstractGameRulesScreen.GameRuleEntry { private static final WidgetSprites SPRITES = new WidgetSprites( GreenhouseConfigExtensionsGameRules.id("gamerule/config_value_enabled"), @@ -42,9 +44,11 @@ public class ViaConfigGameRuleEntry extends AbstractGameRulesScreen.GameRuleE private boolean isConfigDefault; public ViaConfigGameRuleEntry(AbstractGameRulesScreen screen, + ViaConfigGameRule gameRule, AbstractGameRulesScreen.RuleEntry inner, - ViaConfigGameRule gameRule) { - screen.super(Collections.emptyList(), Component.empty()); + List tooltip, + Component label) { + screen.super(tooltip, label); GameRules gameRules = ((Accessor_AbstractGameRulesScreen)screen).greenhouse_config_extensions_gamerules$getGameRules(); this.inner = inner; @@ -87,7 +91,7 @@ public class ViaConfigGameRuleEntry extends AbstractGameRulesScreen.GameRuleE } @Override - public void extractContent(@NonNull GuiGraphicsExtractor graphics, int mouseX, int mouseY, boolean hovered, float a) { + public void extractContent(GuiGraphicsExtractor graphics, int mouseX, int mouseY, boolean hovered, float a) { inner.extractContent(graphics, mouseX, mouseY, hovered, a); checkbox.setX(getContentRight() - 11); checkbox.setY(getContentY()); diff --git a/gamerules/xplat/src/testmod/resources/assets/greenhouse_config_extensions_gamerules_testmod/lang/en_us.json b/gamerules/xplat/src/testmod/resources/assets/greenhouse_config_extensions_gamerules_testmod/lang/en_us.json index 95c73ed..6653c68 100644 --- a/gamerules/xplat/src/testmod/resources/assets/greenhouse_config_extensions_gamerules_testmod/lang/en_us.json +++ b/gamerules/xplat/src/testmod/resources/assets/greenhouse_config_extensions_gamerules_testmod/lang/en_us.json @@ -1,9 +1,13 @@ { "gamerule.greenhouse_config_extensions_gamerules_testmod.greenhouse_config_boolean": "[GREENHOUSE CONFIG] Boolean", + "gamerule.greenhouse_config_extensions_gamerules_testmod.greenhouse_config_boolean.description": "A Greenhouse Config controlled boolean.", "gamerule.greenhouse_config_extensions_gamerules_testmod.greenhouse_config_int": "[GREENHOUSE CONFIG] Int", + "gamerule.greenhouse_config_extensions_gamerules_testmod.greenhouse_config_int.description": "A Greenhouse Config controlled int.", "gamerule.greenhouse_config_extensions_gamerules_testmod.kaleido_config_boolean": "[KALEIDO CONFIG] Boolean", + "gamerule.greenhouse_config_extensions_gamerules_testmod.kaleido_config_boolean.description": "A Kaleido Config controlled boolean.", "gamerule.greenhouse_config_extensions_gamerules_testmod.kaleido_config_int": "[KALEIDO CONFIG] Int", + "gamerule.greenhouse_config_extensions_gamerules_testmod.kaleido_config_int.description": "A Kaleido Config controlled int.", "subtitles.greenhouse_config_testmod.sylv_fan": "Sylv's fan whirrs" } -- 2.51.2