More logical class structure
This commit is contained in:
@@ -7,6 +7,7 @@ import net.minecraftforge.common.util.Constants;
|
||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import refinedstorage.api.autocrafting.registry.ICraftingTaskFactory;
|
||||
import refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||
import refinedstorage.apiimpl.autocrafting.task.CraftingTask;
|
||||
import refinedstorage.apiimpl.autocrafting.task.CraftingTaskNormal;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@@ -23,13 +24,13 @@ public class CraftingTaskFactoryNormal implements ICraftingTaskFactory {
|
||||
CraftingTaskNormal task = new CraftingTaskNormal(pattern);
|
||||
|
||||
if (tag != null) {
|
||||
task.setChildrenCreated(CraftingTaskNormal.readBooleanArray(tag, CraftingTaskNormal.NBT_CHILDREN));
|
||||
task.setSatisfied(CraftingTaskNormal.readBooleanArray(tag, CraftingTaskNormal.NBT_SATISFIED));
|
||||
task.setChecked(CraftingTaskNormal.readBooleanArray(tag, CraftingTaskNormal.NBT_CHECKED));
|
||||
task.setChildrenCreated(CraftingTask.readBooleanArray(tag, CraftingTask.NBT_CHILDREN_CREATED));
|
||||
task.setSatisfied(CraftingTask.readBooleanArray(tag, CraftingTaskNormal.NBT_SATISFIED));
|
||||
task.setChecked(CraftingTask.readBooleanArray(tag, CraftingTaskNormal.NBT_CHECKED));
|
||||
|
||||
List<ItemStack> took = new ArrayList<>();
|
||||
|
||||
NBTTagList tookTag = tag.getTagList(CraftingTaskNormal.NBT_TOOK, Constants.NBT.TAG_COMPOUND);
|
||||
NBTTagList tookTag = tag.getTagList(CraftingTask.NBT_TOOK, Constants.NBT.TAG_COMPOUND);
|
||||
|
||||
for (int i = 0; i < tookTag.tagCount(); ++i) {
|
||||
ItemStack stack = ItemStack.loadItemStackFromNBT(tookTag.getCompoundTagAt(i));
|
||||
|
||||
@@ -1,17 +1,57 @@
|
||||
package refinedstorage.apiimpl.autocrafting.task;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagIntArray;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||
import refinedstorage.api.network.INetworkMaster;
|
||||
import refinedstorage.api.network.NetworkUtils;
|
||||
import refinedstorage.tile.TileController;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class CraftingTask implements ICraftingTask {
|
||||
public static final String NBT_CHILDREN_CREATED = "ChildrenCreated";
|
||||
public static final String NBT_TOOK = "Took";
|
||||
private static final String NBT_CHILD = "Child";
|
||||
|
||||
protected ICraftingPattern pattern;
|
||||
protected ICraftingTask child;
|
||||
|
||||
protected List<ItemStack> took = new ArrayList<>();
|
||||
protected boolean childrenCreated[];
|
||||
|
||||
public CraftingTask(ICraftingPattern pattern) {
|
||||
this.pattern = pattern;
|
||||
this.childrenCreated = new boolean[pattern.getInputs().length];
|
||||
}
|
||||
|
||||
public void setTook(List<ItemStack> took) {
|
||||
this.took = took;
|
||||
}
|
||||
|
||||
public void setChildrenCreated(boolean[] childrenCreated) {
|
||||
this.childrenCreated = childrenCreated;
|
||||
}
|
||||
|
||||
protected void tryCreateChild(INetworkMaster network, int i) {
|
||||
if (!childrenCreated[i]) {
|
||||
ICraftingPattern pattern = NetworkUtils.getPattern(network, this.pattern.getInputs()[i]);
|
||||
|
||||
if (pattern != null) {
|
||||
child = network.createCraftingTask(pattern);
|
||||
|
||||
childrenCreated[i] = true;
|
||||
|
||||
network.updateCraftingTasks();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public ICraftingTask getChild() {
|
||||
@@ -25,6 +65,11 @@ public abstract class CraftingTask implements ICraftingTask {
|
||||
|
||||
@Override
|
||||
public void onCancelled(INetworkMaster network) {
|
||||
for (ItemStack stack : took) {
|
||||
// @TODO: Handle remainder
|
||||
network.insertItem(stack, stack.stackSize, false);
|
||||
}
|
||||
|
||||
if (child != null) {
|
||||
child.onCancelled(network);
|
||||
}
|
||||
@@ -36,6 +81,16 @@ public abstract class CraftingTask implements ICraftingTask {
|
||||
tag.setTag(NBT_CHILD, child.writeToNBT(new NBTTagCompound()));
|
||||
}
|
||||
|
||||
writeBooleanArray(tag, NBT_CHILDREN_CREATED, childrenCreated);
|
||||
|
||||
NBTTagList took = new NBTTagList();
|
||||
|
||||
for (ItemStack stack : this.took) {
|
||||
took.appendTag(stack.serializeNBT());
|
||||
}
|
||||
|
||||
tag.setTag(NBT_TOOK, took);
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@@ -44,4 +99,26 @@ public abstract class CraftingTask implements ICraftingTask {
|
||||
child = TileController.readCraftingTask(tag.getCompoundTag(NBT_CHILD));
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeBooleanArray(NBTTagCompound tag, String name, boolean[] array) {
|
||||
int[] intArray = new int[array.length];
|
||||
|
||||
for (int i = 0; i < intArray.length; ++i) {
|
||||
intArray[i] = array[i] ? 1 : 0;
|
||||
}
|
||||
|
||||
tag.setTag(name, new NBTTagIntArray(intArray));
|
||||
}
|
||||
|
||||
public static boolean[] readBooleanArray(NBTTagCompound tag, String name) {
|
||||
int[] intArray = tag.getIntArray(name);
|
||||
|
||||
boolean array[] = new boolean[intArray.length];
|
||||
|
||||
for (int i = 0; i < intArray.length; ++i) {
|
||||
array[i] = intArray[i] == 1 ? true : false;
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,47 +2,29 @@ package refinedstorage.apiimpl.autocrafting.task;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagIntArray;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.world.World;
|
||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import refinedstorage.api.network.INetworkMaster;
|
||||
import refinedstorage.api.network.NetworkUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class CraftingTaskNormal extends CraftingTask {
|
||||
public static final String NBT_TOOK = "Took";
|
||||
public static final String NBT_SATISFIED = "Satisfied";
|
||||
public static final String NBT_CHILDREN = "Children";
|
||||
public static final String NBT_CHECKED = "Checked";
|
||||
|
||||
private ICraftingPattern pattern;
|
||||
private List<ItemStack> took = new ArrayList<>();
|
||||
private boolean satisfied[];
|
||||
private boolean childrenCreated[];
|
||||
private boolean checked[];
|
||||
|
||||
public CraftingTaskNormal(ICraftingPattern pattern) {
|
||||
this.pattern = pattern;
|
||||
this.satisfied = new boolean[pattern.getInputs().length];
|
||||
this.childrenCreated = new boolean[pattern.getInputs().length];
|
||||
this.checked = new boolean[pattern.getInputs().length];
|
||||
}
|
||||
super(pattern);
|
||||
|
||||
public void setTook(List<ItemStack> took) {
|
||||
this.took = took;
|
||||
this.satisfied = new boolean[pattern.getInputs().length];
|
||||
this.checked = new boolean[pattern.getInputs().length];
|
||||
}
|
||||
|
||||
public void setSatisfied(boolean[] satisfied) {
|
||||
this.satisfied = satisfied;
|
||||
}
|
||||
|
||||
public void setChildrenCreated(boolean[] childrenCreated) {
|
||||
this.childrenCreated = childrenCreated;
|
||||
}
|
||||
|
||||
public void setChecked(boolean[] checked) {
|
||||
this.checked = checked;
|
||||
}
|
||||
@@ -68,16 +50,8 @@ public class CraftingTaskNormal extends CraftingTask {
|
||||
took.add(received);
|
||||
|
||||
network.updateCraftingTasks();
|
||||
} else if (!childrenCreated[i]) {
|
||||
ICraftingPattern pattern = NetworkUtils.getPattern(network, input);
|
||||
|
||||
if (pattern != null) {
|
||||
child = network.createCraftingTask(pattern);
|
||||
|
||||
childrenCreated[i] = true;
|
||||
|
||||
network.updateCraftingTasks();
|
||||
}
|
||||
} else {
|
||||
tryCreateChild(network, i);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -105,32 +79,13 @@ public class CraftingTaskNormal extends CraftingTask {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancelled(INetworkMaster network) {
|
||||
super.onCancelled(network);
|
||||
|
||||
for (ItemStack stack : took) {
|
||||
// @TODO: Handle remainder
|
||||
network.insertItem(stack, stack.stackSize, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||
super.writeToNBT(tag);
|
||||
|
||||
writeBooleanArray(tag, NBT_SATISFIED, satisfied);
|
||||
writeBooleanArray(tag, NBT_CHILDREN, childrenCreated);
|
||||
writeBooleanArray(tag, NBT_CHECKED, checked);
|
||||
|
||||
NBTTagList took = new NBTTagList();
|
||||
|
||||
for (ItemStack stack : this.took) {
|
||||
took.appendTag(stack.serializeNBT());
|
||||
}
|
||||
|
||||
tag.setTag(NBT_TOOK, took);
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@@ -172,26 +127,4 @@ public class CraftingTaskNormal extends CraftingTask {
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
public static void writeBooleanArray(NBTTagCompound tag, String name, boolean[] array) {
|
||||
int[] intArray = new int[array.length];
|
||||
|
||||
for (int i = 0; i < intArray.length; ++i) {
|
||||
intArray[i] = array[i] ? 1 : 0;
|
||||
}
|
||||
|
||||
tag.setTag(name, new NBTTagIntArray(intArray));
|
||||
}
|
||||
|
||||
public static boolean[] readBooleanArray(NBTTagCompound tag, String name) {
|
||||
int[] intArray = tag.getIntArray(name);
|
||||
|
||||
boolean array[] = new boolean[intArray.length];
|
||||
|
||||
for (int i = 0; i < intArray.length; ++i) {
|
||||
array[i] = intArray[i] == 1 ? true : false;
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user