Still broken
This commit is contained in:
@@ -138,7 +138,13 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
|||||||
if (crafter.getStackInSlot(i) != null) {
|
if (crafter.getStackInSlot(i) != null) {
|
||||||
ItemStack pattern = crafter.getStackInSlot(i);
|
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()) {
|
while (craftingTaskIterator.hasNext()) {
|
||||||
ICraftingTask task = craftingTaskIterator.next();
|
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);
|
task.onDone(this);
|
||||||
|
|
||||||
craftingTaskIterator.remove();
|
craftingTaskIterator.remove();
|
||||||
@@ -289,7 +295,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
|||||||
int amount = 0;
|
int amount = 0;
|
||||||
|
|
||||||
for (int i = 0; i < craftingTasks.size(); ++i) {
|
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++;
|
amount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -515,10 +521,10 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
|||||||
|
|
||||||
switch (taskTag.getInteger("Type")) {
|
switch (taskTag.getInteger("Type")) {
|
||||||
case 0:
|
case 0:
|
||||||
addCraftingTask(new BasicCraftingTask(worldObj, taskTag));
|
addCraftingTask(new BasicCraftingTask(taskTag));
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
addCraftingTask(new ProcessingCraftingTask(worldObj, taskTag));
|
addCraftingTask(new ProcessingCraftingTask(taskTag));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package refinedstorage.tile.autocrafting;
|
|||||||
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.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.util.Constants;
|
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_Y = "CrafterY";
|
||||||
public static final String NBT_CRAFTER_Z = "CrafterZ";
|
public static final String NBT_CRAFTER_Z = "CrafterZ";
|
||||||
|
|
||||||
|
private int crafterX;
|
||||||
|
private int crafterY;
|
||||||
|
private int crafterZ;
|
||||||
private TileCrafter crafter;
|
private TileCrafter crafter;
|
||||||
private boolean processing;
|
private boolean processing;
|
||||||
private ItemStack[] inputs;
|
private ItemStack[] inputs;
|
||||||
private ItemStack[] outputs;
|
private ItemStack[] outputs;
|
||||||
|
|
||||||
public CraftingPattern(TileCrafter crafter, boolean processing, ItemStack[] inputs, ItemStack[] outputs) {
|
public CraftingPattern(int crafterX, int crafterY, int crafterZ, boolean processing, ItemStack[] inputs, ItemStack[] outputs) {
|
||||||
this.crafter = crafter;
|
this.crafterX = crafterX;
|
||||||
|
this.crafterY = crafterY;
|
||||||
|
this.crafterZ = crafterZ;
|
||||||
this.processing = processing;
|
this.processing = processing;
|
||||||
this.inputs = inputs;
|
this.inputs = inputs;
|
||||||
this.outputs = outputs;
|
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;
|
return crafter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,7 +51,7 @@ public class CraftingPattern {
|
|||||||
return outputs;
|
return outputs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean comparePattern(CraftingPattern otherPattern, int flags) {
|
public boolean comparePattern(World world, CraftingPattern otherPattern, int flags) {
|
||||||
if (otherPattern == this) {
|
if (otherPattern == this) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -52,7 +59,7 @@ public class CraftingPattern {
|
|||||||
if (otherPattern.getInputs().length != inputs.length ||
|
if (otherPattern.getInputs().length != inputs.length ||
|
||||||
otherPattern.getOutputs().length != outputs.length ||
|
otherPattern.getOutputs().length != outputs.length ||
|
||||||
otherPattern.isProcessing() != processing ||
|
otherPattern.isProcessing() != processing ||
|
||||||
!otherPattern.getCrafter().getPos().equals(crafter.getPos())) {
|
!otherPattern.getCrafter(world).getPos().equals(getCrafter(world).getPos())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,31 +98,25 @@ public class CraftingPattern {
|
|||||||
tag.setInteger(NBT_CRAFTER_Z, crafter.getPos().getZ());
|
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 cx = tag.getInteger(NBT_CRAFTER_X);
|
||||||
int cy = tag.getInteger(NBT_CRAFTER_Y);
|
int cy = tag.getInteger(NBT_CRAFTER_Y);
|
||||||
int cz = tag.getInteger(NBT_CRAFTER_Z);
|
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) {
|
NBTTagList inputsTag = tag.getTagList(ItemPattern.NBT_INPUTS, Constants.NBT.TAG_COMPOUND);
|
||||||
boolean processing = tag.getBoolean(ItemPattern.NBT_PROCESSING);
|
ItemStack inputs[] = new ItemStack[inputsTag.tagCount()];
|
||||||
|
for (int i = 0; i < inputsTag.tagCount(); ++i) {
|
||||||
NBTTagList inputsTag = tag.getTagList(ItemPattern.NBT_INPUTS, Constants.NBT.TAG_COMPOUND);
|
inputs[i] = ItemStack.loadItemStackFromNBT(inputsTag.getCompoundTagAt(i));
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class TileCrafter extends TileMachine implements IInventory {
|
|||||||
@Override
|
@Override
|
||||||
public void onDisconnected() {
|
public void onDisconnected() {
|
||||||
for (ICraftingTask task : controller.getCraftingTasks()) {
|
for (ICraftingTask task : controller.getCraftingTasks()) {
|
||||||
if (task.getPattern().getCrafter() == this) {
|
if (task.getPattern().getCrafter(worldObj) == this) {
|
||||||
controller.cancelCraftingTask(task);
|
controller.cancelCraftingTask(task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ 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.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
import net.minecraft.world.World;
|
|
||||||
import refinedstorage.tile.TileController;
|
import refinedstorage.tile.TileController;
|
||||||
import refinedstorage.tile.autocrafting.CraftingPattern;
|
import refinedstorage.tile.autocrafting.CraftingPattern;
|
||||||
import refinedstorage.util.NBTUtils;
|
import refinedstorage.util.NBTUtils;
|
||||||
@@ -33,8 +32,8 @@ public class BasicCraftingTask implements ICraftingTask {
|
|||||||
this.childTasks = new boolean[pattern.getInputs().length];
|
this.childTasks = new boolean[pattern.getInputs().length];
|
||||||
}
|
}
|
||||||
|
|
||||||
public BasicCraftingTask(World world, NBTTagCompound tag) {
|
public BasicCraftingTask(NBTTagCompound tag) {
|
||||||
this.pattern = CraftingPattern.readFromNBT(world, tag.getCompoundTag(CraftingPattern.NBT));
|
this.pattern = CraftingPattern.readFromNBT(tag.getCompoundTag(CraftingPattern.NBT));
|
||||||
this.satisfied = NBTUtils.readBoolArray(tag, NBT_SATISFIED);
|
this.satisfied = NBTUtils.readBoolArray(tag, NBT_SATISFIED);
|
||||||
this.checked = NBTUtils.readBoolArray(tag, NBT_CHECKED);
|
this.checked = NBTUtils.readBoolArray(tag, NBT_CHECKED);
|
||||||
this.childTasks = NBTUtils.readBoolArray(tag, NBT_CHILD_TASKS);
|
this.childTasks = NBTUtils.readBoolArray(tag, NBT_CHILD_TASKS);
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import net.minecraft.nbt.NBTTagCompound;
|
|||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.tileentity.TileEntityHopper;
|
import net.minecraft.tileentity.TileEntityHopper;
|
||||||
import net.minecraft.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
import net.minecraft.world.World;
|
|
||||||
import refinedstorage.tile.TileController;
|
import refinedstorage.tile.TileController;
|
||||||
import refinedstorage.tile.autocrafting.CraftingPattern;
|
import refinedstorage.tile.autocrafting.CraftingPattern;
|
||||||
import refinedstorage.tile.autocrafting.TileCrafter;
|
import refinedstorage.tile.autocrafting.TileCrafter;
|
||||||
@@ -32,8 +31,8 @@ public class ProcessingCraftingTask implements ICraftingTask {
|
|||||||
this.satisfied = new boolean[pattern.getOutputs().length];
|
this.satisfied = new boolean[pattern.getOutputs().length];
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProcessingCraftingTask(World world, NBTTagCompound tag) {
|
public ProcessingCraftingTask(NBTTagCompound tag) {
|
||||||
this.pattern = CraftingPattern.readFromNBT(world, tag.getCompoundTag(CraftingPattern.NBT));
|
this.pattern = CraftingPattern.readFromNBT(tag.getCompoundTag(CraftingPattern.NBT));
|
||||||
this.inserted = NBTUtils.readBoolArray(tag, NBT_INSERTED);
|
this.inserted = NBTUtils.readBoolArray(tag, NBT_INSERTED);
|
||||||
this.missing = NBTUtils.readBoolArray(tag, NBT_MISSING);
|
this.missing = NBTUtils.readBoolArray(tag, NBT_MISSING);
|
||||||
this.satisfied = NBTUtils.readBoolArray(tag, NBT_SATISFIED);
|
this.satisfied = NBTUtils.readBoolArray(tag, NBT_SATISFIED);
|
||||||
@@ -46,7 +45,7 @@ public class ProcessingCraftingTask implements ICraftingTask {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(TileController controller) {
|
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()));
|
TileEntity crafterFacing = crafter.getWorld().getTileEntity(crafter.getPos().offset(crafter.getDirection()));
|
||||||
|
|
||||||
if (crafterFacing instanceof IInventory) {
|
if (crafterFacing instanceof IInventory) {
|
||||||
|
|||||||
@@ -1,28 +1,26 @@
|
|||||||
package refinedstorage.util;
|
package refinedstorage.util;
|
||||||
|
|
||||||
import net.minecraft.nbt.NBTTagByte;
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagIntArray;
|
||||||
import net.minecraftforge.common.util.Constants;
|
|
||||||
|
|
||||||
public class NBTUtils {
|
public class NBTUtils {
|
||||||
public static void writeBoolArray(NBTTagCompound tag, String name, boolean[] arr) {
|
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) {
|
for (int i = 0; i < intArr.length; ++i) {
|
||||||
list.appendTag(new NBTTagByte(arr[i] ? (byte) 1 : (byte) 0));
|
intArr[i] = arr[i] ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
tag.setTag(name, list);
|
tag.setTag(name, new NBTTagIntArray(intArr));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean[] readBoolArray(NBTTagCompound tag, String name) {
|
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) {
|
for (int i = 0; i < intArr.length; ++i) {
|
||||||
arr[i] = ((NBTTagByte) list.get(i)).getByte() == 1 ? true : false;
|
arr[i] = intArr[i] == 1 ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return arr;
|
return arr;
|
||||||
|
|||||||
Reference in New Issue
Block a user