diff options
Diffstat (limited to 'runtime/src/main/java')
21 files changed, 212 insertions, 93 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index b7edd47a7..f0a392e65 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -41,18 +41,26 @@ import me.shedaniel.rei.api.client.favorites.FavoriteMenuEntry; import me.shedaniel.rei.api.client.gui.Renderer; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; +import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; +import me.shedaniel.rei.api.client.registry.display.DisplayCategory; +import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; +import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; import me.shedaniel.rei.api.client.registry.screen.ClickArea; import me.shedaniel.rei.api.client.registry.screen.OverlayDecider; import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.entry.comparison.ItemComparatorRegistry; import me.shedaniel.rei.api.common.entry.type.BuiltinEntryTypes; import me.shedaniel.rei.api.common.entry.type.EntryDefinition; import me.shedaniel.rei.api.common.entry.type.EntryType; +import me.shedaniel.rei.api.common.entry.type.EntryTypeRegistry; +import me.shedaniel.rei.api.common.fluid.FluidSupportProvider; import me.shedaniel.rei.api.common.plugins.PluginManager; import me.shedaniel.rei.api.common.plugins.PluginView; import me.shedaniel.rei.api.common.plugins.REIPlugin; import me.shedaniel.rei.api.common.plugins.REIServerPlugin; +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; @@ -125,6 +133,7 @@ import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Supplier; import java.util.function.UnaryOperator; +import java.util.stream.Collectors; import java.util.stream.Stream; @ApiStatus.Internal @@ -207,7 +216,7 @@ public class RoughlyEnoughItemsCore { if (Objects.equals(definition.getType().getId(), BuiltinEntryTypes.EMPTY_ID)) { return empty().cast(); } - + return new TypedEntryStack<>(definition, value); } }, Internals.EntryStackProvider.class); @@ -216,6 +225,15 @@ public class RoughlyEnoughItemsCore { Internals.attachInstanceSupplier(new PluginManagerImpl<>( REIPlugin.class, UnaryOperator.identity(), + usedTime -> { + RoughlyEnoughItemsCore.LOGGER.info("Reloaded Plugin Manager [%s] with %d entry types, %d item comparators and %d fluid support providers in %dms.", + REIPlugin.class.getSimpleName(), + EntryTypeRegistry.getInstance().values().size(), + ItemComparatorRegistry.getInstance().comparatorSize(), + FluidSupportProvider.getInstance().size(), + usedTime + ); + }, new EntryTypeRegistryImpl(), new RecipeManagerContextImpl<>(RecipeManagerContextImpl.supplier()), new ItemComparatorRegistryImpl(), @@ -224,6 +242,13 @@ public class RoughlyEnoughItemsCore { Internals.attachInstanceSupplier(new PluginManagerImpl<>( REIServerPlugin.class, view -> view.then(PluginView.getInstance()), + usedTime -> { + RoughlyEnoughItemsCore.LOGGER.info("Reloaded Plugin Manager [%s] with %d menu infos in %dms.", + REIServerPlugin.class.getSimpleName(), + MenuInfoRegistry.getInstance().infoSize(), + usedTime + ); + }, new MenuInfoRegistryImpl()), "serverPluginManager"); } @@ -233,7 +258,7 @@ public class RoughlyEnoughItemsCore { ClientInternals.attachInstance((Supplier<EntryRenderer<?>>) () -> EmptyEntryDefinition.EmptyRenderer.INSTANCE, "emptyEntryRenderer"); ClientInternals.attachInstance((BiFunction<Supplier<FavoriteEntry>, Supplier<CompoundTag>, FavoriteEntry>) (supplier, toJson) -> new FavoriteEntry() { FavoriteEntry value = null; - + @Override public FavoriteEntry getUnwrapped() { if (this.value == null) { @@ -241,7 +266,7 @@ public class RoughlyEnoughItemsCore { } return Objects.requireNonNull(value).getUnwrapped(); } - + @Override public UUID getUuid() { return getUnwrapped().getUuid(); @@ -285,16 +310,16 @@ public class RoughlyEnoughItemsCore { public ResourceLocation getType() { return getUnwrapped().getType(); } - + @Override public CompoundTag save(CompoundTag tag) { if (toJson == null) { return getUnwrapped().save(tag); } - + return tag.merge(toJson.get()); } - + @Override public boolean isSame(FavoriteEntry other) { return getUnwrapped().isSame(other.getUnwrapped()); @@ -308,18 +333,18 @@ public class RoughlyEnoughItemsCore { ClientInternals.attachInstance((BiFunction<@Nullable Point, Collection<Component>, Tooltip>) QueuedTooltip::create, "tooltipProvider"); ClientInternals.attachInstance((Function<@Nullable Boolean, ClickArea.Result>) successful -> new ClickArea.Result() { private List<CategoryIdentifier<?>> categories = Lists.newArrayList(); - + @Override public ClickArea.Result category(CategoryIdentifier<?> category) { this.categories.add(category); return this; } - + @Override public boolean isSuccessful() { return successful; } - + @Override public Stream<CategoryIdentifier<?>> getCategories() { return categories.stream(); @@ -328,6 +353,22 @@ public class RoughlyEnoughItemsCore { ClientInternals.attachInstanceSupplier(new PluginManagerImpl<>( REIClientPlugin.class, view -> view.then(PluginView.getInstance()), + usedTime -> { + RoughlyEnoughItemsCore.LOGGER.info("Reloaded Plugin Manager [%s] with %d entries, %d displays, %d display visibility predicates, %d categories (%s), %d exclusion zones and %d overlay deciders in %dms.", + REIClientPlugin.class.getSimpleName(), + EntryRegistry.getInstance().size(), + DisplayRegistry.getInstance().displaySize(), + DisplayRegistry.getInstance().getVisibilityPredicates().size(), + CategoryRegistry.getInstance().size(), + CategoryRegistry.getInstance().stream() + .map(CategoryRegistry.CategoryConfiguration::getCategory) + .map(DisplayCategory::getTitle) + .map(Component::getString).collect(Collectors.joining(", ")), + ScreenRegistry.getInstance().exclusionZones().getZonesCount(), + ScreenRegistry.getInstance().getDeciders().size(), + usedTime + ); + }, new ViewsImpl(), new SearchProviderImpl(), new ConfigManagerImpl(), @@ -423,7 +464,7 @@ public class RoughlyEnoughItemsCore { } @Environment(EnvType.CLIENT) - private boolean shouldReturn(Screen screen) { + public static boolean shouldReturn(Screen screen) { if (!REIHelper.getInstance().getOverlay().isPresent()) return true; if (screen == null) return true; if (screen != Minecraft.getInstance().screen) return true; @@ -431,7 +472,7 @@ public class RoughlyEnoughItemsCore { } @Environment(EnvType.CLIENT) - private boolean _shouldReturn(Screen screen) { + private static boolean _shouldReturn(Screen screen) { try { Class<? extends Screen> screenClass = screen.getClass(); for (OverlayDecider decider : ScreenRegistry.getInstance().getDeciders()) { 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 abaf8443f..96c9741c6 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 @@ -32,6 +32,7 @@ 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.DisplayScreenType; +import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.client.view.ViewSearchBuilder; import me.shedaniel.rei.api.client.view.Views; @@ -43,7 +44,6 @@ import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.impl.ClientInternals; import me.shedaniel.rei.impl.client.gui.screen.CompositeDisplayViewingScreen; import me.shedaniel.rei.impl.client.gui.screen.DefaultDisplayViewingScreen; -import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; import me.shedaniel.rei.impl.client.gui.screen.UncertainDisplayViewingScreen; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; 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 index 568149a11..e9c899a95 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java @@ -34,11 +34,11 @@ import me.shedaniel.rei.api.client.REIOverlay; 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.registry.screen.ScreenRegistry; import me.shedaniel.rei.impl.client.gui.ContainerScreenOverlay; -import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; import me.shedaniel.rei.impl.client.gui.widget.search.OverlaySearchField; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; 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 0c41f834c..7a6e9f32d 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 @@ -25,7 +25,6 @@ package me.shedaniel.rei.impl.client.config.entries; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.DefaultVertexFormat; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java index c2c69f1a4..8abd4ea35 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ContainerScreenOverlay.java @@ -23,7 +23,6 @@ package me.shedaniel.rei.impl.client.gui; -import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.mojang.blaze3d.platform.Window; @@ -201,22 +200,17 @@ public class ContainerScreenOverlay extends REIOverlay { } @Override - public DraggingContext getDraggingContext() { + public DraggingContext<?> getDraggingContext() { return draggingStack; } - private static <T> Iterable<T> buildWidgetsTree(Iterable<? extends GuiEventListener> listeners, Class<T> type) { - return Widgets.walk(listeners, type::isInstance); - } - public void init(boolean useless) { init(); } public void init() { - Iterable<DraggableStackProvider> stackProviders = buildWidgetsTree(Iterables.concat(widgets, Minecraft.getInstance().screen.children()), DraggableStackProvider.class); - Iterable<DraggableStackVisitor> stackVisitors = buildWidgetsTree(Iterables.concat(widgets, Minecraft.getInstance().screen.children()), DraggableStackVisitor.class); - draggingStack.set(DraggableStackProvider.from(() -> stackProviders), DraggableStackVisitor.from(() -> stackVisitors)); + draggingStack.set(DraggableStackProvider.from(() -> ScreenRegistry.getInstance().getDraggableProviders()), + DraggableStackVisitor.from(() -> ScreenRegistry.getInstance().getDraggableVisitors())); this.shouldReload = false; //Update Variables diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java index 4fdbf4976..8086a48cc 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java @@ -35,20 +35,22 @@ import me.shedaniel.rei.api.client.gui.drag.DraggingContext; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.common.util.Animator; import me.shedaniel.rei.impl.client.gui.widget.LateRenderable; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.screens.Screen; import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.function.Supplier; -public class CurrentDraggingStack extends Widget implements LateRenderable, DraggingContext { - private DraggableStackProvider provider; - private DraggableStackVisitor visitor; +public class CurrentDraggingStack extends Widget implements LateRenderable, DraggingContext<Screen> { + private DraggableStackProvider<Screen> provider; + private DraggableStackVisitor<Screen> visitor; @Nullable private DraggableEntry entry; private final List<RenderBackEntry> backToOriginals = new ArrayList<>(); - public void set(DraggableStackProvider provider, DraggableStackVisitor visitor) { + public void set(DraggableStackProvider<Screen> provider, DraggableStackVisitor<Screen> visitor) { this.provider = provider; this.visitor = visitor; } @@ -119,7 +121,7 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag private boolean drop() { if (entry != null && entry.dragging) { - Optional<DraggableStackVisitor.Acceptor> acceptor = visitor.visitDraggedStack(entry.stack); + Optional<DraggableStackVisitor.Acceptor> acceptor = visitor.visitDraggedStack(this, entry.stack); entry.stack.release(acceptor.isPresent()); acceptor.ifPresent(a -> a.accept(entry.stack)); entry = null; @@ -131,6 +133,11 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag } @Override + public Screen getScreen() { + return Minecraft.getInstance().screen; + } + + @Override @Nullable public DraggableStack getCurrentStack() { return entry != null && entry.dragging ? entry.stack : null; @@ -147,7 +154,7 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag backToOriginals.add(new RenderBackEntry(stack, initialPosition, position)); } - private class DraggableEntry { + private static class DraggableEntry { private final DraggableStack stack; private final Point start; private boolean dragging = false; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java index 79ab2d5cc..81cfb1397 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java @@ -36,7 +36,7 @@ import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.favorites.FavoriteEntry; import me.shedaniel.rei.api.client.gui.drag.DraggableStack; -import me.shedaniel.rei.api.client.gui.drag.DraggableStackProvider; +import me.shedaniel.rei.api.client.gui.drag.DraggableStackProviderWidget; import me.shedaniel.rei.api.client.gui.drag.DraggingContext; import me.shedaniel.rei.api.client.gui.widgets.Slot; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; @@ -45,6 +45,7 @@ import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.impl.client.REIHelperImpl; import me.shedaniel.rei.impl.client.gui.ContainerScreenOverlay; import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.TextComponent; import net.minecraft.resources.ResourceLocation; @@ -59,7 +60,7 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -public class EntryWidget extends Slot implements DraggableStackProvider { +public class EntryWidget extends Slot implements DraggableStackProviderWidget { @ApiStatus.Internal public static long stackDisplayOffset = 0; protected static final ResourceLocation RECIPE_GUI = new ResourceLocation("roughlyenoughitems", "textures/gui/recipecontainer.png"); @@ -446,7 +447,7 @@ public class EntryWidget extends Slot implements DraggableStackProvider { @Override @Nullable - public DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { + public DraggableStack getHoveredStack(DraggingContext<Screen> context, double mouseX, double mouseY) { if (!getCurrentEntry().isEmpty() && containsMouse(mouseX, mouseY)) { return new DraggableStack() { EntryStack<?> stack = getCurrentEntry().copy(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java index d6f45de76..57ccd0b6a 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java @@ -42,15 +42,11 @@ import me.shedaniel.rei.api.client.REIHelper; import me.shedaniel.rei.api.client.REIOverlay; import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.config.ConfigObject; -import me.shedaniel.rei.api.client.entry.renderer.BatchEntryRenderer; import me.shedaniel.rei.api.client.favorites.FavoriteEntry; import me.shedaniel.rei.api.client.favorites.FavoriteEntryType; import me.shedaniel.rei.api.client.favorites.FavoriteMenuEntry; import me.shedaniel.rei.api.client.gui.AbstractContainerEventHandler; -import me.shedaniel.rei.api.client.gui.drag.DraggableStack; -import me.shedaniel.rei.api.client.gui.drag.DraggableStackProvider; -import me.shedaniel.rei.api.client.gui.drag.DraggableStackVisitor; -import me.shedaniel.rei.api.client.gui.drag.DraggingContext; +import me.shedaniel.rei.api.client.gui.drag.*; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; @@ -87,7 +83,7 @@ import static me.shedaniel.rei.impl.client.gui.widget.EntryListWidget.entrySize; import static me.shedaniel.rei.impl.client.gui.widget.EntryListWidget.notSteppingOnExclusionZones; @ApiStatus.Internal -public class FavoritesListWidget extends WidgetWithBounds implements DraggableStackProvider, DraggableStackVisitor { +public class FavoritesListWidget extends WidgetWithBounds implements DraggableStackProviderWidget, DraggableStackVisitorWidget { protected final ScrollingContainer scrolling = new ScrollingContainer() { @Override public Rectangle getBounds() { @@ -152,7 +148,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt @Override @Nullable - public DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { + public DraggableStack getHoveredStack(DraggingContext<Screen> context, double mouseX, double mouseY) { if (innerBounds.contains(mouseX, mouseY)) { for (Entry entry : entries.values()) { if (entry.getWidget().containsMouse(mouseX, mouseY)) { @@ -211,7 +207,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt } @Override - public Optional<Acceptor> visitDraggedStack(DraggableStack stack) { + public Optional<DraggableStackVisitor.Acceptor> visitDraggedStack(DraggingContext<Screen> context, DraggableStack stack) { if (innerBounds.contains(PointHelper.ofMouse())) { EntrySerializer<?> serializer = stack.getStack().getDefinition().getSerializer(); if (stack instanceof FavoriteDraggableStack || (serializer.supportReading() && serializer.supportSaving())) { @@ -393,7 +389,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt } public int getReleaseIndex() { - DraggingContext context = DraggingContext.getInstance(); + DraggingContext<?> context = DraggingContext.getInstance(); Point position = context.getCurrentPosition(); if (context.isDraggingStack() && currentBounds.contains(position)) { int entrySize = entrySize(); @@ -455,7 +451,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt } public void drop(Entry entry, DraggableStack stack, FavoriteEntry favoriteEntry) { - DraggingContext context = DraggingContext.getInstance(); + DraggingContext<?> context = DraggingContext.getInstance(); double x = context.getCurrentPosition().x; double y = context.getCurrentPosition().y; entry.startedDraggingPosition = null; @@ -544,7 +540,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt if (!hidden) { this.hidden = true; if (!ConfigObject.getInstance().isFavoritesAnimated()) this.size.setAs(0); - else this.size.setTo(0, 1000); + else this.size.setTo(0, 400); } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabWidget.java index 90d5f2035..d8cd4566d 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabWidget.java @@ -30,7 +30,7 @@ import me.shedaniel.rei.api.client.ClientHelper; import me.shedaniel.rei.api.client.REIHelper; import me.shedaniel.rei.api.client.gui.Renderer; import me.shedaniel.rei.api.client.gui.drag.DraggableStack; -import me.shedaniel.rei.api.client.gui.drag.DraggableStackProvider; +import me.shedaniel.rei.api.client.gui.drag.DraggableStackProviderWidget; import me.shedaniel.rei.api.client.gui.drag.DraggingContext; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.gui.widgets.Widget; @@ -38,6 +38,7 @@ import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.entry.EntryStack; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextComponent; import net.minecraft.resources.ResourceLocation; @@ -49,7 +50,7 @@ import java.util.List; import java.util.function.Predicate; @ApiStatus.Internal -public class TabWidget extends WidgetWithBounds implements DraggableStackProvider { +public class TabWidget extends WidgetWithBounds implements DraggableStackProviderWidget { public static final ResourceLocation CHEST_GUI_TEXTURE = new ResourceLocation("roughlyenoughitems", "textures/gui/recipecontainer.png"); public static final ResourceLocation CHEST_GUI_TEXTURE_DARK = new ResourceLocation("roughlyenoughitems", "textures/gui/recipecontainer_dark.png"); @@ -139,7 +140,7 @@ public class TabWidget extends WidgetWithBounds implements DraggableStackProvide @Override @Nullable - public DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY) { + public DraggableStack getHoveredStack(DraggingContext<Screen> context, double mouseX, double mouseY) { if (isShown() && renderer instanceof EntryStack && containsMouse(mouseX, mouseY)) { return new DraggableStack() { EntryStack<?> stack = ((EntryStack<?>) renderer).copy(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java index 1fa56fe0b..04f44839f 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java @@ -36,7 +36,6 @@ import me.shedaniel.rei.impl.common.registry.RecipeManagerContextImpl; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.crafting.Recipe; import org.apache.commons.lang3.mutable.MutableInt; -import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -61,7 +60,7 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi } @Override - public int getDisplayCount() { + public int displaySize() { return displayCount.getValue(); } @@ -133,8 +132,8 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi } @Override - public <T, D extends Display> void registerFiller(Class<T> typeClass, Predicate<? extends T> predicate, Function<T, D> mappingFunction) { - fillers.add(new DisplayFiller<>(typeClass, (Predicate<T>) predicate, mappingFunction)); + public <T, D extends Display> void registerFiller(Class<T> typeClass, Predicate<? extends T> predicate, Function<T, D> filler) { + fillers.add(new DisplayFiller<>(typeClass, (Predicate<T>) predicate, filler)); } @Override @@ -153,8 +152,8 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi List<Recipe<?>> allSortedRecipes = getAllSortedRecipes(); for (int i = allSortedRecipes.size() - 1; i >= 0; i--) { Recipe<?> recipe = allSortedRecipes.get(i); - Display display = tryFillDisplay(recipe); - if (display != null) { + Collection<Display> displays = tryFillDisplay(recipe); + for (Display display : displays) { registerDisplay(0, display); } } @@ -162,14 +161,23 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi } @Override - @Nullable - public <T> Display tryFillDisplay(T value) { - if (value instanceof Display) return (Display) value; + public <T> Collection<Display> tryFillDisplay(T value) { + if (value instanceof Display) return Collections.singleton((Display) value); + List<Display> displays = null; for (DisplayFiller<?, ?> filler : fillers) { Display display = tryFillDisplayGenerics(filler, value); - if (display != null) return display; + if (display != null) { + if (displays == null) displays = Collections.singletonList(display); + else { + if (!(displays instanceof ArrayList)) displays = new ArrayList<>(displays); + displays.add(display); + } + } } - return null; + if (displays != null) { + return displays; + } + return Collections.emptyList(); } private <T, D extends Display> D tryFillDisplayGenerics(DisplayFiller<T, D> filler, Object value) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ExclusionZonesImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ExclusionZonesImpl.java index aab52eb01..bbc097d9d 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/ExclusionZonesImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/imp |
