From 8eba1c87f922aa0ecce8df8818802a2b805f9236 Mon Sep 17 00:00:00 2001 From: Technici4n <13494793+Technici4n@users.noreply.github.com> Date: Sun, 12 Jan 2025 20:20:05 +0100 Subject: [PATCH 1/2] Respect WorldlyContainer nullability contracts in SidedInvWrapper --- .../neoforged/neoforge/items/wrapper/SidedInvWrapper.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/neoforged/neoforge/items/wrapper/SidedInvWrapper.java b/src/main/java/net/neoforged/neoforge/items/wrapper/SidedInvWrapper.java index 9aef467e1ea..b04d82b42ec 100644 --- a/src/main/java/net/neoforged/neoforge/items/wrapper/SidedInvWrapper.java +++ b/src/main/java/net/neoforged/neoforge/items/wrapper/SidedInvWrapper.java @@ -47,6 +47,9 @@ public SidedInvWrapper(WorldlyContainer inv, @Nullable Direction side) { } public static int getSlot(WorldlyContainer inv, int slot, @Nullable Direction side) { + if (side == null) { + return slot; + } int[] slots = inv.getSlotsForFace(side); if (slot < slots.length) return slots[slot]; @@ -74,6 +77,9 @@ public int hashCode() { @Override public int getSlots() { + if (side == null) { + return inv.getContainerSize(); + } return inv.getSlotsForFace(side).length; } @@ -181,7 +187,7 @@ public ItemStack extractItem(int slot, int amount, boolean simulate) { if (stackInSlot.isEmpty()) return ItemStack.EMPTY; - if (!inv.canTakeItemThroughFace(slot1, stackInSlot, side)) + if (side != null && !inv.canTakeItemThroughFace(slot1, stackInSlot, side)) return ItemStack.EMPTY; if (simulate) { From 8600712c5eedd66be2bc60967a2d418311b3cc3a Mon Sep 17 00:00:00 2001 From: Technici4n <13494793+Technici4n@users.noreply.github.com> Date: Tue, 22 Apr 2025 19:18:41 +0200 Subject: [PATCH 2/2] Always use SidedInvWrapper for sided invs, also for null direction --- .../neoforge/capabilities/CapabilityHooks.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/neoforged/neoforge/capabilities/CapabilityHooks.java b/src/main/java/net/neoforged/neoforge/capabilities/CapabilityHooks.java index 17509fc2e63..552d6ea5d4e 100644 --- a/src/main/java/net/neoforged/neoforge/capabilities/CapabilityHooks.java +++ b/src/main/java/net/neoforged/neoforge/capabilities/CapabilityHooks.java @@ -75,20 +75,14 @@ public static void registerVanillaProviders(RegisterCapabilitiesEvent event) { return new VanillaHopperItemHandler(hopper); }); - event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, BlockEntityType.SHULKER_BOX, (shulkerBox, side) -> { - // Always use sided wrapper for shulker boxes, even for null direction, to call its `canPlaceItemThroughFace` override. - return new SidedInvWrapper(shulkerBox, null); - }); - var sidedVanillaContainers = List.of( BlockEntityType.BLAST_FURNACE, BlockEntityType.BREWING_STAND, BlockEntityType.FURNACE, - BlockEntityType.SMOKER); + BlockEntityType.SMOKER, + BlockEntityType.SHULKER_BOX); for (var type : sidedVanillaContainers) { - event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, type, (sidedContainer, side) -> { - return side == null ? new InvWrapper(sidedContainer) : new SidedInvWrapper(sidedContainer, side); - }); + event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, type, SidedInvWrapper::new); } var nonSidedVanillaContainers = List.of(