mirror of
https://github.com/architectury/architectury-api.git
synced 2026-03-28 11:57:01 -05:00
Hooks for getting buttons in a screen
This commit is contained in:
@@ -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<AbstractWidget> getButtons(Screen screen) {
|
||||
return IMPL.getButtons(screen);
|
||||
}
|
||||
|
||||
public static <T extends AbstractWidget> T addButton(Screen screen, T widget) {
|
||||
return IMPL.addButton(screen, widget);
|
||||
}
|
||||
@@ -40,6 +46,8 @@ public final class ScreenHooks {
|
||||
}
|
||||
|
||||
public interface Impl {
|
||||
List<AbstractWidget> getButtons(Screen screen);
|
||||
|
||||
<T extends AbstractWidget> T addButton(Screen screen, T widget);
|
||||
|
||||
<T extends GuiEventListener> T addChild(Screen screen, T listener);
|
||||
|
||||
@@ -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<AbstractWidget> getButtons(Screen screen) {
|
||||
return screen.buttons;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends AbstractWidget> T addButton(Screen screen, T widget) {
|
||||
return screen.addButton(widget);
|
||||
|
||||
@@ -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;
|
||||
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;
|
||||
@@ -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<Widget> getButtons(Screen screen) {
|
||||
try {
|
||||
return (List<Widget>) ObfuscationReflectionHelper.findField(Screen.class, "field_230710_m_").get(screen);
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends Widget> T addButton(Screen screen, T t) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user