Fix bug where child tasks couldn't be read, 1.0 done

This commit is contained in:
Raoul Van den Berge
2016-09-12 22:06:58 +02:00
parent 8abfc5b937
commit 5fbe7ec50c
2 changed files with 13 additions and 15 deletions

View File

@@ -22,6 +22,10 @@ public abstract class CraftingTask implements ICraftingTask {
public static final String NBT_SATISFIED = "Satisfied"; public static final String NBT_SATISFIED = "Satisfied";
public static final String NBT_CHECKED = "Checked"; public static final String NBT_CHECKED = "Checked";
public static final String NBT_TOOK = "Took"; public static final String NBT_TOOK = "Took";
public static final String NBT_PATTERN_STACK = "Pattern";
public static final String NBT_PATTERN_TYPE = "Type";
public static final String NBT_PATTERN_CONTAINER = "Container";
private static final String NBT_CHILD = "Child"; private static final String NBT_CHILD = "Child";
protected ICraftingPattern pattern; protected ICraftingPattern pattern;
@@ -120,6 +124,10 @@ public abstract class CraftingTask implements ICraftingTask {
tag.setTag(NBT_CHILD, child.writeToNBT(new NBTTagCompound())); tag.setTag(NBT_CHILD, child.writeToNBT(new NBTTagCompound()));
} }
tag.setString(NBT_PATTERN_TYPE, pattern.getId());
tag.setTag(NBT_PATTERN_STACK, pattern.getStack().serializeNBT());
tag.setLong(NBT_PATTERN_CONTAINER, pattern.getContainer().getPosition().toLong());
writeBooleanArray(tag, NBT_CHILDREN_CREATED, childrenCreated); writeBooleanArray(tag, NBT_CHILDREN_CREATED, childrenCreated);
writeBooleanArray(tag, NBT_SATISFIED, satisfied); writeBooleanArray(tag, NBT_SATISFIED, satisfied);
writeBooleanArray(tag, NBT_CHECKED, checked); writeBooleanArray(tag, NBT_CHECKED, checked);

View File

@@ -25,6 +25,7 @@ import refinedstorage.api.autocrafting.ICraftingPattern;
import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingPatternContainer;
import refinedstorage.api.autocrafting.ICraftingPatternProvider; import refinedstorage.api.autocrafting.ICraftingPatternProvider;
import refinedstorage.api.autocrafting.registry.ICraftingTaskFactory; import refinedstorage.api.autocrafting.registry.ICraftingTaskFactory;
import refinedstorage.api.autocrafting.task.CraftingTask;
import refinedstorage.api.autocrafting.task.ICraftingTask; import refinedstorage.api.autocrafting.task.ICraftingTask;
import refinedstorage.api.network.*; import refinedstorage.api.network.*;
import refinedstorage.api.network.grid.IFluidGridHandler; import refinedstorage.api.network.grid.IFluidGridHandler;
@@ -132,9 +133,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity"; public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity";
private static final String NBT_CRAFTING_TASKS = "CraftingTasks"; private static final String NBT_CRAFTING_TASKS = "CraftingTasks";
private static final String NBT_CRAFTING_TASK_PATTERN = "Pattern";
private static final String NBT_CRAFTING_TASK_TYPE = "Type";
private static final String NBT_CRAFTING_TASK_CONTAINER = "Container";
private static final Comparator<IItemStorage> ITEM_SIZE_COMPARATOR = (left, right) -> { private static final Comparator<IItemStorage> ITEM_SIZE_COMPARATOR = (left, right) -> {
if (left.getStored() == right.getStored()) { if (left.getStored() == right.getStored()) {
@@ -724,15 +722,15 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
} }
public static ICraftingTask readCraftingTask(World world, NBTTagCompound tag) { public static ICraftingTask readCraftingTask(World world, NBTTagCompound tag) {
ItemStack stack = ItemStack.loadItemStackFromNBT(tag.getCompoundTag(NBT_CRAFTING_TASK_PATTERN)); ItemStack stack = ItemStack.loadItemStackFromNBT(tag.getCompoundTag(CraftingTask.NBT_PATTERN_STACK));
if (stack != null && stack.getItem() instanceof ICraftingPatternProvider) { if (stack != null && stack.getItem() instanceof ICraftingPatternProvider) {
TileEntity container = world.getTileEntity(BlockPos.fromLong(tag.getLong(NBT_CRAFTING_TASK_CONTAINER))); TileEntity container = world.getTileEntity(BlockPos.fromLong(tag.getLong(CraftingTask.NBT_PATTERN_CONTAINER)));
if (container instanceof ICraftingPatternContainer) { if (container instanceof ICraftingPatternContainer) {
ICraftingPattern pattern = ((ICraftingPatternProvider) stack.getItem()).create(world, stack, (ICraftingPatternContainer) container); ICraftingPattern pattern = ((ICraftingPatternProvider) stack.getItem()).create(world, stack, (ICraftingPatternContainer) container);
ICraftingTaskFactory factory = RefinedStorageAPI.instance().getCraftingTaskRegistry().getFactory(tag.getString(NBT_CRAFTING_TASK_TYPE)); ICraftingTaskFactory factory = RefinedStorageAPI.instance().getCraftingTaskRegistry().getFactory(tag.getString(CraftingTask.NBT_PATTERN_TYPE));
if (factory != null) { if (factory != null) {
return factory.create(world, tag, pattern); return factory.create(world, tag, pattern);
@@ -754,15 +752,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
NBTTagList list = new NBTTagList(); NBTTagList list = new NBTTagList();
for (ICraftingTask task : craftingTasks) { for (ICraftingTask task : craftingTasks) {
NBTTagCompound taskTag = new NBTTagCompound(); list.appendTag(task.writeToNBT(new NBTTagCompound()));
task.writeToNBT(taskTag);
taskTag.setString(NBT_CRAFTING_TASK_TYPE, task.getPattern().getId());
taskTag.setTag(NBT_CRAFTING_TASK_PATTERN, task.getPattern().getStack().serializeNBT());
taskTag.setLong(NBT_CRAFTING_TASK_CONTAINER, task.getPattern().getContainer().getPosition().toLong());
list.appendTag(taskTag);
} }
tag.setTag(NBT_CRAFTING_TASKS, list); tag.setTag(NBT_CRAFTING_TASKS, list);