diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-10-22 01:11:04 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-10-22 01:12:32 +0800 |
| commit | 0ef0f8b21df4b9a603aaa2ab4a35d395ef6437c1 (patch) | |
| tree | f6f38140f94fa98adcad5b880fdc2aa3bd4df844 /runtime-frontend | |
| parent | bb7920e447d599d23abfac3b67d8823cf24f8150 (diff) | |
| download | RoughlyEnoughItems-0ef0f8b21df4b9a603aaa2ab4a35d395ef6437c1.tar.gz RoughlyEnoughItems-0ef0f8b21df4b9a603aaa2ab4a35d395ef6437c1.tar.bz2 RoughlyEnoughItems-0ef0f8b21df4b9a603aaa2ab4a35d395ef6437c1.zip | |
Make it not crash
Diffstat (limited to 'runtime-frontend')
7 files changed, 46 insertions, 40 deletions
diff --git a/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/entries/EntryListWidgetImpl.java b/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/entries/EntryListWidgetImpl.java index c9c4b3d85..66b47ffdb 100644 --- a/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/entries/EntryListWidgetImpl.java +++ b/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/entries/EntryListWidgetImpl.java @@ -44,6 +44,7 @@ import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; import me.shedaniel.rei.api.client.search.SearchFilter; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes; +import me.shedaniel.rei.api.common.networking.NetworkModule; import me.shedaniel.rei.api.common.networking.NetworkingHelper; import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.impl.client.config.ConfigManagerInternal; @@ -165,7 +166,7 @@ public abstract class EntryListWidgetImpl extends WidgetWithBounds implements En debugger.render(matrices, bounds.x, bounds.y, delta); - if (containsChecked(mouseX, mouseY, false) && ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen) && !minecraft.player.containerMenu.getCarried().isEmpty() && NetworkingHelper.getInstance().client().canUseDeletePackets()) { + if (containsChecked(mouseX, mouseY, false) && ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen) && !minecraft.player.containerMenu.getCarried().isEmpty() && (NetworkingHelper.getInstance().has(NetworkModule.DELETE_ITEM) || Minecraft.getInstance().gameMode.hasInfiniteItems())) { EntryStack<?> stack = EntryStacks.of(minecraft.player.containerMenu.getCarried().copy()); if (stack.getType() != VanillaEntryTypes.ITEM) { EntryStack<ItemStack> cheatsAs = stack.cheatsAs(); @@ -245,7 +246,7 @@ public abstract class EntryListWidgetImpl extends WidgetWithBounds implements En public boolean mouseReleased(double mouseX, double mouseY, int button) { if (containsChecked(mouseX, mouseY, false)) { LocalPlayer player = minecraft.player; - if (ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen) && player != null && player.containerMenu != null && !player.containerMenu.getCarried().isEmpty() && NetworkingHelper.getInstance().client().canUseDeletePackets()) { + if (ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen) && player != null && player.containerMenu != null && !player.containerMenu.getCarried().isEmpty() && (NetworkingHelper.getInstance().has(NetworkModule.DELETE_ITEM) || Minecraft.getInstance().gameMode.hasInfiniteItems())) { EntryStack<?> stack = EntryStacks.of(minecraft.player.containerMenu.getCarried().copy()); if (stack.getType() != VanillaEntryTypes.ITEM) { EntryStack<ItemStack> cheatsAs = stack.cheatsAs(); diff --git a/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/entries/paginated/PaginatedEntryListWidget.java b/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/entries/paginated/PaginatedEntryListWidget.java index c00ed0d62..12516999d 100644 --- a/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/entries/paginated/PaginatedEntryListWidget.java +++ b/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/entries/paginated/PaginatedEntryListWidget.java @@ -240,7 +240,7 @@ public class PaginatedEntryListWidget extends CollapsingEntryListWidget { .containsMousePredicate((button, point) -> button.getBounds().contains(point) && overlay.isNotInExclusionZones(point.x, point.y)) .tooltipLine(new TranslatableComponent("text.rei.changelog.title")) .focusable(false);*/ - this.additionalWidgets.add(changelogButton); + // this.additionalWidgets.add(changelogButton); /*this.additionalWidgets.add(Widgets.createDrawableWidget((helper, matrices, mouseX, mouseY, delta) -> { helper.setBlitOffset(helper.getBlitOffset() + 1); RenderSystem.setShaderTexture(0, InternalTextures.CHEST_GUI_TEXTURE); diff --git a/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/ConfigButtonWidgetProvider.java b/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/ConfigButtonWidgetProvider.java index eef3e2686..032b76d46 100644 --- a/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/ConfigButtonWidgetProvider.java +++ b/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/ConfigButtonWidgetProvider.java @@ -39,6 +39,7 @@ import me.shedaniel.rei.api.client.gui.widgets.Button; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.Widgets; import me.shedaniel.rei.api.client.overlay.ScreenOverlay; +import me.shedaniel.rei.api.common.networking.NetworkModule; import me.shedaniel.rei.api.common.networking.NetworkingHelper; import me.shedaniel.rei.impl.client.config.ConfigManagerInternal; import me.shedaniel.rei.impl.client.gui.InternalTextures; @@ -52,17 +53,16 @@ import net.minecraft.network.chat.TranslatableComponent; import java.util.Collection; import java.util.List; import java.util.UUID; -import java.util.function.UnaryOperator; public class ConfigButtonWidgetProvider implements OverlayWidgetProvider { private static final UUID CONFIG_MENU_UUID = UUID.fromString("4357bc36-0a4e-47d2-8e07-ddc220df4a0f"); @Override - public List<Widget> provide(ScreenOverlay overlay, MenuAccess access, TextFieldSink textFieldSink, UnaryOperator<Widget> lateRenderable) { - return List.of(create(overlay, access, lateRenderable)); + public void provide(ScreenOverlay overlay, MenuAccess access, WidgetSink sink) { + sink.acceptLateRendered(create(overlay, access)); } - public static Widget create(ScreenOverlay overlay, MenuAccess access, UnaryOperator<Widget> lateRenderable) { + public static Widget create(ScreenOverlay overlay, MenuAccess access) { Rectangle bounds = getConfigButtonBounds(); Button configButton = Widgets.createButton(bounds, NarratorChatListener.NO_TITLE) .onClick(button -> { @@ -74,7 +74,7 @@ public class ConfigButtonWidgetProvider implements OverlayWidgetProvider { }) .onRender((matrices, button) -> { if (ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen) && NetworkingHelper.getInstance().client().hasOperatorPermission()) { - button.setTint(NetworkingHelper.getInstance().client().hasPermissionToUsePackets() ? 721354752 : 1476440063); + button.setTint(NetworkingHelper.getInstance().canUse(NetworkModule.CHEAT_GIVE) ? 721354752 : 1476440063); } else { button.removeTint(); } @@ -89,7 +89,7 @@ public class ConfigButtonWidgetProvider implements OverlayWidgetProvider { helper.blit(matrices, bounds.x + 3, bounds.y + 3, 0, 0, 14, 14); helper.setBlitOffset(helper.getBlitOffset() - 1); }); - return lateRenderable.apply(Widgets.concat(configButton, overlayWidget)); + return Widgets.concat(configButton, overlayWidget); } private static Collection<FavoriteMenuEntry> menuEntries() { @@ -108,7 +108,7 @@ public class ConfigButtonWidgetProvider implements OverlayWidgetProvider { if (Minecraft.getInstance().gameMode.hasInfiniteItems()) return new TranslatableComponent("text.rei.cheating_limited_creative_enabled"); else return new TranslatableComponent("text.rei.cheating_enabled_no_perms"); - } else if (NetworkingHelper.getInstance().client().hasPermissionToUsePackets()) + } else if (NetworkingHelper.getInstance().canUse(NetworkModule.CHEAT_GIVE)) return new TranslatableComponent("text.rei.cheating_enabled"); else return new TranslatableComponent("text.rei.cheating_limited_enabled"); diff --git a/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/CraftableFilterButtonWidgetProvider.java b/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/CraftableFilterButtonWidgetProvider.java index b470678b0..121c0e964 100644 --- a/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/CraftableFilterButtonWidgetProvider.java +++ b/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/CraftableFilterButtonWidgetProvider.java @@ -51,21 +51,18 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Blocks; import java.util.*; -import java.util.function.UnaryOperator; public class CraftableFilterButtonWidgetProvider implements OverlayWidgetProvider { public static final UUID FILTER_MENU_UUID = UUID.fromString("2839e998-1679-4f9e-a257-37411d16f1e6"); @Override - public List<Widget> provide(ScreenOverlay overlay, MenuAccess access, TextFieldSink textFieldSink, UnaryOperator<Widget> lateRenderable) { + public void provide(ScreenOverlay overlay, MenuAccess access, WidgetSink sink) { if (ConfigObject.getInstance().isCraftableFilterEnabled()) { - return List.of(create(overlay, access, lateRenderable)); - } else { - return List.of(); + sink.acceptLateRendered(create(overlay, access)); } } - private static Widget create(ScreenOverlay overlay, MenuAccess access, UnaryOperator<Widget> lateRenderable) { + private static Widget create(ScreenOverlay overlay, MenuAccess access) { Rectangle bounds = getCraftableFilterBounds(); ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); ItemStack icon = new ItemStack(Blocks.CRAFTING_TABLE); @@ -89,7 +86,7 @@ public class CraftableFilterButtonWidgetProvider implements OverlayWidgetProvide itemRenderer.renderGuiItem(icon, (int) vector.x(), (int) vector.y()); itemRenderer.blitOffset = 0.0F; }); - return lateRenderable.apply(Widgets.concat(filterButton, overlayWidget)); + return Widgets.concat(filterButton, overlayWidget); } private static Collection<FavoriteMenuEntry> menuEntries() { diff --git a/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/SearchFieldWidgetProvider.java b/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/SearchFieldWidgetProvider.java index 2e0f1b848..c1197074e 100644 --- a/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/SearchFieldWidgetProvider.java +++ b/runtime-frontend/overlay-entries/src/main/java/me/shedaniel/rei/impl/client/gui/overlay/widgets/SearchFieldWidgetProvider.java @@ -27,28 +27,23 @@ import com.mojang.blaze3d.platform.Window; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.config.ConfigObject; -import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.overlay.ScreenOverlay; import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; import me.shedaniel.rei.impl.client.gui.menu.MenuAccess; import me.shedaniel.rei.impl.client.gui.overlay.widgets.search.OverlaySearchField; import net.minecraft.client.Minecraft; -import java.util.List; -import java.util.function.UnaryOperator; - public class SearchFieldWidgetProvider implements OverlayWidgetProvider { private OverlaySearchField searchField; @Override - public List<Widget> provide(ScreenOverlay overlay, MenuAccess access, TextFieldSink textFieldSink, UnaryOperator<Widget> lateRenderable) { + public void provide(ScreenOverlay overlay, MenuAccess access, WidgetSink sink) { if (searchField == null) { searchField = new OverlaySearchField(access); } searchField.getBounds().setBounds(getSearchFieldArea(overlay)); - textFieldSink.accept(searchField, searchField::isHighlighting); - return List.of(lateRenderable.apply(searchField)); + sink.acceptTextField(searchField, searchField::isHighlighting); } private Rectangle getSearchFieldArea(ScreenOverlay overlay) { 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<OverlayWidgetProvider> PROVIDERS = ClientInternals.resolveServices(OverlayWidgetProvider.class); - List<Widget> provide(ScreenOverlay overlay, MenuAccess access, TextFieldSink textFieldSink, UnaryOperator<Widget> 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); } } |
