Hooks for getting buttons in a screen

This commit is contained in:
shedaniel
2020-11-07 15:31:25 +08:00
parent 17d455ff64
commit 01901636b6
4 changed files with 27 additions and 1 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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 {