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.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);
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user