diff --git a/common/src/main/java/me/shedaniel/architectury/hooks/ScreenHooks.java b/common/src/main/java/me/shedaniel/architectury/hooks/ScreenHooks.java index 09276d1f..825e59a9 100644 --- a/common/src/main/java/me/shedaniel/architectury/hooks/ScreenHooks.java +++ b/common/src/main/java/me/shedaniel/architectury/hooks/ScreenHooks.java @@ -24,6 +24,8 @@ import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; +import java.util.List; + @Environment(EnvType.CLIENT) public final class ScreenHooks { private ScreenHooks() {} @@ -31,6 +33,10 @@ public final class ScreenHooks { @Populatable private static final Impl IMPL = null; + public static List getButtons(Screen screen) { + return IMPL.getButtons(screen); + } + public static T addButton(Screen screen, T widget) { return IMPL.addButton(screen, widget); } @@ -40,6 +46,8 @@ public final class ScreenHooks { } public interface Impl { + List getButtons(Screen screen); + T addButton(Screen screen, T widget); T addChild(Screen screen, T listener); diff --git a/fabric/src/main/java/me/shedaniel/architectury/hooks/fabric/ScreenHooksImpl.java b/fabric/src/main/java/me/shedaniel/architectury/hooks/fabric/ScreenHooksImpl.java index 85e6a703..3acbfbda 100644 --- a/fabric/src/main/java/me/shedaniel/architectury/hooks/fabric/ScreenHooksImpl.java +++ b/fabric/src/main/java/me/shedaniel/architectury/hooks/fabric/ScreenHooksImpl.java @@ -23,8 +23,15 @@ import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; +import java.util.List; + @Environment(EnvType.CLIENT) public class ScreenHooksImpl implements ScreenHooks.Impl { + @Override + public List getButtons(Screen screen) { + return screen.buttons; + } + @Override public T addButton(Screen screen, T widget) { return screen.addButton(widget); diff --git a/fabric/src/main/resources/architectury.accessWidener b/fabric/src/main/resources/architectury.accessWidener index bf65cb34..70498058 100644 --- a/fabric/src/main/resources/architectury.accessWidener +++ b/fabric/src/main/resources/architectury.accessWidener @@ -1,3 +1,4 @@ accessWidener v1 named accessible method net/minecraft/client/gui/screens/Screen addButton (Lnet/minecraft/client/gui/components/AbstractWidget;)Lnet/minecraft/client/gui/components/AbstractWidget; -accessible method net/minecraft/client/gui/screens/Screen addWidget (Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener; \ No newline at end of file +accessible method net/minecraft/client/gui/screens/Screen addWidget (Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener; +accessible field net/minecraft/client/gui/screens/Screen buttons Ljava/util/List; \ No newline at end of file diff --git a/forge/src/main/java/me/shedaniel/architectury/hooks/forge/ScreenHooksImpl.java b/forge/src/main/java/me/shedaniel/architectury/hooks/forge/ScreenHooksImpl.java index 01165684..ea43d496 100644 --- a/forge/src/main/java/me/shedaniel/architectury/hooks/forge/ScreenHooksImpl.java +++ b/forge/src/main/java/me/shedaniel/architectury/hooks/forge/ScreenHooksImpl.java @@ -23,8 +23,18 @@ import net.minecraft.client.gui.widget.Widget; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import java.lang.reflect.InvocationTargetException; +import java.util.List; public class ScreenHooksImpl implements ScreenHooks.Impl { + @Override + public List getButtons(Screen screen) { + try { + return (List) ObfuscationReflectionHelper.findField(Screen.class, "field_230710_m_").get(screen); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + @Override public T addButton(Screen screen, T t) { try {