From 59772fd303b2be1f3643379bcc2523c8194ee8f7 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 8 May 2016 16:00:27 +0200 Subject: [PATCH] Still broken --- .../refinedstorage/tile/TileController.java | 16 ++++-- .../tile/autocrafting/CraftingPattern.java | 51 ++++++++++--------- .../tile/autocrafting/TileCrafter.java | 2 +- .../autocrafting/task/BasicCraftingTask.java | 5 +- .../task/ProcessingCraftingTask.java | 7 ++- .../java/refinedstorage/util/NBTUtils.java | 20 ++++---- 6 files changed, 52 insertions(+), 49 deletions(-) diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index de70b8d2b..d3d987251 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -138,7 +138,13 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor if (crafter.getStackInSlot(i) != null) { ItemStack pattern = crafter.getStackInSlot(i); - newPatterns.add(new CraftingPattern(crafter, ItemPattern.isProcessing(pattern), ItemPattern.getInputs(pattern), ItemPattern.getOutputs(pattern))); + newPatterns.add(new CraftingPattern( + crafter.getPos().getX(), + crafter.getPos().getY(), + crafter.getPos().getZ(), + ItemPattern.isProcessing(pattern), + ItemPattern.getInputs(pattern), + ItemPattern.getOutputs(pattern))); } } } @@ -194,7 +200,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor while (craftingTaskIterator.hasNext()) { ICraftingTask task = craftingTaskIterator.next(); - if (ticks % task.getPattern().getCrafter().getSpeed() == 0 && task.update(this)) { + if (ticks % task.getPattern().getCrafter(worldObj).getSpeed() == 0 && task.update(this)) { task.onDone(this); craftingTaskIterator.remove(); @@ -289,7 +295,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor int amount = 0; for (int i = 0; i < craftingTasks.size(); ++i) { - if (craftingTasks.get(i).getPattern().comparePattern(pattern, flags)) { + if (craftingTasks.get(i).getPattern().comparePattern(worldObj, pattern, flags)) { amount++; } } @@ -515,10 +521,10 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor switch (taskTag.getInteger("Type")) { case 0: - addCraftingTask(new BasicCraftingTask(worldObj, taskTag)); + addCraftingTask(new BasicCraftingTask(taskTag)); break; case 1: - addCraftingTask(new ProcessingCraftingTask(worldObj, taskTag)); + addCraftingTask(new ProcessingCraftingTask(taskTag)); break; } } diff --git a/src/main/java/refinedstorage/tile/autocrafting/CraftingPattern.java b/src/main/java/refinedstorage/tile/autocrafting/CraftingPattern.java index ea32b165c..2cf09b4f1 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/CraftingPattern.java +++ b/src/main/java/refinedstorage/tile/autocrafting/CraftingPattern.java @@ -3,7 +3,6 @@ package refinedstorage.tile.autocrafting; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; @@ -16,19 +15,27 @@ public class CraftingPattern { public static final String NBT_CRAFTER_Y = "CrafterY"; public static final String NBT_CRAFTER_Z = "CrafterZ"; + private int crafterX; + private int crafterY; + private int crafterZ; private TileCrafter crafter; private boolean processing; private ItemStack[] inputs; private ItemStack[] outputs; - public CraftingPattern(TileCrafter crafter, boolean processing, ItemStack[] inputs, ItemStack[] outputs) { - this.crafter = crafter; + public CraftingPattern(int crafterX, int crafterY, int crafterZ, boolean processing, ItemStack[] inputs, ItemStack[] outputs) { + this.crafterX = crafterX; + this.crafterY = crafterY; + this.crafterZ = crafterZ; this.processing = processing; this.inputs = inputs; this.outputs = outputs; } - public TileCrafter getCrafter() { + public TileCrafter getCrafter(World world) { + if (crafter == null) { + crafter = (TileCrafter) world.getTileEntity(new BlockPos(crafterX, crafterY, crafterZ)); + } return crafter; } @@ -44,7 +51,7 @@ public class CraftingPattern { return outputs; } - public boolean comparePattern(CraftingPattern otherPattern, int flags) { + public boolean comparePattern(World world, CraftingPattern otherPattern, int flags) { if (otherPattern == this) { return true; } @@ -52,7 +59,7 @@ public class CraftingPattern { if (otherPattern.getInputs().length != inputs.length || otherPattern.getOutputs().length != outputs.length || otherPattern.isProcessing() != processing || - !otherPattern.getCrafter().getPos().equals(crafter.getPos())) { + !otherPattern.getCrafter(world).getPos().equals(getCrafter(world).getPos())) { return false; } @@ -91,31 +98,25 @@ public class CraftingPattern { tag.setInteger(NBT_CRAFTER_Z, crafter.getPos().getZ()); } - public static CraftingPattern readFromNBT(World world, NBTTagCompound tag) { + public static CraftingPattern readFromNBT(NBTTagCompound tag) { int cx = tag.getInteger(NBT_CRAFTER_X); int cy = tag.getInteger(NBT_CRAFTER_Y); int cz = tag.getInteger(NBT_CRAFTER_Z); - TileEntity crafter = world.getTileEntity(new BlockPos(cx, cy, cz)); + boolean processing = tag.getBoolean(ItemPattern.NBT_PROCESSING); - if (crafter instanceof TileCrafter) { - boolean processing = tag.getBoolean(ItemPattern.NBT_PROCESSING); - - NBTTagList inputsTag = tag.getTagList(ItemPattern.NBT_INPUTS, Constants.NBT.TAG_COMPOUND); - ItemStack inputs[] = new ItemStack[inputsTag.tagCount()]; - for (int i = 0; i < inputsTag.tagCount(); ++i) { - inputs[i] = ItemStack.loadItemStackFromNBT(inputsTag.getCompoundTagAt(i)); - } - - NBTTagList outputsTag = tag.getTagList(ItemPattern.NBT_OUTPUTS, Constants.NBT.TAG_COMPOUND); - ItemStack outputs[] = new ItemStack[outputsTag.tagCount()]; - for (int i = 0; i < outputsTag.tagCount(); ++i) { - outputs[i] = ItemStack.loadItemStackFromNBT(outputsTag.getCompoundTagAt(i)); - } - - return new CraftingPattern((TileCrafter) crafter, processing, inputs, outputs); + NBTTagList inputsTag = tag.getTagList(ItemPattern.NBT_INPUTS, Constants.NBT.TAG_COMPOUND); + ItemStack inputs[] = new ItemStack[inputsTag.tagCount()]; + for (int i = 0; i < inputsTag.tagCount(); ++i) { + inputs[i] = ItemStack.loadItemStackFromNBT(inputsTag.getCompoundTagAt(i)); } - return null; + NBTTagList outputsTag = tag.getTagList(ItemPattern.NBT_OUTPUTS, Constants.NBT.TAG_COMPOUND); + ItemStack outputs[] = new ItemStack[outputsTag.tagCount()]; + for (int i = 0; i < outputsTag.tagCount(); ++i) { + outputs[i] = ItemStack.loadItemStackFromNBT(outputsTag.getCompoundTagAt(i)); + } + + return new CraftingPattern(cx, cy, cz, processing, inputs, outputs); } } diff --git a/src/main/java/refinedstorage/tile/autocrafting/TileCrafter.java b/src/main/java/refinedstorage/tile/autocrafting/TileCrafter.java index 2e0b4fcc4..fcd143bc2 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/autocrafting/TileCrafter.java @@ -34,7 +34,7 @@ public class TileCrafter extends TileMachine implements IInventory { @Override public void onDisconnected() { for (ICraftingTask task : controller.getCraftingTasks()) { - if (task.getPattern().getCrafter() == this) { + if (task.getPattern().getCrafter(worldObj) == this) { controller.cancelCraftingTask(task); } } diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java index 8f1e6c1c5..3dac3f1e6 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java @@ -4,7 +4,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.text.TextFormatting; -import net.minecraft.world.World; import refinedstorage.tile.TileController; import refinedstorage.tile.autocrafting.CraftingPattern; import refinedstorage.util.NBTUtils; @@ -33,8 +32,8 @@ public class BasicCraftingTask implements ICraftingTask { this.childTasks = new boolean[pattern.getInputs().length]; } - public BasicCraftingTask(World world, NBTTagCompound tag) { - this.pattern = CraftingPattern.readFromNBT(world, tag.getCompoundTag(CraftingPattern.NBT)); + public BasicCraftingTask(NBTTagCompound tag) { + this.pattern = CraftingPattern.readFromNBT(tag.getCompoundTag(CraftingPattern.NBT)); this.satisfied = NBTUtils.readBoolArray(tag, NBT_SATISFIED); this.checked = NBTUtils.readBoolArray(tag, NBT_CHECKED); this.childTasks = NBTUtils.readBoolArray(tag, NBT_CHILD_TASKS); diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java index 67130eb8d..aa4326a27 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java @@ -6,7 +6,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityHopper; import net.minecraft.util.text.TextFormatting; -import net.minecraft.world.World; import refinedstorage.tile.TileController; import refinedstorage.tile.autocrafting.CraftingPattern; import refinedstorage.tile.autocrafting.TileCrafter; @@ -32,8 +31,8 @@ public class ProcessingCraftingTask implements ICraftingTask { this.satisfied = new boolean[pattern.getOutputs().length]; } - public ProcessingCraftingTask(World world, NBTTagCompound tag) { - this.pattern = CraftingPattern.readFromNBT(world, tag.getCompoundTag(CraftingPattern.NBT)); + public ProcessingCraftingTask(NBTTagCompound tag) { + this.pattern = CraftingPattern.readFromNBT(tag.getCompoundTag(CraftingPattern.NBT)); this.inserted = NBTUtils.readBoolArray(tag, NBT_INSERTED); this.missing = NBTUtils.readBoolArray(tag, NBT_MISSING); this.satisfied = NBTUtils.readBoolArray(tag, NBT_SATISFIED); @@ -46,7 +45,7 @@ public class ProcessingCraftingTask implements ICraftingTask { @Override public boolean update(TileController controller) { - TileCrafter crafter = pattern.getCrafter(); + TileCrafter crafter = pattern.getCrafter(controller.getWorld()); TileEntity crafterFacing = crafter.getWorld().getTileEntity(crafter.getPos().offset(crafter.getDirection())); if (crafterFacing instanceof IInventory) { diff --git a/src/main/java/refinedstorage/util/NBTUtils.java b/src/main/java/refinedstorage/util/NBTUtils.java index 7f1d05457..f81e925f3 100755 --- a/src/main/java/refinedstorage/util/NBTUtils.java +++ b/src/main/java/refinedstorage/util/NBTUtils.java @@ -1,28 +1,26 @@ package refinedstorage.util; -import net.minecraft.nbt.NBTTagByte; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.common.util.Constants; +import net.minecraft.nbt.NBTTagIntArray; public class NBTUtils { public static void writeBoolArray(NBTTagCompound tag, String name, boolean[] arr) { - NBTTagList list = new NBTTagList(); + int[] intArr = new int[arr.length]; - for (int i = 0; i < arr.length; ++i) { - list.appendTag(new NBTTagByte(arr[i] ? (byte) 1 : (byte) 0)); + for (int i = 0; i < intArr.length; ++i) { + intArr[i] = arr[i] ? 1 : 0; } - tag.setTag(name, list); + tag.setTag(name, new NBTTagIntArray(intArr)); } public static boolean[] readBoolArray(NBTTagCompound tag, String name) { - NBTTagList list = tag.getTagList(name, Constants.NBT.TAG_COMPOUND); + int[] intArr = tag.getIntArray(name); - boolean[] arr = new boolean[list.tagCount()]; + boolean arr[] = new boolean[intArr.length]; - for (int i = 0; i < arr.length; ++i) { - arr[i] = ((NBTTagByte) list.get(i)).getByte() == 1 ? true : false; + for (int i = 0; i < intArr.length; ++i) { + arr[i] = intArr[i] == 1 ? true : false; } return arr;