From c7dcda0e5314248f704fb76767a1a2d48e3b8fc5 Mon Sep 17 00:00:00 2001 From: repo-alt Date: Sat, 26 Feb 2022 12:11:26 +0300 Subject: fix redstone output for buffers and filters (#947) closes https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/9442 --- .../implementations/GT_MetaTileEntity_Buffer.java | 35 +++++++++++++--------- .../automation/GT_MetaTileEntity_Filter.java | 18 +++++++++++ 2 files changed, 39 insertions(+), 14 deletions(-) (limited to 'src/main/java') 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 a3662b78f3..93e976c052 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 @@ -271,26 +271,33 @@ public abstract class GT_MetaTileEntity_Buffer extends GT_MetaTileEntity_TieredM return false; } + protected void handleRedstoneOutput(IGregTechTileEntity aBaseMetaTileEntity) { + if (bRedstoneIfFull) { + boolean hasEmptySlots = false; + for (int i = 0; i < mInventory.length; i++) { + if (isValidSlot(i) && mInventory[i] == null) { + hasEmptySlots = true; + break; + } + } + if (bInvert) + hasEmptySlots = !hasEmptySlots; + for (byte b = 0; b < 6; b++) + aBaseMetaTileEntity.setInternalOutputRedstoneSignal(b, hasEmptySlots ? (byte) 0 : (byte) 15); + } + else { + for(byte b = 0;b<6;b++) + aBaseMetaTileEntity.setInternalOutputRedstoneSignal(b, (byte)0); + } + } + @Override public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { if (aBaseMetaTileEntity.isAllowedToWork() && aBaseMetaTileEntity.isServerSide() && (aBaseMetaTileEntity.hasWorkJustBeenEnabled() || aBaseMetaTileEntity.hasInventoryBeenModified() || aTimer % 200 == 0 || mSuccess > 0)) { mSuccess--; updateSlots(); moveItems(aBaseMetaTileEntity, aTimer); - for(byte b = 0;b<6;b++) - aBaseMetaTileEntity.setInternalOutputRedstoneSignal(b,bInvert ? (byte)15 : (byte)0); - if (bRedstoneIfFull) { - for(byte b = 0;b<6;b++) - aBaseMetaTileEntity.setInternalOutputRedstoneSignal(b,bInvert ? (byte)0 : (byte)15); - for (int i = 0; i < mInventory.length; i++) - if (isValidSlot(i)) { - if (mInventory[i] == null) { - for(byte b = 0;b<6;b++) - aBaseMetaTileEntity.setInternalOutputRedstoneSignal(b,bInvert ? (byte)15 : (byte)0); - break; - } - } - } + handleRedstoneOutput(aBaseMetaTileEntity); } } 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 5b23c36d9a..02eaf892ac 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 @@ -90,4 +90,22 @@ public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_Buffer { } return GT_Utility.areStacksEqual(this.mInventory[(aIndex + 9)], aStack, this.bIgnoreNBT); } + + @Override + protected void handleRedstoneOutput(IGregTechTileEntity aBaseMetaTileEntity) { + if (bRedstoneIfFull) { + int emptySlots = 0; + for (int i = 0; i < 9; i++) { + if (mInventory[i] == null) + ++emptySlots; + } + if (!bInvert) + emptySlots = 9 - emptySlots; + for (byte b = 0; b < 6; b++) + aBaseMetaTileEntity.setInternalOutputRedstoneSignal(b, (byte) emptySlots); + } + else + for (byte b = 0; b < 6; b++) + aBaseMetaTileEntity.setInternalOutputRedstoneSignal(b, (byte) 0); + } } -- cgit