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/api/client/REIHelper.java | 83 ---------------------- .../me/shedaniel/rei/api/client/REIRuntime.java | 82 +++++++++++++++++++++ .../entry/renderer/AbstractEntryRenderer.java | 3 + .../entry/renderer/BatchedEntryRenderer.java | 9 ++- .../api/client/entry/renderer/EntryRenderer.java | 1 + .../client/entry/type/BuiltinClientEntryTypes.java | 3 + .../client/favorites/CompoundFavoriteRenderer.java | 5 +- .../rei/api/client/favorites/FavoriteEntry.java | 3 + .../api/client/favorites/FavoriteEntryType.java | 3 + .../api/client/favorites/FavoriteMenuEntry.java | 3 + .../client/gui/AbstractContainerEventHandler.java | 2 +- .../rei/api/client/gui/AbstractRenderer.java | 3 + .../rei/api/client/gui/DisplayRenderer.java | 3 + .../rei/api/client/gui/DrawableConsumer.java | 5 +- .../rei/api/client/gui/SimpleDisplayRenderer.java | 2 +- .../rei/api/client/gui/drag/DraggingContext.java | 4 +- .../rei/api/client/gui/widgets/Label.java | 6 +- .../rei/api/client/gui/widgets/Panel.java | 4 +- .../rei/api/client/gui/widgets/Tooltip.java | 4 +- .../rei/api/client/overlay/OverlayListWidget.java | 5 +- .../rei/api/client/overlay/ScreenOverlay.java | 3 + .../rei/api/client/plugins/REIClientPlugin.java | 3 + .../api/client/registry/category/ButtonArea.java | 3 + .../registry/display/DynamicDisplayGenerator.java | 3 + .../registry/display/TransferDisplayCategory.java | 3 + .../visibility/DisplayVisibilityPredicate.java | 3 + .../rei/api/client/registry/screen/ClickArea.java | 3 + .../registry/screen/DisplayBoundsProvider.java | 3 + .../registry/screen/ExclusionZonesProvider.java | 3 + .../registry/screen/FocusedStackProvider.java | 3 + .../api/client/registry/screen/OverlayDecider.java | 6 ++ .../client/registry/screen/SimpleClickArea.java | 3 + .../rei/api/client/search/SearchFilter.java | 3 + .../rei/api/client/search/SearchProvider.java | 3 + .../rei/api/client/util/SpriteRenderer.java | 55 +++++++------- .../shedaniel/rei/api/common/display/Display.java | 7 ++ .../rei/api/common/display/DisplaySerializer.java | 7 ++ .../common/display/DisplaySerializerRegistry.java | 2 +- .../api/common/display/SimpleGridMenuDisplay.java | 36 ++++++++++ .../rei/api/common/display/SimpleMenuDisplay.java | 36 ---------- .../rei/api/common/entry/EntryIngredient.java | 2 + .../rei/api/common/entry/type/EntryType.java | 9 +++ .../info/simple/RecipeBookGridMenuInfo.java | 4 +- .../transfer/info/simple/SimpleGridMenuInfo.java | 10 +-- 44 files changed, 276 insertions(+), 170 deletions(-) delete mode 100644 api/src/main/java/me/shedaniel/rei/api/client/REIHelper.java create mode 100644 api/src/main/java/me/shedaniel/rei/api/client/REIRuntime.java create mode 100644 api/src/main/java/me/shedaniel/rei/api/common/display/SimpleGridMenuDisplay.java delete mode 100644 api/src/main/java/me/shedaniel/rei/api/common/display/SimpleMenuDisplay.java (limited to 'api/src/main/java/me') diff --git a/api/src/main/java/me/shedaniel/rei/api/client/REIHelper.java b/api/src/main/java/me/shedaniel/rei/api/client/REIHelper.java deleted file mode 100644 index afe34317e..000000000 --- a/api/src/main/java/me/shedaniel/rei/api/client/REIHelper.java +++ /dev/null @@ -1,83 +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.api.client; - -import me.shedaniel.math.Rectangle; -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.overlay.ScreenOverlay; -import me.shedaniel.rei.api.client.plugins.REIClientPlugin; -import me.shedaniel.rei.api.common.plugins.PluginManager; -import me.shedaniel.rei.api.common.registry.Reloadable; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -@Environment(EnvType.CLIENT) -public interface REIHelper extends Reloadable { - /** - * @return the instance of {@link REIHelper} - */ - static REIHelper getInstance() { - return PluginManager.getClientInstance().get(REIHelper.class); - } - - boolean isOverlayVisible(); - - void toggleOverlayVisible(); - - default Optional getOverlay() { - return getOverlay(false); - } - - Optional getOverlay(boolean reset); - - @Nullable - AbstractContainerScreen getPreviousContainerScreen(); - - @Nullable - Screen getPreviousScreen(); - - boolean isDarkThemeEnabled(); - - @Nullable - TextField getSearchTextField(); - - void queueTooltip(@Nullable Tooltip tooltip); - - ResourceLocation getDefaultDisplayTexture(); - - SearchFieldLocation getContextualSearchFieldLocation(); - - Rectangle calculateEntryListArea(); - - Rectangle calculateFavoritesListArea(); -} 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 new file mode 100644 index 000000000..354c1ce19 --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/client/REIRuntime.java @@ -0,0 +1,82 @@ +/* + * 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.api.client; + +import me.shedaniel.math.Rectangle; +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.overlay.ScreenOverlay; +import me.shedaniel.rei.api.client.plugins.REIClientPlugin; +import me.shedaniel.rei.api.common.plugins.PluginManager; +import me.shedaniel.rei.api.common.registry.Reloadable; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; + +@Environment(EnvType.CLIENT) +public interface REIRuntime extends Reloadable { + /** + * @return the instance of {@link REIRuntime} + */ + static REIRuntime getInstance() { + return PluginManager.getClientInstance().get(REIRuntime.class); + } + + boolean isOverlayVisible(); + + void toggleOverlayVisible(); + + default Optional getOverlay() { + return getOverlay(false); + } + + Optional getOverlay(boolean reset); + + @Nullable + AbstractContainerScreen getPreviousContainerScreen(); + + @Nullable + Screen getPreviousScreen(); + + boolean isDarkThemeEnabled(); + + @Nullable + TextField getSearchTextField(); + + void queueTooltip(@Nullable Tooltip tooltip); + + ResourceLocation getDefaultDisplayTexture(); + + SearchFieldLocation getContextualSearchFieldLocation(); + + Rectangle calculateEntryListArea(); + + Rectangle calculateFavoritesListArea(); +} diff --git a/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/AbstractEntryRenderer.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/AbstractEntryRenderer.java index 388d2c19d..28d88ce98 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/AbstractEntryRenderer.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/AbstractEntryRenderer.java @@ -23,7 +23,10 @@ package me.shedaniel.rei.api.client.entry.renderer; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.gui.GuiComponent; +@Environment(EnvType.CLIENT) public abstract class AbstractEntryRenderer extends GuiComponent implements EntryRenderer { } diff --git a/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/BatchedEntryRenderer.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/BatchedEntryRenderer.java index 7944285fc..d02a43506 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/BatchedEntryRenderer.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/BatchedEntryRenderer.java @@ -26,6 +26,8 @@ package me.shedaniel.rei.api.client.entry.renderer; import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.common.entry.EntryStack; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; @@ -35,6 +37,7 @@ import net.minecraft.client.renderer.MultiBufferSource; * @param the entry type * @param the type of extra data returned in {@link #getExtraData(EntryStack)} */ +@Environment(EnvType.CLIENT) public interface BatchedEntryRenderer extends EntryRenderer { default boolean isBatched(EntryStack entry) { return true; @@ -57,9 +60,7 @@ public interface BatchedEntryRenderer extends EntryRenderer { * @param extraData the extra data returned from {@link #getExtraData(EntryStack)} * @return the batch identifier */ - default int getBatchIdentifier(EntryStack entry, Rectangle bounds, E extraData) { - return getClass().hashCode(); - } + int getBatchIdentifier(EntryStack entry, Rectangle bounds, E extraData); /** * Modifies the {@link PoseStack} passed tp various batch rendering methods. @@ -83,6 +84,8 @@ public interface BatchedEntryRenderer extends EntryRenderer { void renderBase(EntryStack entry, E extraData, PoseStack matrices, MultiBufferSource.BufferSource immediate, Rectangle bounds, int mouseX, int mouseY, float delta); + void afterBase(EntryStack entry, E extraData, PoseStack matrices, float delta); + void renderOverlay(EntryStack entry, E extraData, PoseStack matrices, MultiBufferSource.BufferSource immediate, Rectangle bounds, int mouseX, int mouseY, float delta); /** diff --git a/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/EntryRenderer.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/EntryRenderer.java index 95a85d77a..3943a76eb 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/EntryRenderer.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/renderer/EntryRenderer.java @@ -41,6 +41,7 @@ import org.jetbrains.annotations.Nullable; * @param the entry type * @see BatchedEntryRenderer */ +@Environment(EnvType.CLIENT) public interface EntryRenderer { static EntryRenderer empty() { return ClientInternals.getEmptyEntryRenderer(); diff --git a/api/src/main/java/me/shedaniel/rei/api/client/entry/type/BuiltinClientEntryTypes.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/type/BuiltinClientEntryTypes.java index dc352ec47..1f4d4558a 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/entry/type/BuiltinClientEntryTypes.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/type/BuiltinClientEntryTypes.java @@ -25,10 +25,13 @@ package me.shedaniel.rei.api.client.entry.type; import me.shedaniel.rei.api.client.gui.Renderer; import me.shedaniel.rei.api.common.entry.type.EntryType; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.ApiStatus; @ApiStatus.NonExtendable +@Environment(EnvType.CLIENT) public interface BuiltinClientEntryTypes { ResourceLocation RENDERING_ID = new ResourceLocation("rendering"); diff --git a/api/src/main/java/me/shedaniel/rei/api/client/favorites/CompoundFavoriteRenderer.java b/api/src/main/java/me/shedaniel/rei/api/client/favorites/CompoundFavoriteRenderer.java index 21e397350..e9ce917dd 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/favorites/CompoundFavoriteRenderer.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/favorites/CompoundFavoriteRenderer.java @@ -30,12 +30,15 @@ import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.AbstractRenderer; import me.shedaniel.rei.api.client.gui.Renderer; import me.shedaniel.rei.api.common.util.Animator; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.Util; import java.util.List; import java.util.function.IntFunction; import java.util.function.IntSupplier; +@Environment(EnvType.CLIENT) public class CompoundFavoriteRenderer extends AbstractRenderer { protected Animator offset = new Animator(0); protected Rectangle scissorArea = new Rectangle(); @@ -59,7 +62,7 @@ public class CompoundFavoriteRenderer extends AbstractRenderer { this(false, renderers, supplier); } - public CompoundFavoriteRenderer(boolean showcase, List renderers, IntSupplier supplier) { + protected CompoundFavoriteRenderer(boolean showcase, List renderers, IntSupplier supplier) { this(showcase, renderers.size(), renderers::get, supplier); } diff --git a/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteEntry.java b/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteEntry.java index c2d2d65b9..1957b2ef1 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteEntry.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteEntry.java @@ -26,6 +26,8 @@ package me.shedaniel.rei.api.client.favorites; import me.shedaniel.rei.api.client.gui.Renderer; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.impl.ClientInternals; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.Nullable; @@ -36,6 +38,7 @@ import java.util.Optional; import java.util.UUID; import java.util.function.Supplier; +@Environment(EnvType.CLIENT) public abstract class FavoriteEntry { public static final String TYPE_KEY = "type"; private final UUID uuid = UUID.randomUUID(); diff --git a/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteEntryType.java b/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteEntryType.java index b60083a54..fd05c2bbd 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteEntryType.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteEntryType.java @@ -27,6 +27,8 @@ import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.plugins.PluginManager; import me.shedaniel.rei.api.common.registry.Reloadable; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -35,6 +37,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; +@Environment(EnvType.CLIENT) public interface FavoriteEntryType { /** * A builtin type of favorites, wrapping a {@link EntryStack}. diff --git a/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteMenuEntry.java b/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteMenuEntry.java index 12bc873ea..bc9b810b8 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteMenuEntry.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/favorites/FavoriteMenuEntry.java @@ -24,9 +24,12 @@ package me.shedaniel.rei.api.client.favorites; import me.shedaniel.rei.api.client.gui.widgets.Widget; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; +@Environment(EnvType.CLIENT) public abstract class FavoriteMenuEntry extends Widget { @Nullable @ApiStatus.Internal diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/AbstractContainerEventHandler.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/AbstractContainerEventHandler.java index 49bca05bd..5e9ff3e47 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/AbstractContainerEventHandler.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/AbstractContainerEventHandler.java @@ -30,7 +30,7 @@ import net.minecraft.client.gui.components.events.ContainerEventHandler; import net.minecraft.client.gui.components.events.GuiEventListener; import org.jetbrains.annotations.Nullable; -@Environment(value = EnvType.CLIENT) +@Environment(EnvType.CLIENT) public abstract class AbstractContainerEventHandler extends GuiComponent implements ContainerEventHandler { @Nullable private GuiEventListener focused; diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/AbstractRenderer.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/AbstractRenderer.java index bb3b7732b..377bdaab7 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/AbstractRenderer.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/AbstractRenderer.java @@ -23,8 +23,11 @@ package me.shedaniel.rei.api.client.gui; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.gui.GuiComponent; +@Environment(EnvType.CLIENT) public abstract class AbstractRenderer extends GuiComponent implements Renderer { @Override public int getZ() { diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/DisplayRenderer.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/DisplayRenderer.java index ee1f174de..de1da0e1b 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/DisplayRenderer.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/DisplayRenderer.java @@ -25,10 +25,13 @@ package me.shedaniel.rei.api.client.gui; import me.shedaniel.math.Point; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; @ApiStatus.OverrideOnly +@Environment(EnvType.CLIENT) public abstract class DisplayRenderer extends AbstractRenderer { public abstract int getHeight(); diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/DrawableConsumer.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/DrawableConsumer.java index eac41631c..9def64c29 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/DrawableConsumer.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/DrawableConsumer.java @@ -24,11 +24,14 @@ package me.shedaniel.rei.api.client.gui; import com.mojang.blaze3d.vertex.PoseStack; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.gui.GuiComponent; /** - * Consumer of a {@link DrawableHelper} and information of mouse and delta. + * Consumer of a {@link GuiComponent} and information of mouse and delta. */ +@Environment(EnvType.CLIENT) public interface DrawableConsumer { void render(GuiComponent helper, PoseStack matrices, int mouseX, int mouseY, float delta); } diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/SimpleDisplayRenderer.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/SimpleDisplayRenderer.java index aeec0b99c..95fc9ef6b 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/SimpleDisplayRenderer.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/SimpleDisplayRenderer.java @@ -64,7 +64,7 @@ public class SimpleDisplayRenderer extends DisplayRenderer implements WidgetHold this.widgets = Stream.concat(inputWidgets.stream(), outputWidgets.stream()).collect(Collectors.toList()); } - private Slot createSlot(EntryIngredient ingredient) { + protected Slot createSlot(EntryIngredient ingredient) { return Widgets.createSlot(new Point(0, 0)) .entries(CollectionUtils.filterToList(ingredient, stack -> !stack.isEmpty())) .disableBackground() diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggingContext.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggingContext.java index d6548359e..626d9aa29 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggingContext.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/drag/DraggingContext.java @@ -24,7 +24,7 @@ package me.shedaniel.rei.api.client.gui.drag; import me.shedaniel.math.Point; -import me.shedaniel.rei.api.client.REIHelper; +import me.shedaniel.rei.api.client.REIRuntime; import net.minecraft.client.gui.screens.Screen; import org.jetbrains.annotations.Nullable; @@ -41,7 +41,7 @@ import java.util.function.Supplier; */ public interface DraggingContext { static DraggingContext getInstance() { - return REIHelper.getInstance().getOverlay().get().getDraggingContext(); + return REIRuntime.getInstance().getOverlay().get().getDraggingContext(); } /** 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 2e2de9bae..0c634b114 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 @@ -25,7 +25,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.REIHelper; +import me.shedaniel.rei.api.client.REIRuntime; import net.minecraft.network.chat.FormattedText; import org.jetbrains.annotations.Nullable; @@ -233,7 +233,7 @@ public abstract class Label extends WidgetWithBounds { public abstract void setColor(int color); public final Label color(int lightModeColor, int darkModeColor) { - return color(REIHelper.getInstance().isDarkThemeEnabled() ? darkModeColor : lightModeColor); + return color(REIRuntime.getInstance().isDarkThemeEnabled() ? darkModeColor : lightModeColor); } public final Label color(int color) { @@ -246,7 +246,7 @@ public abstract class Label extends WidgetWithBounds { public abstract void setHoveredColor(int hoveredColor); public final Label hoveredColor(int lightModeColor, int darkModeColor) { - return hoveredColor(REIHelper.getInstance().isDarkThemeEnabled() ? darkModeColor : lightModeColor); + return hoveredColor(REIRuntime.getInstance().isDarkThemeEnabled() ? 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 578e3e4a9..181a938ee 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 @@ -23,7 +23,7 @@ package me.shedaniel.rei.api.client.gui.widgets; -import me.shedaniel.rei.api.client.REIHelper; +import me.shedaniel.rei.api.client.REIRuntime; import java.util.function.Predicate; @@ -56,7 +56,7 @@ public abstract class Panel extends WidgetWithBounds { } public final Panel color(int lightColor, int darkColor) { - return color(REIHelper.getInstance().isDarkThemeEnabled() ? darkColor : lightColor); + return color(REIRuntime.getInstance().isDarkThemeEnabled() ? 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 867bd3b1e..16d329002 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 @@ -25,7 +25,7 @@ package me.shedaniel.rei.api.client.gui.widgets; import dev.architectury.utils.EnvExecutor; import me.shedaniel.math.Point; -import me.shedaniel.rei.api.client.REIHelper; +import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.impl.ClientInternals; import net.fabricmc.api.EnvType; import net.minecraft.network.chat.Component; @@ -59,6 +59,6 @@ public interface Tooltip { List getText(); default void queue() { - EnvExecutor.runInEnv(EnvType.CLIENT, () -> () -> REIHelper.getInstance().queueTooltip(this)); + EnvExecutor.runInEnv(EnvType.CLIENT, () -> () -> REIRuntime.getInstance().queueTooltip(this)); } } diff --git a/api/src/main/java/me/shedaniel/rei/api/client/overlay/OverlayListWidget.java b/api/src/main/java/me/shedaniel/rei/api/client/overlay/OverlayListWidget.java index b3752af2e..9b30ee5a7 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/overlay/OverlayListWidget.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/overlay/OverlayListWidget.java @@ -24,16 +24,19 @@ package me.shedaniel.rei.api.client.overlay; import me.shedaniel.rei.api.common.entry.EntryStack; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import java.util.stream.Stream; +@Environment(EnvType.CLIENT) public interface OverlayListWidget { /** * Returns the mouse hovered stack within the overlay list widget. * * @return the mouse hovered stack, returns {@link EntryStack#empty()} if none is hovered */ - EntryStack getFocusedStacK(); + EntryStack getFocusedStack(); Stream> getEntries(); } diff --git a/api/src/main/java/me/shedaniel/rei/api/client/overlay/ScreenOverlay.java b/api/src/main/java/me/shedaniel/rei/api/client/overlay/ScreenOverlay.java index 01aa56e38..cf0696406 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/overlay/ScreenOverlay.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/overlay/ScreenOverlay.java @@ -25,10 +25,13 @@ package me.shedaniel.rei.api.client.overlay; import me.shedaniel.rei.api.client.gui.drag.DraggingContext; import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import org.jetbrains.annotations.ApiStatus; import java.util.Optional; +@Environment(EnvType.CLIENT) public abstract class ScreenOverlay extends WidgetWithBounds { @ApiStatus.Internal public abstract void closeOverlayMenu(); diff --git a/api/src/main/java/me/shedaniel/rei/api/client/plugins/REIClientPlugin.java b/api/src/main/java/me/shedaniel/rei/api/client/plugins/REIClientPlugin.java index fa1c77dc3..e65ccc4e1 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/plugins/REIClientPlugin.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/plugins/REIClientPlugin.java @@ -32,8 +32,11 @@ import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; import me.shedaniel.rei.api.client.registry.transfer.TransferHandlerRegistry; import me.shedaniel.rei.api.client.subsets.SubsetsRegistry; import me.shedaniel.rei.api.common.plugins.REIPlugin; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import org.jetbrains.annotations.ApiStatus; +@Environment(EnvType.CLIENT) public interface REIClientPlugin extends REIPlugin { /** * Registers new categories diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/category/ButtonArea.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/category/ButtonArea.java index 8fdc6c95e..af16c1fec 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/category/ButtonArea.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/category/ButtonArea.java @@ -24,11 +24,14 @@ package me.shedaniel.rei.api.client.registry.category; import me.shedaniel.math.Rectangle; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; /** * The area for the + button. */ @FunctionalInterface +@Environment(EnvType.CLIENT) public interface ButtonArea { static ButtonArea defaultArea() { return bounds -> new Rectangle(bounds.getMaxX() + 2, bounds.getMaxY() - 16, 10, 10); diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DynamicDisplayGenerator.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DynamicDisplayGenerator.java index 9c088e5e5..b168c88d2 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DynamicDisplayGenerator.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DynamicDisplayGenerator.java @@ -27,6 +27,8 @@ import me.shedaniel.rei.api.client.view.ViewSearchBuilder; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.display.Display; import me.shedaniel.rei.api.common.entry.EntryStack; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import java.util.List; import java.util.Optional; @@ -39,6 +41,7 @@ import java.util.Optional; * @see DisplayRegistry#registerDisplayGenerator(CategoryIdentifier, DynamicDisplayGenerator) * @see DisplayRegistry#registerGlobalDisplayGenerator(DynamicDisplayGenerator) */ +@Environment(EnvType.CLIENT) public interface DynamicDisplayGenerator { default Optional> getRecipeFor(EntryStack entry) { return Optional.empty(); diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/display/TransferDisplayCategory.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/display/TransferDisplayCategory.java index eda5490a1..5cc0fc459 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/display/TransferDisplayCategory.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/display/TransferDisplayCategory.java @@ -28,10 +28,13 @@ import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.common.display.Display; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import org.jetbrains.annotations.ApiStatus; import java.util.List; +@Environment(EnvType.CLIENT) public interface TransferDisplayCategory extends DisplayCategory { @ApiStatus.OverrideOnly @ApiStatus.ScheduledForRemoval diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/display/visibility/DisplayVisibilityPredicate.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/display/visibility/DisplayVisibilityPredicate.java index 28eff1b9e..16a13c04c 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/display/visibility/DisplayVisibilityPredicate.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/display/visibility/DisplayVisibilityPredicate.java @@ -25,8 +25,11 @@ package me.shedaniel.rei.api.client.registry.display.visibility; import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.display.Display; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.world.InteractionResult; +@Environment(EnvType.CLIENT) public interface DisplayVisibilityPredicate extends Comparable { /** * Gets the priority of the handler, the higher the priority, the earlier this is called. diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ClickArea.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ClickArea.java index 0bde987e3..992fcb5cf 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ClickArea.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ClickArea.java @@ -26,12 +26,15 @@ package me.shedaniel.rei.api.client.registry.screen; import me.shedaniel.math.Point; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.impl.ClientInternals; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.gui.screens.Screen; import org.jetbrains.annotations.ApiStatus; import java.util.stream.Stream; @FunctionalInterface +@Environment(EnvType.CLIENT) public interface ClickArea { Result handle(ClickAreaContext context); diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/DisplayBoundsProvider.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/DisplayBoundsProvider.java index 583a85c34..4e32def9e 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/DisplayBoundsProvider.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/DisplayBoundsProvider.java @@ -24,7 +24,10 @@ package me.shedaniel.rei.api.client.registry.screen; import me.shedaniel.math.Rectangle; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +@Environment(EnvType.CLIENT) public interface DisplayBoundsProvider extends OverlayDecider { /** * @param screen the screen diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ExclusionZonesProvider.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ExclusionZonesProvider.java index 5deac26ab..1b4b347fe 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ExclusionZonesProvider.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/ExclusionZonesProvider.java @@ -24,10 +24,13 @@ package me.shedaniel.rei.api.client.registry.screen; import me.shedaniel.math.Rectangle; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import java.util.Collection; @FunctionalInterface +@Environment(EnvType.CLIENT) public interface ExclusionZonesProvider { Collection provide(T screen); } diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/FocusedStackProvider.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/FocusedStackProvider.java index c5bd6c288..9c115593e 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/FocusedStackProvider.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/FocusedStackProvider.java @@ -25,10 +25,13 @@ package me.shedaniel.rei.api.client.registry.screen; import me.shedaniel.math.Point; import me.shedaniel.rei.api.common.entry.EntryStack; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.gui.screens.Screen; import net.minecraft.world.InteractionResultHolder; @FunctionalInterface +@Environment(EnvType.CLIENT) public interface FocusedStackProvider extends Comparable { /** * @return the priority of this handler, higher priorities will be called first. diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/OverlayDecider.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/OverlayDecider.java index 03f5f16d0..d8f31b627 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/OverlayDecider.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/OverlayDecider.java @@ -25,11 +25,17 @@ package me.shedaniel.rei.api.client.registry.screen; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.gui.config.DisplayPanelLocation; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.gui.screens.Screen; import net.minecraft.world.InteractionResult; import static net.minecraft.world.InteractionResult.PASS; +/** + * @see DisplayBoundsProvider + */ +@Environment(EnvType.CLIENT) public interface OverlayDecider extends Comparable { boolean isHandingScreen(Class screen); diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/SimpleClickArea.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/SimpleClickArea.java index 32b7409a4..b9dba2762 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/SimpleClickArea.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/screen/SimpleClickArea.java @@ -25,12 +25,15 @@ package me.shedaniel.rei.api.client.registry.screen; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.gui.screens.Screen; import java.util.Arrays; import java.util.function.Supplier; @FunctionalInterface +@Environment(EnvType.CLIENT) public interface SimpleClickArea { Rectangle provide(T screen); diff --git a/api/src/main/java/me/shedaniel/rei/api/client/search/SearchFilter.java b/api/src/main/java/me/shedaniel/rei/api/client/search/SearchFilter.java index 20023fd2a..adab595e9 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/search/SearchFilter.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/search/SearchFilter.java @@ -24,6 +24,8 @@ package me.shedaniel.rei.api.client.search; import me.shedaniel.rei.api.common.entry.EntryStack; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import java.util.function.Predicate; @@ -32,6 +34,7 @@ import java.util.function.Predicate; * * @see SearchProvider */ +@Environment(EnvType.CLIENT) public interface SearchFilter extends Predicate> { static SearchFilter matchAll() { return new SearchFilter() { diff --git a/api/src/main/java/me/shedaniel/rei/api/client/search/SearchProvider.java b/api/src/main/java/me/shedaniel/rei/api/client/search/SearchProvider.java index f595f3a88..befe2152e 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/search/SearchProvider.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/search/SearchProvider.java @@ -26,7 +26,10 @@ package me.shedaniel.rei.api.client.search; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.common.plugins.PluginManager; import me.shedaniel.rei.api.common.registry.Reloadable; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +@Environment(EnvType.CLIENT) public interface SearchProvider extends Reloadable { static SearchProvider getInstance() { return PluginManager.getClientInstance().get(SearchProvider.class); diff --git a/api/src/main/java/me/shedaniel/rei/api/client/util/SpriteRenderer.java b/api/src/main/java/me/shedaniel/rei/api/client/util/SpriteRenderer.java index afd1daaf8..7abd82bf9 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/util/SpriteRenderer.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/util/SpriteRenderer.java @@ -28,43 +28,46 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Matrix3f; import com.mojang.math.Matrix4f; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.resources.ResourceLocation; +@Environment(EnvType.CLIENT) public class SpriteRenderer { public static RenderPass beginPass() { return new RenderPass(); } public static class RenderPass { - float x1 = 0; - float x2 = 1; - float y1 = 0; - float y2 = 0; - float z1 = 0; - float uStart = 0F; - float uEnd = 1F; - float vStart = 0F; - float vEnd = 1F; - int u = 0; - int v = 1; - int r = 0xff; - int g = 0xff; - int b = 0xff; - int a = 0xff; - int l = 0; - float nX = 0; - float nY = 0; - float nZ = 0; - TextureAtlasSprite sprite; - VertexConsumer consumer; - MultiBufferSource consumers; - PoseStack matrices; - Matrix4f model; - Matrix3f normal; - RenderType layer; + private float x1 = 0; + private float x2 = 1; + private float y1 = 0; + private float y2 = 0; + private float z1 = 0; + private float uStart = 0F; + private float uEnd = 1F; + private float vStart = 0F; + private float vEnd = 1F; + private int u = 0; + private int v = 1; + private int r = 0xff; + private int g = 0xff; + private int b = 0xff; + private int a = 0xff; + private int l = 0; + private float nX = 0; + private float nY = 0; + private float nZ = 0; + private TextureAtlasSprite sprite; + private VertexConsumer consumer; + private MultiBufferSource consumers; + private PoseStack matrices; + private Matrix4f model; + private Matrix3f normal; + private RenderType layer; private RenderPass() {} diff --git a/api/src/main/java/me/shedaniel/rei/api/common/display/Display.java b/api/src/main/java/me/shedaniel/rei/api/common/display/Display.java index 7f4cec47e..14db33133 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/display/Display.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/display/Display.java @@ -30,6 +30,13 @@ import net.minecraft.resources.ResourceLocation; import java.util.List; import java.util.Optional; +/** + * A display, holds ingredients and information for {@link me.shedaniel.rei.api.client.registry.display.DisplayCategory} + * to setup widgets for. + * + * @see me.shedaniel.rei.api.common.display.basic.BasicDisplay + * @see me.shedaniel.rei.api.client.registry.display.DisplayRegistry + */ public interface Display { /** * @return a list of inputs diff --git a/api/src/main/java/me/shedaniel/rei/api/common/display/DisplaySerializer.java b/api/src/main/java/me/shedaniel/rei/api/common/display/DisplaySerializer.java index 96d8f8ba9..4e7ae55fc 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/display/DisplaySerializer.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/display/DisplaySerializer.java @@ -25,6 +25,13 @@ package me.shedaniel.rei.api.common.display; import net.minecraft.nbt.CompoundTag; +/** + * The display serializer used for display serialization, useful for persistent displays across reloads, + * and server-client communication. + * + * @see SimpleDisplaySerializer + * @see DisplaySerializerRegistry + */ public interface DisplaySerializer { CompoundTag save(CompoundTag tag, D display); diff --git a/api/src/main/java/me/shedaniel/rei/api/common/display/DisplaySerializerRegistry.java b/api/src/main/java/me/shedaniel/rei/api/common/display/DisplaySerializerRegistry.java index a3cf6cc08..df0009462 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/display/DisplaySerializerRegistry.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/display/DisplaySerializerRegistry.java @@ -31,7 +31,7 @@ import me.shedaniel.rei.api.common.transfer.info.MenuSerializationContext; import net.minecraft.nbt.CompoundTag; /** - * The display serializer used for display serialization, useful for persistent displays across reloads, + * The registry for display serializers used for display serialization, useful for persistent displays across reloads, * and server-client communication. * *

This is mostly a fallback system for {@link me.shedaniel.rei.api.common.transfer.info.MenuInfo#save(MenuSerializationContext, Display)}. diff --git a/api/src/main/java/me/shedaniel/rei/api/common/display/SimpleGridMenuDisplay.java b/api/src/main/java/me/shedaniel/rei/api/common/display/SimpleGridMenuDisplay.java new file mode 100644 index 000000000..3832da53e --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/common/display/SimpleGridMenuDisplay.java @@ -0,0 +1,36 @@ +/* + * 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.api.common.display; + +/** + * An display to be used alongside {@link me.shedaniel.rei.api.common.transfer.info.simple.SimpleGridMenuInfo}, + * to provide a {@code width} and {@code height} for the grid of the recipe. + * + * @see me.shedaniel.rei.api.common.transfer.info.simple.SimpleGridMenuInfo + */ +public interface SimpleGridMenuDisplay extends Display { + int getWidth(); + + int getHeight(); +} diff --git a/api/src/main/java/me/shedaniel/rei/api/common/display/SimpleMenuDisplay.java b/api/src/main/java/me/shedaniel/rei/api/common/display/SimpleMenuDisplay.java deleted file mode 100644 index c58ac33a6..000000000 --- a/api/src/main/java/me/shedaniel/rei/api/common/display/SimpleMenuDisplay.java +++ /dev/null @@ -1,36 +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.api.common.display; - -/** - * An display to be used alongside {@link me.shedaniel.rei.api.common.transfer.info.simple.SimpleGridMenuInfo}, - * to provide a {@code width} and {@code height} for the grid of the recipe. - * - * @see me.shedaniel.rei.api.common.transfer.info.simple.SimpleGridMenuInfo - */ -public interface SimpleMenuDisplay extends Display { - int getWidth(); - - int getHeight(); -} diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryIngredient.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryIngredient.java index c8daadd0d..634cdc25f 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryIngredient.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryIngredient.java @@ -26,6 +26,7 @@ package me.shedaniel.rei.api.common.entry; import me.shedaniel.rei.impl.Internals; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; +import org.jetbrains.annotations.ApiStatus; import java.util.List; import java.util.function.Predicate; @@ -81,6 +82,7 @@ public interface EntryIngredient extends List> { EntryIngredient map(UnaryOperator> transformer); + @ApiStatus.NonExtendable interface Builder { Builder add(EntryStack stack); diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryType.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryType.java index 572387e1e..10f083feb 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryType.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryType.java @@ -23,10 +23,19 @@ package me.shedaniel.rei.api.common.entry.type; +import me.shedaniel.rei.api.client.entry.type.BuiltinClientEntryTypes; import me.shedaniel.rei.impl.Internals; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.ApiStatus; +/** + * A type of entry, used to defer an {@link EntryDefinition} once loaded into the game. + * + * @param the type of entry + * @see BuiltinEntryTypes + * @see VanillaEntryTypes + * @see BuiltinClientEntryTypes + */ @ApiStatus.NonExtendable public interface EntryType { static EntryType deferred(ResourceLocation id) { diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/RecipeBookGridMenuInfo.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/RecipeBookGridMenuInfo.java index e9f78c985..63eb177c7 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/RecipeBookGridMenuInfo.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/RecipeBookGridMenuInfo.java @@ -23,12 +23,12 @@ package me.shedaniel.rei.api.common.transfer.info.simple; -import me.shedaniel.rei.api.common.display.SimpleMenuDisplay; +import me.shedaniel.rei.api.common.display.SimpleGridMenuDisplay; import me.shedaniel.rei.api.common.transfer.RecipeFinder; import net.minecraft.world.inventory.RecipeBookMenu; import net.minecraft.world.item.ItemStack; -public class RecipeBookGridMenuInfo, D extends SimpleMenuDisplay> implements SimpleGridMenuInfo { +public class RecipeBookGridMenuInfo, D extends SimpleGridMenuDisplay> implements SimpleGridMenuInfo { @Override public int getCraftingResultSlotIndex(T menu) { return menu.getResultSlotIndex(); diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/SimpleGridMenuInfo.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/SimpleGridMenuInfo.java index ff5d4fa40..bcc94f68f 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/SimpleGridMenuInfo.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/SimpleGridMenuInfo.java @@ -23,7 +23,7 @@ package me.shedaniel.rei.api.common.transfer.info.simple; -import me.shedaniel.rei.api.common.display.SimpleMenuDisplay; +import me.shedaniel.rei.api.common.display.SimpleGridMenuDisplay; import me.shedaniel.rei.api.common.transfer.info.MenuInfo; import me.shedaniel.rei.api.common.transfer.info.MenuInfoContext; import me.shedaniel.rei.api.common.transfer.info.MenuTransferException; @@ -38,13 +38,13 @@ import java.util.stream.IntStream; * A simple implementation of {@link MenuInfo} that provides {@link SlotAccessor} by {@link net.minecraft.world.inventory.Slot}. *

* Designed to be used for {@link net.minecraft.world.inventory.RecipeBookMenu}, and expects a width and height for a grid for the input. - * Requires the display to be a implementation of {@link SimpleMenuDisplay}, to provide the width and height of the display. + * Requires the display to be a implementation of {@link SimpleGridMenuDisplay}, to provide the width and height of the display. * * @param the type of the menu * @param the type of display - * @see SimpleMenuDisplay + * @see SimpleGridMenuDisplay */ -public interface SimpleGridMenuInfo extends SimplePlayerInventoryMenuInfo { +public interface SimpleGridMenuInfo extends SimplePlayerInventoryMenuInfo { default Iterable getInputSlots(MenuInfoContext context) { return getInputStackSlotIds(context) .mapToObj(value -> SlotAccessor.fromSlot(context.getMenu().getSlot(value))) @@ -66,7 +66,7 @@ public interface SimpleGridMenuInfo context) throws MenuTransferException { int width = getCraftingWidth(context.getMenu()); int height = getCraftingHeight(context.getMenu()); - SimpleMenuDisplay display = context.getDisplay(); + SimpleGridMenuDisplay display = context.getDisplay(); if (display != null && (display.getWidth() > width || display.getHeight() > height)) { throw new MenuTransferException(new TranslatableComponent("error.rei.transfer.too_small", width, height)); } -- cgit