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