From 223ae9446862eff70e499f489a482d074927211a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 30 Aug 2016 01:15:15 +0200 Subject: [PATCH] More logical class structure --- .../registry/CraftingTaskFactoryNormal.java | 9 ++- .../autocrafting/task/CraftingTask.java | 77 +++++++++++++++++++ .../autocrafting/task/CraftingTaskNormal.java | 77 ++----------------- 3 files changed, 87 insertions(+), 76 deletions(-) diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryNormal.java b/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryNormal.java index 13c7cdee6..59e64a831 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryNormal.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryNormal.java @@ -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 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)); diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java index c155c33d1..ab676b105 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java @@ -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 took = new ArrayList<>(); + protected boolean childrenCreated[]; + + public CraftingTask(ICraftingPattern pattern) { + this.pattern = pattern; + this.childrenCreated = new boolean[pattern.getInputs().length]; + } + + public void setTook(List 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; + } } diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java index 4a784dd7e..437a30f4b 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java @@ -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 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 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; - } }