From bb699a823d8968f9d24122620af522b2b9ce6ed0 Mon Sep 17 00:00:00 2001 From: Adrian Date: Mon, 1 Jun 2015 11:33:02 +0200 Subject: [PATCH] packager: only allow inserting items which are either already in the packager or important to the recipe; stamper: add container item support --- .../textures/gui/stamper.png | Bin 808 -> 845 bytes common/buildcraft/silicon/TilePackager.java | 21 ++++++- .../buildcraft/silicon/TileStampingTable.java | 54 ++++++++++++------ .../silicon/gui/ContainerStampingTable.java | 7 ++- .../silicon/gui/GuiStampingTable.java | 2 +- .../buildcraft/silicon/gui/SlotPackager.java | 2 +- 6 files changed, 65 insertions(+), 21 deletions(-) diff --git a/buildcraft_resources/assets/buildcraftsilicon/textures/gui/stamper.png b/buildcraft_resources/assets/buildcraftsilicon/textures/gui/stamper.png index cf00d4c97cbc953b4c682d2de8bdf275c2d4a8a6..ca3593998dd89e39e75b802646dd548dbadfa77a 100644 GIT binary patch delta 710 zcmZ3%c9v~|CNl#A!$ciRmLm<%KTpiGtY>3nHy7sImiU2zfvL;W#WAGf*4x{6^KLl^ zumzasI-Ty1J^Xurc5;r2$`h`OdN-e1-{+mAFLZX|HDha)*z3J-muOG?c*XD7hhP53 zH}V|VICan7UR8!Zpe0bS&*c8KP4$%xb!<1*Kl$>Cq4s_{)0xuxy1dtnKTiMDu4gb1 zj}t%eOJ84o0{4a~ay$mt=kXNi*-0g2v6^l@_?$V!jAJdsm!-j$4*UN`nnW}7IehZ| zP|mFHn0rAXMWjsf)DFJ)`THlGkLozG{)mq2+N1mRet)&+{d83Vi5<2B03pCVhx)Z`gPyT|GC8EfV1!^2@0hi&)@-Fov0vnG=%Np~45;UdS{2xv#*$@UQqv*bNz&YA{_7ByVut=DN+v#1Ihv zmz7~x;jf)%moPY(w_X3QdBM+05Dq5JGG21so@Zt2app6v{JTRM?&=6|7iii_B&@TQ zd=OJ(a^MPA(ryRm<_iHmdKI;Vst0EF%aF8}}l delta 673 zcmX@hwt{VfCUfPFZ4-4YSz6Ao&z_iRS(5npdmVO`=NI%j0_ps|9pGx?d|{Xz8k`rFyqkk{~|AzJ5EyZ1fhBerQ&(E#Bcup z8b8@Rd*p%`Pd(Vk@cm>l-&$|A{>2K`TaE56O{EoL5G*4K(p2YpW}*vtneGpWU$u=jf%AvJ7G5h3ORj2( tPZn>SRPvZluvJ*3S#p3powc6-5Rb|t4Q|!l4BWs_^K|udS?83{1OU$P3Wfjx diff --git a/common/buildcraft/silicon/TilePackager.java b/common/buildcraft/silicon/TilePackager.java index cc2c4685..0aae8043 100644 --- a/common/buildcraft/silicon/TilePackager.java +++ b/common/buildcraft/silicon/TilePackager.java @@ -475,7 +475,26 @@ public class TilePackager extends TileBuildCraft implements ISidedInventory { @Override public boolean canInsertItem(int slot, ItemStack stack, int side) { if (side >= 2) { - return slot < 9; + if (slot >= 9) { + return false; + } + ItemStack slotStack = inventoryPublic.getStackInSlot(slot); + if (StackHelper.canStacksMerge(stack, slotStack)) { + return true; + } + + for (int i = 0; i < 9; i++) { + if (isPatternSlotSet(i)) { + ItemStack inputStack = inventoryPattern.getStackInSlot(i); + if (inputStack == null) { + return true; + } + if (StackHelper.isMatchingItem(inputStack, stack, true, false)) { + return true; + } + } + } + return false; } else { return slot == 9; } diff --git a/common/buildcraft/silicon/TileStampingTable.java b/common/buildcraft/silicon/TileStampingTable.java index ae6dafde..fb8a98c3 100644 --- a/common/buildcraft/silicon/TileStampingTable.java +++ b/common/buildcraft/silicon/TileStampingTable.java @@ -3,6 +3,7 @@ package buildcraft.silicon; import java.lang.ref.WeakReference; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.inventory.SlotCrafting; @@ -11,12 +12,10 @@ import net.minecraft.item.crafting.IRecipe; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.WorldServer; import cpw.mods.fml.common.FMLCommonHandler; -import net.minecraftforge.common.util.ForgeDirection; -import buildcraft.api.core.IInvSlot; import buildcraft.api.tiles.IHasWork; import buildcraft.core.lib.gui.ContainerDummy; -import buildcraft.core.lib.inventory.InventoryIterator; +import buildcraft.core.lib.inventory.InvUtils; import buildcraft.core.lib.inventory.StackHelper; import buildcraft.core.lib.utils.CraftingUtils; import buildcraft.core.lib.utils.NBTUtils; @@ -31,21 +30,11 @@ public class TileStampingTable extends TileLaserTableBase implements IHasWork, I } private IRecipe findRecipe() { - for (IInvSlot slot : InventoryIterator.getIterable(this, ForgeDirection.UP)) { - ItemStack stack = slot.getStackInSlot(); - if (stack == null) { - continue; - } - if (stack.getItem().hasContainerItem(stack)) { - return null; - } - } - return CraftingUtils.findMatchingRecipe(this, worldObj); } } - private static final int[] SLOTS = Utils.createSlotArray(0, 2); + private static final int[] SLOTS = Utils.createSlotArray(0, 5); private SlotCrafting craftSlot; private final LocalInventoryCrafting crafting = new LocalInventoryCrafting(); @@ -113,6 +102,39 @@ public class TileStampingTable extends TileLaserTableBase implements IHasWork, I craftSlot.onPickupFromSlot(getInternalPlayer().get(), result); + IInventory playerInv = getInternalPlayer().get().inventory; + + for (int i = 0; i < playerInv.getSizeInventory(); i++) { + if (playerInv.getStackInSlot(i) != null) { + ItemStack output = playerInv.getStackInSlot(i); + + for (int j = 2; j < 5; j++) { + ItemStack target = getStackInSlot(j); + + if (target == null) { + setInventorySlotContents(j, output); + output.stackSize = 0; + break; + } else { + output.stackSize -= StackHelper.mergeStacks(output, input, true); + if (output.stackSize == 0) { + break; + } + } + } + + if (output.stackSize > 0) { + output.stackSize -= Utils.addToRandomInventoryAround(worldObj, xCoord, yCoord, zCoord, output); + } + + if (output.stackSize > 0) { + InvUtils.dropItems(worldObj, output, xCoord, yCoord + 1, zCoord); + } + + playerInv.setInventorySlotContents(i, null); + } + } + if (resultInto == null) { setInventorySlotContents(1, result); } else { @@ -154,7 +176,7 @@ public class TileStampingTable extends TileLaserTableBase implements IHasWork, I @Override public int getSizeInventory() { - return 2; + return 5; } @Override @@ -184,6 +206,6 @@ public class TileStampingTable extends TileLaserTableBase implements IHasWork, I @Override public boolean canExtractItem(int slot, ItemStack stack, int side) { - return slot == 1; + return slot >= 1; } } diff --git a/common/buildcraft/silicon/gui/ContainerStampingTable.java b/common/buildcraft/silicon/gui/ContainerStampingTable.java index 9ea28ffe..dfba569f 100644 --- a/common/buildcraft/silicon/gui/ContainerStampingTable.java +++ b/common/buildcraft/silicon/gui/ContainerStampingTable.java @@ -28,15 +28,18 @@ public class ContainerStampingTable extends BuildCraftContainer { addSlot(new SlotValidated(table, 0, 15, 18)); addSlot(new SlotOutput(table, 1, 143, 18)); + addSlot(new SlotOutput(table, 2, 111, 45)); + addSlot(new SlotOutput(table, 3, 129, 45)); + addSlot(new SlotOutput(table, 4, 147, 45)); for (int y = 0; y < 3; y++) { for (int x = 0; x < 9; x++) { - addSlotToContainer(new Slot(playerInventory, x + y * 9 + 9, 8 + x * 18, 50 + y * 18)); + addSlotToContainer(new Slot(playerInventory, x + y * 9 + 9, 8 + x * 18, 69 + y * 18)); } } for (int x = 0; x < 9; x++) { - addSlotToContainer(new Slot(playerInventory, x, 8 + x * 18, 108)); + addSlotToContainer(new Slot(playerInventory, x, 8 + x * 18, 127)); } } diff --git a/common/buildcraft/silicon/gui/GuiStampingTable.java b/common/buildcraft/silicon/gui/GuiStampingTable.java index 66d9f471..1d9ca565 100644 --- a/common/buildcraft/silicon/gui/GuiStampingTable.java +++ b/common/buildcraft/silicon/gui/GuiStampingTable.java @@ -27,7 +27,7 @@ public class GuiStampingTable extends GuiLaserTable { super(playerInventory, new ContainerStampingTable(playerInventory, table), table, TEXTURE); this.integrationTable = table; xSize = 176; - ySize = 132; + ySize = 151; } @Override diff --git a/common/buildcraft/silicon/gui/SlotPackager.java b/common/buildcraft/silicon/gui/SlotPackager.java index 13248464..fa30070b 100644 --- a/common/buildcraft/silicon/gui/SlotPackager.java +++ b/common/buildcraft/silicon/gui/SlotPackager.java @@ -20,7 +20,7 @@ public class SlotPackager extends SlotPhantom { @Override public boolean isItemValid(ItemStack stack) { - return stack != null && !stack.getItem().hasContainerItem(stack); + return stack != null; } @Override