From 87e9a9de92ee0b4d8045be497f72a79fc0a0c4c6 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Fri, 27 May 2022 19:01:29 +0800 Subject: Remove cyclops-core dep --- forge/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge/build.gradle b/forge/build.gradle index 1294d5347..203eb7b1b 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -130,7 +130,7 @@ dependencies { // modRuntime("curse.maven:integrated-dynamics-236307:3631804") // modRuntime("curse.maven:common-capabilities-247007:3614900") // modRuntime("curse.maven:evilcraft-74610:3795956") - modRuntime("curse.maven:cyclops-core-236307:3778682") + // modRuntime("curse.maven:cyclops-core-236307:3778682") // modRuntime("curse.maven:elemental-craft-395158:3593428") // modRuntime("curse.maven:datapack-anvil-432817:3569515") // modRuntime("curse.maven:assemblylinemachines-388282:3623609") -- cgit From 1d0a4480f881350cef45f0f1f76f48cd293a7db8 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Fri, 27 May 2022 20:22:53 +0800 Subject: Fix clicking pinned JEI slots --- .../rei/api/client/gui/widgets/Widget.java | 33 ++++++++++++++++++++++ .../gui/widget/DelegateWidgetWithTranslate.java | 31 ++++++++++++++++++++ .../client/gui/widget/DisplayCompositeWidget.java | 2 +- .../rei/impl/client/gui/widget/EntryWidget.java | 6 ++-- .../gui/widget/basewidgets/TextFieldWidget.java | 2 +- .../gui/widget/entrylist/EntryListWidget.java | 4 +-- .../gui/widget/favorites/FavoritesListWidget.java | 4 +-- .../gui/widget/favorites/history/DisplayEntry.java | 13 ++++----- .../gui/widget/region/EntryStacksRegionWidget.java | 5 ++-- 9 files changed, 80 insertions(+), 20 deletions(-) diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widget.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widget.java index 1e88199b4..3c753e747 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widget.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/widgets/Widget.java @@ -24,8 +24,11 @@ package me.shedaniel.rei.api.client.gui.widgets; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; +import com.mojang.math.Vector4f; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; +import me.shedaniel.math.impl.PointHelper; import me.shedaniel.rei.api.client.gui.AbstractContainerEventHandler; import me.shedaniel.rei.api.client.gui.Renderer; import net.fabricmc.api.EnvType; @@ -33,6 +36,8 @@ import net.fabricmc.api.Environment; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; +import java.util.Stack; + /** * The base class for a screen widget * @@ -49,6 +54,34 @@ public abstract class Widget extends AbstractContainerEventHandler implements ne * The font for rendering text */ protected final Font font = minecraft.font; + private static final Stack mouseStack = new Stack<>(); + + public static Point mouse() { + return mouseStack.empty() ? PointHelper.ofMouse() : mouseStack.peek(); + } + + public static Point pushMouse(Point mouse) { + return mouseStack.push(mouse); + } + + public static Point popMouse() { + return mouseStack.pop(); + } + + public static Point translateMouse(PoseStack poses) { + return translateMouse(poses.last().pose()); + } + + public static Point translateMouse(double x, double y, double z) { + return translateMouse(Matrix4f.createTranslateMatrix((float) x, (float) y, (float) z)); + } + + public static Point translateMouse(Matrix4f pose) { + Point mouse = mouse(); + Vector4f mouseVec = new Vector4f(mouse.x, mouse.y, 0, 1); + mouseVec.transform(pose); + return pushMouse(mouse); + } public int getZ() { return this.getBlitOffset(); 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/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java index 746324a33..ebb2a87b8 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 @@ -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(); @@ -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 ce35d9c07..ff338307b 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 @@ -354,7 +354,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; @@ -498,7 +498,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 35beb1432..e21d81e3f 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 @@ -210,18 +210,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.translateMouse(xOffset, 0, 0); + 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/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> 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> extends WidgetWit } public EntryStack getFocusedStack() { - Point mouse = PointHelper.ofMouse(); + Point mouse = mouse(); if (innerBounds.contains(mouse)) { for (RealRegionEntry entry : entries.values()) { if (entry.getWidget().containsMouse(mouse)) { -- cgit From be40970223e29232b8e7b0e8c7fa1ba8ac5262a2 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Fri, 27 May 2022 20:30:37 +0800 Subject: Disable fluid amount display on JEI slots --- api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java | 5 +++++ .../me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java index 1067ff6d3..5119140aa 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/EntryStack.java @@ -243,6 +243,10 @@ public interface EntryStack extends TextRepresentable, Renderer { @Environment(EnvType.CLIENT) public static Settings, List>> TOOLTIP_APPEND_EXTRA; @Environment(EnvType.CLIENT) + @Deprecated + @ApiStatus.Internal + public static Settings FLUID_AMOUNT_VISIBLE; + @Environment(EnvType.CLIENT) public static Settings FLUID_RENDER_RATIO; static { @@ -252,6 +256,7 @@ public interface EntryStack extends TextRepresentable, Renderer { CONTAINING_NS = new Settings<>((stack, ns) -> ns); TOOLTIP_APPEND_EXTRA = new Settings<>(stack -> Collections.emptyList()); FLUID_RENDER_RATIO = new Settings<>(1.0F); + FLUID_AMOUNT_VISIBLE = new Settings<>(true); }); } diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java index a8329b4c8..5bdfec4c1 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java @@ -289,7 +289,7 @@ public class FluidEntryDefinition implements EntryDefinition, EntryS return null; List toolTip = Lists.newArrayList(entry.asFormattedText()); long amount = entry.getValue().getAmount(); - if (amount >= 0) { + if (amount >= 0 && entry.get(EntryStack.Settings.FLUID_AMOUNT_VISIBLE)) { String amountTooltip = I18n.get(FLUID_AMOUNT, entry.getValue().getAmount()); if (amountTooltip != null) { toolTip.addAll(Stream.of(amountTooltip.split("\n")).map(TextComponent::new).collect(Collectors.toList())); -- cgit From f3ee66ef6cf99b21c564abda9b92fee1e677f081 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 28 May 2022 00:25:27 +0800 Subject: Fix #870 --- forge/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge/build.gradle b/forge/build.gradle index 203eb7b1b..a42b0c1db 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -96,8 +96,8 @@ dependencies { // modRuntime("curse.maven:geckolib-388172:3627502") // modRuntime("curse.maven:refined-storage-243076:3623324") // modRuntime("appeng:appliedenergistics2:10.0.1") - // modRuntime("curse.maven:tcon-74072:3273213") - // modRuntime("curse.maven:mantle-74924:3634761") + modRuntime("curse.maven:tcon-74072:3784732") + modRuntime("curse.maven:mantle-74924:3784500") // modRuntime("curse.maven:jer-240630:3575590") // modRuntime("curse.maven:jep-417645:3550303") // modRuntime("curse.maven:simple-storage-network-268495:3594529") -- cgit From 0e6afb30a19e9058b79202b7309d4b9c1d797754 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 28 May 2022 00:28:25 +0800 Subject: Fix #861 --- .../rei/impl/client/gui/widget/region/RegionEntryWidget.java | 2 +- .../plugin/client/runtime/DefaultClientRuntimePlugin.java | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) 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> 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 getEntry() { diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java index c0e0fc30e..b10ea8b66 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java @@ -221,18 +221,6 @@ public class DefaultClientRuntimePlugin implements REIClientPlugin { @Override public boolean doAction(int button) { - if (!(ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen))) return false; - EntryStack entry = stack.copy(); - if (!entry.isEmpty()) { - if (entry.getType() != VanillaEntryTypes.ITEM) { - EntryStack cheatsAs = entry.cheatsAs(); - entry = cheatsAs.isEmpty() ? entry : cheatsAs; - } - if (entry.getType() == VanillaEntryTypes.ITEM) - entry.castValue().setCount(button != 1 && !Screen.hasShiftDown() == (ConfigObject.getInstance().getItemCheatingMode() == ItemCheatingMode.REI_LIKE) ? 1 : entry.castValue().getMaxStackSize()); - return ClientHelper.getInstance().tryCheatingEntry(entry); - } - return false; } -- cgit From 0320403c44554b609bf87876b103e02fd84c7a1b Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 28 May 2022 16:43:53 +0800 Subject: Fix CME in parallel registration for JEI recipes --- .../me/shedaniel/rei/RoughlyEnoughItemsCore.java | 7 +-- .../registry/display/DisplayRegistryImpl.java | 2 +- .../rei/impl/common/logging/FilteringLogger.java | 64 ++++++++++++++++++++++ 3 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 runtime/src/main/java/me/shedaniel/rei/impl/common/logging/FilteringLogger.java 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/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 Date: Sat, 28 May 2022 17:20:40 +0800 Subject: Fix tinkers transfer --- .../transfer/info/clean/InputCleanHandler.java | 2 +- .../info/simple/RecipeBookGridMenuInfo.java | 6 +- .../info/simple/SimplePlayerInventoryMenuInfo.java | 18 ++-- .../shedaniel/rei/impl/client/view/ViewsImpl.java | 97 ++++++++++++---------- 4 files changed, 68 insertions(+), 55 deletions(-) diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/clean/InputCleanHandler.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/clean/InputCleanHandler.java index 38fac60ce..934893518 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/clean/InputCleanHandler.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/clean/InputCleanHandler.java @@ -43,7 +43,7 @@ public interface InputCleanHandler void returnSlotsToPlayerInventory(MenuInfoContext context, DumpHandler dumpHandler, SlotAccessor slotAccessor) { ItemStack stackToReturn = slotAccessor.getItemStack(); if (!stackToReturn.isEmpty()) { - for (; stackToReturn.getCount() > 0; slotAccessor.takeStack(1)) { + for (; !(stackToReturn = slotAccessor.getItemStack()).isEmpty(); slotAccessor.takeStack(1)) { ItemStack stackToInsert = stackToReturn.copy(); stackToInsert.setCount(1); if (!dumpGenericsFtw(context, dumpHandler, stackToInsert)) { 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 30ba221fc..9455c621c 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 @@ -25,6 +25,8 @@ package me.shedaniel.rei.api.common.transfer.info.simple; import me.shedaniel.rei.api.common.display.SimpleGridMenuDisplay; import me.shedaniel.rei.api.common.transfer.RecipeFinder; +import me.shedaniel.rei.api.common.transfer.info.MenuInfoContext; +import net.minecraft.world.entity.player.StackedContents; import net.minecraft.world.inventory.RecipeBookMenu; import net.minecraft.world.item.ItemStack; @@ -56,8 +58,8 @@ public class RecipeBookGridMenuInfo, D extends Simpl } @Override - public void populateRecipeFinder(T menu, RecipeFinder finder) { - menu.fillCraftSlotsStackedContents(new net.minecraft.world.entity.player.StackedContents() { + public void populateRecipeFinder(MenuInfoContext context, RecipeFinder finder) { + context.getMenu().fillCraftSlotsStackedContents(new StackedContents() { @Override public void accountSimpleStack(ItemStack stack) { finder.addNormalItem(stack); diff --git a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/SimplePlayerInventoryMenuInfo.java b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/SimplePlayerInventoryMenuInfo.java index 246bff88f..d6511b521 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/SimplePlayerInventoryMenuInfo.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/transfer/info/simple/SimplePlayerInventoryMenuInfo.java @@ -23,7 +23,6 @@ package me.shedaniel.rei.api.common.transfer.info.simple; -import com.google.common.base.MoreObjects; import me.shedaniel.rei.api.common.display.Display; import me.shedaniel.rei.api.common.transfer.RecipeFinder; import me.shedaniel.rei.api.common.transfer.RecipeFinderPopulator; @@ -53,7 +52,7 @@ public interface SimplePlayerInventoryMenuInfo getDumpHandler() { return (context, stackToDump) -> { Iterable inventoryStacks = getInventorySlots(context); + SlotAccessor occupiedSlotWithRoomForStack = DumpHandler.getOccupiedSlotWithRoomForStack(stackToDump, inventoryStacks); + SlotAccessor emptySlot = DumpHandler.getEmptySlot(inventoryStacks); - SlotAccessor nextSlot = MoreObjects.firstNonNull( - DumpHandler.getOccupiedSlotWithRoomForStack(stackToDump, inventoryStacks), - DumpHandler.getEmptySlot(inventoryStacks) - ); + SlotAccessor nextSlot = occupiedSlotWithRoomForStack == null ? emptySlot : occupiedSlotWithRoomForStack; if (nextSlot == null) { return false; } @@ -99,8 +97,16 @@ public interface SimplePlayerInventoryMenuInfo context, RecipeFinder finder) { + for (SlotAccessor inventoryStack : getInputSlots(context)) { + finder.addNormalItem(inventoryStack.getItemStack()); + } + populateRecipeFinder(context.getMenu(), finder); + } + /** * Used to forcefully clear the input slots, if things did not dump to the player's inventory successfully. * The default implementation here is to void the items, as with vanilla, 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 displays = entry.getValue(); for (Display display : displays) { - MenuInfo info = menu != null ? - MenuInfoRegistry.getInstance().getClient(display, context, menu) - : null; - - if (onlyIncludeHasMenu && info == null) { - continue; - } - - Iterable inputSlots = info != null ? info.getInputSlots(context.withDisplay(display)) : Collections.emptySet(); - int slotsCraftable = 0; - boolean containsNonEmpty = false; - List requiredInput = display.getRequiredEntries(); - Long2LongMap invCount = new Long2LongOpenHashMap(CraftableFilter.INSTANCE.getInvStacks()); - for (SlotAccessor inputSlot : inputSlots) { - ItemStack stack = inputSlot.getItemStack(); + try { + MenuInfo info = menu != null ? + MenuInfoRegistry.getInstance().getClient(display, context, menu) + : null; - EntryDefinition 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 inputSlots = info != null ? Iterables.concat(info.getInputSlots(context.withDisplay(display)), info.getInventorySlots(context.withDisplay(display))) : Collections.emptySet(); + int slotsCraftable = 0; + boolean containsNonEmpty = false; + List requiredInput = display.getRequiredEntries(); + Long2LongMap invCount = new Long2LongOpenHashMap(info == null ? CraftableFilter.INSTANCE.getInvStacks() : Long2LongMaps.EMPTY_MAP); + for (SlotAccessor inputSlot : inputSlots) { + ItemStack stack = inputSlot.getItemStack(); + + EntryDefinition 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(slotPossible); - long availableAmount = invCount.get(hashFuzzy); - if (availableAmount >= stack.getCount()) { - invCount.put(hashFuzzy, availableAmount - stack.getCount()); - containsNonEmpty = true; + for (EntryIngredient slot : requiredInput) { + if (slot.isEmpty()) { slotsCraftable++; - break; + continue; + } + for (EntryStack slotPossible : slot) { + if (slotPossible.getType() != VanillaEntryTypes.ITEM) continue; + ItemStack stack = slotPossible.castValue(); + long hashFuzzy = EntryStacks.hashFuzzy(slotPossible); + long availableAmount = invCount.get(hashFuzzy); + if (availableAmount >= stack.getCount()) { + invCount.put(hashFuzzy, availableAmount - stack.getCount()); + containsNonEmpty = true; + slotsCraftable++; + break; + } } } - } - if (slotsCraftable == display.getRequiredEntries().size() && containsNonEmpty) { - if (info != null && !onlyIncludeHasMenu) { - onlyIncludeHasMenu = true; - craftables.clear(); + if (slotsCraftable == display.getRequiredEntries().size() && containsNonEmpty) { + if (info != null && !onlyIncludeHasMenu) { + onlyIncludeHasMenu = true; + craftables.clear(); + } + + display.getOutputEntries().stream().flatMap(Collection::stream).collect(Collectors.toCollection(() -> craftables)); } - - display.getOutputEntries().stream().flatMap(Collection::stream).collect(Collectors.toCollection(() -> craftables)); + } catch (Throwable t) { + RoughlyEnoughItemsCore.LOGGER.warn("Error while checking if display is craftable", t); } } } -- cgit From 56b60c82c3566e471187bbe8b4e93fe4a3fad05f Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 28 May 2022 17:25:12 +0800 Subject: Allow ctrl+click when cheat mode is on --- .../me/shedaniel/rei/impl/client/gui/widget/DisplayedEntryWidget.java | 4 ++-- .../java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) 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 ebb2a87b8..209de8d69 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(Point point) { Tooltip tooltip = getCurrentEntry().getTooltip(point); - if (tooltip != null && !ClientHelper.getInstance().isCheating() && getTransferHandler() != null + if (tooltip != null && getTransferHandler() != null && !(Minecraft.getInstance().screen instanceof DisplayScreen)) { tooltip.add(new TranslatableComponent("text.auto_craft.move_items.tooltip").withStyle(ChatFormatting.YELLOW)); } @@ -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(); -- cgit From f24d49576318fdbec2bb695323184a664dd70f4c Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 28 May 2022 17:42:39 +0800 Subject: Fix favoriting items in the pinned recipe and add error rendering --- forge/build.gradle | 6 ++--- .../gui/widget/favorites/history/DisplayEntry.java | 19 +++++++++++++--- .../favorites/history/DisplayHistoryWidget.java | 26 +++++++++++----------- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/forge/build.gradle b/forge/build.gradle index a42b0c1db..5da03eef6 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -113,9 +113,9 @@ dependencies { // modRuntime("curse.maven:token-enchanter-444421:3449483") // modRuntime("curse.maven:silent-lib-242998:3400030") // modRuntime("curse.maven:resourceful-bees-384508:3485315") - // modRuntime("curse.maven:thermal-expansion-69163:3404884") - // modRuntime("curse.maven:thermal-foundation-222880:3412300") - // modRuntime("curse.maven:cofh-core-69162:3407019") + modRuntime("curse.maven:thermal-expansion-69163:3803489") + modRuntime("curse.maven:thermal-foundation-222880:3803495") + modRuntime("curse.maven:cofh-core-69162:3803484") // modRuntime("curse.maven:advanced-peripherals-431725:3525665") // modRuntime("curse.maven:cc-tweaked-282001:3434680") // modRuntime("curse.maven:ender-storage-245174:3361748") 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 e21d81e3f..b7540c87a 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(new TextComponent("+")); 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(); } } @@ -211,7 +224,7 @@ public class DisplayEntry extends WidgetWithBounds { @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { try { - Widget.translateMouse(xOffset, 0, 0); + Widget.pushMouse(new Point(transformMouseX(mouse().x), transformMouseY(mouse().y))); for (Widget widget : widgets.get()) { if (widget.keyPressed(keyCode, scanCode, modifiers)) { return true; 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 b6cd9fb01..6aaf55ba3 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 @@ -254,7 +254,7 @@ public class DisplayHistoryWidget extends WidgetWithBounds implements DraggableC scroll.setTo(scroll.target() + ClothConfigInitializer.getScrollStep() * -2 * amount, ClothConfigInitializer.getScrollDuration()); return true; } - + for (DisplayEntry entry : entries) { if (entry.mouseScrolled(mouseX, mouseY, amount)) { return true; @@ -277,6 +277,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(); @@ -296,18 +302,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(); @@ -327,12 +333,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); } -- cgit From 5425a1162ada069cc8930e2219710f48049b4fd5 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 28 May 2022 17:45:24 +0800 Subject: Make it easier to scroll between pinned recipes --- .../impl/client/gui/widget/favorites/history/DisplayHistoryWidget.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 6aaf55ba3..d4d2cfb48 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 @@ -251,7 +251,7 @@ 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; } -- cgit From a8dd27ef4e946c879a2e3e5e163683a41896e78f Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 4 Jun 2022 19:14:48 +0800 Subject: Change from readNbt to readAnySizeNbt --- runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java index ebc3df9c0..0fef1e488 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 crafter = InputSlotCrafter.start(category, container, player, packetByteBuf.readNbt(), shift); + InputSlotCrafter crafter = InputSlotCrafter.start(category, container, player, packetByteBuf.readAnySizeNbt(), shift); } catch (InputSlotCrafter.NotEnoughMaterialsException e) { if (!(container instanceof RecipeBookMenu)) { return; -- cgit