Update to 21w20a

Signed-off-by: shedaniel <daniel@shedaniel.me>
This commit is contained in:
shedaniel
2021-05-20 23:00:12 +08:00
parent 5e75d5e278
commit 1404a33f40
17 changed files with 164 additions and 72 deletions

View File

@@ -22,6 +22,7 @@ package me.shedaniel.architectury.event.events;
import com.mojang.blaze3d.vertex.PoseStack;
import me.shedaniel.architectury.event.Event;
import me.shedaniel.architectury.event.EventFactory;
import me.shedaniel.architectury.hooks.screen.ScreenAccess;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.components.AbstractWidget;
@@ -68,12 +69,12 @@ public interface GuiEvent {
@Environment(EnvType.CLIENT)
interface ScreenInitPre {
InteractionResult init(Screen screen, List<AbstractWidget> widgets, List<GuiEventListener> children);
InteractionResult init(Screen screen, ScreenAccess access);
}
@Environment(EnvType.CLIENT)
interface ScreenInitPost {
void init(Screen screen, List<AbstractWidget> widgets, List<GuiEventListener> children);
void init(Screen screen, ScreenAccess access);
}
@Environment(EnvType.CLIENT)

View File

@@ -0,0 +1,23 @@
package me.shedaniel.architectury.hooks.screen;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.Widget;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.client.gui.screens.Screen;
import java.util.List;
public interface ScreenAccess {
Screen getScreen();
List<NarratableEntry> getNarratables();
List<Widget> getRenderables();
<T extends AbstractWidget & Widget & NarratableEntry> T addRenderableWidget(T widget);
<T extends Widget> T addRenderableOnly(T listener);
<T extends GuiEventListener & NarratableEntry> T addWidget(T listener);
}

View File

@@ -17,13 +17,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package me.shedaniel.architectury.hooks;
package me.shedaniel.architectury.hooks.screen;
import me.shedaniel.architectury.annotations.ExpectPlatform;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.Widget;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.client.gui.screens.Screen;
import java.util.List;
@@ -34,17 +36,27 @@ public final class ScreenHooks {
}
@ExpectPlatform
public static List<AbstractWidget> getButtons(Screen screen) {
public static List<NarratableEntry> getNarratables(Screen screen) {
throw new AssertionError();
}
@ExpectPlatform
public static <T extends AbstractWidget> T addButton(Screen screen, T widget) {
public static List<Widget> getRenderables(Screen screen) {
throw new AssertionError();
}
@ExpectPlatform
public static <T extends GuiEventListener> T addChild(Screen screen, T listener) {
public static <T extends AbstractWidget & Widget & NarratableEntry> T addRenderableWidget(Screen screen, T widget) {
throw new AssertionError();
}
@ExpectPlatform
public static <T extends Widget> T addRenderableOnly(Screen screen, T listener) {
throw new AssertionError();
}
@ExpectPlatform
public static <T extends GuiEventListener & NarratableEntry> T addWidget(Screen screen, T listener) {
throw new AssertionError();
}
}

View File

@@ -0,0 +1,53 @@
package me.shedaniel.architectury.impl;
import me.shedaniel.architectury.hooks.screen.ScreenAccess;
import me.shedaniel.architectury.hooks.screen.ScreenHooks;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.Widget;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.client.gui.screens.Screen;
import java.util.List;
public class ScreenAccessImpl implements ScreenAccess {
private Screen screen;
public ScreenAccessImpl(Screen screen) {
this.screen = screen;
}
public void setScreen(Screen screen) {
this.screen = screen;
}
@Override
public Screen getScreen() {
return screen;
}
@Override
public List<NarratableEntry> getNarratables() {
return ScreenHooks.getNarratables(screen);
}
@Override
public List<Widget> getRenderables() {
return ScreenHooks.getRenderables(screen);
}
@Override
public <T extends AbstractWidget & Widget & NarratableEntry> T addRenderableWidget(T widget) {
return ScreenHooks.addRenderableWidget(screen, widget);
}
@Override
public <T extends Widget> T addRenderableOnly(T listener) {
return ScreenHooks.addRenderableOnly(screen, listener);
}
@Override
public <T extends GuiEventListener & NarratableEntry> T addWidget(T listener) {
return ScreenHooks.addWidget(screen, listener);
}
}