From 2daed84c032c4832ca9d364df903eabf7d416657 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 14 Jun 2018 22:13:23 +0200 Subject: [PATCH] 1.5 -> 1.6 migration: convert empty whitelist to empty blacklist. #1816 --- .../apiimpl/network/node/NetworkNode.java | 16 ++++++++++++++++ .../network/node/NetworkNodeDestructor.java | 3 +++ .../network/node/NetworkNodeImporter.java | 3 +++ .../node/diskdrive/NetworkNodeDiskDrive.java | 3 +++ .../NetworkNodeDiskManipulator.java | 3 +++ .../NetworkNodeExternalStorage.java | 3 +++ .../node/storage/NetworkNodeFluidStorage.java | 3 +++ .../network/node/storage/NetworkNodeStorage.java | 3 +++ .../apiimpl/util/OneSixMigrationHelper.java | 11 +++++++++++ .../refinedstorage/tile/TileNode.java | 9 --------- .../refinedstorage/tile/config/IFilterable.java | 8 +++++++- 11 files changed, 55 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java index ba5d30b8b..022615f01 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java @@ -1,9 +1,11 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.INetworkNodeVisitor; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper; import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode; import com.raoulvdberge.refinedstorage.util.WorldUtils; import net.minecraft.block.state.IBlockState; @@ -23,6 +25,7 @@ import java.util.UUID; public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { private static final String NBT_OWNER = "Owner"; private static final String NBT_DIRECTION = "Direction"; + private static final String NBT_VERSION = "Version"; @Nullable protected INetwork network; @@ -32,6 +35,7 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { protected RedstoneMode redstoneMode = RedstoneMode.IGNORE; @Nullable protected UUID owner; + protected String version; private EnumFacing direction = EnumFacing.NORTH; @@ -147,6 +151,8 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { tag.setUniqueId(NBT_OWNER, owner); } + tag.setString(NBT_VERSION, RS.VERSION); + tag.setInteger(NBT_DIRECTION, direction.ordinal()); writeConfiguration(tag); @@ -169,7 +175,17 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { direction = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION)); } + if (tag.hasKey(NBT_VERSION)) { + version = tag.getString(NBT_VERSION); + } + readConfiguration(tag); + + // We do this after readConfiguration so the 1.6 migration calls see that version is null. + OneSixMigrationHelper.removalHook(); + if (version == null) { + version = RS.VERSION; + } } public void readConfiguration(NBTTagCompound tag) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeDestructor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeDestructor.java index 0e7c5bf8d..be1dd4004 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeDestructor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeDestructor.java @@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.util.IComparer; +import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode; @@ -262,6 +263,8 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I StackUtils.readItems(itemFilters, 0, tag); StackUtils.readItems(fluidFilters, 2, tag); + + OneSixMigrationHelper.migrateEmptyWhitelistToEmptyBlacklist(version, this, itemFilters, fluidFilters); } public IItemHandler getUpgrades() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java index fcc3ae5df..d3e5aa738 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java @@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.util.IComparer; +import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode; @@ -193,6 +194,8 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IFi StackUtils.readItems(itemFilters, 0, tag); StackUtils.readItems(fluidFilters, 2, tag); + + OneSixMigrationHelper.migrateEmptyWhitelistToEmptyBlacklist(version, this, itemFilters, fluidFilters); } public IItemHandler getUpgrades() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java index e13105c1c..f3c7cd6bd 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskdrive/NetworkNodeDiskDrive.java @@ -14,6 +14,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiStorage; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem; +import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode; @@ -214,6 +215,8 @@ public class NetworkNodeDiskDrive extends NetworkNode implements IGuiStorage, IS } accessType = AccessTypeUtils.readAccessType(tag); + + OneSixMigrationHelper.migrateEmptyWhitelistToEmptyBlacklist(version, this, itemFilters, fluidFilters); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java index f60bddf49..bd490b68b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java @@ -8,6 +8,7 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.NetworkNodeDiskDrive; +import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper; import com.raoulvdberge.refinedstorage.inventory.*; import com.raoulvdberge.refinedstorage.item.ItemUpgrade; import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator; @@ -524,6 +525,8 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab if (tag.hasKey(NBT_IO_MODE)) { ioMode = tag.getInteger(NBT_IO_MODE); } + + OneSixMigrationHelper.migrateEmptyWhitelistToEmptyBlacklist(version, this, itemFilters, fluidFilters); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/NetworkNodeExternalStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/NetworkNodeExternalStorage.java index 5ff3084c0..d5ba890d2 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/NetworkNodeExternalStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/NetworkNodeExternalStorage.java @@ -10,6 +10,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiStorage; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem; +import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper; import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; @@ -144,6 +145,8 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP } accessType = AccessTypeUtils.readAccessType(tag); + + OneSixMigrationHelper.migrateEmptyWhitelistToEmptyBlacklist(version, this, itemFilters, fluidFilters); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeFluidStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeFluidStorage.java index 640f61236..cda1b2c55 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeFluidStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeFluidStorage.java @@ -13,6 +13,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiStorage; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid; +import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper; import com.raoulvdberge.refinedstorage.block.BlockFluidStorage; import com.raoulvdberge.refinedstorage.block.FluidStorageType; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; @@ -172,6 +173,8 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, } accessType = AccessTypeUtils.readAccessType(tag); + + OneSixMigrationHelper.migrateEmptyWhitelistToEmptyBlacklist(version, this, null, filters); } public FluidStorageType getType() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeStorage.java index 51da2acc7..0c840a8bd 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/storage/NetworkNodeStorage.java @@ -13,6 +13,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiStorage; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem; +import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper; import com.raoulvdberge.refinedstorage.block.BlockStorage; import com.raoulvdberge.refinedstorage.block.ItemStorageType; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; @@ -172,6 +173,8 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto } accessType = AccessTypeUtils.readAccessType(tag); + + OneSixMigrationHelper.migrateEmptyWhitelistToEmptyBlacklist(version, this, filters, null); } public ItemStorageType getType() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/OneSixMigrationHelper.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/OneSixMigrationHelper.java index 04081b73e..61ad824fa 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/OneSixMigrationHelper.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/OneSixMigrationHelper.java @@ -2,9 +2,11 @@ package com.raoulvdberge.refinedstorage.apiimpl.util; import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk; import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider; +import com.raoulvdberge.refinedstorage.api.util.IFilter; import com.raoulvdberge.refinedstorage.api.util.IOneSixMigrationHelper; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.item.ItemPattern; +import com.raoulvdberge.refinedstorage.tile.config.IFilterable; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -15,6 +17,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; +import javax.annotation.Nullable; import java.util.UUID; public class OneSixMigrationHelper implements IOneSixMigrationHelper { @@ -186,4 +189,12 @@ public class OneSixMigrationHelper implements IOneSixMigrationHelper { // If we remove the OneSixMigrationHelper we know where to remove other migration hooks by removing this method. public static void removalHook() { } + + public static void migrateEmptyWhitelistToEmptyBlacklist(String version, IFilterable filterable, @Nullable IItemHandler itemFilterInv, @Nullable IItemHandler fluidFilterInv) { + // Only migrate if we come from a version where the RS version tag stuff in NetworkNode wasn't added yet. + // Otherwise, we would constantly migrate empty whitelists to empty blacklists... + if (version == null && filterable.getMode() == IFilterable.WHITELIST && IFilterable.isEmpty(itemFilterInv) && IFilterable.isEmpty(fluidFilterInv)) { + filterable.setMode(IFilter.MODE_BLACKLIST); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java index 4c4af9b8e..af24abb7b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java @@ -43,15 +43,6 @@ public abstract class TileNode extends TileBase implement getNode().setRedstoneMode(mode); } - public NBTTagCompound writeConfiguration(NBTTagCompound tag) { - return getNode().writeConfiguration(tag); - } - - public void readConfiguration(NBTTagCompound tag) { - getNode().readConfiguration(tag); - getNode().markDirty(); - } - public NBTTagCompound writeUpdate(NBTTagCompound tag) { super.writeUpdate(tag); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IFilterable.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IFilterable.java index 4a943c0c2..600dfaae9 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IFilterable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IFilterable.java @@ -10,6 +10,8 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.IItemHandler; +import javax.annotation.Nullable; + public interface IFilterable { int WHITELIST = 0; int BLACKLIST = 1; @@ -74,7 +76,11 @@ public interface IFilterable { return false; } - static boolean isEmpty(IItemHandler filter) { + static boolean isEmpty(@Nullable IItemHandler filter) { + if (filter == null) { + return true; + } + for (int i = 0; i < filter.getSlots(); i++) { if (!filter.getStackInSlot(i).isEmpty()) { return false;