diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/BaseContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/container/BaseContainer.java index 4000414ef..4b08a53a4 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/BaseContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/BaseContainer.java @@ -187,7 +187,7 @@ public abstract class BaseContainer extends Container { FluidStack actual = slot.getFluidInventory().getFluid(slot.getSlotIndex()); if (!API.instance().getComparer().isEqual(cached, actual, IComparer.COMPARE_QUANTITY | IComparer.COMPARE_NBT)) { - this.fluids.set(i, actual); + this.fluids.set(i, actual.copy()); RS.NETWORK_HANDLER.sendTo((ServerPlayerEntity) getPlayer(), new FluidFilterSlotUpdateMessage(slot.slotNumber, actual)); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/SetFilterSlotMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/SetFilterSlotMessage.java index 6da112f30..fba6cd406 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/SetFilterSlotMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/SetFilterSlotMessage.java @@ -1,5 +1,6 @@ package com.raoulvdberge.refinedstorage.network; +import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.container.slot.filter.FilterSlot; import com.raoulvdberge.refinedstorage.container.slot.legacy.LegacyFilterSlot; import net.minecraft.entity.player.PlayerEntity; @@ -42,7 +43,12 @@ public class SetFilterSlotMessage { Slot slot = container.getSlot(message.containerSlot); if (slot instanceof FilterSlot || slot instanceof LegacyFilterSlot) { - slot.putStack(message.stack); + // Avoid resetting allowed tag list in the pattern grid. + if (API.instance().getComparer().isEqualNoQuantity(slot.getStack(), message.stack)) { + slot.getStack().setCount(message.stack.getCount()); + } else { + slot.putStack(message.stack); + } } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/SetFluidFilterSlotMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/SetFluidFilterSlotMessage.java index 462ed230a..89d6a77dd 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/SetFluidFilterSlotMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/SetFluidFilterSlotMessage.java @@ -1,5 +1,7 @@ package com.raoulvdberge.refinedstorage.network; +import com.raoulvdberge.refinedstorage.api.util.IComparer; +import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.container.slot.filter.FluidFilterSlot; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.Container; @@ -40,7 +42,14 @@ public class SetFluidFilterSlotMessage { Slot slot = container.getSlot(message.containerSlot); if (slot instanceof FluidFilterSlot) { - ((FluidFilterSlot) slot).getFluidInventory().setFluid(slot.getSlotIndex(), message.stack); + FluidFilterSlot fluidFilterSlot = (FluidFilterSlot) slot; + + // 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()); + } else { + fluidFilterSlot.getFluidInventory().setFluid(slot.getSlotIndex(), message.stack); + } } } }