diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fc314de1..4bffc59c6 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Fixed - Fixed external storage cache being de-synced from the network cache. +- Fixed external storage using an out of date block entity for getting handler. ## [v1.11.2] - 2022-12-17 diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageProvider.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageProvider.java index be727ccea..f1dba195e 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageProvider.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageProvider.java @@ -5,7 +5,9 @@ import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStora import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageProvider; import com.refinedmods.refinedstorage.blockentity.FluidInterfaceBlockEntity; import com.refinedmods.refinedstorage.util.LevelUtils; +import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraftforge.fluids.FluidStack; @@ -21,11 +23,21 @@ public class FluidExternalStorageProvider implements IExternalStorageProvider provide(IExternalStorageContext context, BlockEntity blockEntity, Direction direction) { return new FluidExternalStorage(context, () -> { - if (!blockEntity.getLevel().isLoaded(blockEntity.getBlockPos())) { + Level level = blockEntity.getLevel(); + + if (level == null) { return null; } - return LevelUtils.getFluidHandler(blockEntity, direction.getOpposite()); + BlockPos blockPos = blockEntity.getBlockPos(); + + if (!level.isLoaded(blockPos)) { + return null; + } + + BlockEntity currentBlockEntity = level.getBlockEntity(blockPos); + + return LevelUtils.getFluidHandler(currentBlockEntity, direction.getOpposite()); }, blockEntity instanceof FluidInterfaceBlockEntity); } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageProvider.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageProvider.java index 6d2e6cb8a..b1231b911 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageProvider.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageProvider.java @@ -6,10 +6,12 @@ import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStora import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageContext; import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageProvider; import com.refinedmods.refinedstorage.blockentity.InterfaceBlockEntity; -import com.refinedmods.refinedstorage.util.NetworkUtils; import com.refinedmods.refinedstorage.util.LevelUtils; +import com.refinedmods.refinedstorage.util.NetworkUtils; +import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import javax.annotation.Nonnull; @@ -30,11 +32,21 @@ public class ItemExternalStorageProvider implements IExternalStorageProvider provide(IExternalStorageContext context, BlockEntity blockEntity, Direction direction) { return new ItemExternalStorage(context, () -> { - if (!blockEntity.getLevel().isLoaded(blockEntity.getBlockPos())) { + Level level = blockEntity.getLevel(); + + if (level == null) { return null; } - return LevelUtils.getItemHandler(blockEntity, direction.getOpposite()); + BlockPos blockPos = blockEntity.getBlockPos(); + + if (!level.isLoaded(blockPos)) { + return null; + } + + BlockEntity currentBlockEntity = level.getBlockEntity(blockPos); + + return LevelUtils.getItemHandler(currentBlockEntity, direction.getOpposite()); }, blockEntity instanceof InterfaceBlockEntity); }