From 8ead5087764d17b237071e0cd5f8f41c45789c1f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 28 Dec 2021 12:55:11 +0100 Subject: [PATCH] fixed item filter population not being visible until the container is reopened Closes #78 --- .../de/ellpeck/prettypipes/misc/ItemFilter.java | 16 +++++++++++++--- .../prettypipes/packets/PacketButton.java | 5 ++--- .../modules/insertion/FilterModuleContainer.java | 7 ++++++- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/ellpeck/prettypipes/misc/ItemFilter.java b/src/main/java/de/ellpeck/prettypipes/misc/ItemFilter.java index bd6fe71..ee5f585 100644 --- a/src/main/java/de/ellpeck/prettypipes/misc/ItemFilter.java +++ b/src/main/java/de/ellpeck/prettypipes/misc/ItemFilter.java @@ -37,8 +37,7 @@ public class ItemFilter extends ItemStackHandler { super(size); this.stack = stack; this.pipe = pipe; - if (stack.hasTag()) - this.deserializeNBT(stack.getTag().getCompound("filter")); + this.load(); } public List getSlots(int x, int y) { @@ -69,12 +68,13 @@ public class ItemFilter extends ItemStackHandler { return buttons; } - public void onButtonPacket(int id) { + public void onButtonPacket(IFilteredContainer menu, int id) { if (id == 0 && this.canModifyWhitelist) { this.isWhitelist = !this.isWhitelist; this.modified = true; this.save(); } else if (id == 1 && this.canPopulateFromInventories) { + var changed = false; // populate filter from inventories var filters = this.pipe.getFilters(); for (var direction : Direction.values()) { @@ -90,12 +90,15 @@ public class ItemFilter extends ItemStackHandler { // try inserting into ourselves and any filter increase modifiers for (var filter : filters) { if (ItemHandlerHelper.insertItem(filter, copy, false).isEmpty()) { + changed = true; filter.save(); break; } } } } + if (changed) + menu.onFilterPopulated(); } } @@ -125,6 +128,11 @@ public class ItemFilter extends ItemStackHandler { } } + public void load() { + if (this.stack.hasTag()) + this.deserializeNBT(this.stack.getTag().getCompound("filter")); + } + @Override public CompoundTag serializeNBT() { var nbt = super.serializeNBT(); @@ -155,5 +163,7 @@ public class ItemFilter extends ItemStackHandler { public interface IFilteredContainer { ItemFilter getFilter(); + + default void onFilterPopulated() {} } } diff --git a/src/main/java/de/ellpeck/prettypipes/packets/PacketButton.java b/src/main/java/de/ellpeck/prettypipes/packets/PacketButton.java index ed98a6f..41f365e 100644 --- a/src/main/java/de/ellpeck/prettypipes/packets/PacketButton.java +++ b/src/main/java/de/ellpeck/prettypipes/packets/PacketButton.java @@ -99,9 +99,8 @@ public class PacketButton { } }), FILTER_CHANGE((pos, data, player) -> { - var container = (IFilteredContainer) player.containerMenu; - var filter = container.getFilter(); - filter.onButtonPacket(data[0]); + if (player.containerMenu instanceof IFilteredContainer filtered) + filtered.getFilter().onButtonPacket(filtered, data[0]); }), STACK_SIZE_MODULE_BUTTON((pos, data, player) -> { var container = (AbstractPipeContainer) player.containerMenu; diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/modules/insertion/FilterModuleContainer.java b/src/main/java/de/ellpeck/prettypipes/pipe/modules/insertion/FilterModuleContainer.java index 9be9f1d..2b7d194 100644 --- a/src/main/java/de/ellpeck/prettypipes/pipe/modules/insertion/FilterModuleContainer.java +++ b/src/main/java/de/ellpeck/prettypipes/pipe/modules/insertion/FilterModuleContainer.java @@ -6,7 +6,6 @@ import de.ellpeck.prettypipes.pipe.containers.AbstractPipeContainer; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.MenuType; -import net.minecraft.world.inventory.Slot; import javax.annotation.Nullable; @@ -18,6 +17,12 @@ public class FilterModuleContainer extends AbstractPipeContainer