diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c9b04acf..1fc314de1 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Fixed + +- Fixed external storage cache being de-synced from the network cache. + ## [v1.11.2] - 2022-12-17 ### Added diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorage.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorage.java index fca466741..40fce9c92 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorage.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorage.java @@ -64,6 +64,8 @@ public class FluidExternalStorage implements IExternalStorage { IFluidHandler fluidHandler = handlerSupplier.get(); if (fluidHandler != null) { + cache.initCache(fluidHandler); + List fluids = new ArrayList<>(); for (int i = 0; i < fluidHandler.getTanks(); ++i) { diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageCache.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageCache.java index cfefeb21c..7db6de217 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageCache.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageCache.java @@ -18,23 +18,31 @@ public class FluidExternalStorageCache { return stored; } + public boolean initCache(IFluidHandler handler) { + if (cache != null) { + return false; + } + + cache = new ArrayList<>(); + + int stored = 0; + for (int i = 0; i < handler.getTanks(); ++i) { + FluidStack stack = handler.getFluidInTank(i).copy(); + cache.add(stack); + stored += stack.getAmount(); + } + this.stored = stored; + + return true; + } + public void update(INetwork network, @Nullable IFluidHandler handler) { if (handler == null) { stored = 0; return; } - if (cache == null) { - cache = new ArrayList<>(); - - int stored = 0; - for (int i = 0; i < handler.getTanks(); ++i) { - FluidStack stack = handler.getFluidInTank(i).copy(); - cache.add(stack); - stored += stack.getAmount(); - } - this.stored = stored; - + if (initCache(handler)) { return; } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorage.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorage.java index a228b20a9..57cbb6621 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorage.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorage.java @@ -68,6 +68,8 @@ public class ItemExternalStorage implements IExternalStorage { return Collections.emptyList(); } + cache.initCache(handler); + List stacks = new ArrayList<>(); for (int i = 0; i < handler.getSlots(); ++i) { diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageCache.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageCache.java index bd88695b9..7353c64ca 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageCache.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageCache.java @@ -17,23 +17,31 @@ public class ItemExternalStorageCache { return stored; } + public boolean initCache(IItemHandler handler) { + if (cache != null) { + return false; + } + + cache = new ArrayList<>(); + + int stored = 0; + for (int i = 0; i < handler.getSlots(); ++i) { + ItemStack stack = handler.getStackInSlot(i).copy(); + cache.add(stack); + stored += stack.getCount(); + } + this.stored = stored; + + return true; + } + public void update(INetwork network, @Nullable IItemHandler handler) { if (handler == null) { stored = 0; return; } - if (cache == null) { - cache = new ArrayList<>(); - - int stored = 0; - for (int i = 0; i < handler.getSlots(); ++i) { - ItemStack stack = handler.getStackInSlot(i).copy(); - cache.add(stack); - stored += stack.getCount(); - } - this.stored = stored; - + if (initCache(handler)) { return; }