From 82e9655e3786f58c32e2b6584732bb40f9508c1c Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 31 May 2021 00:14:21 +0800 Subject: Fix rendering issues with overlays, REIHelper -> REIRuntime --- .../me/shedaniel/rei/RoughlyEnoughItemsCore.java | 44 ++-- .../rei/RoughlyEnoughItemsInitializer.java | 2 +- .../rei/impl/client/ClientHelperImpl.java | 9 +- .../shedaniel/rei/impl/client/REIHelperImpl.java | 230 --------------------- .../shedaniel/rei/impl/client/REIRuntimeImpl.java | 230 +++++++++++++++++++++ .../rei/impl/client/config/ConfigManagerImpl.java | 12 +- .../client/config/entries/FilteringScreen.java | 14 +- .../rei/impl/client/gui/ScreenOverlayImpl.java | 83 ++++---- .../rei/impl/client/gui/modules/Menu.java | 6 +- .../entries/EntryStackSubsetsMenuEntry.java | 12 +- .../gui/modules/entries/GameModeMenuEntry.java | 6 +- .../gui/modules/entries/SubSubsetsMenuEntry.java | 12 +- .../gui/modules/entries/WeatherMenuEntry.java | 6 +- .../gui/screen/CompositeDisplayViewingScreen.java | 22 +- .../gui/screen/DefaultDisplayViewingScreen.java | 22 +- .../gui/screen/UncertainDisplayViewingScreen.java | 4 +- .../gui/widget/BatchedEntryRendererManager.java | 33 +-- .../gui/widget/DefaultDisplayChoosePageWidget.java | 6 +- .../impl/client/gui/widget/EntryListWidget.java | 10 +- .../rei/impl/client/gui/widget/EntryWidget.java | 13 +- .../client/gui/widget/FavoritesListWidget.java | 12 +- .../impl/client/gui/widget/InternalWidgets.java | 6 +- .../rei/impl/client/gui/widget/TabWidget.java | 4 +- .../client/gui/widget/basewidgets/ArrowWidget.java | 4 +- .../gui/widget/basewidgets/BurningFireWidget.java | 5 +- .../gui/widget/basewidgets/ButtonWidget.java | 4 +- .../client/gui/widget/basewidgets/LabelWidget.java | 6 +- .../client/gui/widget/basewidgets/PanelWidget.java | 4 +- .../gui/widget/search/OverlaySearchField.java | 4 +- .../shedaniel/rei/impl/client/view/ViewsImpl.java | 10 +- .../impl/common/entry/type/EntryTypeDeferred.java | 14 ++ .../autocrafting/DefaultCategoryHandler.java | 6 +- .../plugin/client/DefaultClientRuntimePlugin.java | 10 +- .../plugin/client/entry/FluidEntryDefinition.java | 41 +++- .../plugin/client/entry/ItemEntryDefinition.java | 16 +- 35 files changed, 492 insertions(+), 430 deletions(-) delete mode 100644 runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java create mode 100644 runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java (limited to 'runtime/src/main/java/me') diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index 49547a544..a81f177e5 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -33,7 +33,7 @@ import dev.architectury.platform.Platform; import dev.architectury.registry.ReloadListenerRegistry; import dev.architectury.utils.Env; import me.shedaniel.math.Point; -import me.shedaniel.rei.api.client.REIHelper; +import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.entry.renderer.EntryRenderer; import me.shedaniel.rei.api.client.favorites.FavoriteEntry; @@ -67,7 +67,7 @@ import me.shedaniel.rei.api.common.transfer.info.MenuInfoRegistry; import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.impl.ClientInternals; import me.shedaniel.rei.impl.Internals; -import me.shedaniel.rei.impl.client.REIHelperImpl; +import me.shedaniel.rei.impl.client.REIRuntimeImpl; import me.shedaniel.rei.impl.client.config.ConfigManagerImpl; import me.shedaniel.rei.impl.client.entry.type.types.RenderingEntryDefinition; import me.shedaniel.rei.impl.client.favorites.FavoriteEntryTypeRegistryImpl; @@ -182,7 +182,8 @@ public class RoughlyEnoughItemsCore { public EntryType emptyType(ResourceLocation id) { if (empty == null) { - empty = new EntryType() { + int hashCode = id.hashCode(); + empty = new EntryType<>() { @Override public ResourceLocation getId() { return id; @@ -192,6 +193,11 @@ public class RoughlyEnoughItemsCore { public EntryDefinition getDefinition() { return EmptyEntryDefinition.EMPTY; } + + @Override + public int hashCode() { + return hashCode; + } }; } return empty; @@ -200,7 +206,8 @@ public class RoughlyEnoughItemsCore { @Environment(EnvType.CLIENT) public EntryType renderingType(ResourceLocation id) { if (render == null) { - render = new EntryType() { + int hashCode = id.hashCode(); + render = new EntryType<>() { @Override public ResourceLocation getId() { return id; @@ -210,6 +217,11 @@ public class RoughlyEnoughItemsCore { public EntryDefinition getDefinition() { return RenderingEntryDefinition.RENDERING; } + + @Override + public int hashCode() { + return hashCode; + } }; } return render; @@ -392,7 +404,7 @@ public class RoughlyEnoughItemsCore { new FavoriteEntryTypeRegistryImpl(), new SubsetsRegistryImpl(), new TransferHandlerRegistryImpl(), - new REIHelperImpl()), "clientPluginManager"); + new REIRuntimeImpl()), "clientPluginManager"); } @ApiStatus.Internal @@ -490,7 +502,7 @@ public class RoughlyEnoughItemsCore { @Environment(EnvType.CLIENT) public static boolean shouldReturn(Screen screen) { - if (!REIHelper.getInstance().getOverlay().isPresent()) return true; + if (!REIRuntime.getInstance().getOverlay().isPresent()) return true; if (screen == null) return true; if (screen != Minecraft.getInstance().screen) return true; return _shouldReturn(screen); @@ -505,7 +517,7 @@ public class RoughlyEnoughItemsCore { continue; InteractionResult result = decider.shouldScreenBeOverlaid(screenClass); if (result != InteractionResult.PASS) { - return result == InteractionResult.FAIL || REIHelper.getInstance().getPreviousScreen() == null; + return result == InteractionResult.FAIL || REIRuntime.getInstance().getPreviousScreen() == null; } } } catch (ConcurrentModificationException ignored) { @@ -520,7 +532,7 @@ public class RoughlyEnoughItemsCore { MutableLong lastReload = new MutableLong(-1); ClientRecipeUpdateEvent.EVENT.register(recipeManager -> reloadPlugins(lastReload)); ClientGuiEvent.INIT_POST.register((screen, access) -> { - REIHelperImpl.getInstance().setPreviousScreen(screen); + REIRuntimeImpl.getInstance().setPreviousScreen(screen); if (ConfigObject.getInstance().doesDisableRecipeBook() && screen instanceof AbstractContainerScreen) { access.getRenderables().removeIf(widget -> widget instanceof ImageButton && ((ImageButton) widget).resourceLocation.equals(recipeButtonTex)); access.getNarratables().removeIf(widget -> widget instanceof ImageButton && ((ImageButton) widget).resourceLocation.equals(recipeButtonTex)); @@ -532,7 +544,7 @@ public class RoughlyEnoughItemsCore { if (shouldReturn(screen)) return EventResult.pass(); resetFocused(screen); - if (REIHelper.getInstance().getOverlay().get().mouseClicked(mouseX, mouseY, button)) { + if (REIRuntime.getInstance().getOverlay().get().mouseClicked(mouseX, mouseY, button)) { if (button == 0) { screen.setDragging(true); } @@ -546,7 +558,7 @@ public class RoughlyEnoughItemsCore { if (shouldReturn(screen)) return EventResult.pass(); resetFocused(screen); - if (REIHelper.getInstance().isOverlayVisible() && REIHelper.getInstance().getOverlay().get().mouseReleased(mouseX, mouseY, button) + if (REIRuntime.getInstance().isOverlayVisible() && REIRuntime.getInstance().getOverlay().get().mouseReleased(mouseX, mouseY, button) && resetFocused(screen)) { return EventResult.interruptTrue(); } @@ -556,7 +568,7 @@ public class RoughlyEnoughItemsCore { if (shouldReturn(screen)) return EventResult.pass(); resetFocused(screen); - if (REIHelper.getInstance().isOverlayVisible() && REIHelper.getInstance().getOverlay().get().mouseScrolled(mouseX, mouseY, amount) + if (REIRuntime.getInstance().isOverlayVisible() && REIRuntime.getInstance().getOverlay().get().mouseScrolled(mouseX, mouseY, amount) && resetFocused(screen)) return EventResult.interruptTrue(); return EventResult.pass(); @@ -565,7 +577,7 @@ public class RoughlyEnoughItemsCore { if (shouldReturn(screen)) return EventResult.pass(); resetFocused(screen); - if (REIHelper.getInstance().getOverlay().get().charTyped(character, keyCode) + if (REIRuntime.getInstance().getOverlay().get().charTyped(character, keyCode) && resetFocused(screen)) return EventResult.interruptTrue(); return EventResult.pass(); @@ -574,15 +586,15 @@ public class RoughlyEnoughItemsCore { if (shouldReturn(screen)) return; resetFocused(screen); - REIHelper.getInstance().getOverlay().get().render(matrices, mouseX, mouseY, delta); - ((ScreenOverlayImpl) REIHelper.getInstance().getOverlay().get()).lateRender(matrices, mouseX, mouseY, delta); + REIRuntime.getInstance().getOverlay().get().render(matrices, mouseX, mouseY, delta); + ((ScreenOverlayImpl) REIRuntime.getInstance().getOverlay().get()).lateRender(matrices, mouseX, mouseY, delta); resetFocused(screen); }); ClientScreenInputEvent.MOUSE_DRAGGED_PRE.register((minecraftClient, screen, mouseX1, mouseY1, button, mouseX2, mouseY2) -> { if (shouldReturn(screen)) return EventResult.pass(); resetFocused(screen); - if (REIHelper.getInstance().getOverlay().get().mouseDragged(mouseX1, mouseY1, button, mouseX2, mouseY2) + if (REIRuntime.getInstance().getOverlay().get().mouseDragged(mouseX1, mouseY1, button, mouseX2, mouseY2) && resetFocused(screen)) return EventResult.interruptTrue(); return EventResult.pass(); @@ -599,7 +611,7 @@ public class RoughlyEnoughItemsCore { if (screen.getFocused() != null && screen.getFocused() instanceof EditBox || (screen.getFocused() instanceof RecipeBookComponent && ((RecipeBookComponent) screen.getFocused()).searchBox != null && ((RecipeBookComponent) screen.getFocused()).searchBox.isFocused())) return EventResult.pass(); resetFocused(screen); - if (REIHelper.getInstance().getOverlay().get().keyPressed(i, i1, i2) + if (REIRuntime.getInstance().getOverlay().get().keyPressed(i, i1, i2) && resetFocused(screen)) return EventResult.interruptTrue(); return EventResult.pass(); diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java index 0ee468267..03581e828 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java @@ -45,7 +45,7 @@ public class RoughlyEnoughItemsInitializer { initializeEntryPoint(true, "me.shedaniel.rei.RoughlyEnoughItemsCore"); initializeEntryPoint(true, "me.shedaniel.rei.REIModMenuEntryPoint"); initializeEntryPoint(true, "me.shedaniel.rei.impl.client.ClientHelperImpl"); - initializeEntryPoint(true, "me.shedaniel.rei.impl.client.REIHelperImpl"); + initializeEntryPoint(true, "me.shedaniel.rei.impl.client.REIRuntimeImpl"); } initializeEntryPoint(true, "me.shedaniel.rei.impl.client.ErrorDisplayer"); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java index 45285ccfc..16525f545 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java @@ -23,6 +23,7 @@ package me.shedaniel.rei.impl.client; +import com.google.common.base.Suppliers; import dev.architectury.networking.NetworkManager; import dev.architectury.platform.Platform; import io.netty.buffer.Unpooled; @@ -30,7 +31,7 @@ import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import it.unimi.dsi.fastutil.longs.LongSet; import me.shedaniel.rei.RoughlyEnoughItemsNetwork; import me.shedaniel.rei.api.client.ClientHelper; -import me.shedaniel.rei.api.client.REIHelper; +import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.config.DisplayScreenType; @@ -244,7 +245,7 @@ public class ClientHelperImpl implements ClientHelper { if (ConfigObject.getInstance().getRecipeScreenType() == DisplayScreenType.COMPOSITE) { screen = new CompositeDisplayViewingScreen(map, builder.getPreferredOpenedCategory()); } else if (ConfigObject.getInstance().getRecipeScreenType() == DisplayScreenType.UNSET) { - screen = new UncertainDisplayViewingScreen(REIHelper.getInstance().getPreviousScreen(), DisplayScreenType.UNSET, true, original -> { + screen = new UncertainDisplayViewingScreen(REIRuntime.getInstance().getPreviousScreen(), DisplayScreenType.UNSET, true, original -> { ConfigObject.getInstance().setRecipeScreenType(original ? DisplayScreenType.ORIGINAL : DisplayScreenType.COMPOSITE); ConfigManager.getInstance().saveConfig(); openView(builder); @@ -261,7 +262,7 @@ public class ClientHelperImpl implements ClientHelper { } } if (Minecraft.getInstance().screen instanceof DisplayScreen) { - REIHelperImpl.getInstance().storeDisplayScreen((DisplayScreen) Minecraft.getInstance().screen); + REIRuntimeImpl.getInstance().storeDisplayScreen((DisplayScreen) Minecraft.getInstance().screen); } Minecraft.getInstance().setScreen(screen); return true; @@ -295,7 +296,7 @@ public class ClientHelperImpl implements ClientHelper { private final List> usagesFor = new ArrayList<>(); @Nullable private CategoryIdentifier preferredOpenedCategory = null; - private final LazyLoadedValue, List>> map = new LazyLoadedValue<>(() -> ((ViewsImpl) Views.getInstance()).buildMapFor(this)); + private final Supplier, List>> map = Suppliers.memoize(() -> ViewsImpl.buildMapFor(this)); @Override public ViewSearchBuilder addCategory(CategoryIdentifier category) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java deleted file mode 100644 index d5e088821..000000000 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - * This file is licensed under the MIT License, part of Roughly Enough Items. - * Copyright (c) 2018, 2019, 2020, 2021 shedaniel - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package me.shedaniel.rei.impl.client; - -import com.google.common.collect.Iterables; -import com.google.common.collect.Sets; -import com.mojang.blaze3d.platform.Window; -import dev.architectury.event.EventResult; -import dev.architectury.event.events.client.ClientGuiEvent; -import dev.architectury.event.events.client.ClientTickEvent; -import me.shedaniel.math.Rectangle; -import me.shedaniel.rei.api.client.REIHelper; -import me.shedaniel.rei.api.client.config.ConfigManager; -import me.shedaniel.rei.api.client.config.ConfigObject; -import me.shedaniel.rei.api.client.gui.config.SearchFieldLocation; -import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; -import me.shedaniel.rei.api.client.gui.widgets.TextField; -import me.shedaniel.rei.api.client.gui.widgets.Tooltip; -import me.shedaniel.rei.api.client.overlay.ScreenOverlay; -import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; -import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl; -import me.shedaniel.rei.impl.client.gui.widget.search.OverlaySearchField; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; - -import java.util.LinkedHashSet; -import java.util.Optional; - -@ApiStatus.Internal -@Environment(EnvType.CLIENT) -public class REIHelperImpl implements REIHelper { - private static final ResourceLocation DISPLAY_TEXTURE = new ResourceLocation("roughlyenoughitems", "textures/gui/display.png"); - private static final ResourceLocation DISPLAY_TEXTURE_DARK = new ResourceLocation("roughlyenoughitems", "textures/gui/display_dark.png"); - @ApiStatus.Internal - public static boolean isWithinRecipeViewingScreen = false; - private ScreenOverlayImpl overlay; - private OverlaySearchField searchField; - private AbstractContainerScreen previousContainerScreen = null; - private Screen previousScreen = null; - private LinkedHashSet lastDisplayScreen = Sets.newLinkedHashSetWithExpectedSize(10); - - /** - * @return the instance of screen helper - * @see REIHelper#getInstance() - */ - @ApiStatus.Internal - public static REIHelperImpl getInstance() { - return (REIHelperImpl) REIHelper.getInstance(); - } - - @Override - public void queueTooltip(@Nullable Tooltip tooltip) { - if (overlay != null && tooltip != null) { - overlay.addTooltip(tooltip); - } - } - - @Override - @Nullable - public TextField getSearchTextField() { - if (searchField == null) { - searchField = new OverlaySearchField(0, 0, 0, 0); - } - - return searchField; - } - - @Nullable - public static OverlaySearchField getSearchField() { - return (OverlaySearchField) getInstance().getSearchTextField(); - } - - public void storeDisplayScreen(DisplayScreen screen) { - while (lastDisplayScreen.size() >= 10) - lastDisplayScreen.remove(Iterables.get(lastDisplayScreen, 0)); - lastDisplayScreen.add(screen); - } - - public boolean hasLastDisplayScreen() { - return !lastDisplayScreen.isEmpty(); - } - - public Screen getLastDisplayScreen() { - DisplayScreen screen = Iterables.getLast(lastDisplayScreen); - lastDisplayScreen.remove(screen); - screen.recalculateCategoryPage(); - return (Screen) screen; - } - - @Override - public boolean isOverlayVisible() { - return ConfigObject.getInstance().isOverlayVisible(); - } - - @Override - public void toggleOverlayVisible() { - ConfigObject.getInstance().setOverlayVisible(!ConfigObject.getInstance().isOverlayVisible()); - ConfigManager.getInstance().saveConfig(); - } - - @Override - public Optional getOverlay(boolean reset) { - if (overlay == null || reset) { - overlay = new ScreenOverlayImpl(); - overlay.init(); - getSearchField().setFocused(false); - } - - return Optional.ofNullable(overlay); - } - - @Override - @Nullable - public AbstractContainerScreen getPreviousContainerScreen() { - return previousContainerScreen; - } - - @Override - @Nullable - public Screen getPreviousScreen() { - return previousScreen; - } - - public void setPreviousScreen(Screen previousScreen) { - if (previousScreen == null || previousScreen.getClass().getName().contains(".rei.")) { - return; - } - - this.previousScreen = previousScreen; - - if (previousScreen instanceof AbstractContainerScreen) { - this.previousContainerScreen = (AbstractContainerScreen) previousScreen; - } - } - - @Override - public boolean isDarkThemeEnabled() { - return ConfigObject.getInstance().isUsingDarkTheme(); - } - - @Override - public ResourceLocation getDefaultDisplayTexture() { - return isDarkThemeEnabled() ? DISPLAY_TEXTURE_DARK : DISPLAY_TEXTURE; - } - - @Override - public SearchFieldLocation getContextualSearchFieldLocation() { - SearchFieldLocation location = ConfigObject.getInstance().getSearchFieldLocation(); - Window window = Minecraft.getInstance().getWindow(); - Rectangle screenBounds = ScreenRegistry.getInstance().getScreenBounds(Minecraft.getInstance().screen); - if (location == SearchFieldLocation.CENTER && window.getGuiScaledHeight() - 20 <= screenBounds.getMaxY()) { - return SearchFieldLocation.BOTTOM_SIDE; - } - - return location; - } - - @Override - public Rectangle calculateEntryListArea() { - Rectangle bounds = ScreenRegistry.getInstance().getOverlayBounds(ConfigObject.getInstance().getDisplayPanelLocation(), Minecraft.getInstance().screen); - SearchFieldLocation searchFieldLocation = getContextualSearchFieldLocation(); - - int yOffset = 2; - if (searchFieldLocation == SearchFieldLocation.TOP_SIDE) yOffset += 24; - if (!ConfigObject.getInstance().isEntryListWidgetScrolled()) yOffset += 22; - int heightOffset = 0; - if (searchFieldLocation == SearchFieldLocation.BOTTOM_SIDE) heightOffset += 24; - return new Rectangle(bounds.x, bounds.y + yOffset, bounds.width, bounds.height - 1 - yOffset - heightOffset); - } - - @Override - public Rectangle calculateFavoritesListArea() { - Rectangle bounds = ScreenRegistry.getInstance().getOverlayBounds(ConfigObject.getInstance().getDisplayPanelLocation().mirror(), Minecraft.getInstance().screen); - - int yOffset = 8; - if (!ConfigObject.getInstance().isLowerConfigButton()) yOffset += 25; - return new Rectangle(bounds.x, bounds.y + yOffset, bounds.width, bounds.height - 3 - yOffset); - } - - @Override - public void startReload() { - getOverlay().ifPresent(ScreenOverlay::queueReloadOverlay); - lastDisplayScreen.clear(); - } - - @Override - public void endReload() { - getOverlay().ifPresent(ScreenOverlay::queueReloadOverlay); - } - - public void onInitializeClient() { - ClientGuiEvent.INIT_PRE.register((screen, access) -> { - if (previousContainerScreen != screen && screen instanceof AbstractContainerScreen) - previousContainerScreen = (AbstractContainerScreen) screen; - return EventResult.pass(); - }); - ClientTickEvent.CLIENT_POST.register(minecraft -> { - if (isOverlayVisible()) { - ScreenOverlayImpl.getInstance().tick(); - } - }); - } -} diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java new file mode 100644 index 000000000..be27f26ae --- /dev/null +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIRuntimeImpl.java @@ -0,0 +1,230 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.impl.client; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Sets; +import com.mojang.blaze3d.platform.Window; +import dev.architectury.event.EventResult; +import dev.architectury.event.events.client.ClientGuiEvent; +import dev.architectury.event.events.client.ClientTickEvent; +import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.api.client.REIRuntime; +import me.shedaniel.rei.api.client.config.ConfigManager; +import me.shedaniel.rei.api.client.config.ConfigObject; +import me.shedaniel.rei.api.client.gui.config.SearchFieldLocation; +import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; +import me.shedaniel.rei.api.client.gui.widgets.TextField; +import me.shedaniel.rei.api.client.gui.widgets.Tooltip; +import me.shedaniel.rei.api.client.overlay.ScreenOverlay; +import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; +import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl; +import me.shedaniel.rei.impl.client.gui.widget.search.OverlaySearchField; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; + +import java.util.LinkedHashSet; +import java.util.Optional; + +@ApiStatus.Internal +@Environment(EnvType.CLIENT) +public class REIRuntimeImpl implements REIRuntime { + private static final ResourceLocation DISPLAY_TEXTURE = new ResourceLocation("roughlyenoughitems", "textures/gui/display.png"); + private static final ResourceLocation DISPLAY_TEXTURE_DARK = new ResourceLocation("roughlyenoughitems", "textures/gui/display_dark.png"); + @ApiStatus.Internal + public static boolean isWithinRecipeViewingScreen = false; + private ScreenOverlayImpl overlay; + private OverlaySearchField searchField; + private AbstractContainerScreen previousContainerScreen = null; + private Screen previousScreen = null; + private LinkedHashSet lastDisplayScreen = Sets.newLinkedHashSetWithExpectedSize(10); + + /** + * @return the instance of screen helper + * @see REIRuntime#getInstance() + */ + @ApiStatus.Internal + public static REIRuntimeImpl getInstance() { + return (REIRuntimeImpl) REIRuntime.getInstance(); + } + + @Override + public void queueTooltip(@Nullable Tooltip tooltip) { + if (overlay != null && tooltip != null) { + overlay.addTooltip(tooltip); + } + } + + @Override + @Nullable + public TextField getSearchTextField() { + if (searchField == null) { + searchField = new OverlaySearchField(0, 0, 0, 0); + } + + return searchField; + } + + @Nullable + public static OverlaySearchField getSearchField() { + return (OverlaySearchField) getInstance().getSearchTextField(); + } + + public void storeDisplayScreen(DisplayScreen screen) { + while (lastDisplayScreen.size() >= 10) + lastDisplayScreen.remove(Iterables.get(lastDisplayScreen, 0)); + lastDisplayScreen.add(screen); + } + + public boolean hasLastDisplayScreen() { + return !lastDisplayScreen.isEmpty(); + } + + public Screen getLastDisplayScreen() { + DisplayScreen screen = Iterables.getLast(lastDisplayScreen); + lastDisplayScreen.remove(screen); + screen.recalculateCategoryPage(); + return (Screen) screen; + } + + @Override + public boolean isOverlayVisible() { + return ConfigObject.getInstance().isOverlayVisible(); + } + + @Override + public void toggleOverlayVisible() { + ConfigObject.getInstance().setOverlayVisible(!ConfigObject.getInstance().isOverlayVisible()); + ConfigManager.getInstance().saveConfig(); + } + + @Override + public Optional getOverlay(boolean reset) { + if (overlay == null || reset) { + overlay = new ScreenOverlayImpl(); + overlay.init(); + getSearchField().setFocused(false); + } + + return Optional.ofNullable(overlay); + } + + @Override + @Nullable + public AbstractContainerScreen getPreviousContainerScreen() { + return previousContainerScreen; + } + + @Override + @Nullable + public Screen getPreviousScreen() { + return previousScreen; + } + + public void setPreviousScreen(Screen previousScreen) { + if (previousScreen == null || previousScreen.getClass().getName().contains(".rei.")) { + return; + } + + this.previousScreen = previousScreen; + + if (previousScreen instanceof AbstractContainerScreen) { + this.previousContainerScreen = (AbstractContainerScreen) previousScreen; + } + } + + @Override + public boolean isDarkThemeEnabled() { + return ConfigObject.getInstance().isUsingDarkTheme(); + } + + @Override + public ResourceLocation getDefaultDisplayTexture() { + return isDarkThemeEnabled() ? DISPLAY_TEXTURE_DARK : DISPLAY_TEXTURE; + } + + @Override + public SearchFieldLocation getContextualSearchFieldLocation() { + SearchFieldLocation location = ConfigObject.getInstance().getSearchFieldLocation(); + Window window = Minecraft.getInstance().getWindow(); + Rectangle screenBounds = ScreenRegistry.getInstance().getScreenBounds(Minecraft.getInstance().screen); + if (location == SearchFieldLocation.CENTER && window.getGuiScaledHeight() - 20 <= screenBounds.getMaxY()) { + return SearchFieldLocation.BOTTOM_SIDE; + } + + return location; + } + + @Override + public Rectangle calculateEntryListArea() { + Rectangle bounds = ScreenRegistry.getInstance().getOverlayBounds(ConfigObject.getInstance().getDisplayPanelLocation(), Minecraft.getInstance().screen); + SearchFieldLocation searchFieldLocation = getContextualSearchFieldLocation(); + + int yOffset = 2; + if (searchFieldLocation == SearchFieldLocation.TOP_SIDE) yOffset += 24; + if (!ConfigObject.getInstance().isEntryListWidgetScrolled()) yOffset += 22; + int heightOffset = 0; + if (searchFieldLocation == SearchFieldLocation.BOTTOM_SIDE) heightOffset += 24; + return new Rectangle(bounds.x, bounds.y + yOffset, bounds.width, bounds.height - 1 - yOffset - heightOffset); + } + + @Override + public Rectangle calculateFavoritesListArea() { + Rectangle bounds = ScreenRegistry.getInstance().getOverlayBounds(ConfigObject.getInstance().getDisplayPanelLocation().mirror(), Minecraft.getInstance().screen); + + int yOffset = 8; + if (!ConfigObject.getInstance().isLowerConfigButton()) yOffset += 25; + return new Rectangle(bounds.x, bounds.y + yOffset, bounds.width, bounds.height - 3 - yOffset); + } + + @Override + public void startReload() { + getOverlay().ifPresent(ScreenOverlay::queueReloadOverlay); + lastDisplayScreen.clear(); + } + + @Override + public void endReload() { + getOverlay().ifPresent(ScreenOverlay::queueReloadOverlay); + } + + public void onInitializeClient() { + ClientGuiEvent.INIT_PRE.register((screen, access) -> { + if (previousContainerScreen != screen && screen instanceof AbstractContainerScreen) + previousContainerScreen = (AbstractContainerScreen) screen; + return EventResult.pass(); + }); + ClientTickEvent.CLIENT_POST.register(minecraft -> { + if (isOverlayVisible()) { + ScreenOverlayImpl.getInstance().tick(); + } + }); + } +} diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java index 8cca5cce0..2068523e8 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java @@ -45,7 +45,7 @@ import me.shedaniel.clothconfig2.api.Modifier; import me.shedaniel.clothconfig2.api.ModifierKeyCode; import me.shedaniel.clothconfig2.gui.entries.KeyCodeEntry; import me.shedaniel.rei.RoughlyEnoughItemsCore; -import me.shedaniel.rei.api.client.REIHelper; +import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.favorites.FavoriteEntry; import me.shedaniel.rei.api.client.gui.config.DisplayScreenType; @@ -54,7 +54,7 @@ import me.shedaniel.rei.api.client.overlay.ScreenOverlay; import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.CollectionUtils; -import me.shedaniel.rei.impl.client.REIHelperImpl; +import me.shedaniel.rei.impl.client.REIRuntimeImpl; import me.shedaniel.rei.impl.client.config.entries.*; import me.shedaniel.rei.impl.client.entry.filtering.FilteringRule; import me.shedaniel.rei.impl.client.entry.filtering.rules.ManualFilteringRule; @@ -114,7 +114,7 @@ public class ConfigManagerImpl implements ConfigManager { Collections.singletonList(new SearchFilterSyntaxHighlightingEntry(new TranslatableComponent(i13n), getUnsafely(field, config, SyntaxHighlightingMode.COLORFUL), getUnsafely(field, defaults), type -> setUnsafely(field, config, type))) , (field) -> field.getType() == SyntaxHighlightingMode.class, ConfigObjectImpl.UseSpecialSearchFilterSyntaxHighlightingScreen.class); guiRegistry.registerAnnotationProvider((i13n, field, config, defaults, guiProvider) -> - REIHelper.getInstance().getPreviousContainerScreen() == null || Minecraft.getInstance().getConnection() == null || Minecraft.getInstance().getConnection().getRecipeManager() == null ? + REIRuntime.getInstance().getPreviousContainerScreen() == null || Minecraft.getInstance().getConnection() == null || Minecraft.getInstance().getConnection().getRecipeManager() == null ? Collections.singletonList(new NoFilteringEntry(220, getUnsafely(field, config, new ArrayList<>()), getUnsafely(field, defaults), list -> setUnsafely(field, config, list))) : Collections.singletonList(new FilteringEntry(220, getUnsafely(field, config, new ArrayList<>()), ((ConfigObjectImpl.Advanced.Filtering) config).filteringRules, getUnsafely(field, defaults), list -> setUnsafely(field, config, list), list -> ((ConfigObjectImpl.Advanced.Filtering) config).filteringRules = Lists.newArrayList(list))) @@ -314,9 +314,9 @@ public class ConfigManagerImpl implements ConfigManager { }).setSavingRunnable(() -> { saveConfig(); EntryRegistry.getInstance().refilter(); - REIHelper.getInstance().getOverlay().ifPresent(ScreenOverlay::queueReloadOverlay); - if (REIHelperImpl.getSearchField() != null) { - ScreenOverlayImpl.getEntryListWidget().updateSearch(REIHelperImpl.getSearchField().getText(), true); + REIRuntime.getInstance().getOverlay().ifPresent(ScreenOverlay::queueReloadOverlay); + if (REIRuntimeImpl.getSearchField() != null) { + ScreenOverlayImpl.getEntryListWidget().updateSearch(REIRuntimeImpl.getSearchField().getText(), true); } }).build(); }); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java index 0aea413fd..9026127f3 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java @@ -35,7 +35,7 @@ import me.shedaniel.clothconfig2.gui.widget.DynamicNewSmoothScrollingEntryListWi import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.math.impl.PointHelper; -import me.shedaniel.rei.api.client.REIHelper; +import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; @@ -234,7 +234,7 @@ public class FilteringScreen extends Screen { } manager.render(matrices, mouseX, mouseY, delta); updatePosition(delta); - scrolling.renderScrollBar(0, 1.0F, REIHelper.getInstance().isDarkThemeEnabled() ? 0.8F : 1F); + scrolling.renderScrollBar(0, 1.0F, REIRuntime.getInstance().isDarkThemeEnabled() ? 0.8F : 1F); matrices.pushPose(); matrices.translate(0, 0, 300); this.searchField.laterRender(matrices, mouseX, mouseY, delta); @@ -265,7 +265,7 @@ public class FilteringScreen extends Screen { this.backButton.render(matrices, mouseX, mouseY, delta); if (tooltip != null) { - ((ScreenOverlayImpl) REIHelper.getInstance().getOverlay().get()).renderTooltip(matrices, tooltip); + ((ScreenOverlayImpl) REIRuntime.getInstance().getOverlay().get()).renderTooltip(matrices, tooltip); } this.font.drawShadow(matrices, this.title.getVisualOrderText(), this.width / 2.0F - this.font.width(this.title) / 2.0F, 12.0F, -1); @@ -463,13 +463,7 @@ public class FilteringScreen extends Screen { } @Override - protected void drawHighlighted(PoseStack matrices, int mouseX, int mouseY, float delta) { - - } - - @Override - public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { - super.render(matrices, mouseX, mouseY, delta); + protected void drawExtra(PoseStack matrices, int mouseX, int mouseY, float delta) { if (isSelected()) { Rectangle bounds = getBounds(); RenderSystem.disableDepthTest(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java index bf238c6b8..3b35b4fed 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java @@ -24,7 +24,6 @@ package me.shedaniel.rei.impl.client.gui; import com.google.common.collect.Lists; -import com.google.common.collect.Sets; import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; @@ -33,7 +32,7 @@ import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.math.impl.PointHelper; import me.shedaniel.rei.api.client.ClientHelper; -import me.shedaniel.rei.api.client.REIHelper; +import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.overlay.OverlayListWidget; import me.shedaniel.rei.api.client.overlay.ScreenOverlay; import me.shedaniel.rei.api.client.config.ConfigManager; @@ -59,7 +58,7 @@ import me.shedaniel.rei.api.common.util.CollectionUtils; import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.api.common.util.ImmutableTextComponent; import me.shedaniel.rei.impl.client.ClientHelperImpl; -import me.shedaniel.rei.impl.client.REIHelperImpl; +import me.shedaniel.rei.impl.client.REIRuntimeImpl; import me.shedaniel.rei.impl.client.gui.craftable.CraftableFilter; import me.shedaniel.rei.impl.client.gui.dragging.CurrentDraggingStack; import me.shedaniel.rei.impl.client.gui.modules.Menu; @@ -128,12 +127,12 @@ public class ScreenOverlayImpl extends ScreenOverlay { } public static ScreenOverlayImpl getInstance() { - return (ScreenOverlayImpl) REIHelper.getInstance().getOverlay().get(); + return (ScreenOverlayImpl) REIRuntime.getInstance().getOverlay().get(); } public void tick() { - if (REIHelperImpl.getSearchField() != null) { - REIHelperImpl.getSearchField().tick(); + if (REIRuntimeImpl.getSearchField() != null) { + REIRuntimeImpl.getSearchField().tick(); if (Minecraft.getInstance().player != null && !PluginManager.areAnyReloading()) { CraftableFilter.INSTANCE.tick(); } @@ -237,10 +236,10 @@ public class ScreenOverlayImpl extends ScreenOverlay { favoritesListWidget.favoritePanel.resetRows(); widgets.add(favoritesListWidget); } - ENTRY_LIST_WIDGET.updateArea(REIHelperImpl.getSearchField() == null ? "" : REIHelperImpl.getSearchField().getText()); - REIHelperImpl.getSearchField().getBounds().setBounds(getSearchFieldArea()); - this.widgets.add(REIHelperImpl.getSearchField()); - REIHelperImpl.getSearchField().setResponder(s -> ENTRY_LIST_WIDGET.updateSearch(s, false)); + ENTRY_LIST_WIDGET.updateArea(REIRuntimeImpl.getSearchField() == null ? "" : REIRuntimeImpl.getSearchField().getText()); + REIRuntimeImpl.getSearchField().getBounds().setBounds(getSearchFieldArea()); + this.widgets.add(REIRuntimeImpl.getSearchField()); + REIRuntimeImpl.getSearchField().setResponder(s -> ENTRY_LIST_WIDGET.updateSearch(s, false)); if (!ConfigObject.getInstance().isEntryListWidgetScrolled()) { widgets.add(leftButton = Widgets.createButton(new Rectangle(bounds.x, bounds.y + (ConfigObject.getInstance().getSearchFieldLocation() == SearchFieldLocation.TOP_SIDE ? 24 : 0) + 5, 16, 16), new TranslatableComponent("text.rei.left_arrow")) .onClick(button -> { @@ -274,7 +273,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { ClientHelper.getInstance().setCheating(!ClientHelper.getInstance().isCheating()); return; } - ConfigManager.getInstance().openConfigScreen(REIHelper.getInstance().getPreviousScreen()); + ConfigManager.getInstance().openConfigScreen(REIRuntime.getInstance().getPreviousScreen()); }) .onRender((matrices, button) -> { if (ClientHelper.getInstance().isCheating() && ClientHelperImpl.getInstance().hasOperatorPermission()) { @@ -339,7 +338,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { .focusable(false) .onClick(button -> { ConfigManager.getInstance().toggleCraftableOnly(); - ENTRY_LIST_WIDGET.updateSearch(REIHelperImpl.getSearchField().getText(), true); + ENTRY_LIST_WIDGET.updateSearch(REIRuntimeImpl.getSearchField().getText(), true); }) .onRender((matrices, button) -> button.setTint(ConfigManager.getInstance().isCraftableOnlyEnabled() ? 939579655 : 956235776)) .containsMousePredicate((button, point) -> button.getBounds().contains(point) && isNotInExclusionZones(point.x, point.y)) @@ -404,7 +403,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { int widthRemoved = 1; if (ConfigObject.getInstance().isCraftableFilterEnabled()) widthRemoved += 22; if (ConfigObject.getInstance().isLowerConfigButton()) widthRemoved += 22; - SearchFieldLocation searchFieldLocation = REIHelper.getInstance().getContextualSearchFieldLocation(); + SearchFieldLocation searchFieldLocation = REIRuntime.getInstance().getContextualSearchFieldLocation(); switch (searchFieldLocation) { case TOP_SIDE: return getTopSideSearchFieldArea(widthRemoved); @@ -462,7 +461,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { @Override public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { if (shouldReload) { - ENTRY_LIST_WIDGET.updateSearch(REIHelperImpl.getSearchField().getText(), true); + ENTRY_LIST_WIDGET.updateSearch(REIRuntimeImpl.getSearchField().getText(), true); init(); } else { for (OverlayDecider decider : ScreenRegistry.getInstance().getDeciders(minecraft.screen)) { @@ -473,7 +472,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { } } if (ConfigManager.getInstance().isCraftableOnlyEnabled() && CraftableFilter.INSTANCE.wasDirty()) { - ENTRY_LIST_WIDGET.updateSearch(REIHelperImpl.getSearchField().getText(), true); + ENTRY_LIST_WIDGET.updateSearch(REIRuntimeImpl.getSearchField().getText(), true); } if (OverlaySearchField.isHighlighting) { matrices.pushPose(); @@ -513,8 +512,8 @@ public class ScreenOverlayImpl extends ScreenOverlay { } public void lateRender(PoseStack matrices, int mouseX, int mouseY, float delta) { - if (REIHelper.getInstance().isOverlayVisible()) { - REIHelperImpl.getSearchField().laterRender(matrices, mouseX, mouseY, delta); + if (REIRuntime.getInstance().isOverlayVisible()) { + REIRuntimeImpl.getSearchField().laterRender(matrices, mouseX, mouseY, delta); for (Widget widget : widgets) { if (widget instanceof LateRenderable && (overlayMenu == null || overlayMenu.wrappedMenu != widget)) widget.render(matrices, mouseX, mouseY, delta); @@ -538,7 +537,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { } } TOOLTIPS.clear(); - if (REIHelper.getInstance().isOverlayVisible()) { + if (REIRuntime.getInstance().isOverlayVisible()) { for (Runnable runnable : AFTER_RENDER) { runnable.run(); } @@ -576,7 +575,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { } public void renderWidgets(PoseStack matrices, int mouseX, int mouseY, float delta) { - if (!REIHelper.getInstance().isOverlayVisible()) + if (!REIRuntime.getInstance().isOverlayVisible()) return; if (!ConfigObject.getInstance().isEntryListWidgetScrolled()) { leftButton.setEnabled(ENTRY_LIST_WIDGET.getTotalPages() > 1); @@ -590,7 +589,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { @Override public boolean mouseScrolled(double mouseX, double mouseY, double amount) { - if (!REIHelper.getInstance().isOverlayVisible()) + if (!REIRuntime.getInstance().isOverlayVisible()) return false; if (overlayMenu != null && overlayMenu.wrappedMenu.mouseScrolled(mouseX, mouseY, amount)) return true; @@ -622,15 +621,15 @@ public class ScreenOverlayImpl extends ScreenOverlay { @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if (REIHelper.getInstance().isOverlayVisible()) { - if (REIHelperImpl.getSearchField().keyPressed(keyCode, scanCode, modifiers)) + if (REIRuntime.getInstance().isOverlayVisible()) { + if (REIRuntimeImpl.getSearchField().keyPressed(keyCode, scanCode, modifiers)) return true; for (GuiEventListener listener : widgets) - if (listener != REIHelperImpl.getSearchField() && listener.keyPressed(keyCode, scanCode, modifiers)) + if (listener != REIRuntimeImpl.getSearchField() && listener.keyPressed(keyCode, scanCode, modifiers)) return true; } if (ConfigObject.getInstance().getHideKeybind().matchesKey(keyCode, scanCode)) { - REIHelper.getInstance().toggleOverlayVisible(); + REIRuntime.getInstance().toggleOverlayVisible(); return true; } EntryStack stack = ScreenRegistry.getInstance().getFocusedStack(Minecraft.getInstance().screen, PointHelper.ofMouse()); @@ -652,13 +651,13 @@ public class ScreenOverlayImpl extends ScreenOverlay { return true; } } - if (!REIHelper.getInstance().isOverlayVisible()) + if (!REIRuntime.getInstance().isOverlayVisible()) return false; if (ConfigObject.getInstance().getFocusSearchFieldKeybind().matchesKey(keyCode, scanCode)) { - REIHelperImpl.getSearchField().setFocused(true); - setFocused(REIHelperImpl.getSearchField()); - REIHelperImpl.getSearchField().keybindFocusTime = System.currentTimeMillis(); - REIHelperImpl.getSearchField().keybindFocusKey = keyCode; + REIRuntimeImpl.getSearchField().setFocused(true); + setFocused(REIRuntimeImpl.getSearchField()); + REIRuntimeImpl.getSearchField().keybindFocusTime = System.currentTimeMillis(); + REIRuntimeImpl.getSearchField().keybindFocusKey = keyCode; return true; } return false; @@ -666,12 +665,12 @@ public class ScreenOverlayImpl extends ScreenOverlay { @Override public boolean charTyped(char char_1, int int_1) { - if (!REIHelper.getInstance().isOverlayVisible()) + if (!REIRuntime.getInstance().isOverlayVisible()) return false; - if (REIHelperImpl.getSearchField().charTyped(char_1, int_1)) + if (REIRuntimeImpl.getSearchField().charTyped(char_1, int_1)) return true; for (GuiEventListener listener : widgets) - if (listener != REIHelperImpl.getSearchField() && listener.charTyped(char_1, int_1)) + if (listener != REIRuntimeImpl.getSearchField() && listener.charTyped(char_1, int_1)) return true; return false; } @@ -683,7 +682,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { - boolean visible = REIHelper.getInstance().isOverlayVisible(); + boolean visible = REIRuntime.getInstance().isOverlayVisible(); if (visible && configButton.mouseClicked(mouseX, mouseY, button)) { this.setFocused(configButton); if (button == 0) @@ -691,8 +690,8 @@ public class ScreenOverlayImpl extends ScreenOverlay { return true; } if (ConfigObject.getInstance().getHideKeybind().matchesMouse(button)) { - REIHelper.getInstance().toggleOverlayVisible(); - return REIHelper.getInstance().isOverlayVisible(); + REIRuntime.getInstance().toggleOverlayVisible(); + return REIRuntime.getInstance().isOverlayVisible(); } EntryStack stack = ScreenRegistry.getInstance().getFocusedStack(Minecraft.getInstance().screen, PointHelper.ofMouse()); if (stack != null && !stack.isEmpty()) { @@ -719,7 +718,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { else this.setFocused(null); if (button == 0) this.setDragging(true); - REIHelperImpl.getSearchField().setFocused(false); + REIRuntimeImpl.getSearchField().setFocused(false); return true; } } @@ -752,15 +751,15 @@ public class ScreenOverlayImpl extends ScreenOverlay { if (button == 0) this.setDragging(true); if (!(element instanceof OverlaySearchField)) - REIHelperImpl.getSearchField().setFocused(false); + REIRuntimeImpl.getSearchField().setFocused(false); return true; } } if (ConfigObject.getInstance().getFocusSearchFieldKeybind().matchesMouse(button)) { - REIHelperImpl.getSearchField().setFocused(true); - setFocused(REIHelperImpl.getSearchField()); - REIHelperImpl.getSearchField().keybindFocusTime = -1; - REIHelperImpl.getSearchField().keybindFocusKey = -1; + REIRuntimeImpl.getSearchField().setFocused(true); + setFocused(REIRuntimeImpl.getSearchField()); + REIRuntimeImpl.getSearchField().keybindFocusTime = -1; + REIRuntimeImpl.getSearchField().keybindFocusKey = -1; return true; } return false; @@ -768,7 +767,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { @Override public boolean mouseDragged(double double_1, double double_2, int int_1, double double_3, double double_4) { - if (!REIHelper.getInstance().isOverlayVisible()) + if (!REIRuntime.getInstance().isOverlayVisible()) return false; return (this.getFocused() != null && this.isDragging() && int_1 == 0) && this.getFocused().mouseDragged(double_1, double_2, int_1, double_3, double_4); } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/Menu.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/Menu.java index 5533e1a8b..32fe6b841 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/Menu.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/Menu.java @@ -33,7 +33,7 @@ import me.shedaniel.clothconfig2.api.ScrollingContainer; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.RoughlyEnoughItemsCore; -import me.shedaniel.rei.api.client.REIHelper; +import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; import me.shedaniel.rei.api.client.subsets.SubsetsRegistry; @@ -218,7 +218,7 @@ public class Menu extends WidgetWithBounds implements LateRenderable { public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { Rectangle bounds = getBounds(); Rectangle innerBounds = getInnerBounds(); - fill(matrices, bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), containsMouse(mouseX, mouseY) ? (REIHelper.getInstance().isDarkThemeEnabled() ? -17587 : -1) : -6250336); + fill(matrices, bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), containsMouse(mouseX, mouseY) ? (REIRuntime.getInstance().isDarkThemeEnabled() ? -17587 : -1) : -6250336); fill(matrices, innerBounds.x, innerBounds.y, innerBounds.getMaxX(), innerBounds.getMaxY(), -16777216); boolean contains = innerBounds.contains(mouseX, mouseY); MenuEntry focused = getFocused() instanceof MenuEntry ? (MenuEntry) getFocused() : null; @@ -242,7 +242,7 @@ public class Menu extends WidgetWithBounds implements LateRenderable { } ScissorsHandler.INSTANCE.removeLastScissor(); setFocused(focused); - scrolling.renderScrollBar(0, 1, REIHelper.getInstance().isDarkThemeEnabled() ? 0.8f : 1f); + scrolling.renderScrollBar(0, 1, REIRuntime.getInstance().isDarkThemeEnabled() ? 0.8f : 1f); scrolling.updatePosition(delta); } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/EntryStackSubsetsMenuEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/EntryStackSubsetsMenuEntry.java index feb825f62..861cae25c 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/EntryStackSubsetsMenuEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/EntryStackSubsetsMenuEntry.java @@ -27,14 +27,14 @@ import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.RoughlyEnoughItemsCore; -import me.shedaniel.rei.api.client.REIHelper; +import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.CollectionUtils; import me.shedaniel.rei.api.common.util.EntryStacks; -import me.shedaniel.rei.impl.client.REIHelperImpl; +import me.shedaniel.rei.impl.client.REIRuntimeImpl; import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl; import me.shedaniel.rei.impl.client.gui.modules.Menu; import me.shedaniel.rei.impl.client.gui.modules.MenuEntry; @@ -91,7 +91,7 @@ public class EntryStackSubsetsMenuEntry extends MenuEntry { fill(matrices, x, y, x + width, y + 18, 1174405119); } if (containsMouse && mouseX >= x + (width / 2) - 8 && mouseX <= x + (width / 2) + 8 && mouseY >= y + 1 && mouseY <= y + 17) { - REIHelper.getInstance().queueTooltip(stack.getTooltip(new Point(mouseX, mouseY))); + REIRuntime.getInstance().queueTooltip(stack.getTooltip(new Point(mouseX, mouseY))); if (RoughlyEnoughItemsCore.isLeftMousePressed && !clickedLast) { clickedLast = true; if (!getParent().scrolling.draggingScrollBar) { @@ -102,13 +102,13 @@ public class EntryStackSubsetsMenuEntry extends MenuEntry { } else { filteredStacks.add(stack.normalize()); } - Menu menu = ((ScreenOverlayImpl) REIHelper.getInstance().getOverlay().get()).getOverlayMenu(); + Menu menu = ((ScreenOverlayImpl) REIRuntime.getInstance().getOverlay().get()).getOverlayMenu(); if (menu != null) recalculateFilter(menu); ConfigManager.getInstance().saveConfig(); EntryRegistry.getInstance().refilter(); - if (REIHelperImpl.getSearchField() != null) { - ScreenOverlayImpl.getEntryListWidget().updateSearch(REIHelperImpl.getSearchField().getText(), true); + if (REIRuntimeImpl.getSearchField() != null) { + ScreenOverlayImpl.getEntryListWidget().updateSearch(REIRuntimeImpl.getSearchField().getText(), true); } } } else if (!RoughlyEnoughItemsCore.isLeftMousePressed) clickedLast = false; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/GameModeMenuEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/GameModeMenuEntry.java index f93fb5778..2657ff640 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/GameModeMenuEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/GameModeMenuEntry.java @@ -24,7 +24,7 @@ package me.shedaniel.rei.impl.client.gui.modules.entries; import com.mojang.blaze3d.vertex.PoseStack; -import me.shedaniel.rei.api.client.REIHelper; +import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.impl.client.gui.modules.MenuEntry; @@ -89,7 +89,7 @@ public class GameModeMenuEntry extends MenuEntry { fill(matrices, x, y, x + width, y + 12, -12237499); } if (selected && containsMouse) { - REIHelper.getInstance().queueTooltip(Tooltip.create(new TranslatableComponent("text.rei.gamemode_button.tooltip.entry", text))); + REIRuntime.getInstance().queueTooltip(Tooltip.create(new TranslatableComponent("text.rei.gamemode_button.tooltip.entry", text))); } font.draw(matrices, text, x + 2, y + 2, selected ? 16777215 : 8947848); } @@ -99,7 +99,7 @@ public class GameModeMenuEntry extends MenuEntry { if (rendering && mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + 12) { Minecraft.getInstance().player.chat(ConfigObject.getInstance().getGamemodeCommand().replaceAll("\\{gamemode}", gameMode.name().toLowerCase(Locale.ROOT))); minecraft.getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F)); - REIHelper.getInstance().getOverlay().get().closeOverlayMenu(); + REIRuntime.getInstance().getOverlay().get().closeOverlayMenu(); return true; } return super.mouseClicked(mouseX, mouseY, button); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/SubSubsetsMenuEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/SubSubsetsMenuEntry.java index 60c479787..185e9e67d 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/SubSubsetsMenuEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/SubSubsetsMenuEntry.java @@ -29,14 +29,14 @@ import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.clothconfig2.api.Sci