diff options
author | repo-alt <wvk17@yandex.ru> | 2022-02-26 12:11:26 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-26 10:11:26 +0100 |
commit | c7dcda0e5314248f704fb76767a1a2d48e3b8fc5 (patch) | |
tree | 1d10308d1808bbbd6cc3ba48389d7b9c8edf08ab /src/main/java | |
parent | ac937d19f3a836f3fa918fca0e228e2ac52fe282 (diff) | |
download | GT5-Unofficial-c7dcda0e5314248f704fb76767a1a2d48e3b8fc5.tar.gz GT5-Unofficial-c7dcda0e5314248f704fb76767a1a2d48e3b8fc5.tar.bz2 GT5-Unofficial-c7dcda0e5314248f704fb76767a1a2d48e3b8fc5.zip |
fix redstone output for buffers and filters (#947)
closes https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/9442
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java | 35 | ||||
-rw-r--r-- | src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java | 18 |
2 files changed, 39 insertions, 14 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 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); + } } |