From 03b0adcf960c5e462fddc8e045b146a8c727670c Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 27 Aug 2022 13:23:37 +0900 Subject: Refactors to overlays and reiruntime --- .../me/shedaniel/rei/api/client/REIRuntime.java | 31 +++++++++++++++++----- .../rei/api/client/gui/widgets/Label.java | 5 ++-- .../rei/api/client/gui/widgets/Panel.java | 3 ++- .../rei/api/client/gui/widgets/Tooltip.java | 3 +++ .../rei/api/client/gui/widgets/TooltipQueue.java | 19 +++++++++++++ .../shedaniel/rei/impl/client/ClientInternals.java | 6 +++++ 6 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipQueue.java (limited to 'api') diff --git a/api/src/main/java/me/shedaniel/rei/api/client/REIRuntime.java b/api/src/main/java/me/shedaniel/rei/api/client/REIRuntime.java index 540dcc2ab..41e0870d3 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/REIRuntime.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/REIRuntime.java @@ -24,10 +24,12 @@ package me.shedaniel.rei.api.client; import me.shedaniel.math.Rectangle; +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.widgets.TextField; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; +import me.shedaniel.rei.api.client.gui.widgets.TooltipQueue; import me.shedaniel.rei.api.client.overlay.ScreenOverlay; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.common.plugins.PluginManager; @@ -60,12 +62,17 @@ public interface REIRuntime extends Reloadable { * * @return whether the overlay is visible */ - boolean isOverlayVisible(); + default boolean isOverlayVisible() { + return ConfigObject.getInstance().isOverlayVisible(); + } /** * Toggles the visibility of the overlay. */ - void toggleOverlayVisible(); + default void toggleOverlayVisible() { + ConfigObject.getInstance().setOverlayVisible(!ConfigObject.getInstance().isOverlayVisible()); + ConfigManager.getInstance().saveConfig(); + } /** * Returns the screen overlay of REI, if available and constructed. @@ -126,7 +133,9 @@ public interface REIRuntime extends Reloadable { * @return whether dark mode is enabled * @see ConfigObject#isUsingDarkTheme() */ - boolean isDarkThemeEnabled(); + default boolean isDarkThemeEnabled() { + return ConfigObject.getInstance().isUsingDarkTheme(); + } /** * Returns the text field used for searching, if constructed. @@ -144,7 +153,11 @@ public interface REIRuntime extends Reloadable { * @param tooltip the tooltip to display, or {@code null} * @see Tooltip#queue() */ - void queueTooltip(@Nullable Tooltip tooltip); + default void queueTooltip(@Nullable Tooltip tooltip) { + if (getOverlay(false, false).isEmpty()) { + TooltipQueue.getInstance().queue(tooltip); + } + } /** * Clear all queued tooltips. @@ -153,7 +166,11 @@ public interface REIRuntime extends Reloadable { * @since 8.3 */ @ApiStatus.Experimental - void clearTooltips(); + default void clearTooltips() { + if (getOverlay(false, false).isEmpty()) { + TooltipQueue.getInstance().clear(); + } + } /** * Returns the texture location of the default display background. @@ -162,7 +179,9 @@ public interface REIRuntime extends Reloadable { * * @return the texture location of the default display background */ - ResourceLocation getDefaultDisplayTexture(); + default ResourceLocation getDefaultDisplayTexture() { + return getDefaultDisplayTexture(isDarkThemeEnabled()); + } /** * Returns the texture location of the default display background. diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Label.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Label.java index 856e696de..b423dd5ae 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Label.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Label.java @@ -26,6 +26,7 @@ package me.shedaniel.rei.api.client.gui.widgets; import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.math.Point; import me.shedaniel.rei.api.client.REIRuntime; +import me.shedaniel.rei.api.client.config.ConfigObject; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.TextComponent; @@ -331,7 +332,7 @@ public abstract class Label extends WidgetWithBounds { public abstract void setColor(int color); public Label color(int lightModeColor, int darkModeColor) { - return color(REIRuntime.getInstance().isDarkThemeEnabled() ? darkModeColor : lightModeColor); + return color(ConfigObject.getInstance().isUsingDarkTheme() ? darkModeColor : lightModeColor); } public final Label color(int color) { @@ -344,7 +345,7 @@ public abstract class Label extends WidgetWithBounds { public abstract void setHoveredColor(int hoveredColor); public final Label hoveredColor(int lightModeColor, int darkModeColor) { - return hoveredColor(REIRuntime.getInstance().isDarkThemeEnabled() ? darkModeColor : lightModeColor); + return hoveredColor(ConfigObject.getInstance().isUsingDarkTheme() ? darkModeColor : lightModeColor); } public final Label hoveredColor(int color) { diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Panel.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Panel.java index f1adf8b06..875931202 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Panel.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Panel.java @@ -24,6 +24,7 @@ package me.shedaniel.rei.api.client.gui.widgets; import me.shedaniel.rei.api.client.REIRuntime; +import me.shedaniel.rei.api.client.config.ConfigObject; import java.util.function.Predicate; @@ -56,7 +57,7 @@ public abstract class Panel extends WidgetWithBounds { } public final Panel color(int lightColor, int darkColor) { - return color(REIRuntime.getInstance().isDarkThemeEnabled() ? darkColor : lightColor); + return color(ConfigObject.getInstance().isUsingDarkTheme() ? darkColor : lightColor); } public abstract Predicate getRendering(); diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java index 848e853de..e2d3511f1 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Tooltip.java @@ -174,6 +174,9 @@ public interface Tooltip { Tooltip withContextStack(EntryStack stack); + /** + * Queues this tooltip to be displayed. + */ default void queue() { EnvExecutor.runInEnv(Env.CLIENT, () -> () -> REIRuntime.getInstance().queueTooltip(this)); } diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipQueue.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipQueue.java new file mode 100644 index 000000000..c938cd8d6 --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/TooltipQueue.java @@ -0,0 +1,19 @@ +package me.shedaniel.rei.api.client.gui.widgets; + +import me.shedaniel.rei.impl.client.ClientInternals; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; + +@ApiStatus.Experimental +public interface TooltipQueue { + static TooltipQueue getInstance() { + return ClientInternals.getTooltipQueue(); + } + + void queue(@Nullable Tooltip tooltip); + + void clear(); + + @Nullable + Tooltip get(); +} diff --git a/api/src/main/java/me/shedaniel/rei/impl/client/ClientInternals.java b/api/src/main/java/me/shedaniel/rei/impl/client/ClientInternals.java index 706ea27ad..0791ec310 100644 --- a/api/src/main/java/me/shedaniel/rei/impl/client/ClientInternals.java +++ b/api/src/main/java/me/shedaniel/rei/impl/client/ClientInternals.java @@ -29,6 +29,7 @@ import me.shedaniel.rei.api.client.ClientHelper; import me.shedaniel.rei.api.client.favorites.FavoriteEntry; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.gui.widgets.TooltipContext; +import me.shedaniel.rei.api.client.gui.widgets.TooltipQueue; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.entry.PreFilteredEntryList; import me.shedaniel.rei.api.client.registry.screen.ClickArea; @@ -64,6 +65,7 @@ public final class ClientInternals { private static final FavoritesEntriesListProvider FAVORITES_ENTRIES_LIST = resolveService(FavoritesEntriesListProvider.class); private static final List OVERLAY_TICKERS = resolveServices(OverlayTicker.class); private static final AutoCraftingEvaluator AUTO_CRAFTING_EVALUATOR = resolveService(AutoCraftingEvaluator.class); + private static final TooltipQueue TOOLTIP_QUEUE = resolveService(TooltipQueue.class); private static Function> favoriteEntryFromJson = (object) -> throwNotSetup(); private static Function clickAreaHandlerResult = (result) -> throwNotSetup(); private static BiConsumer, TooltipComponent> clientTooltipComponentProvider = (tooltip, result) -> throwNotSetup(); @@ -165,6 +167,10 @@ public final class ClientInternals { return AUTO_CRAFTING_EVALUATOR.builder(display); } + public static TooltipQueue getTooltipQueue() { + return TOOLTIP_QUEUE; + } + public static DataResult favoriteEntryFromJson(CompoundTag tag) { return favoriteEntryFromJson.apply(tag); } -- cgit