diff --git a/src/main/java/com/glodblock/github/inventory/GuiType.java b/src/main/java/com/glodblock/github/inventory/GuiType.java index c3438bf35..53e2c4b35 100644 --- a/src/main/java/com/glodblock/github/inventory/GuiType.java +++ b/src/main/java/com/glodblock/github/inventory/GuiType.java @@ -64,11 +64,9 @@ import com.glodblock.github.interfaces.FCPriorityHost; import com.google.common.collect.ImmutableList; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.common.Loader; @@ -489,9 +487,17 @@ public ItemOrPartGuiFactory(Class invClass) { @Nullable @Override protected T getInventory(TileEntity tile, EntityPlayer player, EnumFacing face, BlockPos pos) { - ItemStack hold = player.getHeldItem(EnumHand.values()[face.ordinal() % 2]); - if (pos.getZ() == Integer.MIN_VALUE && !hold.isEmpty()) { - Object holder = getItemGuiObject(hold, player, player.world, pos.getX(), pos.getY(), pos.getZ()); + if (pos.getZ() == Integer.MIN_VALUE) { + ItemStack terminal = ItemStack.EMPTY; + if (pos.getY() == 0) { // main inventory + terminal = player.inventory.getStackInSlot(pos.getX()); + } else if (pos.getY() == 1 && Loader.isModLoaded("baubles")) { // baubles inventory + terminal = getStackInBaubleSlot(player, pos.getX()); + } + if (terminal == null || terminal.isEmpty()) { + return null; + } + Object holder = getItemGuiObject(terminal, player, player.world, pos.getX(), pos.getY(), pos.getZ()); if (invClass.isInstance(holder)) { return invClass.cast(holder); } @@ -499,6 +505,14 @@ protected T getInventory(TileEntity tile, EntityPlayer player, EnumFacing face, return super.getInventory(tile, player, face, pos); } + @Optional.Method(modid = "baubles") + private static ItemStack getStackInBaubleSlot(EntityPlayer player, int slot) { + if (slot >= 0 && slot < BaublesApi.getBaublesHandler(player).getSlots()) { + return BaublesApi.getBaublesHandler(player).getStackInSlot(slot); + } + return null; + } + } public static abstract class AllGuiFactory extends PartOrTileGuiFactory { @@ -510,16 +524,32 @@ public AllGuiFactory(Class invClass) { @Nullable @Override protected T getInventory(TileEntity tile, EntityPlayer player, EnumFacing face, BlockPos pos) { - ItemStack hold = player.getHeldItem(EnumHand.values()[face.ordinal() % 2]); - if (pos.getZ() == Integer.MIN_VALUE && !hold.isEmpty()) { - Object holder = getItemGuiObject(hold, player, player.world, pos.getX(), pos.getY(), pos.getZ()); - if (invClass.isInstance(holder)) { - return invClass.cast(holder); + if (pos.getZ() == Integer.MIN_VALUE) { + ItemStack terminal = ItemStack.EMPTY; + if (pos.getY() == 0) { + terminal = player.inventory.getStackInSlot(pos.getX()); + } else if (pos.getY() == 1 && Loader.isModLoaded("baubles")) { + terminal = getStackInBaubleSlot(player, pos.getX()); + } + + if (terminal == null || terminal.isEmpty()) { + return null; + } + + Object holder = GuiType.getItemGuiObject(terminal, player, player.world, pos.getX(), pos.getY(), pos.getZ()); + if (this.invClass.isInstance(holder)) { + return this.invClass.cast(holder); } } + return super.getInventory(tile, player, face, pos); } + @Optional.Method(modid = "baubles") + private static ItemStack getStackInBaubleSlot(EntityPlayer player, int slot) { + return slot >= 0 && slot < BaublesApi.getBaublesHandler(player).getSlots() ? BaublesApi.getBaublesHandler(player).getStackInSlot(slot) : null; + } + } public static Object getItemGuiObject(ItemStack it, EntityPlayer player, World w, int x, int y, int z) { diff --git a/src/main/java/com/glodblock/github/network/CPacketLoadPattern.java b/src/main/java/com/glodblock/github/network/CPacketLoadPattern.java index e100e54d6..a3b9ab6cf 100644 --- a/src/main/java/com/glodblock/github/network/CPacketLoadPattern.java +++ b/src/main/java/com/glodblock/github/network/CPacketLoadPattern.java @@ -1,5 +1,6 @@ package com.glodblock.github.network; +import appeng.helpers.ItemStackHelper; import com.glodblock.github.interfaces.PatternConsumer; import com.glodblock.github.util.Util; import io.netty.buffer.ByteBuf; @@ -63,10 +64,8 @@ private void writeItemArray(NBTTagCompound nbt, ItemStack[] itemList, String key if (itemList != null) { int cnt = 0; for (ItemStack item : itemList) { - NBTTagCompound itemTag = new NBTTagCompound(); if (item != null) { - item.writeToNBT(itemTag); - dict.setTag(cnt + "#", itemTag); + dict.setTag(cnt + "#", ItemStackHelper.stackToNBT(item)); cnt ++; } } @@ -83,7 +82,7 @@ private ItemStack[] readItemArray(NBTTagCompound nbt, String key) { } else { ItemStack[] itemList = new ItemStack[len]; for (int i = 0; i < len; i ++) { - itemList[i] = new ItemStack(dict.getCompoundTag(i + "#")); + itemList[i] = ItemStackHelper.stackFromNBT(dict.getCompoundTag(i + "#")); } return itemList; }