From e87184d2c8e8472a807e8a18df264f846f1e575c Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Wed, 11 Nov 2020 19:55:57 +0100 Subject: [PATCH] Fixed issue where alternatives in the Pattern Grid weren't being saved properly. Fixes #2732 --- CHANGELOG.md | 1 + .../apiimpl/autocrafting/AllowedTagList.java | 12 +++++++ .../network/SetFilterSlotMessage.java | 35 +++++++++++-------- .../network/SetFluidFilterSlotMessage.java | 33 ++++++++++++----- 4 files changed, 57 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 499d30d3d..ed74406a0 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - Fixed Refined Storage sidebuttons displaying over the JEI bookmark pagination buttons (raoulvdberge) - Fixed issue where Crafters may fail to recognize an inventory/tank for some patterns (Darkere) - Fixed issue where the Crafter Manager can crash on invalid patterns (raoulvdberge) +- Fixed issue where alternatives in the Pattern Grid weren't being saved properly (raoulvdberge) ### 1.9.8 diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/AllowedTagList.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/AllowedTagList.java index 458448fe0..6bc7f1732 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/AllowedTagList.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/autocrafting/AllowedTagList.java @@ -94,6 +94,18 @@ public class AllowedTagList { notifyListener(); } + public void setAllowedItemTags(int slot, Set allowedItemTags) { + this.allowedItemTags.set(slot, allowedItemTags); + + notifyListener(); + } + + public void setAllowedFluidTags(int slot, Set allowedFluidTags) { + this.allowedFluidTags.set(slot, allowedFluidTags); + + notifyListener(); + } + public void clearItemTags(int slot) { this.allowedItemTags.get(slot).clear(); diff --git a/src/main/java/com/refinedmods/refinedstorage/network/SetFilterSlotMessage.java b/src/main/java/com/refinedmods/refinedstorage/network/SetFilterSlotMessage.java index f48270566..3c3f0c0be 100644 --- a/src/main/java/com/refinedmods/refinedstorage/network/SetFilterSlotMessage.java +++ b/src/main/java/com/refinedmods/refinedstorage/network/SetFilterSlotMessage.java @@ -1,17 +1,20 @@ package com.refinedmods.refinedstorage.network; -import com.refinedmods.refinedstorage.apiimpl.API; +import com.refinedmods.refinedstorage.api.network.grid.IGrid; +import com.refinedmods.refinedstorage.apiimpl.network.node.GridNetworkNode; +import com.refinedmods.refinedstorage.container.GridContainer; 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.minecraft.util.ResourceLocation; import net.minecraftforge.fml.network.NetworkEvent; -import net.minecraftforge.items.IItemHandler; +import java.util.HashSet; +import java.util.Set; import java.util.function.Supplier; public class SetFilterSlotMessage { @@ -54,22 +57,24 @@ public class SetFilterSlotMessage { Slot slot = container.getSlot(message.containerSlot); if (slot instanceof FilterSlot || slot instanceof LegacyFilterSlot) { - // Avoid resetting allowed tag list in the pattern grid. - if (API.instance().getComparer().isEqualNoQuantity(slot.getStack(), message.stack)) { - slot.getStack().setCount(message.stack.getCount()); + Runnable postAction = () -> { + }; - if (slot instanceof FilterSlot) { - IItemHandler itemHandler = ((FilterSlot) slot).getItemHandler(); + // Prevent the grid crafting matrix inventory listener from resetting the list. + if (container instanceof GridContainer) { + IGrid grid = ((GridContainer) container).getGrid(); + if (grid instanceof GridNetworkNode) { + Set list = new HashSet<>(((GridNetworkNode) grid).getAllowedTagList().getAllowedItemTags().get(slot.getSlotIndex())); - if (itemHandler instanceof BaseItemHandler) { - ((BaseItemHandler) itemHandler).onChanged(slot.getSlotIndex()); - } - } else { - slot.inventory.markDirty(); + postAction = () -> { + ((GridNetworkNode) grid).getAllowedTagList().setAllowedItemTags(slot.getSlotIndex(), list); + ((GridNetworkNode) grid).markDirty(); + }; } - } else { - slot.putStack(message.stack); } + + slot.putStack(message.stack); + postAction.run(); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/network/SetFluidFilterSlotMessage.java b/src/main/java/com/refinedmods/refinedstorage/network/SetFluidFilterSlotMessage.java index 356279c2c..58467e5b9 100644 --- a/src/main/java/com/refinedmods/refinedstorage/network/SetFluidFilterSlotMessage.java +++ b/src/main/java/com/refinedmods/refinedstorage/network/SetFluidFilterSlotMessage.java @@ -1,15 +1,19 @@ package com.refinedmods.refinedstorage.network; -import com.refinedmods.refinedstorage.api.util.IComparer; -import com.refinedmods.refinedstorage.apiimpl.API; +import com.refinedmods.refinedstorage.api.network.grid.IGrid; +import com.refinedmods.refinedstorage.apiimpl.network.node.GridNetworkNode; +import com.refinedmods.refinedstorage.container.GridContainer; import com.refinedmods.refinedstorage.container.slot.filter.FluidFilterSlot; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.Container; import net.minecraft.inventory.container.Slot; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.network.NetworkEvent; +import java.util.HashSet; +import java.util.Set; import java.util.function.Supplier; public class SetFluidFilterSlotMessage { @@ -52,15 +56,26 @@ public class SetFluidFilterSlotMessage { Slot slot = container.getSlot(message.containerSlot); if (slot instanceof FluidFilterSlot) { - FluidFilterSlot fluidFilterSlot = (FluidFilterSlot) slot; + Runnable postAction = () -> { + }; - // 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); + // Prevent the grid crafting matrix inventory listener from resetting the list. + if (container instanceof GridContainer) { + IGrid grid = ((GridContainer) container).getGrid(); + if (grid instanceof GridNetworkNode) { + Set list = new HashSet<>(((GridNetworkNode) grid).getAllowedTagList().getAllowedFluidTags().get(slot.getSlotIndex())); + + postAction = () -> { + ((GridNetworkNode) grid).getAllowedTagList().setAllowedFluidTags(slot.getSlotIndex(), list); + ((GridNetworkNode) grid).markDirty(); + }; + } } + + FluidFilterSlot fluidSlot = (FluidFilterSlot) slot; + + fluidSlot.getFluidInventory().setFluid(slot.getSlotIndex(), message.stack); + postAction.run(); } } }