From f9eac626254ed31477925618a45af5005e4628ac Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Thu, 21 Nov 2019 18:38:33 +0100 Subject: first try at MultiItemHandler --- src/main/java/tileentities/GTMTE_ItemServer.java | 41 ++++++++++++++++++-- .../java/tileentities/TE_ItemServerIOPort.java | 44 +++++++++++++++------- 2 files changed, 67 insertions(+), 18 deletions(-) (limited to 'src/main/java/tileentities') diff --git a/src/main/java/tileentities/GTMTE_ItemServer.java b/src/main/java/tileentities/GTMTE_ItemServer.java index 8fcb72c498..9b4d50c5d4 100644 --- a/src/main/java/tileentities/GTMTE_ItemServer.java +++ b/src/main/java/tileentities/GTMTE_ItemServer.java @@ -15,7 +15,6 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; import gregtech.api.objects.GT_RenderedTexture; -import kekztech.MultiFluidHandler; import kekztech.MultiItemHandler; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; @@ -115,9 +114,20 @@ public class GTMTE_ItemServer extends GT_MetaTileEntity_MultiBlockBase { this.mEUt = (int) (BASE_SLICE_ENERGY_COST * sliceCount * Math.pow(2, config)); super.mMaxProgresstime = 10; + mih.setPerTypeCapacity((int) (BASE_PER_ITEM_CAPACITY * Math.pow(4, config))); + return true; } + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + + if(mih != null) { + mih.setLock(!super.getBaseMetaTileEntity().isActive()); + } + } + public Vector3ic rotateOffsetVector(Vector3ic forgeDirection, int x, int y, int z) { final Vector3i offset = new Vector3i(); @@ -178,7 +188,12 @@ public class GTMTE_ItemServer extends GT_MetaTileEntity_MultiBlockBase { if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { // yay } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == IO_PORT) { - // TODO: register IO port + final TE_ItemServerIOPort port = + (TE_ItemServerIOPort) thisController.getWorld().getTileEntity( + thisController.getXCoord() + offset.x(), + thisController.getYCoord() + offset.y(), + thisController.getZCoord() + offset.z()); + ioPorts.add(port); } else { formationChecklist = false; } @@ -215,6 +230,14 @@ public class GTMTE_ItemServer extends GT_MetaTileEntity_MultiBlockBase { if(formationChecklist) { slicesFound = sliceCount; + + if(mih == null) { + mih = new MultiItemHandler(); + mih.setItemTypeCapacity(slicesFound * BASE_ITEM_TYPES_PER_SLICE); + } + for(TE_ItemServerIOPort port : ioPorts) { + port.setMultiItemHandler(mih); + } } return formationChecklist; @@ -251,7 +274,12 @@ public class GTMTE_ItemServer extends GT_MetaTileEntity_MultiBlockBase { if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { // yay } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == IO_PORT) { - // TODO register port + final TE_ItemServerIOPort port = + (TE_ItemServerIOPort) thisController.getWorld().getTileEntity( + thisController.getXCoord() + offset.x(), + thisController.getYCoord() + offset.y(), + thisController.getZCoord() + offset.z()); + ioPorts.add(port); } else { formationChecklist = false; } @@ -298,7 +326,12 @@ public class GTMTE_ItemServer extends GT_MetaTileEntity_MultiBlockBase { if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { // yay } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == IO_PORT) { - // TODO: register IO port + final TE_ItemServerIOPort port = + (TE_ItemServerIOPort) thisController.getWorld().getTileEntity( + thisController.getXCoord() + offset.x(), + thisController.getYCoord() + offset.y(), + thisController.getZCoord() + offset.z()); + ioPorts.add(port); } else { formationChecklist = false; } diff --git a/src/main/java/tileentities/TE_ItemServerIOPort.java b/src/main/java/tileentities/TE_ItemServerIOPort.java index 17e322fa82..46a3a9c7bb 100644 --- a/src/main/java/tileentities/TE_ItemServerIOPort.java +++ b/src/main/java/tileentities/TE_ItemServerIOPort.java @@ -11,41 +11,60 @@ public class TE_ItemServerIOPort extends TileEntity implements IInventory { private MultiItemHandler mih; public void setMultiItemHandler(MultiItemHandler mih) { + System.out.println("MIH set"); this.mih = mih; } @Override public int getSizeInventory() { - return mih.getItemTypeCapacity(); + return (mih != null) ? mih.getItemTypeCapacity() : 9; } @Override public ItemStack getStackInSlot(int slot) { - // TODO Auto-generated method stub - return null; + return (mih != null) ? mih.getStackInSlot(slot) : null; } @Override public ItemStack decrStackSize(int slot, int amount) { - // TODO Auto-generated method stub + if(mih != null) { + if(mih.getStackInSlot(slot) != null) { + final ItemStack obtained = mih.getStackInSlot(slot).copy(); + obtained.stackSize = mih.reduceStackInSlot(slot, amount); + super.markDirty(); + return obtained; + } else { + return null; + } + } return null; } @Override public ItemStack getStackInSlotOnClosing(int slot) { - // TODO Auto-generated method stub return null; } @Override public void setInventorySlotContents(int slot, ItemStack itemStack) { - // TODO Auto-generated method stub - + if(mih != null) { + if(itemStack == null || !itemStack.isItemEqual(mih.getStackInSlot(slot))) { + return; + } else { + final int change = itemStack.stackSize - mih.getStackInSlot(slot).stackSize; + if(change < 0) { + mih.reduceStackInSlot(slot, change); + } else { + mih.increaseStackInSlot(slot, change); + } + super.markDirty(); + } + } } @Override public String getInventoryName() { - return "Item Server"; + return "Item Server IO Port"; } @Override @@ -55,30 +74,27 @@ public class TE_ItemServerIOPort extends TileEntity implements IInventory { @Override public int getInventoryStackLimit() { - return mih.getPerTypeCapacity(); + return (mih != null) ? mih.getPerTypeCapacity() : 0; } @Override public boolean isUseableByPlayer(EntityPlayer player) { - return true; + return false; } @Override public void openInventory() { - // TODO Auto-generated method stub } @Override public void closeInventory() { - // TODO Auto-generated method stub } @Override public boolean isItemValidForSlot(int slot, ItemStack itemStack) { - // TODO Auto-generated method stub - return false; + return (mih != null) ? (mih.getStackInSlot(slot).isItemEqual(itemStack) || mih.getStackInSlot(slot) == null) : false; } } -- cgit