1.5 -> 1.6 migration: patterns. #1816

This commit is contained in:
raoulvdberge
2018-06-14 20:36:54 +02:00
parent 992f3d6981
commit 497b22316b
6 changed files with 100 additions and 5 deletions

View File

@@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternContainer;
import com.raoulvdberge.refinedstorage.apiimpl.API;
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.util.StackUtils;
import net.minecraft.entity.player.EntityPlayer;
@@ -31,6 +32,12 @@ public class CraftingPattern implements ICraftingPattern {
private NonNullList<ItemStack> byproducts = NonNullList.create();
public CraftingPattern(World world, ICraftingPatternContainer container, ItemStack stack) {
if (!OneSixMigrationHelper.isValidOneSixPattern(stack)) {
this.valid = false;
return;
}
this.container = container;
this.stack = stack;
this.processing = ItemPattern.isProcessing(stack);

View File

@@ -7,6 +7,7 @@ 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;
@@ -132,6 +133,11 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
super.read(tag);
StackUtils.readItems(patterns, 0, tag);
if (OneSixMigrationHelper.migratePatternInventory(patterns)) {
markDirty();
}
StackUtils.readItems(upgrades, 1, tag);
if (tag.hasKey(NBT_DISPLAY_NAME)) {

View File

@@ -76,7 +76,8 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage,
@Override
public void addFluidStorages(List<IStorage<FluidStack>> storages) {
storages.add(storage);
if (storage != null)
storages.add(storage);
}
@Override

View File

@@ -71,7 +71,7 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto
@Override
public void addItemStorages(List<IStorage<ItemStack>> storages) {
storages.add(storage);
if (storage != null) storages.add(storage);
}
@Override

View File

@@ -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.util.IOneSixMigrationHelper;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.item.ItemPattern;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable;
import java.util.UUID;
@@ -112,4 +115,71 @@ public class OneSixMigrationHelper implements IOneSixMigrationHelper {
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);
}
}

View File

@@ -5,10 +5,12 @@ 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.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;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -28,10 +30,10 @@ import java.util.stream.Collectors;
public class ItemPattern extends ItemBase implements ICraftingPatternProvider {
private static Map<ItemStack, CraftingPattern> PATTERN_CACHE = new HashMap<>();
private static final String NBT_INPUT_SLOT = "Input_%d";
private static final String NBT_OUTPUT_SLOT = "Output_%d";
public static final String NBT_INPUT_SLOT = "Input_%d";
public static final String NBT_OUTPUT_SLOT = "Output_%d";
private static final String NBT_OREDICT = "Oredict";
private static final String NBT_PROCESSING = "Processing";
public static final String NBT_PROCESSING = "Processing";
public ItemPattern() {
super("pattern");
@@ -164,4 +166,13 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider {
public ICraftingPattern create(World world, ItemStack stack, ICraftingPatternContainer container) {
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);
}
}
}