More logical class structure

This commit is contained in:
Raoul Van den Berge
2016-08-30 01:15:15 +02:00
parent 73eacfe8ca
commit 223ae94468
3 changed files with 87 additions and 76 deletions

View File

@@ -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));

View File

@@ -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;
}
}

View File

@@ -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;
}
}