1.5 -> 1.6 migration: patterns. #1816
This commit is contained in:
		@@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
 | 
				
			|||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternContainer;
 | 
					import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternContainer;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
 | 
					import com.raoulvdberge.refinedstorage.apiimpl.API;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.registry.CraftingTaskFactory;
 | 
					import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.registry.CraftingTaskFactory;
 | 
				
			||||||
 | 
					import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.item.ItemPattern;
 | 
					import com.raoulvdberge.refinedstorage.item.ItemPattern;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
 | 
					import com.raoulvdberge.refinedstorage.util.StackUtils;
 | 
				
			||||||
import net.minecraft.entity.player.EntityPlayer;
 | 
					import net.minecraft.entity.player.EntityPlayer;
 | 
				
			||||||
@@ -31,6 +32,12 @@ public class CraftingPattern implements ICraftingPattern {
 | 
				
			|||||||
    private NonNullList<ItemStack> byproducts = NonNullList.create();
 | 
					    private NonNullList<ItemStack> byproducts = NonNullList.create();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public CraftingPattern(World world, ICraftingPatternContainer container, ItemStack stack) {
 | 
					    public CraftingPattern(World world, ICraftingPatternContainer container, ItemStack stack) {
 | 
				
			||||||
 | 
					        if (!OneSixMigrationHelper.isValidOneSixPattern(stack)) {
 | 
				
			||||||
 | 
					            this.valid = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.container = container;
 | 
					        this.container = container;
 | 
				
			||||||
        this.stack = stack;
 | 
					        this.stack = stack;
 | 
				
			||||||
        this.processing = ItemPattern.isProcessing(stack);
 | 
					        this.processing = ItemPattern.isProcessing(stack);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternProvider
 | 
				
			|||||||
import com.raoulvdberge.refinedstorage.api.network.INetwork;
 | 
					import com.raoulvdberge.refinedstorage.api.network.INetwork;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
 | 
					import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
 | 
					import com.raoulvdberge.refinedstorage.apiimpl.API;
 | 
				
			||||||
 | 
					import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
 | 
					import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode;
 | 
					import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerUpgrade;
 | 
					import com.raoulvdberge.refinedstorage.inventory.ItemHandlerUpgrade;
 | 
				
			||||||
@@ -132,6 +133,11 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
 | 
				
			|||||||
        super.read(tag);
 | 
					        super.read(tag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        StackUtils.readItems(patterns, 0, tag);
 | 
					        StackUtils.readItems(patterns, 0, tag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (OneSixMigrationHelper.migratePatternInventory(patterns)) {
 | 
				
			||||||
 | 
					            markDirty();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        StackUtils.readItems(upgrades, 1, tag);
 | 
					        StackUtils.readItems(upgrades, 1, tag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (tag.hasKey(NBT_DISPLAY_NAME)) {
 | 
					        if (tag.hasKey(NBT_DISPLAY_NAME)) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,6 +76,7 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void addFluidStorages(List<IStorage<FluidStack>> storages) {
 | 
					    public void addFluidStorages(List<IStorage<FluidStack>> storages) {
 | 
				
			||||||
 | 
					        if (storage != null)
 | 
				
			||||||
            storages.add(storage);
 | 
					            storages.add(storage);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,7 +71,7 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void addItemStorages(List<IStorage<ItemStack>> storages) {
 | 
					    public void addItemStorages(List<IStorage<ItemStack>> storages) {
 | 
				
			||||||
        storages.add(storage);
 | 
					        if (storage != null) storages.add(storage);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,12 +4,15 @@ import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
 | 
				
			|||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider;
 | 
					import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.api.util.IOneSixMigrationHelper;
 | 
					import com.raoulvdberge.refinedstorage.api.util.IOneSixMigrationHelper;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
 | 
					import com.raoulvdberge.refinedstorage.apiimpl.API;
 | 
				
			||||||
 | 
					import com.raoulvdberge.refinedstorage.item.ItemPattern;
 | 
				
			||||||
import net.minecraft.item.Item;
 | 
					import net.minecraft.item.Item;
 | 
				
			||||||
import net.minecraft.item.ItemStack;
 | 
					import net.minecraft.item.ItemStack;
 | 
				
			||||||
import net.minecraft.nbt.NBTTagCompound;
 | 
					import net.minecraft.nbt.NBTTagCompound;
 | 
				
			||||||
import net.minecraft.nbt.NBTTagList;
 | 
					import net.minecraft.nbt.NBTTagList;
 | 
				
			||||||
import net.minecraft.world.World;
 | 
					import net.minecraft.world.World;
 | 
				
			||||||
 | 
					import net.minecraftforge.common.util.Constants;
 | 
				
			||||||
import net.minecraftforge.fluids.FluidStack;
 | 
					import net.minecraftforge.fluids.FluidStack;
 | 
				
			||||||
 | 
					import net.minecraftforge.items.IItemHandler;
 | 
				
			||||||
import net.minecraftforge.items.IItemHandlerModifiable;
 | 
					import net.minecraftforge.items.IItemHandlerModifiable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.UUID;
 | 
					import java.util.UUID;
 | 
				
			||||||
@@ -112,4 +115,71 @@ public class OneSixMigrationHelper implements IOneSixMigrationHelper {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return migrated;
 | 
					        return migrated;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static final String NBT_OUTPUTS = "Outputs";
 | 
				
			||||||
 | 
					    private static final String NBT_SLOT = "Slot_%d";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static boolean migratePattern(ItemStack pattern) {
 | 
				
			||||||
 | 
					        NBTTagCompound tag = pattern.getTagCompound();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (pattern.hasTagCompound() && !tag.hasKey(ItemPattern.NBT_PROCESSING)) {
 | 
				
			||||||
 | 
					            boolean isProcessing = tag.hasKey(NBT_OUTPUTS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Add "processing" tag
 | 
				
			||||||
 | 
					            tag.setBoolean(ItemPattern.NBT_PROCESSING, isProcessing);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Convert "slot_%d" to "input_%d"
 | 
				
			||||||
 | 
					            for (int i = 0; i < 9; ++i) {
 | 
				
			||||||
 | 
					                String id = String.format(NBT_SLOT, i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (tag.hasKey(id)) {
 | 
				
			||||||
 | 
					                    ItemStack slot = new ItemStack(pattern.getTagCompound().getCompoundTag(id));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (!slot.isEmpty()) {
 | 
				
			||||||
 | 
					                        tag.setTag(String.format(ItemPattern.NBT_INPUT_SLOT, i), slot.serializeNBT());
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    tag.removeTag(id);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Convert "outputs" to "output_%d"
 | 
				
			||||||
 | 
					            if (isProcessing) {
 | 
				
			||||||
 | 
					                NBTTagList list = tag.getTagList(NBT_OUTPUTS, Constants.NBT.TAG_COMPOUND);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (int i = 0; i < list.tagCount(); ++i) {
 | 
				
			||||||
 | 
					                    ItemStack output = new ItemStack(list.getCompoundTagAt(i));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (!output.isEmpty()) {
 | 
				
			||||||
 | 
					                        tag.setTag(String.format(ItemPattern.NBT_OUTPUT_SLOT, i), output.serializeNBT());
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                tag.removeTag(NBT_OUTPUTS);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static boolean migratePatternInventory(IItemHandler handler) {
 | 
				
			||||||
 | 
					        boolean migrated = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (int i = 0; i < handler.getSlots(); ++i) {
 | 
				
			||||||
 | 
					            ItemStack pattern = handler.getStackInSlot(i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!pattern.isEmpty() && migratePattern(pattern)) {
 | 
				
			||||||
 | 
					                migrated = true;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return migrated;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // We check on NBT_PROCESSING, so it needs to be there for sure to be a valid pattern.
 | 
				
			||||||
 | 
					    public static boolean isValidOneSixPattern(ItemStack stack) {
 | 
				
			||||||
 | 
					        return stack.hasTagCompound() && stack.getTagCompound().hasKey(ItemPattern.NBT_PROCESSING);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,10 +5,12 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
 | 
				
			|||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternContainer;
 | 
					import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternContainer;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternProvider;
 | 
					import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternProvider;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern;
 | 
					import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern;
 | 
				
			||||||
 | 
					import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper;
 | 
				
			||||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
 | 
					import com.raoulvdberge.refinedstorage.util.RenderUtils;
 | 
				
			||||||
import net.minecraft.client.gui.GuiScreen;
 | 
					import net.minecraft.client.gui.GuiScreen;
 | 
				
			||||||
import net.minecraft.client.resources.I18n;
 | 
					import net.minecraft.client.resources.I18n;
 | 
				
			||||||
import net.minecraft.client.util.ITooltipFlag;
 | 
					import net.minecraft.client.util.ITooltipFlag;
 | 
				
			||||||
 | 
					import net.minecraft.entity.Entity;
 | 
				
			||||||
import net.minecraft.entity.player.EntityPlayer;
 | 
					import net.minecraft.entity.player.EntityPlayer;
 | 
				
			||||||
import net.minecraft.item.ItemStack;
 | 
					import net.minecraft.item.ItemStack;
 | 
				
			||||||
import net.minecraft.nbt.NBTTagCompound;
 | 
					import net.minecraft.nbt.NBTTagCompound;
 | 
				
			||||||
@@ -28,10 +30,10 @@ import java.util.stream.Collectors;
 | 
				
			|||||||
public class ItemPattern extends ItemBase implements ICraftingPatternProvider {
 | 
					public class ItemPattern extends ItemBase implements ICraftingPatternProvider {
 | 
				
			||||||
    private static Map<ItemStack, CraftingPattern> PATTERN_CACHE = new HashMap<>();
 | 
					    private static Map<ItemStack, CraftingPattern> PATTERN_CACHE = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final String NBT_INPUT_SLOT = "Input_%d";
 | 
					    public static final String NBT_INPUT_SLOT = "Input_%d";
 | 
				
			||||||
    private static final String NBT_OUTPUT_SLOT = "Output_%d";
 | 
					    public static final String NBT_OUTPUT_SLOT = "Output_%d";
 | 
				
			||||||
    private static final String NBT_OREDICT = "Oredict";
 | 
					    private static final String NBT_OREDICT = "Oredict";
 | 
				
			||||||
    private static final String NBT_PROCESSING = "Processing";
 | 
					    public static final String NBT_PROCESSING = "Processing";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public ItemPattern() {
 | 
					    public ItemPattern() {
 | 
				
			||||||
        super("pattern");
 | 
					        super("pattern");
 | 
				
			||||||
@@ -164,4 +166,13 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider {
 | 
				
			|||||||
    public ICraftingPattern create(World world, ItemStack stack, ICraftingPatternContainer container) {
 | 
					    public ICraftingPattern create(World world, ItemStack stack, ICraftingPatternContainer container) {
 | 
				
			||||||
        return new CraftingPattern(world, container, stack);
 | 
					        return new CraftingPattern(world, container, stack);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isSelected) {
 | 
				
			||||||
 | 
					        super.onUpdate(stack, world, entity, slot, isSelected);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!world.isRemote) {
 | 
				
			||||||
 | 
					            OneSixMigrationHelper.migratePattern(stack);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user