diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index 0234cab7b..09ea57ede 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -14,9 +14,13 @@ import java.util.List; public class ContainerGrid extends ContainerBase { private List craftingSlots = new ArrayList(); + private TileGrid grid; + public ContainerGrid(EntityPlayer player, TileGrid grid) { super(player); + this.grid = grid; + addPlayerInventory(8, grid.getType() == EnumGridType.CRAFTING ? 174 : 126); if (grid.getType() == EnumGridType.CRAFTING) { @@ -42,6 +46,10 @@ public class ContainerGrid extends ContainerBase { } } + public TileGrid getGrid() { + return grid; + } + public List getCraftingSlots() { return craftingSlots; } diff --git a/src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java b/src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java index 2e42339f4..135d09a6e 100755 --- a/src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java +++ b/src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java @@ -2,9 +2,15 @@ package refinedstorage.network; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.util.Constants; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import refinedstorage.block.EnumGridType; +import refinedstorage.container.ContainerGrid; +import refinedstorage.tile.TileGrid; public class MessageGridCraftingTransfer extends MessageHandlerPlayerToServer implements IMessage { private NBTTagCompound recipe; @@ -28,6 +34,26 @@ public class MessageGridCraftingTransfer extends MessageHandlerPlayerToServer 0) { + actualRecipe[x] = new ItemStack[list.tagCount()]; + + for (int y = 0; y < list.tagCount(); y++) { + actualRecipe[x][y] = ItemStack.loadItemStackFromNBT(list.getCompoundTagAt(y)); + } + } + } + + grid.onRecipeTransfer(actualRecipe); + } + } } } diff --git a/src/main/java/refinedstorage/tile/TileGrid.java b/src/main/java/refinedstorage/tile/TileGrid.java index a1a776e46..86fc515ef 100755 --- a/src/main/java/refinedstorage/tile/TileGrid.java +++ b/src/main/java/refinedstorage/tile/TileGrid.java @@ -124,6 +124,38 @@ public class TileGrid extends TileMachine { } } + public void onRecipeTransfer(ItemStack[][] recipe) { + if (isConnected()) { + for (int i = 0; i < craftingInventory.getSizeInventory(); ++i) { + ItemStack slot = craftingInventory.getStackInSlot(i); + + if (slot != null) { + if (!getController().push(slot)) { + return; + } + + craftingInventory.setInventorySlotContents(i, null); + } + } + + for (int i = 0; i < craftingInventory.getSizeInventory(); ++i) { + if (recipe[i] != null) { + ItemStack[] possibilities = recipe[i]; + + for (ItemStack possibility : possibilities) { + ItemStack took = getController().take(possibility); + + if (took != null) { + craftingInventory.setInventorySlotContents(i, possibility); + + break; + } + } + } + } + } + } + public int getSortingDirection() { return sortingDirection; }