diff options
author | Martin Robertz <dream-master@gmx.net> | 2022-10-01 12:38:45 +0200 |
---|---|---|
committer | Martin Robertz <dream-master@gmx.net> | 2022-10-01 12:38:45 +0200 |
commit | 83a59b8babdccf6eb29967a52cda15c6bc2fd8c9 (patch) | |
tree | 3c850aecc7916c02ceeebbc6ac000c6b7ad8fbba /src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java | |
parent | 1f68b3430593b9bdec6bf3c96dcafe1eb9cf730c (diff) | |
parent | 0268d287a9d165899ff456b674d56ba10d382d81 (diff) | |
download | GT5-Unofficial-83a59b8babdccf6eb29967a52cda15c6bc2fd8c9.tar.gz GT5-Unofficial-83a59b8babdccf6eb29967a52cda15c6bc2fd8c9.tar.bz2 GT5-Unofficial-83a59b8babdccf6eb29967a52cda15c6bc2fd8c9.zip |
Merge branch 'advanced_redstone_covers'
# Conflicts:
# src/main/java/gregtech/api/util/GT_Utility.java
Diffstat (limited to 'src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java')
-rw-r--r-- | src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java | 77 |
1 files changed, 29 insertions, 48 deletions
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java index 82dffaf7a8..c894857b32 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java @@ -74,66 +74,47 @@ public class GT_Cover_ItemMeter extends GT_CoverBehaviorBase<GT_Cover_ItemMeter. return false; } - @Override - protected ItemMeterData doCoverThingsImpl( - byte aSide, - byte aInputRedstone, - int aCoverID, - ItemMeterData aCoverVariable, - ICoverable aTileEntity, - long aTimer) { - long tMax = 0; - long tUsed = 0; - IMetaTileEntity mte = ((IGregTechTileEntity) aTileEntity).getMetaTileEntity(); + public static byte computeSignalBasedOnItems( + ICoverable tileEntity, boolean inverted, int threshold, int slot, int side) { + long max = 0; + long used = 0; + IMetaTileEntity mte = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); if (mte instanceof GT_MetaTileEntity_DigitalChestBase) { GT_MetaTileEntity_DigitalChestBase dc = (GT_MetaTileEntity_DigitalChestBase) mte; - tMax = dc.getMaxItemCount(); // currently it is limited by int, but there is not much reason for that - ItemStack[] inv = dc.getStoredItemData(); - if (inv != null && inv.length > 1 && inv[1] != null) tUsed = inv[1].stackSize; + max = dc.getMaxItemCount(); + used = dc.getProgresstime(); } else if (GregTech_API.mAE2 && mte instanceof GT_MetaTileEntity_Hatch_OutputBus_ME) { if (((GT_MetaTileEntity_Hatch_OutputBus_ME) mte).isLastOutputFailed()) { - tMax = 64; - tUsed = 64; + max = 64; + used = 64; } } else { - int[] tSlots = aCoverVariable.slot >= 0 - ? new int[] {aCoverVariable.slot} - : aTileEntity.getAccessibleSlotsFromSide(aSide); - - for (int i : tSlots) { - if (i >= 0 && i < aTileEntity.getSizeInventory()) { - tMax += 64; - ItemStack tStack = aTileEntity.getStackInSlot(i); - if (tStack != null) tUsed += (tStack.stackSize << 6) / tStack.getMaxStackSize(); + int[] slots = slot >= 0 ? new int[] {slot} : tileEntity.getAccessibleSlotsFromSide(side); + + for (int i : slots) { + if (i >= 0 && i < tileEntity.getSizeInventory()) { + max += 64; + ItemStack stack = tileEntity.getStackInSlot(i); + if (stack != null) used += ((long) stack.stackSize << 6) / stack.getMaxStackSize(); } } } - long redstoneSignal; - if (tUsed == 0L) { - // nothing - redstoneSignal = 0; - } else if (tUsed >= tMax) { - // full - redstoneSignal = 15; - } else { - // 1-14 range - redstoneSignal = 1 + (14 * tUsed) / tMax; - } - - if (aCoverVariable.inverted) { - redstoneSignal = 15 - redstoneSignal; - } + return GT_Utility.convertRatioToRedstone(used, max, threshold, inverted); + } - if (aCoverVariable.threshold > 0) { - if (aCoverVariable.inverted && tUsed >= aCoverVariable.threshold) { - redstoneSignal = 0; - } else if (!aCoverVariable.inverted && tUsed < aCoverVariable.threshold) { - redstoneSignal = 0; - } - } + @Override + protected ItemMeterData doCoverThingsImpl( + byte aSide, + byte aInputRedstone, + int aCoverID, + ItemMeterData aCoverVariable, + ICoverable aTileEntity, + long aTimer) { + byte signal = computeSignalBasedOnItems( + aTileEntity, aCoverVariable.inverted, aCoverVariable.threshold, aCoverVariable.slot, aSide); + aTileEntity.setOutputRedstoneSignal(aSide, signal); - aTileEntity.setOutputRedstoneSignal(aSide, (byte) redstoneSignal); return aCoverVariable; } |