From 9fde08c8b09fa2f71435b4c30bae04e24e9b58db Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 11 Aug 2024 08:00:06 -0700 Subject: [PATCH] Fix Legacy Filter NBT Reading (#2570) --- .../java/gregtech/common/covers/CoverConveyor.java | 8 ++++++-- .../java/gregtech/common/covers/CoverFluidFilter.java | 9 ++++----- .../java/gregtech/common/covers/CoverItemFilter.java | 8 ++++---- src/main/java/gregtech/common/covers/CoverPump.java | 7 +++++-- .../common/covers/filter/BaseFilterContainer.java | 11 ++++++++--- .../covers/filter/readers/SimpleItemFilterReader.java | 1 + 6 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index fe5960703fb..798c0000e8c 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -682,8 +682,12 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { this.distributionMode = DistributionMode.VALUES[tagCompound.getInteger("DistributionMode")]; this.isWorkingAllowed = tagCompound.getBoolean("WorkingAllowed"); this.manualImportExportMode = ManualImportExportMode.VALUES[tagCompound.getInteger("ManualImportExportMode")]; - this.itemFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); - this.itemFilterContainer.handleLegacyNBT(tagCompound.getCompoundTag("Filter")); + var filterTag = tagCompound.getCompoundTag("Filter"); + if (filterTag.hasKey("IsBlacklist")) { + this.itemFilterContainer.handleLegacyNBT(filterTag); + } else { + this.itemFilterContainer.deserializeNBT(filterTag); + } } @Override diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index c89663d7bd5..c8763119b57 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -191,14 +191,13 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.filterMode = FluidFilterMode.values()[tagCompound.getInteger("FilterMode")]; - var filterTag = tagCompound.getCompoundTag("Filter"); - if (!filterTag.hasKey("FilterInventory")) { + if (tagCompound.hasKey("IsBlacklist")) { this.fluidFilterContainer.setFilterStack(getDefinition().getDropItemStack()); + this.fluidFilterContainer.handleLegacyNBT(tagCompound); + this.fluidFilterContainer.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); } else { - this.fluidFilterContainer.deserializeNBT(filterTag); + this.fluidFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); } - - this.fluidFilterContainer.handleLegacyNBT(tagCompound); } private class FluidHandlerFiltered extends FluidHandlerDelegate { diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 3ce3841912a..5267d23469d 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -179,13 +179,13 @@ public void writeToNBT(@NotNull NBTTagCompound tagCompound) { public void readFromNBT(@NotNull NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); this.filterMode = ItemFilterMode.VALUES[tagCompound.getInteger("FilterMode")]; - var filterTag = tagCompound.getCompoundTag("Filter"); - if (!filterTag.hasKey("FilterInventory")) { + if (tagCompound.hasKey("IsBlacklist")) { this.itemFilterContainer.setFilterStack(getDefinition().getDropItemStack()); + this.itemFilterContainer.handleLegacyNBT(tagCompound); + this.itemFilterContainer.setBlacklistFilter(tagCompound.getBoolean("IsBlacklist")); } else { - this.itemFilterContainer.deserializeNBT(filterTag); + this.itemFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); } - this.itemFilterContainer.handleLegacyNBT(tagCompound); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 92b2dd9edd4..2fdb55e2cdd 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -405,8 +405,11 @@ public void readFromNBT(@NotNull NBTTagCompound tagCompound) { this.isWorkingAllowed = tagCompound.getBoolean("WorkingAllowed"); this.manualImportExportMode = ManualImportExportMode.VALUES[tagCompound.getInteger("ManualImportExportMode")]; this.bucketMode = BucketMode.VALUES[tagCompound.getInteger("BucketMode")]; - this.fluidFilterContainer.deserializeNBT(tagCompound.getCompoundTag("Filter")); - this.fluidFilterContainer.handleLegacyNBT(tagCompound); + var filterTag = tagCompound.getCompoundTag("Filter"); + if (filterTag.hasKey("IsBlacklist")) + this.fluidFilterContainer.handleLegacyNBT(filterTag); + else + this.fluidFilterContainer.deserializeNBT(filterTag); } @Override diff --git a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java index 091e6534e92..38867b542bf 100644 --- a/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java +++ b/src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java @@ -187,7 +187,6 @@ public void setTransferSize(int transferSize) { public NBTTagCompound serializeNBT() { NBTTagCompound tagCompound = new NBTTagCompound(); tagCompound.setTag("FilterInventory", super.serializeNBT()); - // tagCompound.setInteger("MaxStackSize", getMaxTransferSize()); tagCompound.setInteger("TransferStackSize", getTransferSize()); return tagCompound; } @@ -201,9 +200,15 @@ public void deserializeNBT(NBTTagCompound nbt) { } public void handleLegacyNBT(NBTTagCompound nbt) { - if (hasFilter()) { - getFilter().getFilterReader().handleLegacyNBT(nbt); + // for filters as covers, the stack is set manually, and "FilterInventory" doesn't exist to be deserialized + // also, ItemStackHandler's deserialization doesn't use setStackInSlot, so I have to do that manually here + if (nbt.hasKey("FilterInventory")) { + super.deserializeNBT(nbt.getCompoundTag("FilterInventory")); + setFilter(BaseFilter.getFilterFromStack(getFilterStack())); } + + if (hasFilter()) + getFilter().getFilterReader().handleLegacyNBT(nbt); } /** Uses Cleanroom MUI */ diff --git a/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java index 7e9ea677b3e..84a66fe90b2 100644 --- a/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java +++ b/src/main/java/gregtech/common/covers/filter/readers/SimpleItemFilterReader.java @@ -81,6 +81,7 @@ public void setStackInSlot(int slot, ItemStack stack) { } NBTTagList list = getInventoryNbt(); list.set(slot, stack.isEmpty() ? new NBTTagCompound() : stack.serializeNBT()); + markDirty(); } }