From 0ef0f8b21df4b9a603aaa2ab4a35d395ef6437c1 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 22 Oct 2022 01:11:04 +0800 Subject: Make it not crash --- .../impl/client/gui/overlay/ScreenOverlayImpl.java | 34 ++++++++++++++-------- .../gui/overlay/widgets/OverlayWidgetProvider.java | 11 ++++--- 2 files changed, 29 insertions(+), 16 deletions(-) (limited to 'runtime-frontend/overlay/src/main/java') diff --git a/runtime-frontend/overlay/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/ScreenOverlayImpl.java b/runtime-frontend/overlay/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/ScreenOverlayImpl.java index f4d8a1875..6245a1730 100644 --- a/runtime-frontend/overlay/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/ScreenOverlayImpl.java +++ b/runtime-frontend/overlay/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/ScreenOverlayImpl.java @@ -55,10 +55,6 @@ public final class ScreenOverlayImpl extends AbstractScreenOverlay { private TextField searchField = null; private BooleanSupplier isHighlighted = null; - public ScreenOverlayImpl() { - this.init(); - } - @Override public void init() { super.init(); @@ -74,22 +70,36 @@ public final class ScreenOverlayImpl extends AbstractScreenOverlay { EntryListWidget entryListWidget = getEntryList(); entryListWidget.initBounds(this.getBounds()); - entryListWidget.initSearch(searchField.getText(), true); this.children().add(entryListWidget.asWidget()); - searchField.setResponder(s -> entryListWidget.initSearch(s, false)); entryListWidget.init(this); for (OverlayWidgetProvider provider : OverlayWidgetProvider.PROVIDERS) { - provider.provide(this, menuAccess(), (textField, isHighlighted) -> { - this.searchField = textField; - this.isHighlighted = isHighlighted; - }, LateRenderableWidget::new); + provider.provide(this, menuAccess(), new OverlayWidgetProvider.WidgetSink() { + @Override + public void accept(Widget widget) { + ScreenOverlayImpl.this.children().add(widget); + } + + @Override + public void acceptLateRendered(Widget widget) { + accept(new LateRenderableWidget(widget)); + } + + @Override + public void acceptTextField(TextField textField, BooleanSupplier isHighlighted) { + ScreenOverlayImpl.this.searchField = textField; + ScreenOverlayImpl.this.isHighlighted = isHighlighted; + } + }); } if (this.searchField != null) { - this.children().add(this.searchField.asWidget()); + this.children().add(new LateRenderableWidget(this.searchField.asWidget())); + this.searchField.setResponder(s -> entryListWidget.initSearch(s, false)); + entryListWidget.initSearch(searchField.getText(), true); } else { InternalLogger.getInstance().warn("Search Field is not found! This might cause problems!"); + entryListWidget.initSearch("", true); } } @@ -143,7 +153,7 @@ public final class ScreenOverlayImpl extends AbstractScreenOverlay { current = provider.getEntryList(); if (current != null) break; } - if (current != null) throw new IllegalStateException("No Entry List available!"); + if (current == null) throw new IllegalStateException("No Entry List available!"); if (current != entryListWidget) { entryListWidget = current; current.initBounds(Objects.requireNonNullElse(getBounds(), new Rectangle())); diff --git a/runtime-frontend/overlay/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/OverlayWidgetProvider.java b/runtime-frontend/overlay/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/OverlayWidgetProvider.java index 3c19aa6b7..0c159ebb3 100644 --- a/runtime-frontend/overlay/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/OverlayWidgetProvider.java +++ b/runtime-frontend/overlay/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/OverlayWidgetProvider.java @@ -31,14 +31,17 @@ import me.shedaniel.rei.impl.client.gui.menu.MenuAccess; import java.util.List; import java.util.function.BooleanSupplier; -import java.util.function.UnaryOperator; public interface OverlayWidgetProvider { List PROVIDERS = ClientInternals.resolveServices(OverlayWidgetProvider.class); - List provide(ScreenOverlay overlay, MenuAccess access, TextFieldSink textFieldSink, UnaryOperator lateRenderable); + void provide(ScreenOverlay overlay, MenuAccess access, WidgetSink sink); - interface TextFieldSink { - void accept(TextField textField, BooleanSupplier isHighlighted); + interface WidgetSink { + void accept(Widget widget); + + void acceptLateRendered(Widget widget); + + void acceptTextField(TextField textField, BooleanSupplier isHighlighted); } } -- cgit