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