diff --git a/CHANGELOG.md b/CHANGELOG.md index be386ce81..fd19bacc6 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Refined Storage Changelog +### 1.5.7 +- Exposed pattern inventory for Pattern Grid (raoulvdberge) + ### 1.5.6 - Updated Forge to stable 2387 (raoulvdberge) - Fixed bug where players couldn't place regular blocks next to secured networks (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java index 5a2a28392..b13cb701f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java @@ -35,6 +35,7 @@ import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import net.minecraftforge.items.wrapper.InvWrapper; +import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; @@ -87,7 +88,13 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { private InventoryCraftResult result = new InventoryCraftResult(); private ItemHandlerBase matrixProcessing = new ItemHandlerBase(9 * 2, new ItemHandlerListenerNetworkNode(this)); - private ItemHandlerBase patterns = new ItemHandlerBase(2, new ItemHandlerListenerNetworkNode(this), new ItemValidatorBasic(RSItems.PATTERN)); + private ItemHandlerBase patterns = new ItemHandlerBase(2, new ItemHandlerListenerNetworkNode(this), new ItemValidatorBasic(RSItems.PATTERN)) { + @Nonnull + @Override + public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { + return slot == 0 ? super.insertItem(slot, stack, simulate) : stack; + } + }; private List filters = new ArrayList<>(); private List tabs = new ArrayList<>(); private ItemHandlerFilter filter = new ItemHandlerFilter(filters, tabs, new ItemHandlerListenerNetworkNode(this)); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java index fbd2015d9..d89d7f979 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java @@ -66,9 +66,9 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { ItemStack remainder = network.insertItemTracked(slot, size); if (remainder == null) { - importItems.extractItemInternal(currentSlot, size, false); + importItems.extractItem(currentSlot, size, false); } else if (size - remainder.getCount() > 0) { - importItems.extractItemInternal(currentSlot, size - remainder.getCount(), false); + importItems.extractItem(currentSlot, size - remainder.getCount(), false); currentSlot++; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerBase.java b/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerBase.java index 004c8afbe..d17c9112c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerBase.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/inventory/ItemHandlerBase.java @@ -66,9 +66,4 @@ public class ItemHandlerBase extends ItemStackHandler { public boolean isEmpty() { return empty; } - - @Nonnull - public ItemStack extractItemInternal(int slot, int amount, boolean simulate) { - return super.extractItem(slot, amount, simulate); - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/TileGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/TileGrid.java index b67f8ceb1..96917043c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/TileGrid.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage.tile.grid; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid; +import com.raoulvdberge.refinedstorage.block.GridType; import com.raoulvdberge.refinedstorage.container.ContainerGrid; import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid; import com.raoulvdberge.refinedstorage.tile.TileNode; @@ -9,10 +10,14 @@ import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import net.minecraft.client.Minecraft; import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; import javax.annotation.Nonnull; +import javax.annotation.Nullable; public class TileGrid extends TileNode { public static final TileDataParameter VIEW_TYPE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @@ -197,4 +202,18 @@ public class TileGrid extends TileNode { public String getNodeId() { return NetworkNodeGrid.ID; } + + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing side) { + return (getNode().getType() == GridType.PATTERN && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) || super.hasCapability(capability, side); + } + + @Override + public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing side) { + if (getNode().getType() == GridType.PATTERN && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(getNode().getPatterns()); + } + + return super.getCapability(capability, side); + } }