Recipe transfer

This commit is contained in:
Raoul Van den Berge
2016-03-29 14:26:52 +02:00
parent ccf916d17d
commit 094343f875
3 changed files with 67 additions and 1 deletions

View File

@@ -14,9 +14,13 @@ import java.util.List;
public class ContainerGrid extends ContainerBase {
private List<Slot> craftingSlots = new ArrayList<Slot>();
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<Slot> getCraftingSlots() {
return craftingSlots;
}

View File

@@ -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<MessageGridCraftingTransfer> implements IMessage {
private NBTTagCompound recipe;
@@ -28,6 +34,26 @@ public class MessageGridCraftingTransfer extends MessageHandlerPlayerToServer<Me
@Override
public void handle(MessageGridCraftingTransfer message, EntityPlayerMP player) {
// @TODO: Make it do something
if (player.openContainer instanceof ContainerGrid) {
TileGrid grid = ((ContainerGrid) player.openContainer).getGrid();
if (grid.getType() == EnumGridType.CRAFTING) {
ItemStack[][] actualRecipe = new ItemStack[9][];
for (int x = 0; x < actualRecipe.length; x++) {
NBTTagList list = message.recipe.getTagList("#" + x, Constants.NBT.TAG_COMPOUND);
if (list.tagCount() > 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);
}
}
}
}

View File

@@ -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;
}