From 31516ba891e2a71e6312bf6acdeef7f39a4eb275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Sat, 24 Jun 2017 18:08:23 +0200 Subject: [PATCH 1/8] Created a non-functional first draft of the Item Distributor --- .../java/gregtech/api/enums/ItemList.java | 1 + .../GT_MetaTileEntity_ItemDistributor.java | 69 +++++++++++++++++++ .../preload/GT_Loader_MetaTileEntities.java | 11 +++ 3 files changed, 81 insertions(+) create mode 100644 src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index c98515e0..ade0383c 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -544,6 +544,7 @@ public enum ItemList implements IItemContainer { Automation_ChestBuffer_ULV, Automation_ChestBuffer_LV, Automation_ChestBuffer_MV, Automation_ChestBuffer_HV, Automation_ChestBuffer_EV, Automation_ChestBuffer_IV, Automation_ChestBuffer_LuV, Automation_ChestBuffer_ZPM, Automation_ChestBuffer_UV, Automation_ChestBuffer_MAX, Automation_SuperBuffer_ULV, Automation_SuperBuffer_LV, Automation_SuperBuffer_MV, Automation_SuperBuffer_HV, Automation_SuperBuffer_EV, Automation_SuperBuffer_IV, Automation_SuperBuffer_LuV, Automation_SuperBuffer_ZPM, Automation_SuperBuffer_UV, Automation_SuperBuffer_MAX, Automation_Regulator_ULV, Automation_Regulator_LV, Automation_Regulator_MV, Automation_Regulator_HV, Automation_Regulator_EV, Automation_Regulator_IV, Automation_Regulator_LuV, Automation_Regulator_ZPM, Automation_Regulator_UV, Automation_Regulator_MAX, + Automation_ItemDistributor_ULV, Automation_ItemDistributor_LV, Automation_ItemDistributor_MV, Automation_ItemDistributor_HV, Automation_ItemDistributor_EV, Automation_ItemDistributor_IV, Automation_ItemDistributor_LuV, Automation_ItemDistributor_ZPM, Automation_ItemDistributor_UV, Automation_ItemDistributor_MAX, Hatch_Dynamo_ULV, Hatch_Dynamo_LV, Hatch_Dynamo_MV, Hatch_Dynamo_HV, Hatch_Dynamo_EV, Hatch_Dynamo_IV, Hatch_Dynamo_LuV, Hatch_Dynamo_ZPM, Hatch_Dynamo_UV, Hatch_Dynamo_MAX, Hatch_Energy_ULV, Hatch_Energy_LV, Hatch_Energy_MV, Hatch_Energy_HV, Hatch_Energy_EV, Hatch_Energy_IV, Hatch_Energy_LuV, Hatch_Energy_ZPM, Hatch_Energy_UV, Hatch_Energy_MAX, diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java new file mode 100644 index 00000000..a7d2d286 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java @@ -0,0 +1,69 @@ +package gregtech.common.tileentities.automation; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer; +import gregtech.api.objects.GT_RenderedTexture; +import gregtech.api.util.GT_Utility; +import gregtech.common.gui.GT_Container_ChestBuffer; +import gregtech.common.gui.GT_GUIContainer_ChestBuffer; +import net.minecraft.entity.player.InventoryPlayer; + +public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer { + public GT_MetaTileEntity_ItemDistributor(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 28, "Buffering lots of incoming Items"); + } + + public GT_MetaTileEntity_ItemDistributor(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String aDescription) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); + } + + public GT_MetaTileEntity_ItemDistributor(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public GT_MetaTileEntity_ItemDistributor(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new GT_MetaTileEntity_ChestBuffer(this.mName, this.mTier, this.mInventory.length, this.mDescriptionArray, this.mTextures); + } + + public ITexture getOverlayIcon() { + return new GT_RenderedTexture(Textures.BlockIcons.AUTOMATION_CHESTBUFFER); + } + + public boolean isValidSlot(int aIndex) { + return aIndex < this.mInventory.length - 1; + } + + protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + fillStacksIntoFirstSlots(); + super.moveItems(aBaseMetaTileEntity, aTimer); + fillStacksIntoFirstSlots(); + } + + protected void fillStacksIntoFirstSlots() { + for (int i = 0; i < this.mInventory.length - 1; i++) { + for (int j = i + 1; j < this.mInventory.length - 1; j++) { + if ((this.mInventory[j] != null) + && ((this.mInventory[i] == null) || (GT_Utility.areStacksEqual(this.mInventory[i], this.mInventory[j])))) { + GT_Utility.moveStackFromSlotAToSlotB(getBaseMetaTileEntity(), getBaseMetaTileEntity(), j, i, (byte) 64, (byte) 1, + (byte) 64, (byte) 1); + } + } + } + } + + public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + return new GT_Container_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity); + } + + public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + return new GT_GUIContainer_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity); + } +} diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java index df3b80a9..84b0a242 100644 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java +++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java @@ -1550,6 +1550,17 @@ public class GT_Loader_MetaTileEntities implements Runnable { GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_ZPM.get(1L, new Object[0]), bitsd, new Object[]{"DMV", "DDD", 'M', ItemList.Hull_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'D', ItemList.Tool_DataStick}); GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_UV.get(1L, new Object[0]), bitsd, new Object[]{"DMV", "DDD", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_UV, 'D', ItemList.Tool_DataStick}); GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_MAX.get(1L, new Object[0]), bitsd, new Object[]{"DMV", "DDD", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_UV, 'D', ItemList.Tool_DataStick}); + + ItemList.Automation_ChestBuffer_ULV.set(new GT_MetaTileEntity_ChestBuffer(9320, "automation.itemdistributor.tier.00", "Ultra Low Voltage Item Distributor", 0).getStackForm(1L)); + ItemList.Automation_ChestBuffer_LV.set(new GT_MetaTileEntity_ChestBuffer(9321, "automation.itemdistributor.tier.01", "Low Voltage Item Distributor", 1).getStackForm(1L)); + ItemList.Automation_ChestBuffer_MV.set(new GT_MetaTileEntity_ChestBuffer(9322, "automation.itemdistributor.tier.02", "Medium Voltage Item Distributor", 2).getStackForm(1L)); + ItemList.Automation_ChestBuffer_HV.set(new GT_MetaTileEntity_ChestBuffer(9323, "automation.itemdistributor.tier.03", "High Voltage Item Distributor", 3).getStackForm(1L)); + ItemList.Automation_ChestBuffer_EV.set(new GT_MetaTileEntity_ChestBuffer(9324, "automation.itemdistributor.tier.04", "Extreme Voltage Item Distributor", 4).getStackForm(1L)); + ItemList.Automation_ChestBuffer_IV.set(new GT_MetaTileEntity_ChestBuffer(9325, "automation.itemdistributor.tier.05", "Insane Voltage Item Distributor", 5).getStackForm(1L)); + ItemList.Automation_ChestBuffer_LuV.set(new GT_MetaTileEntity_ChestBuffer(9326, "automation.itemdistributor.tier.06", "Ludicrous Voltage Item Distributor", 6).getStackForm(1L)); + ItemList.Automation_ChestBuffer_ZPM.set(new GT_MetaTileEntity_ChestBuffer(9327, "automation.itemdistributor.tier.07", "ZPM Voltage Item Distributor", 7).getStackForm(1L)); + ItemList.Automation_ChestBuffer_UV.set(new GT_MetaTileEntity_ChestBuffer(9328, "automation.itemdistributor.tier.08", "Ultimate Voltage Item Distributor", 8).getStackForm(1L)); + ItemList.Automation_ChestBuffer_MAX.set(new GT_MetaTileEntity_ChestBuffer(9329, "automation.itemdistributor.tier.09", "MAX Voltage Item Distributor", 9).getStackForm(1L)); } private static void makeWires(Materials aMaterial, int aStartID, long aLossInsulated, long aLoss, long aAmperage, long aVoltage, boolean aInsulatable, boolean aAutoInsulated) { From 22fdaed16424e926bc2b8ba6ffe0ebed8b7a4c44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Sun, 25 Jun 2017 00:30:59 +0200 Subject: [PATCH 2/8] Added simple ItemDistributor implementation, changed MoveOneItemStack --- .../java/gregtech/api/util/GT_Utility.java | 7 +++++-- .../GT_MetaTileEntity_ItemDistributor.java | 19 ++++++++++++++++-- .../preload/GT_Loader_MetaTileEntities.java | 20 +++++++++---------- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java index 6b26d1d7..eea3499e 100644 --- a/src/main/java/gregtech/api/util/GT_Utility.java +++ b/src/main/java/gregtech/api/util/GT_Utility.java @@ -560,12 +560,15 @@ public class GT_Utility { if (listContainsItem(aFilter, aTileEntity1.getStackInSlot(tGrabSlots[i]), true, aInvertFilter)) { if (isAllowedToTakeFromSlot(aTileEntity1, tGrabSlots[i], aGrabFrom, aTileEntity1.getStackInSlot(tGrabSlots[i]))) { if (isAllowedToPutIntoSlot((IInventory) aTileEntity2, tPutSlots[j], aPutTo, aTileEntity1.getStackInSlot(tGrabSlots[i]), aMaxTargetStackSize)) { - tMovedItemCount = moveStackFromSlotAToSlotB(aTileEntity1, (IInventory) aTileEntity2, tGrabSlots[i], tPutSlots[j], aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce); + tMovedItemCount += moveStackFromSlotAToSlotB(aTileEntity1, (IInventory) aTileEntity2, tGrabSlots[i], tPutSlots[j], aMaxTargetStackSize, aMinTargetStackSize, (byte) (aMaxMoveAtOnce - tMovedItemCount), aMinMoveAtOnce); + if (tMovedItemCount >= aMaxMoveAtOnce) { + return tMovedItemCount; + } } } } } - if (tMovedItemCount > 0) return tMovedItemCount; + if (tMovedItemCount > 0) return tMovedItemCount; } if (aDoCheckChests && aTileEntity1 instanceof TileEntityChest) { diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java index a7d2d286..e7b5fb99 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java @@ -10,8 +10,12 @@ import gregtech.api.util.GT_Utility; import gregtech.common.gui.GT_Container_ChestBuffer; import gregtech.common.gui.GT_GUIContainer_ChestBuffer; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.tileentity.TileEntity; public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer { + private byte[] weights = {1, 1, 1, 1, 1, 1}; + boolean onlyOutputToInventories = true; + public GT_MetaTileEntity_ItemDistributor(int aID, String aName, String aNameRegional, int aTier) { super(aID, aName, aNameRegional, aTier, 28, "Buffering lots of incoming Items"); } @@ -30,7 +34,7 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer } public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ChestBuffer(this.mName, this.mTier, this.mInventory.length, this.mDescriptionArray, this.mTextures); + return new GT_MetaTileEntity_ItemDistributor(this.mName, this.mTier, this.mInventory.length, this.mDescriptionArray, this.mTextures); } public ITexture getOverlayIcon() { @@ -43,7 +47,18 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { fillStacksIntoFirstSlots(); - super.moveItems(aBaseMetaTileEntity, aTimer); + int tCost = 0; + for (byte side = 0; side < 6; side++) { + TileEntity adjacentTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(side); + if(!onlyOutputToInventories || adjacentTileEntity != null){ + tCost = GT_Utility.moveOneItemStack(aBaseMetaTileEntity, adjacentTileEntity, + side, GT_Utility.getOppositeSide(side), null, false, (byte) 64, (byte) 1, weights[side], weights[side]); + } + } + if (tCost > 0 || aBaseMetaTileEntity.hasInventoryBeenModified()) { + mSuccess = 50; + aBaseMetaTileEntity.decreaseStoredEnergyUnits(Math.abs(tCost), true); + } fillStacksIntoFirstSlots(); } diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java index 84b0a242..90503ac4 100644 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java +++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java @@ -1551,16 +1551,16 @@ public class GT_Loader_MetaTileEntities implements Runnable { GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_UV.get(1L, new Object[0]), bitsd, new Object[]{"DMV", "DDD", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_UV, 'D', ItemList.Tool_DataStick}); GT_ModHandler.addCraftingRecipe(ItemList.Automation_SuperBuffer_MAX.get(1L, new Object[0]), bitsd, new Object[]{"DMV", "DDD", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_UV, 'D', ItemList.Tool_DataStick}); - ItemList.Automation_ChestBuffer_ULV.set(new GT_MetaTileEntity_ChestBuffer(9320, "automation.itemdistributor.tier.00", "Ultra Low Voltage Item Distributor", 0).getStackForm(1L)); - ItemList.Automation_ChestBuffer_LV.set(new GT_MetaTileEntity_ChestBuffer(9321, "automation.itemdistributor.tier.01", "Low Voltage Item Distributor", 1).getStackForm(1L)); - ItemList.Automation_ChestBuffer_MV.set(new GT_MetaTileEntity_ChestBuffer(9322, "automation.itemdistributor.tier.02", "Medium Voltage Item Distributor", 2).getStackForm(1L)); - ItemList.Automation_ChestBuffer_HV.set(new GT_MetaTileEntity_ChestBuffer(9323, "automation.itemdistributor.tier.03", "High Voltage Item Distributor", 3).getStackForm(1L)); - ItemList.Automation_ChestBuffer_EV.set(new GT_MetaTileEntity_ChestBuffer(9324, "automation.itemdistributor.tier.04", "Extreme Voltage Item Distributor", 4).getStackForm(1L)); - ItemList.Automation_ChestBuffer_IV.set(new GT_MetaTileEntity_ChestBuffer(9325, "automation.itemdistributor.tier.05", "Insane Voltage Item Distributor", 5).getStackForm(1L)); - ItemList.Automation_ChestBuffer_LuV.set(new GT_MetaTileEntity_ChestBuffer(9326, "automation.itemdistributor.tier.06", "Ludicrous Voltage Item Distributor", 6).getStackForm(1L)); - ItemList.Automation_ChestBuffer_ZPM.set(new GT_MetaTileEntity_ChestBuffer(9327, "automation.itemdistributor.tier.07", "ZPM Voltage Item Distributor", 7).getStackForm(1L)); - ItemList.Automation_ChestBuffer_UV.set(new GT_MetaTileEntity_ChestBuffer(9328, "automation.itemdistributor.tier.08", "Ultimate Voltage Item Distributor", 8).getStackForm(1L)); - ItemList.Automation_ChestBuffer_MAX.set(new GT_MetaTileEntity_ChestBuffer(9329, "automation.itemdistributor.tier.09", "MAX Voltage Item Distributor", 9).getStackForm(1L)); + ItemList.Automation_ItemDistributor_ULV.set(new GT_MetaTileEntity_ItemDistributor(9320, "automation.itemdistributor.tier.00", "Ultra Low Voltage Item Distributor", 0).getStackForm(1L)); + ItemList.Automation_ItemDistributor_LV.set(new GT_MetaTileEntity_ItemDistributor(9321, "automation.itemdistributor.tier.01", "Low Voltage Item Distributor", 1).getStackForm(1L)); + ItemList.Automation_ItemDistributor_MV.set(new GT_MetaTileEntity_ItemDistributor(9322, "automation.itemdistributor.tier.02", "Medium Voltage Item Distributor", 2).getStackForm(1L)); + ItemList.Automation_ItemDistributor_HV.set(new GT_MetaTileEntity_ItemDistributor(9323, "automation.itemdistributor.tier.03", "High Voltage Item Distributor", 3).getStackForm(1L)); + ItemList.Automation_ItemDistributor_EV.set(new GT_MetaTileEntity_ItemDistributor(9324, "automation.itemdistributor.tier.04", "Extreme Voltage Item Distributor", 4).getStackForm(1L)); + ItemList.Automation_ItemDistributor_IV.set(new GT_MetaTileEntity_ItemDistributor(9325, "automation.itemdistributor.tier.05", "Insane Voltage Item Distributor", 5).getStackForm(1L)); + ItemList.Automation_ItemDistributor_LuV.set(new GT_MetaTileEntity_ItemDistributor(9326, "automation.itemdistributor.tier.06", "Ludicrous Voltage Item Distributor", 6).getStackForm(1L)); + ItemList.Automation_ItemDistributor_ZPM.set(new GT_MetaTileEntity_ItemDistributor(9327, "automation.itemdistributor.tier.07", "ZPM Voltage Item Distributor", 7).getStackForm(1L)); + ItemList.Automation_ItemDistributor_UV.set(new GT_MetaTileEntity_ItemDistributor(9328, "automation.itemdistributor.tier.08", "Ultimate Voltage Item Distributor", 8).getStackForm(1L)); + ItemList.Automation_ItemDistributor_MAX.set(new GT_MetaTileEntity_ItemDistributor(9329, "automation.itemdistributor.tier.09", "MAX Voltage Item Distributor", 9).getStackForm(1L)); } private static void makeWires(Materials aMaterial, int aStartID, long aLossInsulated, long aLoss, long aAmperage, long aVoltage, boolean aInsulatable, boolean aAutoInsulated) { From 95a1d46086bca64e6b409bccace331ac1a7d13a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Tue, 27 Jun 2017 00:44:59 +0200 Subject: [PATCH 3/8] Added configurable weights to the ItemDistributor sides. --- .../GT_MetaTileEntity_ItemDistributor.java | 49 +++++++++++++------ 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java index e7b5fb99..0c66c168 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java @@ -9,13 +9,14 @@ import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_Utility; import gregtech.common.gui.GT_Container_ChestBuffer; import gregtech.common.gui.GT_GUIContainer_ChestBuffer; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.tileentity.TileEntity; public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer { - private byte[] weights = {1, 1, 1, 1, 1, 1}; - boolean onlyOutputToInventories = true; - + private byte[] sideWeights = new byte[6]; + private byte currentSide = 0, currentSideItemCount = 0; + public GT_MetaTileEntity_ItemDistributor(int aID, String aName, String aNameRegional, int aTier) { super(aID, aName, aNameRegional, aTier, 28, "Buffering lots of incoming Items"); } @@ -34,7 +35,8 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer } public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ItemDistributor(this.mName, this.mTier, this.mInventory.length, this.mDescriptionArray, this.mTextures); + return new GT_MetaTileEntity_ItemDistributor(this.mName, this.mTier, this.mInventory.length, this.mDescriptionArray, + this.mTextures); } public ITexture getOverlayIcon() { @@ -47,18 +49,30 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { fillStacksIntoFirstSlots(); - int tCost = 0; - for (byte side = 0; side < 6; side++) { - TileEntity adjacentTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(side); - if(!onlyOutputToInventories || adjacentTileEntity != null){ - tCost = GT_Utility.moveOneItemStack(aBaseMetaTileEntity, adjacentTileEntity, - side, GT_Utility.getOppositeSide(side), null, false, (byte) 64, (byte) 1, weights[side], weights[side]); + int movedItems = 0; + TileEntity adjacentTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(currentSide); + int inspectedSides = 0; + while (sideWeights[currentSide] == 0) { + currentSide = (byte) ((currentSide + 1) % 6); + currentSideItemCount = 0; + adjacentTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(currentSide); + inspectedSides += 1; + if (inspectedSides == 6) { + return; } } - if (tCost > 0 || aBaseMetaTileEntity.hasInventoryBeenModified()) { - mSuccess = 50; - aBaseMetaTileEntity.decreaseStoredEnergyUnits(Math.abs(tCost), true); - } + movedItems = GT_Utility.moveOneItemStack(aBaseMetaTileEntity, adjacentTileEntity, currentSide, + GT_Utility.getOppositeSide(currentSide), null, false, (byte) 64, (byte) 1, + (byte) (sideWeights[currentSide] - currentSideItemCount), (byte) 1); + currentSideItemCount += movedItems; + if (currentSideItemCount >= sideWeights[currentSide]) { + currentSide = (byte) ((currentSide + 1) % 6); + currentSideItemCount = 0; + } + if (movedItems > 0 || aBaseMetaTileEntity.hasInventoryBeenModified()) { + mSuccess = 50; + aBaseMetaTileEntity.decreaseStoredEnergyUnits(Math.abs(movedItems), true); + } fillStacksIntoFirstSlots(); } @@ -74,6 +88,13 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer } } + @Override + public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { + sideWeights[aSide] += aPlayer.isSneaking() ? -1 : 1; + sideWeights[aSide] = (byte) ((sideWeights[aSide] + 128) % 128); + GT_Utility.sendChatToPlayer(aPlayer, trans("110", "Side Weight: " + sideWeights[aSide])); + } + public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { return new GT_Container_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity); } From 40d850aeceae5aff89720b09fe61d0d53e1c27a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Wed, 28 Jun 2017 00:16:04 +0200 Subject: [PATCH 4/8] Added the state of the ItemDistributor to the NBTTadCompound --- .../GT_MetaTileEntity_ItemDistributor.java | 38 +++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java index 0c66c168..1628a15c 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java @@ -11,10 +11,11 @@ import gregtech.common.gui.GT_Container_ChestBuffer; import gregtech.common.gui.GT_GUIContainer_ChestBuffer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer { - private byte[] sideWeights = new byte[6]; + private byte[] itemsPerSide = new byte[6]; private byte currentSide = 0, currentSideItemCount = 0; public GT_MetaTileEntity_ItemDistributor(int aID, String aName, String aNameRegional, int aTier) { @@ -52,7 +53,7 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer int movedItems = 0; TileEntity adjacentTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(currentSide); int inspectedSides = 0; - while (sideWeights[currentSide] == 0) { + while (itemsPerSide[currentSide] == 0) { currentSide = (byte) ((currentSide + 1) % 6); currentSideItemCount = 0; adjacentTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(currentSide); @@ -63,9 +64,9 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer } movedItems = GT_Utility.moveOneItemStack(aBaseMetaTileEntity, adjacentTileEntity, currentSide, GT_Utility.getOppositeSide(currentSide), null, false, (byte) 64, (byte) 1, - (byte) (sideWeights[currentSide] - currentSideItemCount), (byte) 1); + (byte) (itemsPerSide[currentSide] - currentSideItemCount), (byte) 1); currentSideItemCount += movedItems; - if (currentSideItemCount >= sideWeights[currentSide]) { + if (currentSideItemCount >= itemsPerSide[currentSide]) { currentSide = (byte) ((currentSide + 1) % 6); currentSideItemCount = 0; } @@ -90,11 +91,34 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer @Override public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { - sideWeights[aSide] += aPlayer.isSneaking() ? -1 : 1; - sideWeights[aSide] = (byte) ((sideWeights[aSide] + 128) % 128); - GT_Utility.sendChatToPlayer(aPlayer, trans("110", "Side Weight: " + sideWeights[aSide])); + //Adjust items per side by 1 or -1, constrained to the cyclic interval [0, 127] + itemsPerSide[aSide] += aPlayer.isSneaking() ? -1 : 1; + itemsPerSide[aSide] = (byte) ((itemsPerSide[aSide] + 128) % 128); + GT_Utility.sendChatToPlayer(aPlayer, trans("110", "Items per side: " + itemsPerSide[aSide])); } + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setByteArray("mItemsPerSide", itemsPerSide); + aNBT.setByte("mCurrentSide", currentSide); + aNBT.setByte("mCurrentSideItemCount", currentSideItemCount); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + itemsPerSide = aNBT.getByteArray("mItemsPerSide"); + currentSide = aNBT.getByte("mCurrentSide"); + currentSideItemCount = aNBT.getByte("mCurrentSideItemCount"); + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + super.setItemNBT(aNBT); + aNBT.setByteArray("mItemsPerSide", itemsPerSide); + } + public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { return new GT_Container_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity); } From 72a7a2a4c30a8a6104261168217f9a71df062931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Fri, 30 Jun 2017 23:18:44 +0200 Subject: [PATCH 5/8] Added a new texture for the Item Distributor --- misc/vector/item_distributor.svg | 231 ++++++++++++++++++ .../java/gregtech/api/enums/Textures.java | 2 +- .../GT_MetaTileEntity_ItemDistributor.java | 22 +- .../iconsets/AUTOMATION_ITEMDISTRIBUTOR.png | Bin 0 -> 441 bytes 4 files changed, 253 insertions(+), 2 deletions(-) create mode 100644 misc/vector/item_distributor.svg create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/AUTOMATION_ITEMDISTRIBUTOR.png diff --git a/misc/vector/item_distributor.svg b/misc/vector/item_distributor.svg new file mode 100644 index 00000000..a8aeac2e --- /dev/null +++ b/misc/vector/item_distributor.svg @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java index e83fecf8..d70f1023 100644 --- a/src/main/java/gregtech/api/enums/Textures.java +++ b/src/main/java/gregtech/api/enums/Textures.java @@ -18,7 +18,7 @@ public class Textures { , RENDERING_ERROR, PIPE_RESTRICTOR, INSULATION_FULL, INSULATION_TINY, INSULATION_SMALL, INSULATION_MEDIUM, INSULATION_MEDIUM_PLUS, INSULATION_LARGE, INSULATION_HUGE, CFOAM_FRESH, CFOAM_HARDENED, SOLARPANEL, SOLARPANEL_8V, SOLARPANEL_LV, SOLARPANEL_MV, SOLARPANEL_HV, SOLARPANEL_EV, SOLARPANEL_IV, SOLARPANEL_LuV, SOLARPANEL_ZPM, SOLARPANEL_UV, VENT_NORMAL, VENT_ADVANCED, COVER_WOOD_PLATE, ARROW_UP, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, AUTOMATION_FILTER, AUTOMATION_TYPEFILTER, - AUTOMATION_CHESTBUFFER, AUTOMATION_SUPERBUFFER, AUTOMATION_REGULATOR, CONCRETE_LIGHT_STONE, CONCRETE_LIGHT_COBBLE, CONCRETE_LIGHT_COBBLE_MOSSY, + AUTOMATION_CHESTBUFFER, AUTOMATION_SUPERBUFFER, AUTOMATION_REGULATOR, AUTOMATION_ITEMDISTRIBUTOR, CONCRETE_LIGHT_STONE, CONCRETE_LIGHT_COBBLE, CONCRETE_LIGHT_COBBLE_MOSSY, CONCRETE_LIGHT_BRICKS, CONCRETE_LIGHT_BRICKS_CRACKED, CONCRETE_LIGHT_BRICKS_MOSSY, CONCRETE_LIGHT_BRICKS_CHISELED, CONCRETE_LIGHT_SMOOTH, CONCRETE_DARK_STONE, CONCRETE_DARK_COBBLE, CONCRETE_DARK_COBBLE_MOSSY, CONCRETE_DARK_BRICKS, CONCRETE_DARK_BRICKS_CRACKED, CONCRETE_DARK_BRICKS_MOSSY, CONCRETE_DARK_BRICKS_CHISELED, CONCRETE_DARK_SMOOTH, GRANITE_BLACK_STONE, GRANITE_BLACK_COBBLE, GRANITE_BLACK_COBBLE_MOSSY, GRANITE_BLACK_BRICKS, GRANITE_BLACK_BRICKS_CRACKED, GRANITE_BLACK_BRICKS_MOSSY, diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java index 1628a15c..69c0a765 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java @@ -41,9 +41,29 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer } public ITexture getOverlayIcon() { - return new GT_RenderedTexture(Textures.BlockIcons.AUTOMATION_CHESTBUFFER); + return new GT_RenderedTexture(Textures.BlockIcons.AUTOMATION_ITEMDISTRIBUTOR); } + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] returnTextures = new ITexture[2][17][]; + ITexture baseIcon = getOverlayIcon(), pipeIcon = new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT); + for (int i = 0; i < 17; i++) { + returnTextures[0][i] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][i], baseIcon}; + returnTextures[1][i] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][i], pipeIcon, baseIcon}; + } + return returnTextures; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { + if (aSide == aFacing) { + return mTextures[0][aColorIndex + 1]; + } else { + return mTextures[1][aColorIndex + 1]; + } + } + public boolean isValidSlot(int aIndex) { return aIndex < this.mInventory.length - 1; } diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/AUTOMATION_ITEMDISTRIBUTOR.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/AUTOMATION_ITEMDISTRIBUTOR.png new file mode 100644 index 0000000000000000000000000000000000000000..a4de52714992f8f94be8e09ea8c19d94f5423f7a GIT binary patch literal 441 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?- zI1pz1ag+ZikRe&(8c`CQpH@mmtT}V`<;yx0|TR(r;B5V zMeoueTW@AZf!f#cA0I3HV!srlE##uC=&>Q7qktvn%^DWhBm6wm7+qIC<`NZQ@l4E4 z)XsSMf5%+O?$Yyj_sYopm^HVy*x360U55WHObs7DZrgAz;Z&lZd6~uB>gQ>{7BVpC zw?_+=)!oRgjJcIx_5JnNO2!6FhJ;hzi+2JAxF&!5G|SiivcvC_6Ou38*ijjtH?K}w zgQ4Qq>yFhsi!Hy|l^MP=Yl(1By0Pxruujnzyb=O;6j*SkR59oDv`W7C%9pO{+ f?N@AOMeZMlaIyDE4d1VU!kod=)z4*}Q$iB}(gnFo literal 0 HcmV?d00001 From e1aafccce5859502ffcd5b8100b0f6c302992c2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Sat, 1 Jul 2017 00:12:34 +0200 Subject: [PATCH 6/8] Added ItemDistributor crafting recipes, reordered ItemDistributor fields --- .../GT_MetaTileEntity_ItemDistributor.java | 88 +++++++++---------- .../preload/GT_Loader_MetaTileEntities.java | 11 +++ 2 files changed, 55 insertions(+), 44 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java index 69c0a765..d2577bbe 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java @@ -35,16 +35,45 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer super(aName, aTier, aInvSlotCount, aDescription, aTextures); } - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new GT_MetaTileEntity_ItemDistributor(this.mName, this.mTier, this.mInventory.length, this.mDescriptionArray, this.mTextures); } - public ITexture getOverlayIcon() { + protected void fillStacksIntoFirstSlots() { + for (int i = 0; i < this.mInventory.length - 1; i++) { + for (int j = i + 1; j < this.mInventory.length - 1; j++) { + if ((this.mInventory[j] != null) + && ((this.mInventory[i] == null) || (GT_Utility.areStacksEqual(this.mInventory[i], this.mInventory[j])))) { + GT_Utility.moveStackFromSlotAToSlotB(getBaseMetaTileEntity(), getBaseMetaTileEntity(), j, i, (byte) 64, (byte) 1, + (byte) 64, (byte) 1); + } + } + } + } + + public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + return new GT_GUIContainer_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity); + } + + public ITexture getOverlayIcon() { return new GT_RenderedTexture(Textures.BlockIcons.AUTOMATION_ITEMDISTRIBUTOR); } - @Override + public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + return new GT_Container_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { + if (aSide == aFacing) { + return mTextures[0][aColorIndex + 1]; + } else { + return mTextures[1][aColorIndex + 1]; + } + } + + @Override public ITexture[][][] getTextureSet(ITexture[] aTextures) { ITexture[][][] returnTextures = new ITexture[2][17][]; ITexture baseIcon = getOverlayIcon(), pipeIcon = new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT); @@ -55,20 +84,19 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer return returnTextures; } - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { - if (aSide == aFacing) { - return mTextures[0][aColorIndex + 1]; - } else { - return mTextures[1][aColorIndex + 1]; - } - } - public boolean isValidSlot(int aIndex) { return aIndex < this.mInventory.length - 1; } - protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + itemsPerSide = aNBT.getByteArray("mItemsPerSide"); + currentSide = aNBT.getByte("mCurrentSide"); + currentSideItemCount = aNBT.getByte("mCurrentSideItemCount"); + } + + protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { fillStacksIntoFirstSlots(); int movedItems = 0; TileEntity adjacentTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(currentSide); @@ -97,19 +125,7 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer fillStacksIntoFirstSlots(); } - protected void fillStacksIntoFirstSlots() { - for (int i = 0; i < this.mInventory.length - 1; i++) { - for (int j = i + 1; j < this.mInventory.length - 1; j++) { - if ((this.mInventory[j] != null) - && ((this.mInventory[i] == null) || (GT_Utility.areStacksEqual(this.mInventory[i], this.mInventory[j])))) { - GT_Utility.moveStackFromSlotAToSlotB(getBaseMetaTileEntity(), getBaseMetaTileEntity(), j, i, (byte) 64, (byte) 1, - (byte) 64, (byte) 1); - } - } - } - } - - @Override + @Override public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { //Adjust items per side by 1 or -1, constrained to the cyclic interval [0, 127] itemsPerSide[aSide] += aPlayer.isSneaking() ? -1 : 1; @@ -117,7 +133,7 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer GT_Utility.sendChatToPlayer(aPlayer, trans("110", "Items per side: " + itemsPerSide[aSide])); } - @Override + @Override public void saveNBTData(NBTTagCompound aNBT) { super.saveNBTData(aNBT); aNBT.setByteArray("mItemsPerSide", itemsPerSide); @@ -125,25 +141,9 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer aNBT.setByte("mCurrentSideItemCount", currentSideItemCount); } - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - itemsPerSide = aNBT.getByteArray("mItemsPerSide"); - currentSide = aNBT.getByte("mCurrentSide"); - currentSideItemCount = aNBT.getByte("mCurrentSideItemCount"); - } - - @Override + @Override public void setItemNBT(NBTTagCompound aNBT) { super.setItemNBT(aNBT); aNBT.setByteArray("mItemsPerSide", itemsPerSide); } - - public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_Container_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity); - } - - public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_GUIContainer_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity); - } } diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java index 90503ac4..c3f8753b 100644 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java +++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java @@ -1561,6 +1561,17 @@ public class GT_Loader_MetaTileEntities implements Runnable { ItemList.Automation_ItemDistributor_ZPM.set(new GT_MetaTileEntity_ItemDistributor(9327, "automation.itemdistributor.tier.07", "ZPM Voltage Item Distributor", 7).getStackForm(1L)); ItemList.Automation_ItemDistributor_UV.set(new GT_MetaTileEntity_ItemDistributor(9328, "automation.itemdistributor.tier.08", "Ultimate Voltage Item Distributor", 8).getStackForm(1L)); ItemList.Automation_ItemDistributor_MAX.set(new GT_MetaTileEntity_ItemDistributor(9329, "automation.itemdistributor.tier.09", "MAX Voltage Item Distributor", 9).getStackForm(1L)); + + GT_ModHandler.addCraftingRecipe(ItemList.Automation_ItemDistributor_ULV.get(1L, new Object[0]), bitsd, new Object[]{"XCX", "VMV", " V ", 'M', ItemList.Hull_ULV, 'V', ItemList.Conveyor_Module_LV, 'C', OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.Good)}); + GT_ModHandler.addCraftingRecipe(ItemList.Automation_ItemDistributor_LV.get(1L, new Object[0]), bitsd, new Object[]{"XCX", "VMV", " V ", 'M', ItemList.Hull_LV, 'V', ItemList.Conveyor_Module_LV, 'C', OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.Good)}); + GT_ModHandler.addCraftingRecipe(ItemList.Automation_ItemDistributor_MV.get(1L, new Object[0]), bitsd, new Object[]{"XCX", "VMV", " V ", 'M', ItemList.Hull_MV, 'V', ItemList.Conveyor_Module_LV, 'C', OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.Good)}); + GT_ModHandler.addCraftingRecipe(ItemList.Automation_ItemDistributor_HV.get(1L, new Object[0]), bitsd, new Object[]{"XCX", "VMV", " V ", 'M', ItemList.Hull_HV, 'V', ItemList.Conveyor_Module_LV, 'C', OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.Good)}); + GT_ModHandler.addCraftingRecipe(ItemList.Automation_ItemDistributor_EV.get(1L, new Object[0]), bitsd, new Object[]{"XCX", "VMV", " V ", 'M', ItemList.Hull_EV, 'V', ItemList.Conveyor_Module_LV, 'C', OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.Good)}); + GT_ModHandler.addCraftingRecipe(ItemList.Automation_ItemDistributor_IV.get(1L, new Object[0]), bitsd, new Object[]{"XCX", "VMV", " V ", 'M', ItemList.Hull_IV, 'V', ItemList.Conveyor_Module_LV, 'C', OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.Good)}); + GT_ModHandler.addCraftingRecipe(ItemList.Automation_ItemDistributor_LuV.get(1L, new Object[0]), bitsd, new Object[]{"XCX", "VMV", " V ", 'M', ItemList.Hull_LuV, 'V', ItemList.Conveyor_Module_LV, 'C', OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.Good)}); + GT_ModHandler.addCraftingRecipe(ItemList.Automation_ItemDistributor_ZPM.get(1L, new Object[0]), bitsd, new Object[]{"XCX", "VMV", " V ", 'M', ItemList.Hull_ZPM, 'V', ItemList.Conveyor_Module_LV, 'C', OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.Good)}); + GT_ModHandler.addCraftingRecipe(ItemList.Automation_ItemDistributor_UV.get(1L, new Object[0]), bitsd, new Object[]{"XCX", "VMV", " V ", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_LV, 'C', OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.Good)}); + GT_ModHandler.addCraftingRecipe(ItemList.Automation_ItemDistributor_MAX.get(1L, new Object[0]), bitsd, new Object[]{"XCX", "VMV", " V ", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_LV, 'C', OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.Good)}); } private static void makeWires(Materials aMaterial, int aStartID, long aLossInsulated, long aLoss, long aAmperage, long aVoltage, boolean aInsulatable, boolean aAutoInsulated) { From b9f8927b3d4bd6d01f3cb22d54d996bd5aba8f5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Sat, 1 Jul 2017 11:29:27 +0200 Subject: [PATCH 7/8] Made Automation tooltips more descriptive Adjusted allowPutStack, isInputFacing, isOutputFacing for the Item Distributor Adjusted onScrewdriverRightClick for the Item Regulator --- .../GT_MetaTileEntity_Buffer.java | 4 ++++ .../GT_MetaTileEntity_ChestBuffer.java | 9 +++++++- .../automation/GT_MetaTileEntity_Filter.java | 5 ++++- .../GT_MetaTileEntity_ItemDistributor.java | 22 ++++++++++++++++++- .../GT_MetaTileEntity_Regulator.java | 12 +++++++++- .../GT_MetaTileEntity_SuperBuffer.java | 5 ++++- .../GT_MetaTileEntity_TypeFilter.java | 5 ++++- 7 files changed, 56 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java index dabb9f3f..3ebe3a3f 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java @@ -19,6 +19,10 @@ public abstract class GT_MetaTileEntity_Buffer extends GT_MetaTileEntity_TieredM super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); } + public GT_MetaTileEntity_Buffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String[] aDescription) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); + } + public GT_MetaTileEntity_Buffer(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { super(aName, aTier, aInvSlotCount, aDescription, aTextures); } diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java index 540f9991..e6d6beac 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java @@ -14,13 +14,20 @@ import net.minecraft.entity.player.InventoryPlayer; public class GT_MetaTileEntity_ChestBuffer extends GT_MetaTileEntity_Buffer { public GT_MetaTileEntity_ChestBuffer(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 28, "Buffering lots of incoming Items"); + super(aID, aName, aNameRegional, aTier, 28, new String[]{ + "Buffers up to 27 Item Stacks", + "Use Screwdriver to regulate output stack size", + "Consumes 1EU per moved Item"}); } public GT_MetaTileEntity_ChestBuffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String aDescription) { super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); } + public GT_MetaTileEntity_ChestBuffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String[] aDescription) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); + } + public GT_MetaTileEntity_ChestBuffer(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { super(aName, aTier, aInvSlotCount, aDescription, aTextures); } diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java index a0c752bd..f8a2de85 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java @@ -19,7 +19,10 @@ public class GT_MetaTileEntity_Filter public boolean bInvertFilter = false; public GT_MetaTileEntity_Filter(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 19, "Filtering incoming Items"); + super(aID, aName, aNameRegional, aTier, 19, new String[]{ + "Filters up to 9 different Items", + "Use Screwdriver to regulate output stack size", + "Consumes 1EU per moved Item"}); } public GT_MetaTileEntity_Filter(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java index d2577bbe..11654786 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java @@ -11,6 +11,7 @@ import gregtech.common.gui.GT_Container_ChestBuffer; import gregtech.common.gui.GT_GUIContainer_ChestBuffer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -19,7 +20,11 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer private byte currentSide = 0, currentSideItemCount = 0; public GT_MetaTileEntity_ItemDistributor(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 28, "Buffering lots of incoming Items"); + super(aID, aName, aNameRegional, aTier, 28, new String[]{ + "Distributes Items between different Machine Sides", + "Default Items per Machine Side: 0", + "Use Screwdriver to increase/decrease Items per Side", + "Consumes 1EU per moved Item"}); } public GT_MetaTileEntity_ItemDistributor(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, @@ -64,6 +69,11 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer return new GT_Container_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity); } + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) { + return aSide == aBaseMetaTileEntity.getFrontFacing(); + } + @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { @@ -83,6 +93,16 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer } return returnTextures; } + + @Override + public boolean isInputFacing(byte aSide) { + return getBaseMetaTileEntity().getFrontFacing() == aSide; + } + + @Override + public boolean isOutputFacing(byte aSide) { + return getBaseMetaTileEntity().getFrontFacing() != aSide; + } public boolean isValidSlot(int aIndex) { return aIndex < this.mInventory.length - 1; diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java index 9dde9094..aa2d6e73 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java @@ -9,6 +9,7 @@ import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_Utility; import gregtech.common.gui.GT_Container_Regulator; import gregtech.common.gui.GT_GUIContainer_Regulator; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -21,7 +22,11 @@ public class GT_MetaTileEntity_Regulator private boolean charge = false, decharge = false; public GT_MetaTileEntity_Regulator(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 20, "Regulating incoming Items"); + super(aID, aName, aNameRegional, aTier, 20, new String[]{ + "Filters up to 9 different Items", + "Allows Item-specific output stack size", + "Allows Item-specific output slot", + "Consumes 1EU per moved Item"}); } public GT_MetaTileEntity_Regulator(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { @@ -78,6 +83,11 @@ public class GT_MetaTileEntity_Regulator this.mTargetSlots[8] = aNBT.getInteger("mTargetSlot9"); } + @Override + public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { + //Regulation per Screwdriver is overridden by GUI regulation. + } + public void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { int i = 0; for (int tCosts = 0; i < 9; i++) { diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java index dfea774a..57a753e8 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java @@ -12,7 +12,10 @@ import net.minecraft.entity.player.InventoryPlayer; public class GT_MetaTileEntity_SuperBuffer extends GT_MetaTileEntity_ChestBuffer { public GT_MetaTileEntity_SuperBuffer(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 257, "Buffering up to 256 Stacks"); + super(aID, aName, aNameRegional, aTier, 257, new String[]{ + "Buffers up to 256 Item Stacks", + "Use Screwdriver to regulate output stack size", + "Consumes 1EU per moved Item"}); } public GT_MetaTileEntity_SuperBuffer(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java index 2e4d0f5d..34e343a1 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java @@ -24,7 +24,10 @@ public class GT_MetaTileEntity_TypeFilter public OrePrefixes mPrefix = OrePrefixes.ore; public GT_MetaTileEntity_TypeFilter(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 11, "Filtering incoming Items by Type"); + super(aID, aName, aNameRegional, aTier, 11, new String[]{ + "Filters 1 Item Type", + "Use Screwdriver to regulate output stack size", + "Consumes 1 EU per moved Item"}); } public GT_MetaTileEntity_TypeFilter(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { From baa04cc51b82e62279419a2dfc9a26858b6645db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Sat, 1 Jul 2017 13:01:11 +0200 Subject: [PATCH 8/8] Added GUI classes for the Item Distributor, fixed EU IO logic --- .../gui/GT_Container_ItemDistributor.java | 77 ++++++++++++++++++ .../gui/GT_GUIContainer_ItemDistributor.java | 19 +++++ .../GT_MetaTileEntity_ItemDistributor.java | 12 +-- .../gregtech/textures/gui/ItemDistributor.png | Bin 0 -> 4084 bytes 4 files changed, 102 insertions(+), 6 deletions(-) create mode 100644 src/main/java/gregtech/common/gui/GT_Container_ItemDistributor.java create mode 100644 src/main/java/gregtech/common/gui/GT_GUIContainer_ItemDistributor.java create mode 100644 src/main/resources/assets/gregtech/textures/gui/ItemDistributor.png diff --git a/src/main/java/gregtech/common/gui/GT_Container_ItemDistributor.java b/src/main/java/gregtech/common/gui/GT_Container_ItemDistributor.java new file mode 100644 index 00000000..6f3cfa64 --- /dev/null +++ b/src/main/java/gregtech/common/gui/GT_Container_ItemDistributor.java @@ -0,0 +1,77 @@ +package gregtech.common.gui; + +import gregtech.api.gui.GT_ContainerMetaTile_Machine; +import gregtech.api.gui.GT_Slot_Holo; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GT_Utility; +import gregtech.common.tileentities.automation.GT_MetaTileEntity_ItemDistributor; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class GT_Container_ItemDistributor + extends GT_ContainerMetaTile_Machine { + public GT_Container_ItemDistributor(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(aInventoryPlayer, aTileEntity); + } + + public void addSlots(InventoryPlayer aInventoryPlayer) { + for (int y = 0; y < 3; y++) { + for (int x = 0; x < 9; x++) { + addSlotToContainer(new Slot(this.mTileEntity, x + y * 9, 8 + x * 18, 5 + y * 18)); + } + } + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 8, 63, false, true, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 26, 63, false, true, 1)); + addSlotToContainer(new GT_Slot_Holo(this.mTileEntity, 27, 44, 63, false, true, 1)); + } + + public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) { + if (aSlotIndex < 27) { + return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); + } + Slot tSlot = (Slot) this.inventorySlots.get(aSlotIndex); + if (tSlot != null) { + if (this.mTileEntity.getMetaTileEntity() == null) { + return null; + } + if (aSlotIndex == 27) { + ((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bOutput = (!((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bOutput); + if (((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bOutput) { + GT_Utility.sendChatToPlayer(aPlayer, trans("116","Emit Energy to Outputside")); + } else { + GT_Utility.sendChatToPlayer(aPlayer, trans("117","Don't emit Energy")); + } + return null; + } + if (aSlotIndex == 28) { + ((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull = (!((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull); + if (((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bRedstoneIfFull) { + GT_Utility.sendChatToPlayer(aPlayer, trans("118","Emit Redstone if no Slot is free")); + } else { + GT_Utility.sendChatToPlayer(aPlayer, trans("119","Don't emit Redstone")); + } + return null; + } + if (aSlotIndex == 29) { + ((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bInvert = (!((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bInvert); + if (((GT_MetaTileEntity_ItemDistributor) this.mTileEntity.getMetaTileEntity()).bInvert) { + GT_Utility.sendChatToPlayer(aPlayer, trans("120","Invert Redstone")); + } else { + GT_Utility.sendChatToPlayer(aPlayer, trans("121","Don't invert Redstone")); + } + return null; + } + } + return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); + } + + public int getSlotCount() { + return 27; + } + + public int getShiftClickSlotCount() { + return 27; + } +} diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_ItemDistributor.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_ItemDistributor.java new file mode 100644 index 00000000..17dedd58 --- /dev/null +++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_ItemDistributor.java @@ -0,0 +1,19 @@ +package gregtech.common.gui; + +import gregtech.api.gui.GT_GUIContainerMetaTile_Machine; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; + +public class GT_GUIContainer_ItemDistributor + extends GT_GUIContainerMetaTile_Machine { + public GT_GUIContainer_ItemDistributor(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(new GT_Container_ItemDistributor(aInventoryPlayer, aTileEntity), "gregtech:textures/gui/ItemDistributor.png"); + } + + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + super.drawGuiContainerBackgroundLayer(par1, par2, par3); + int x = (this.width - this.xSize) / 2; + int y = (this.height - this.ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize); + } +} diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java index 11654786..e951bfe0 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java @@ -7,8 +7,8 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer; import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_Utility; -import gregtech.common.gui.GT_Container_ChestBuffer; -import gregtech.common.gui.GT_GUIContainer_ChestBuffer; +import gregtech.common.gui.GT_Container_ItemDistributor; +import gregtech.common.gui.GT_GUIContainer_ItemDistributor; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; @@ -58,7 +58,7 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer } public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_GUIContainer_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity); + return new GT_GUIContainer_ItemDistributor(aPlayerInventory, aBaseMetaTileEntity); } public ITexture getOverlayIcon() { @@ -66,7 +66,7 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer } public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_Container_ChestBuffer(aPlayerInventory, aBaseMetaTileEntity); + return new GT_Container_ItemDistributor(aPlayerInventory, aBaseMetaTileEntity); } @Override @@ -96,12 +96,12 @@ public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer @Override public boolean isInputFacing(byte aSide) { - return getBaseMetaTileEntity().getFrontFacing() == aSide; + return getBaseMetaTileEntity().getFrontFacing() == aSide || itemsPerSide[aSide] == 0; } @Override public boolean isOutputFacing(byte aSide) { - return getBaseMetaTileEntity().getFrontFacing() != aSide; + return getBaseMetaTileEntity().getFrontFacing() != aSide && itemsPerSide[aSide] > 0; } public boolean isValidSlot(int aIndex) { diff --git a/src/main/resources/assets/gregtech/textures/gui/ItemDistributor.png b/src/main/resources/assets/gregtech/textures/gui/ItemDistributor.png new file mode 100644 index 0000000000000000000000000000000000000000..bb6620344935d948457353ece35c98d01cd9328d GIT binary patch literal 4084 zcmds)`#)4`7r>uA7jrQgiE=43opPEHlFH?{jmnWx5nhQxu7z?diH1FtauO;@9meRY zBe|4I<+9aD7u7iF48@EoMWKw6F&Vs@@}Az$=lu)bnIHDvYp=cbcdchVYptE;ve97{ zS(^+1nB}-`tt$W!dI|xe5_;GgT@;KSa3OXZ>;NdwR90-qqt}EzjvMR=9VA_

BKf zVmd0)-ed2%$1Ngw&%W)^LBM7E&fR;AHrl(>V^*v?V8VRoeUo_L#+f2PKYwyDJtg54bhx+Y_R+P7i8Q;LP#5f{k_Z@} z;iBb+IsMyJykuOaw3mR-B5_qged736-dNoJ{SS2m;%7CHI?naVw_r)YBqec+$)CX3 z!sBUxc9M!;x5D~#&yoS(Rs~=+!oD(PAek@0?Y4?^;?e++G+uF43CbIn?26(|#fAM+f?dZN1kDehzv4};RAgoPv#Y$u=&$!Ko4mQvMUB2&@EqluF0CTq$ZN!oSY=c z)MeQpQd*@1KA01TN1x!EW0xB!Qo4Z|Su25l1 z^rdTGUVhg%)qqci=Dj%?^OHMsvRtF)C%!+KF59EIq&K{Pu~JYhPZLnVRw5uIo2$M_ zr)D2;n+*W#xCk(^8 zGU?^(5o&mMzxAu@^O)aI8E|%b;;=Ru`IRr!_z!aA%G;N>I#1!FEB3qE!OcF{X|oa$ zES~jF1aA(0UCjF(_4K;~47j*LdP?B*kHhN7sWYR0^j`X=5&2U~+W81}eq2DF^i2oJ zbGFMud>JpUtAX?J*A?^Ho*deTor}YOt-TNE(YrsQnHc!GI;JsZ?k|J14S!sh<UT^0P(Kuefd0z0EY}*SlGV4bjja;ZIxXXlqn&z zi3V5>ul22SXmJyd|`B zwWJ7RuBJ!;M=V+uV{fBgl>6LSMpSqJk{+usEK*eZwjtYr$mstii3$>IeKSf3E~-Qa z5V>+R1so|^o@g$b4Xko>k}N~nbBym5ZaX=5v{3KP-s&W+2hDz6uK0wdSP%(;oW_Dr zUwC_x0zU~-MdyNj4M^4%_ej9NHp)zhQ}4W=V!8Kej$OS^pVO7GwsCZKqXotc1OA)HZC9D#%mr^K6+Y&7m@?vZJbmvg#bg0G6TI$sA9qDp7G ztUMnEkqdx-V}lVi5|4?+*jPwI%->+>!ujdDBx#~jToJ9aoG$Jl=S6pQi@&H1atC+e zuTfI31BO-&GvE}?@sI9XyC+4kL(k7&L~zU^V-KZwkov*ZL~woB=Gl#oTUC`&8Rn&7 zNp|!b&-cY}A%w$`8g^{>bMG>1cLKT&RbW>z(PNC!W2JeKKKn zhz+Z2-wvkWTTbLN;U!GC^JS7aJ0Pz#bDycW(Ds>ELvXycnBs0M$*k34R23UtOt58A zx(AXb_;ON`Y4=K7bi-z{@#~s!q^YgD)~3ETAkb^l32xz*_|aX@-Yle z=~+0QRM@lY=tUd=uo{cR#}$Zm1(itVutXLk3)Z-vWHTyC0nCLrnNVh@QJw_z8W;B*p5&bcyGqbvNsS-u?6i zdwjbeuWF#Ml{^O&CBu|ad*~#?0R$I{P>)VoC1MoC=ZgX1{d=J*>w@Ei0hW)vl9L| zI){7ba&K3awV5Xw(9hxk zGcI|$S(%Z9C!TdJ!R9L~EIir4=Imx0_}sC&MSMPZ$_3!gXOHN_0c=r`3u*#w@7RHL zruDDArY)lHCpc^AGo!wMVf3#g?nAq6%VOYVsnyg^D)4#Uuh@a{Fxa%(8vgR<*u;m@ zC$2qj1dcK7>==57jG*%z8Io$$bK2|pjs6zGIU9X`*Qo<*kH z87O9UIi=52+ z7{@mankxO+^!GK3^?V}MLBsKnt~T`hTvkpn^RqwndOZ@ADGYskr1X60-Q#|EG_Yu8 z2Br17XzCX7Rq!0yO?1+j8Xh)>44)S`L+V7uO|CiC&*Vo!||v@g2j%3Zff{} zEwz~jyZ{GOWMf=LHJ(741P|wb{IJFvl}Nc<4m?CKtv3)m%oUU`LPa#qc7kS-Uw3by zifp71br6hx2k@OcxaeqaJ37a}RLTH0-L`Bf#^i9qn9I~KGXt>fsO3d@jUR%VXRcnS)k@xtO*yj1v$T9=a{F)OuG~W^(j%FwmH}*tE(E88_ z{0AUt$fhDLV*x6fq5Kx6FQ}pa^DxysBZ$$Tz{<8bQB?T(RYmd`VJaU`i(J*$~jfZZd%F7Get+F;uZvEEIz zXCUuosB!nTsnn}bnZ{^g!CMSn@4=cjz)Br*cpNv;GbwXg4RQk~740dkr)rYpx`?=P z3Wt?S9YEtIUDiKY5?wf=kBD#MF8AVLN_TUr2UQ4i8@jNFSRgx_P<{%|?!v;N43l|4uE}5Dt#TqVAi#BfAm!F^KmstoO_l7(TIQtG3~MRn zJh}g{CnUUXdX~Ck37wvWlr;I0iK}Hy2w^oXdxv#nEf7u8+@LE9Ce_C9*#MvaYQ0jF zpiZMn8+hwA&X>lZ(;F_|pfinnu;Pn{Mb=r7+qI>IU;_JWX^OUysD3LNKHzA-aqYF$ He#!p^Co!a? literal 0 HcmV?d00001