diff --git a/CHANGELOG.md b/CHANGELOG.md index b00aa1efd..8e03f6b70 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Refined Storage Changelog +### 1.8.7 +- Fixed Regulator mode item and fluid counts not saving properly (raoulvdberge) + ### 1.8.6 - Fixed Constructor duplication bug (Darkere) diff --git a/src/main/java/com/refinedmods/refinedstorage/inventory/fluid/FluidInventory.java b/src/main/java/com/refinedmods/refinedstorage/inventory/fluid/FluidInventory.java index 169a1c557..fac7bb6a9 100644 --- a/src/main/java/com/refinedmods/refinedstorage/inventory/fluid/FluidInventory.java +++ b/src/main/java/com/refinedmods/refinedstorage/inventory/fluid/FluidInventory.java @@ -61,8 +61,11 @@ public class FluidInventory { fluids[slot] = stack; - listeners.forEach(l -> l.onChanged(this, slot, false)); + onChanged(slot); + } + public void onChanged(int slot) { + listeners.forEach(l -> l.onChanged(this, slot, false)); updateEmptyState(); } diff --git a/src/main/java/com/refinedmods/refinedstorage/inventory/item/BaseItemHandler.java b/src/main/java/com/refinedmods/refinedstorage/inventory/item/BaseItemHandler.java index 8439d51d5..86f0768c0 100644 --- a/src/main/java/com/refinedmods/refinedstorage/inventory/item/BaseItemHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/inventory/item/BaseItemHandler.java @@ -53,6 +53,10 @@ public class BaseItemHandler extends ItemStackHandler { protected void onContentsChanged(int slot) { super.onContentsChanged(slot); + onChanged(slot); + } + + public void onChanged(int slot) { this.empty = stacks.stream().allMatch(ItemStack::isEmpty); this.listeners.forEach(l -> l.onChanged(this, slot, reading)); } diff --git a/src/main/java/com/refinedmods/refinedstorage/network/SetFilterSlotMessage.java b/src/main/java/com/refinedmods/refinedstorage/network/SetFilterSlotMessage.java index 81e854dee..551ef27f5 100644 --- a/src/main/java/com/refinedmods/refinedstorage/network/SetFilterSlotMessage.java +++ b/src/main/java/com/refinedmods/refinedstorage/network/SetFilterSlotMessage.java @@ -3,12 +3,14 @@ package com.refinedmods.refinedstorage.network; import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.container.slot.filter.FilterSlot; import com.refinedmods.refinedstorage.container.slot.legacy.LegacyFilterSlot; +import com.refinedmods.refinedstorage.inventory.item.BaseItemHandler; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.Container; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; +import net.minecraftforge.items.IItemHandler; import java.util.function.Supplier; @@ -46,6 +48,16 @@ public class SetFilterSlotMessage { // Avoid resetting allowed tag list in the pattern grid. if (API.instance().getComparer().isEqualNoQuantity(slot.getStack(), message.stack)) { slot.getStack().setCount(message.stack.getCount()); + + if (slot instanceof FilterSlot) { + IItemHandler itemHandler = ((FilterSlot) slot).getItemHandler(); + + if (itemHandler instanceof BaseItemHandler) { + ((BaseItemHandler) itemHandler).onChanged(slot.getSlotIndex()); + } + } else { + slot.inventory.markDirty(); + } } else { slot.putStack(message.stack); } diff --git a/src/main/java/com/refinedmods/refinedstorage/network/SetFluidFilterSlotMessage.java b/src/main/java/com/refinedmods/refinedstorage/network/SetFluidFilterSlotMessage.java index 2ef0b318e..7be7bb624 100644 --- a/src/main/java/com/refinedmods/refinedstorage/network/SetFluidFilterSlotMessage.java +++ b/src/main/java/com/refinedmods/refinedstorage/network/SetFluidFilterSlotMessage.java @@ -47,6 +47,7 @@ public class SetFluidFilterSlotMessage { // Avoid resetting allowed tag list in the pattern grid. if (API.instance().getComparer().isEqual(fluidFilterSlot.getFluidInventory().getFluid(slot.getSlotIndex()), message.stack, IComparer.COMPARE_NBT)) { fluidFilterSlot.getFluidInventory().getFluid(slot.getSlotIndex()).setAmount(message.stack.getAmount()); + fluidFilterSlot.getFluidInventory().onChanged(slot.getSlotIndex()); } else { fluidFilterSlot.getFluidInventory().setFluid(slot.getSlotIndex(), message.stack); }