Crafting task write.
This commit is contained in:
@@ -60,7 +60,7 @@ public interface ICraftingTask {
|
||||
* @param tag the tag
|
||||
* @return the written tag
|
||||
*/
|
||||
NBTTagCompound writeToNBT(NBTTagCompound tag);
|
||||
NBTTagCompound writeToNbt(NBTTagCompound tag);
|
||||
|
||||
/**
|
||||
* {@link ICraftingTask#calculate()} must be run before this!
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileController;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@@ -20,6 +21,8 @@ import javax.annotation.Nullable;
|
||||
import java.util.*;
|
||||
|
||||
public class CraftingManager implements ICraftingManager {
|
||||
private static final String NBT_TASKS = "Tasks";
|
||||
|
||||
private TileController network;
|
||||
|
||||
private Map<String, List<IItemHandlerModifiable>> containerInventories = new LinkedHashMap<>();
|
||||
@@ -115,6 +118,10 @@ public class CraftingManager implements ICraftingManager {
|
||||
if (changed || anyFinished) {
|
||||
onTaskChanged();
|
||||
}
|
||||
|
||||
if (!tasks.isEmpty()) {
|
||||
network.markDirty();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,8 +129,16 @@ public class CraftingManager implements ICraftingManager {
|
||||
public void readFromNBT(NBTTagCompound tag) {
|
||||
}
|
||||
|
||||
@Override // TODO
|
||||
@Override
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||
NBTTagList list = new NBTTagList();
|
||||
|
||||
for (ICraftingTask task : tasks.values()) {
|
||||
list.appendTag(task.writeToNbt(new NBTTagCompound()));
|
||||
}
|
||||
|
||||
tag.setTag(NBT_TASKS, list);
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternChain;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternChainList;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.*;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementList;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElement;
|
||||
@@ -10,6 +8,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskErrorTy
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTaskError;
|
||||
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
||||
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IStackList;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementColor;
|
||||
@@ -26,7 +25,10 @@ import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step.CraftingSt
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step.CraftingStepProcess;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
@@ -35,6 +37,15 @@ import java.util.*;
|
||||
public class CraftingTask implements ICraftingTask {
|
||||
private static final long CALCULATION_TIMEOUT_MS = 5000;
|
||||
|
||||
private static final String NBT_REQUESTED = "Requested";
|
||||
private static final String NBT_QUANTITY = "Quantity";
|
||||
private static final String NBT_PATTERN = "Pattern";
|
||||
private static final String NBT_STEPS = "Steps";
|
||||
private static final String NBT_INSERTER = "Inserter";
|
||||
private static final String NBT_TICKS = "Ticks";
|
||||
private static final String NBT_ID = "Id";
|
||||
private static final String NBT_MISSING = "Missing";
|
||||
|
||||
private INetwork network;
|
||||
private ItemStack requested;
|
||||
private int quantity;
|
||||
@@ -296,11 +307,6 @@ public class CraftingTask implements ICraftingTask {
|
||||
return size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ICraftingMonitorElement> getCraftingMonitorElements() {
|
||||
ICraftingMonitorElementList elements = API.instance().createCraftingMonitorElementList();
|
||||
@@ -474,6 +480,32 @@ public class CraftingTask implements ICraftingTask {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
||||
tag.setTag(NBT_REQUESTED, requested.serializeNBT());
|
||||
tag.setInteger(NBT_QUANTITY, quantity);
|
||||
tag.setTag(NBT_PATTERN, writePatternToNbt(pattern));
|
||||
tag.setTag(NBT_INSERTER, inserter.writeToNbt());
|
||||
tag.setInteger(NBT_TICKS, ticks);
|
||||
tag.setUniqueId(NBT_ID, id);
|
||||
|
||||
NBTTagList steps = new NBTTagList();
|
||||
for (CraftingStep step : this.steps) {
|
||||
steps.appendTag(step.writeToNbt());
|
||||
}
|
||||
|
||||
tag.setTag(NBT_STEPS, steps);
|
||||
|
||||
NBTTagList missing = new NBTTagList();
|
||||
for (ItemStack missingItem : this.missing.getStacks()) {
|
||||
missing.appendTag(missingItem.serializeNBT());
|
||||
}
|
||||
|
||||
tag.setTag(NBT_MISSING, missing);
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
private int getTickInterval(int speedUpgrades) {
|
||||
switch (speedUpgrades) {
|
||||
case 1:
|
||||
@@ -489,4 +521,33 @@ public class CraftingTask implements ICraftingTask {
|
||||
return 10;
|
||||
}
|
||||
}
|
||||
|
||||
private static final String NBT_PATTERN_STACK = "Stack";
|
||||
private static final String NBT_PATTERN_CONTAINER_POS = "ContainerPos";
|
||||
|
||||
public static NBTTagCompound writePatternToNbt(ICraftingPattern pattern) {
|
||||
NBTTagCompound tag = new NBTTagCompound();
|
||||
|
||||
tag.setTag(NBT_PATTERN_STACK, pattern.getStack().serializeNBT());
|
||||
tag.setLong(NBT_PATTERN_CONTAINER_POS, pattern.getContainer().getPosition().toLong());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static ICraftingPattern readPatternFromNbt(NBTTagCompound tag, World world) {
|
||||
BlockPos containerPos = BlockPos.fromLong(tag.getLong(NBT_PATTERN_CONTAINER_POS));
|
||||
|
||||
INetworkNode node = API.instance().getNetworkNodeManager(world).getNode(containerPos);
|
||||
|
||||
if (node instanceof ICraftingPatternContainer) {
|
||||
ItemStack stack = new ItemStack(tag.getCompoundTag(NBT_PATTERN_STACK));
|
||||
|
||||
if (stack.getItem() instanceof ICraftingPatternProvider) {
|
||||
return ((ICraftingPatternProvider) stack.getItem()).create(world, stack, (ICraftingPatternContainer) node);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.extractor;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
@@ -10,6 +12,9 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class CraftingExtractor {
|
||||
private static final String NBT_ITEM = "Item";
|
||||
private static final String NBT_STATUS = "Status";
|
||||
|
||||
private INetwork network;
|
||||
private List<ItemStack> items;
|
||||
private List<CraftingExtractorItemStatus> status = new ArrayList<>();
|
||||
@@ -25,6 +30,23 @@ public class CraftingExtractor {
|
||||
}
|
||||
}
|
||||
|
||||
public CraftingExtractor(INetwork network, NBTTagList tag, boolean processing) {
|
||||
this.network = network;
|
||||
this.processing = processing;
|
||||
|
||||
this.items = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < tag.tagCount(); ++i) {
|
||||
NBTTagCompound itemTag = tag.getCompoundTagAt(i);
|
||||
|
||||
ItemStack stack = new ItemStack(itemTag.getCompoundTag(NBT_ITEM));
|
||||
CraftingExtractorItemStatus status = CraftingExtractorItemStatus.values()[itemTag.getInteger(NBT_STATUS)];
|
||||
|
||||
this.items.add(stack);
|
||||
this.status.add(status);
|
||||
}
|
||||
}
|
||||
|
||||
public List<ItemStack> getItems() {
|
||||
return items;
|
||||
}
|
||||
@@ -104,4 +126,19 @@ public class CraftingExtractor {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public NBTTagList writeToNbt() {
|
||||
NBTTagList list = new NBTTagList();
|
||||
|
||||
for (int i = 0; i < items.size(); ++i) {
|
||||
NBTTagCompound tag = new NBTTagCompound();
|
||||
|
||||
tag.setTag(NBT_ITEM, items.get(i).serializeNBT());
|
||||
tag.setInteger(NBT_STATUS, status.get(i).ordinal());
|
||||
|
||||
list.appendTag(tag);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,17 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.inserter;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Collection;
|
||||
import java.util.Deque;
|
||||
|
||||
public class CraftingInserter {
|
||||
private static final String NBT_ITEM = "Item";
|
||||
private static final String NBT_STATUS = "Status";
|
||||
|
||||
private INetwork network;
|
||||
private Deque<CraftingInserterItem> items = new ArrayDeque<>();
|
||||
|
||||
@@ -15,6 +20,19 @@ public class CraftingInserter {
|
||||
this.network = network;
|
||||
}
|
||||
|
||||
public CraftingInserter(INetwork network, NBTTagList list) {
|
||||
this(network);
|
||||
|
||||
for (int i = 0; i < list.tagCount(); ++i) {
|
||||
NBTTagCompound itemTag = list.getCompoundTagAt(i);
|
||||
|
||||
ItemStack stack = new ItemStack(itemTag.getCompoundTag(NBT_ITEM));
|
||||
CraftingInserterItemStatus status = CraftingInserterItemStatus.values()[itemTag.getInteger(NBT_STATUS)];
|
||||
|
||||
items.push(new CraftingInserterItem(stack, status));
|
||||
}
|
||||
}
|
||||
|
||||
public void insert(ItemStack stack) {
|
||||
items.addLast(new CraftingInserterItem(stack, CraftingInserterItemStatus.WAITING));
|
||||
|
||||
@@ -57,4 +75,19 @@ public class CraftingInserter {
|
||||
public Collection<CraftingInserterItem> getItems() {
|
||||
return items;
|
||||
}
|
||||
|
||||
public NBTTagList writeToNbt() {
|
||||
NBTTagList list = new NBTTagList();
|
||||
|
||||
for (CraftingInserterItem item : items) {
|
||||
NBTTagCompound tag = new NBTTagCompound();
|
||||
|
||||
tag.setTag(NBT_ITEM, item.getStack().serializeNBT());
|
||||
tag.setInteger(NBT_STATUS, item.getStatus().ordinal());
|
||||
|
||||
list.appendTag(tag);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingTask;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
public abstract class CraftingStep {
|
||||
private static final String NBT_PATTERN = "Pattern";
|
||||
private static final String NBT_COMPLETED = "Completed";
|
||||
private static final String NBT_TYPE = "Type";
|
||||
|
||||
protected ICraftingPattern pattern;
|
||||
private boolean completed;
|
||||
|
||||
@@ -25,4 +31,16 @@ public abstract class CraftingStep {
|
||||
public void setCompleted() {
|
||||
this.completed = true;
|
||||
}
|
||||
|
||||
public abstract String getType();
|
||||
|
||||
public NBTTagCompound writeToNbt() {
|
||||
NBTTagCompound tag = new NBTTagCompound();
|
||||
|
||||
tag.setTag(NBT_PATTERN, CraftingTask.writePatternToNbt(pattern));
|
||||
tag.setBoolean(NBT_COMPLETED, completed);
|
||||
tag.setString(NBT_TYPE, getType());
|
||||
|
||||
return tag;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,11 +5,16 @@ import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.extractor.CraftingExtractor;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.inserter.CraftingInserter;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.util.NonNullList;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class CraftingStepCraft extends CraftingStep {
|
||||
private static final String NBT_EXTRACTOR = "Extractor";
|
||||
private static final String NBT_TOOK = "Took";
|
||||
|
||||
private CraftingInserter inserter;
|
||||
private CraftingExtractor extractor;
|
||||
|
||||
@@ -51,6 +56,28 @@ public class CraftingStepCraft extends CraftingStep {
|
||||
return allExtracted;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return "craft";
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNbt() {
|
||||
NBTTagCompound tag = super.writeToNbt();
|
||||
|
||||
tag.setTag(NBT_EXTRACTOR, extractor.writeToNbt());
|
||||
|
||||
NBTTagList took = new NBTTagList();
|
||||
|
||||
for (ItemStack stack : this.took) {
|
||||
took.appendTag(stack.serializeNBT());
|
||||
}
|
||||
|
||||
tag.setTag(NBT_TOOK, took);
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
public CraftingExtractor getExtractor() {
|
||||
return extractor;
|
||||
}
|
||||
|
||||
@@ -6,10 +6,15 @@ import com.raoulvdberge.refinedstorage.api.util.IStackList;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.extractor.CraftingExtractor;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class CraftingStepProcess extends CraftingStep {
|
||||
private static final String NBT_EXTRACTOR = "Extractor";
|
||||
private static final String NBT_TO_RECEIVE = "ToReceive";
|
||||
|
||||
private CraftingExtractor extractor;
|
||||
private IStackList<ItemStack> itemsToReceive = API.instance().createItemStackList();
|
||||
|
||||
@@ -60,6 +65,28 @@ public class CraftingStepProcess extends CraftingStep {
|
||||
return itemsToReceive.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return "process";
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNbt() {
|
||||
NBTTagCompound tag = super.writeToNbt();
|
||||
|
||||
tag.setTag(NBT_EXTRACTOR, extractor.writeToNbt());
|
||||
|
||||
NBTTagList toReceive = new NBTTagList();
|
||||
|
||||
for (ItemStack toReceiveStack : itemsToReceive.getStacks()) {
|
||||
toReceive.appendTag(toReceiveStack.serializeNBT());
|
||||
}
|
||||
|
||||
tag.setTag(NBT_TO_RECEIVE, toReceive);
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
public CraftingExtractor getExtractor() {
|
||||
return extractor;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user