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_CHECKED = "Checked";
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";
protected ICraftingPattern pattern;
@@ -120,6 +124,10 @@ public abstract class CraftingTask implements ICraftingTask {
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_SATISFIED, satisfied);
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.ICraftingPatternProvider;
import refinedstorage.api.autocrafting.registry.ICraftingTaskFactory;
import refinedstorage.api.autocrafting.task.CraftingTask;
import refinedstorage.api.autocrafting.task.ICraftingTask;
import refinedstorage.api.network.*;
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";
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) -> {
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) {
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) {
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) {
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) {
return factory.create(world, tag, pattern);
@@ -754,15 +752,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
NBTTagList list = new NBTTagList();
for (ICraftingTask task : craftingTasks) {
NBTTagCompound taskTag = 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);
list.appendTag(task.writeToNBT(new NBTTagCompound()));
}
tag.setTag(NBT_CRAFTING_TASKS, list);