aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorrepo-alt <wvk17@yandex.ru>2022-02-26 12:11:26 +0300
committerGitHub <noreply@github.com>2022-02-26 10:11:26 +0100
commitc7dcda0e5314248f704fb76767a1a2d48e3b8fc5 (patch)
tree1d10308d1808bbbd6cc3ba48389d7b9c8edf08ab /src/main/java
parentac937d19f3a836f3fa918fca0e228e2ac52fe282 (diff)
downloadGT5-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.java35
-rw-r--r--src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java18
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);
+ }
}