From 6ee0d45fb209efd55bf4421e83be6a54e28cb15e Mon Sep 17 00:00:00 2001 From: IThundxr Date: Sat, 19 Oct 2024 10:24:10 -0400 Subject: [PATCH] Fix Vault Comparator Output gametest failing and also Fix #1625 --- .../content/logistics/vault/ItemVaultBlock.java | 14 +++++++++++++- .../logistics/vault/ItemVaultBlockEntity.java | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlock.java b/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlock.java index c81389c113..df04caa6fd 100644 --- a/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlock.java @@ -167,7 +167,19 @@ public boolean hasAnalogOutputSignal(BlockState p_149740_1_) { public int getAnalogOutputSignal(BlockState pState, Level pLevel, BlockPos pPos) { return getBlockEntityOptional(pLevel, pPos) .filter(vte -> !Transaction.isOpen()) // fabric: hack fix for comparators updating when they shouldn't - .map(vte -> vte.getItemStorage(null)) + .map(vte -> { + // fabric: fix for comparators grabbing the capability too quickly, relying on grabbing it through + // the non-controller's initCapability method isn't reliable and doesn't work properly. + // so what we end up doing is just returning the capability for the controller, and if it's + // not the controller it's own capability is returned + if (!vte.isController()) { + ItemVaultBlockEntity controllerBE = vte.getControllerBE(); + if (controllerBE != null) + return controllerBE.getItemStorage(null); + } + + return vte.getItemStorage(null); + }) .map(ItemHelper::calcRedstoneFromInventory) .orElse(0); } diff --git a/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlockEntity.java index be13661e37..6709dae494 100644 --- a/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlockEntity.java @@ -5,13 +5,13 @@ import javax.annotation.Nullable; import com.simibubi.create.AllBlockEntityTypes; -import com.simibubi.create.Create; import com.simibubi.create.api.connectivity.ConnectivityHandler; import com.simibubi.create.foundation.blockEntity.IMultiBlockEntityContainer; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.inventory.VersionedInventoryWrapper; import com.simibubi.create.infrastructure.config.AllConfigs; + import io.github.fabricators_of_create.porting_lib.transfer.item.ItemStackHandler; import io.github.fabricators_of_create.porting_lib.transfer.item.ItemTransferable; @@ -240,7 +240,7 @@ public Storage getItemStorage(@Nullable Direction face) { return itemCapability; } - private void initCapability() { + protected void initCapability() { if (itemCapability != null) return; if (!isController()) {