Skip to content

Commit

Permalink
Fixed issue where alternatives in the Pattern Grid weren't being save…
Browse files Browse the repository at this point in the history
…d properly. Fixes #2732
  • Loading branch information
raoulvdberge committed Nov 11, 2020
1 parent 1ddda1f commit e87184d
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 25 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,18 @@ public void setAllowedFluidTags(List<Set<ResourceLocation>> allowedFluidTags) {
notifyListener();
}

public void setAllowedItemTags(int slot, Set<ResourceLocation> allowedItemTags) {
this.allowedItemTags.set(slot, allowedItemTags);

notifyListener();
}

public void setAllowedFluidTags(int slot, Set<ResourceLocation> allowedFluidTags) {
this.allowedFluidTags.set(slot, allowedFluidTags);

notifyListener();
}

public void clearItemTags(int slot) {
this.allowedItemTags.get(slot).clear();

Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -54,22 +57,24 @@ private static void handle(SetFilterSlotMessage message, Container container) {
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<ResourceLocation> 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();
}
}
}
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -52,15 +56,26 @@ private static void handle(SetFluidFilterSlotMessage message, Container containe
Slot slot = container.getSlot(message.containerSlot);

if (slot instanceof FluidFilterSlot) {
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());
fluidFilterSlot.getFluidInventory().onChanged(slot.getSlotIndex());
} else {
fluidFilterSlot.getFluidInventory().setFluid(slot.getSlotIndex(), message.stack);
Runnable postAction = () -> {
};

// 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<ResourceLocation> 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();
}
}
}

0 comments on commit e87184d

Please sign in to comment.