From 7fc99b55476ee05c0b87d96b686b49ad81278113 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 6 Jul 2018 23:31:14 +0200 Subject: [PATCH] Add pattern conversion hooks for Reborn Storage. Fixes #1850 --- .../api/util/IOneSixMigrationHelper.java | 22 ++++++++++++++++++- .../network/node/NetworkNodeCrafter.java | 3 +-- .../apiimpl/util/OneSixMigrationHelper.java | 6 +++-- .../refinedstorage/item/ItemPattern.java | 4 ++-- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/util/IOneSixMigrationHelper.java b/src/main/java/com/raoulvdberge/refinedstorage/api/util/IOneSixMigrationHelper.java index 08f8fbf4b..e70335c57 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/util/IOneSixMigrationHelper.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/util/IOneSixMigrationHelper.java @@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.api.util; import net.minecraft.item.ItemStack; import net.minecraft.world.World; +import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import java.util.UUID; @@ -26,7 +27,7 @@ public interface IOneSixMigrationHelper { boolean migrateDisk(World world, ItemStack disk); /** - * Migrates an entire inventory. + * Migrates an entire disk inventory. * Loops over every slot in the inventory and calls {@link #migrateDisk(World, ItemStack)}. * All the docs from {@link #migrateDisk(World, ItemStack)} apply here as well! * Don't forget to mark your tile dirty if this call returns true! @@ -36,4 +37,23 @@ public interface IOneSixMigrationHelper { * @return true if it migrated something in the inventory, false otherwise */ boolean migrateDiskInventory(World world, IItemHandlerModifiable handler); + + /** + * Migrates an entire pattern inventory. + * Returns true if there were changes, and the caller should then mark their inventory dirty. + * + * @param handler the pattern inventory + * @return true if a pattern has been converted, false otherwise + */ + boolean migratePatternInventory(IItemHandler handler); + + /** + * Migrates a single pattern stack. + * Returns true if the stack was modified, and the caller should then mark their inventory dirty. + * You most likely need {@link #migratePatternInventory(IItemHandler)}. + * + * @param pattern the pattern + * @return true if the pattern has been converted, false otherwise + */ + boolean migratePattern(ItemStack pattern); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java index bd121cf8d..ea72c9e58 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java @@ -7,7 +7,6 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternProvider import com.raoulvdberge.refinedstorage.api.network.INetwork; 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.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerUpgrade; @@ -134,7 +133,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC StackUtils.readItems(patterns, 0, tag); - if (OneSixMigrationHelper.migratePatternInventory(patterns)) { + if (API.instance().getOneSixMigrationHelper().migratePatternInventory(patterns)) { markDirty(); } 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 68361d3e3..8783668f2 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/OneSixMigrationHelper.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/OneSixMigrationHelper.java @@ -135,7 +135,8 @@ public class OneSixMigrationHelper implements IOneSixMigrationHelper { private static final String NBT_OUTPUTS = "Outputs"; private static final String NBT_SLOT = "Slot_%d"; - public static boolean migratePattern(ItemStack pattern) { + @Override + public boolean migratePattern(ItemStack pattern) { NBTTagCompound tag = pattern.getTagCompound(); if (pattern.hasTagCompound() && !tag.hasKey(ItemPattern.NBT_PROCESSING)) { @@ -180,7 +181,8 @@ public class OneSixMigrationHelper implements IOneSixMigrationHelper { return false; } - public static boolean migratePatternInventory(IItemHandler handler) { + @Override + public boolean migratePatternInventory(IItemHandler handler) { boolean migrated = false; for (int i = 0; i < handler.getSlots(); ++i) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemPattern.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemPattern.java index b99f36b57..318edd5fd 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemPattern.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemPattern.java @@ -5,8 +5,8 @@ import com.raoulvdberge.refinedstorage.RSItems; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternContainer; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternProvider; +import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern; -import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper; import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.resources.I18n; @@ -182,7 +182,7 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider { super.onUpdate(stack, world, entity, slot, isSelected); if (!world.isRemote) { - OneSixMigrationHelper.migratePattern(stack); + API.instance().getOneSixMigrationHelper().migratePattern(stack); } } }