diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-06-08 22:12:18 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-06-08 22:12:18 +0800 |
| commit | 52ec5dcd865e6c6eeeb686c4ebe40b8580e90407 (patch) | |
| tree | 4b5bf2e5dfade9b1267359efce432035be499464 /runtime/src/main/java | |
| parent | 95195247b173215c6bb48654ac97f78b1dd28cd3 (diff) | |
| parent | a8dd27ef4e946c879a2e3e5e163683a41896e78f (diff) | |
| download | RoughlyEnoughItems-52ec5dcd865e6c6eeeb686c4ebe40b8580e90407.tar.gz RoughlyEnoughItems-52ec5dcd865e6c6eeeb686c4ebe40b8580e90407.tar.bz2 RoughlyEnoughItems-52ec5dcd865e6c6eeeb686c4ebe40b8580e90407.zip | |
Merge remote-tracking branch 'origin/8.x-1.18.2' into 9.x-1.19
Diffstat (limited to 'runtime/src/main/java')
18 files changed, 202 insertions, 106 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index d1be18c87..8546ddb3e 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -53,10 +53,7 @@ import me.shedaniel.rei.impl.common.entry.comparison.NbtHasherProviderImpl; import me.shedaniel.rei.impl.common.entry.settings.EntrySettingsAdapterRegistryImpl; import me.shedaniel.rei.impl.common.entry.type.EntryTypeRegistryImpl; import me.shedaniel.rei.impl.common.fluid.FluidSupportProviderImpl; -import me.shedaniel.rei.impl.common.logging.FileLogger; -import me.shedaniel.rei.impl.common.logging.Log4JLogger; -import me.shedaniel.rei.impl.common.logging.MultiLogger; -import me.shedaniel.rei.impl.common.logging.TransformingLogger; +import me.shedaniel.rei.impl.common.logging.*; import me.shedaniel.rei.impl.common.logging.performance.PerformanceLogger; import me.shedaniel.rei.impl.common.logging.performance.PerformanceLoggerImpl; import me.shedaniel.rei.impl.common.plugins.PluginManagerImpl; @@ -66,6 +63,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.PackType; import net.minecraft.util.Unit; import org.apache.commons.lang3.mutable.MutableLong; +import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.jetbrains.annotations.ApiStatus; @@ -77,6 +75,7 @@ public class RoughlyEnoughItemsCore { @ApiStatus.Internal public static final InternalLogger LOGGER = new TransformingLogger(new MultiLogger(ImmutableList.of( new FileLogger(Platform.getGameFolder().resolve("logs/rei.log")), + new FilteringLogger(new FileLogger(Platform.getGameFolder().resolve("logs/rei-issues.log")), Level.WARN), new Log4JLogger(LogManager.getFormatterLogger("REI")) )), message -> "[REI] " + message); public static final PerformanceLogger PERFORMANCE_LOGGER = new PerformanceLoggerImpl(); diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java index 2825a2ffb..19d382455 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java @@ -105,7 +105,7 @@ public class RoughlyEnoughItemsNetwork { try { boolean shift = packetByteBuf.readBoolean(); try { - InputSlotCrafter<AbstractContainerMenu, Container, Display> crafter = InputSlotCrafter.start(category, container, player, packetByteBuf.readNbt(), shift); + InputSlotCrafter<AbstractContainerMenu, Container, Display> crafter = InputSlotCrafter.start(category, container, player, packetByteBuf.readAnySizeNbt(), shift); } catch (InputSlotCrafter.NotEnoughMaterialsException e) { if (!(container instanceof RecipeBookMenu)) { return; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java index 5867f4232..c03cd3fb3 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java @@ -27,6 +27,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Matrix4f; import com.mojang.math.Vector4f; import me.shedaniel.rei.api.client.gui.widgets.DelegateWidget; +import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; import java.util.function.Supplier; @@ -83,4 +84,34 @@ public class DelegateWidgetWithTranslate extends DelegateWidget { Vector4f mouse = transformMouse(d, e); return super.mouseScrolled(mouse.x(), mouse.y(), f); } + + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + try { + Widget.translateMouse(translate.get()); + return super.keyPressed(keyCode, scanCode, modifiers); + } finally { + Widget.popMouse(); + } + } + + @Override + public boolean keyReleased(int keyCode, int scanCode, int modifiers) { + try { + Widget.translateMouse(translate.get()); + return super.keyReleased(keyCode, scanCode, modifiers); + } finally { + Widget.popMouse(); + } + } + + @Override + public boolean charTyped(char character, int modifiers) { + try { + Widget.translateMouse(translate.get()); + return super.charTyped(character, modifiers); + } finally { + Widget.popMouse(); + } + } }
\ No newline at end of file diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayCompositeWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayCompositeWidget.java index 1a02fbae3..6f65bc525 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayCompositeWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayCompositeWidget.java @@ -83,7 +83,7 @@ public class DisplayCompositeWidget extends DelegateWidgetWithBounds implements return true; } - if (ConfigObject.getInstance().isFavoritesEnabled() && containsMouse(PointHelper.ofMouse())) { + if (ConfigObject.getInstance().isFavoritesEnabled() && containsMouse(mouse())) { if (ConfigObject.getInstance().getFavoriteKeyCode().matchesKey(keyCode, scanCode)) { FavoritesListWidget favoritesListWidget = ScreenOverlayImpl.getFavoritesListWidget(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayedEntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayedEntryWidget.java index 58f46abaf..bd15c0da5 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayedEntryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DisplayedEntryWidget.java @@ -61,7 +61,7 @@ public abstract class DisplayedEntryWidget extends EntryWidget { @Override protected boolean doAction(double mouseX, double mouseY, int button) { - if (ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen)) { + if (ClientHelper.getInstance().isCheating() && !Screen.hasControlDown() && !(Minecraft.getInstance().screen instanceof DisplayScreen)) { EntryStack<?> entry = getCurrentEntry().copy(); if (!entry.isEmpty()) { if (entry.getType() != VanillaEntryTypes.ITEM) { @@ -88,7 +88,7 @@ public abstract class DisplayedEntryWidget extends EntryWidget { public boolean cancelDeleteItems(EntryStack<?> stack) { if (!interactable || !ConfigObject.getInstance().isGrabbingItems()) return super.cancelDeleteItems(stack); - if (ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen)) { + if (ClientHelper.getInstance().isCheating() && !Screen.hasControlDown() && !(Minecraft.getInstance().screen instanceof DisplayScreen)) { EntryStack<?> entry = getCurrentEntry().copy(); if (!entry.isEmpty()) { if (entry.getType() != VanillaEntryTypes.ITEM) { 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 5122cc9c2..219c02932 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 @@ -418,7 +418,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { public Tooltip getCurrentTooltip(TooltipContext context) { Tooltip tooltip = getCurrentEntry().getTooltip(context); - if (tooltip != null && !ClientHelper.getInstance().isCheating() && getTransferHandler() != null + if (tooltip != null && getTransferHandler() != null && !(Minecraft.getInstance().screen instanceof DisplayScreen)) { tooltip.add(Component.translatable("text.auto_craft.move_items.tooltip").withStyle(ChatFormatting.YELLOW)); } @@ -487,7 +487,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { } protected boolean doAction(double mouseX, double mouseY, int button) { - if (interactableFavorites && ConfigObject.getInstance().isFavoritesEnabled() && containsMouse(PointHelper.ofMouse()) && !getCurrentEntry().isEmpty()) { + if (interactableFavorites && ConfigObject.getInstance().isFavoritesEnabled() && !getCurrentEntry().isEmpty()) { ModifierKeyCode keyCode = ConfigObject.getInstance().getFavoriteKeyCode(); if (keyCode.matchesMouse(button)) { FavoriteEntry favoriteEntry = asFavoriteEntry(); @@ -507,7 +507,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { } } - if (!ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen) && Screen.hasControlDown()) { + if (!(Minecraft.getInstance().screen instanceof DisplayScreen) && Screen.hasControlDown()) { try { TransferHandler handler = getTransferHandler(); @@ -561,7 +561,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if (containsMouse(PointHelper.ofMouse())) { + if (containsMouse(mouse())) { return keyPressedIgnoreContains(keyCode, scanCode, modifiers); } @@ -571,7 +571,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { public boolean keyPressedIgnoreContains(int keyCode, int scanCode, int modifiers) { if (!interactable) return false; - if (interactableFavorites && ConfigObject.getInstance().isFavoritesEnabled() && containsMouse(PointHelper.ofMouse()) && !getCurrentEntry().isEmpty()) { + if (interactableFavorites && ConfigObject.getInstance().isFavoritesEnabled() && !getCurrentEntry().isEmpty()) { if (ConfigObject.getInstance().getFavoriteKeyCode().matchesKey(keyCode, scanCode)) { FavoriteEntry favoriteEntry = asFavoriteEntry(); if (favoriteEntry != null) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/TextFieldWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/TextFieldWidget.java index aa9656cc0..8f3d79114 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/TextFieldWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/basewidgets/TextFieldWidget.java @@ -407,7 +407,7 @@ public class TextFieldWidget extends WidgetWithBounds implements TickableWidget, public void renderBorder(PoseStack matrices) { if (this.hasBorder()) { - if (containsMouse(PointHelper.ofMouse()) || focused) + if (containsMouse(mouse()) || focused) fill(matrices, this.bounds.x - 1, this.bounds.y - 1, this.bounds.x + this.bounds.width + 1, this.bounds.y + this.bounds.height + 1, -1); else fill(matrices, this.bounds.x - 1, this.bounds.y - 1, this.bounds.x + this.bounds.width + 1, this.bounds.y + this.bounds.height + 1, -6250336); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java index 3e16da5c5..7b8356bcb 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java @@ -353,7 +353,7 @@ public class EntryListWidget extends WidgetWithBounds implements OverlayListWidg @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if (containsChecked(PointHelper.ofMouse(), false)) + if (containsChecked(mouse(), false)) for (Widget widget : children) if (widget.keyPressed(keyCode, scanCode, modifiers)) return true; @@ -497,7 +497,7 @@ public class EntryListWidget extends WidgetWithBounds implements OverlayListWidg @Override public EntryStack<?> getFocusedStack() { - Point mouse = PointHelper.ofMouse(); + Point mouse = mouse(); if (containsChecked(mouse, false)) { for (EntryListStackEntry entry : entries) { EntryStack<?> currentEntry = entry.getCurrentEntry(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java index 0c19e7bff..dc486b3ac 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/FavoritesListWidget.java @@ -155,7 +155,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableCo @Override public EntryStack<?> getFocusedStack() { - Point mouse = PointHelper.ofMouse(); + Point mouse = mouse(); EntryStack<?> stack = region.getFocusedStack(); if (stack != null && !stack.isEmpty()) return stack; stack = systemRegion.getFocusedStack(); @@ -264,7 +264,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableCo @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if (containsMouse(PointHelper.ofMouse())) + if (containsMouse(mouse())) for (Widget widget : children()) if (widget.keyPressed(keyCode, scanCode, modifiers)) return true; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java index 1a9fcd097..d3a457716 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java @@ -160,13 +160,26 @@ public class DisplayEntry extends WidgetWithBounds { if (result.hasApplicable) { plusButton.setText(Component.literal("+")); plusButton.render(poses, Math.round(mouse.x()), Math.round(mouse.y()), delta); + poses.popPose(); if (plusButton.containsMouse(Math.round(mouse.x()), Math.round(mouse.y()))) { result.tooltipRenderer.accept(new Point(mouseX, mouseY), Tooltip::queue); + + if (result.renderer != null) { + poses.pushPose(); + if (!stable || !target.equals(bounds)) { + poses.translate(0, 0, 600); + } + poses.translate(xOffset(), yOffset(), 0); + poses.scale(xScale(), yScale(), 1.0F); + + result.renderer.render(poses, mouseX, mouseY, delta, widgets.get(), getBounds(), display); + poses.popPose(); + } } + } else { + poses.popPose(); } - - poses.popPose(); } } @@ -210,18 +223,15 @@ public class DisplayEntry extends WidgetWithBounds { @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - for (Widget widget : widgets.get()) { - if (widget instanceof EntryWidget) { - double mouseX = PointHelper.getMouseFloatingX(), mouseY = PointHelper.getMouseFloatingY(); - if (widget.containsMouse(transformMouseX(mouseX), transformMouseY(mouseY)) - && ((EntryWidget) widget).keyPressedIgnoreContains(keyCode, scanCode, modifiers)) { - return true; - } - } else { + try { + Widget.pushMouse(new Point(transformMouseX(mouse().x), transformMouseY(mouse().y))); + for (Widget widget : widgets.get()) { if (widget.keyPressed(keyCode, scanCode, modifiers)) { return true; } } + } finally { + Widget.popMouse(); } return super.keyPressed(keyCode, scanCode, modifiers); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryWidget.java index 1fd5f0c46..307631c62 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryWidget.java @@ -248,10 +248,10 @@ public class DisplayHistoryWidget extends WidgetWithBounds implements DraggableC } } - scroll.setTo(scroll.target() + ClothConfigInitializer.getScrollStep() * -2 * amount, ClothConfigInitializer.getScrollDuration()); + scroll.setTo(scroll.target() + ClothConfigInitializer.getScrollStep() * amount * (getBounds().getWidth() / -50.0), ClothConfigInitializer.getScrollDuration()); return true; } - + for (DisplayEntry entry : entries) { if (entry.mouseScrolled(mouseX, mouseY, amount)) { return true; @@ -274,6 +274,12 @@ public class DisplayHistoryWidget extends WidgetWithBounds implements DraggableC @Override public boolean mouseReleased(double mouseX, double mouseY, int button) { + for (DisplayEntry entry : entries) { + if (entry.mouseReleased(mouseX, mouseY, button)) { + return true; + } + } + if (ConfigObject.getInstance().getFavoriteKeyCode().matchesMouse(button)) { Point mouse = PointHelper.ofMouse(); @@ -293,18 +299,18 @@ public class DisplayHistoryWidget extends WidgetWithBounds implements DraggableC } } } - - for (DisplayEntry entry : entries) { - if (entry.mouseReleased(mouseX, mouseY, button)) { - return true; - } - } return super.mouseReleased(mouseX, mouseY, button); } @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + for (DisplayEntry entry : entries) { + if (entry.keyPressed(keyCode, scanCode, modifiers)) { + return true; + } + } + if (ConfigObject.getInstance().getFavoriteKeyCode().matchesKey(keyCode, scanCode)) { Point mouse = PointHelper.ofMouse(); @@ -324,12 +330,6 @@ public class DisplayHistoryWidget extends WidgetWithBounds implements DraggableC } } } - - for (DisplayEntry entry : entries) { - if (entry.keyPressed(keyCode, scanCode, modifiers)) { - return true; - } - } return super.keyPressed(keyCode, scanCode, modifiers); } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java index 6fecb94c3..57c80090c 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java @@ -34,7 +34,6 @@ import me.shedaniel.clothconfig2.api.scroll.ScrollingContainer; import me.shedaniel.math.FloatingPoint; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; -import me.shedaniel.math.impl.PointHelper; import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.entry.region.RegionEntry; @@ -170,7 +169,7 @@ public class EntryStacksRegionWidget<T extends RegionEntry<T>> extends WidgetWit @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if (containsMouse(PointHelper.ofMouse())) + if (containsMouse(mouse())) for (Widget widget : children()) if (widget.keyPressed(keyCode, scanCode, modifiers)) return true; @@ -191,7 +190,7 @@ public class EntryStacksRegionWidget<T extends RegionEntry<T>> extends WidgetWit } public EntryStack<?> getFocusedStack() { - Point mouse = PointHelper.ofMouse(); + Point mouse = mouse(); if (innerBounds.contains(mouse)) { for (RealRegionEntry<T> entry : entries.values()) { if (entry.getWidget().containsMouse(mouse)) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/RegionEntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/RegionEntryWidget.java index 436ce315c..338f2a6d1 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/RegionEntryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/RegionEntryWidget.java @@ -137,7 +137,7 @@ public class RegionEntryWidget<T extends RegionEntry<T>> extends DisplayedEntryW @Override protected boolean doAction(double mouseX, double mouseY, int button) { - return entry.getEntry().doAction(button); + return entry.getEntry().doAction(button) || super.doAction(mouseX, mouseY, button); } public RealRegionEntry<T> getEntry() { 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 3f4c96bc2..73bf3122c 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 @@ -287,7 +287,7 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi return filler.mappingFunction.apply(value); } } catch (Throwable e) { - RoughlyEnoughItemsCore.LOGGER.error("Failed to fill displays!", e); + throw new RuntimeException("Failed to fill displays!", e); } return null; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java index 57fb1f077..8b1f60edc 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java @@ -28,6 +28,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import it.unimi.dsi.fastutil.longs.Long2LongMap; +import it.unimi.dsi.fastutil.longs.Long2LongMaps; import it.unimi.dsi.fastutil.longs.Long2LongOpenHashMap; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.client.config.ConfigObject; @@ -375,60 +376,64 @@ public class ViewsImpl implements Views { List<Display> displays = entry.getValue(); for (Display display : displays) { - MenuInfo<AbstractContainerMenu, Display> info = menu != null ? - MenuInfoRegistry.getInstance().getClient(display, context, menu) - : null; - - if (onlyIncludeHasMenu && info == null) { - continue; - } - - Iterable<SlotAccessor> inputSlots = info != null ? info.getInputSlots(context.withDisplay(display)) : Collections.emptySet(); - int slotsCraftable = 0; - boolean containsNonEmpty = false; - List<EntryIngredient> requiredInput = display.getRequiredEntries(); - Long2LongMap invCount = new Long2LongOpenHashMap(CraftableFilter.INSTANCE.getInvStacks()); - for (SlotAccessor inputSlot : inputSlots) { - ItemStack stack = inputSlot.getItemStack(); + try { + MenuInfo<AbstractContainerMenu, Display> info = menu != null ? + MenuInfoRegistry.getInstance().getClient(display, context, menu) + : null; - EntryDefinition<ItemStack> definition; - try { - definition = VanillaEntryTypes.ITEM.getDefinition(); - } catch (NullPointerException e) { - break; + if (onlyIncludeHasMenu && info == null) { + continue; } - if (!stack.isEmpty()) { - long hash = definition.hash(null, stack, ComparisonContext.FUZZY); - long newCount = invCount.get(hash) + Math.max(0, stack.getCount()); - invCount.put(hash, newCount); - } - } - for (EntryIngredient slot : requiredInput) { - if (slot.isEmpty()) { - slotsCraftable++; - continue; + Iterable<SlotAccessor> inputSlots = info != null ? Iterables.concat(info.getInputSlots(context.withDisplay(display)), info.getInventorySlots(context.withDisplay(display))) : Collections.emptySet(); + int slotsCraftable = 0; + boolean containsNonEmpty = false; + List<EntryIngredient> requiredInput = display.getRequiredEntries(); + Long2LongMap invCount = new Long2LongOpenHashMap(info == null ? CraftableFilter.INSTANCE.getInvStacks() : Long2LongMaps.EMPTY_MAP); + for (SlotAccessor inputSlot : inputSlots) { + ItemStack stack = inputSlot.getItemStack(); + + EntryDefinition<ItemStack> definition; + try { + definition = VanillaEntryTypes.ITEM.getDefinition(); + } catch (NullPointerException e) { + break; + } + + if (!stack.isEmpty()) { + long hash = definition.hash(null, stack, ComparisonContext.FUZZY); + long newCount = invCount.get(hash) + Math.max(0, stack.getCount()); + invCount.put(hash, newCount); + } } - for (EntryStack<?> slotPossible : slot) { - if (slotPossible.getType() != VanillaEntryTypes.ITEM) continue; - ItemStack stack = slotPossible.castValue(); - long hashFuzzy = EntryStacks.hashFuzzy(slotP |
