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