From 165278f44ee75906e4cf7d7714464fcefe3c0244 Mon Sep 17 00:00:00 2001 From: way2muchnoise Date: Sat, 3 Dec 2016 11:04:47 +0100 Subject: [PATCH] port over changes on 1.10 related to autocrafting and pattern transfering --- .../raoulvdberge/refinedstorage/RSUtils.java | 22 ++++++++++++---- .../api/autocrafting/ICraftingPattern.java | 4 ++- .../apiimpl/autocrafting/CraftingPattern.java | 8 +++++- .../autocrafting/task/CraftingStep.java | 4 +-- .../autocrafting/task/CraftingStepCraft.java | 25 +++++++++++++------ .../task/CraftingStepProcess.java | 6 ++--- .../autocrafting/task/CraftingTask.java | 11 +++++--- .../gui/grid/stack/ClientStackItem.java | 3 +-- .../item/ItemBlockFluidStorage.java | 8 +++++- .../refinedstorage/item/ItemBlockStorage.java | 8 +++++- .../network/MessageGridItemDelta.java | 2 +- .../network/MessageGridItemUpdate.java | 4 +-- ...ssageProcessingPatternEncoderTransfer.java | 10 ++++---- 13 files changed, 80 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java index a655a8ac8..4d3279e5e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java @@ -76,14 +76,26 @@ public final class RSUtils { QUANTITY_FORMATTER.setRoundingMode(RoundingMode.DOWN); } - public static void writeItemStack(ByteBuf buf, INetworkMaster network, ItemStack stack, boolean displayCraftText) { + public static void writeItemStack(ByteBuf buf, ItemStack stack) { + writeItemStack(buf, stack, null, false); + } + + public static void writeItemStack(ByteBuf buf, ItemStack stack, INetworkMaster network, boolean displayCraftText) { buf.writeInt(Item.getIdFromItem(stack.getItem())); buf.writeInt(stack.getCount()); buf.writeInt(stack.getItemDamage()); - ByteBufUtils.writeTag(buf, stack.getItem().getNBTShareTag(stack)); - buf.writeInt(API.instance().getItemStackHashCode(stack)); - buf.writeBoolean(network.hasPattern(stack)); - buf.writeBoolean(displayCraftText); + if (network != null) { + ByteBufUtils.writeTag(buf, stack.getItem().getNBTShareTag(stack)); + buf.writeInt(API.instance().getItemStackHashCode(stack)); + buf.writeBoolean(network.hasPattern(stack)); + buf.writeBoolean(displayCraftText); + } + } + + public static ItemStack readItemStack(ByteBuf buf) { + ItemStack stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt(), buf.readInt()); + stack.setTagCompound(ByteBufUtils.readTag(buf)); + return stack; } public static void writeFluidStack(ByteBuf buf, FluidStack stack) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPattern.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPattern.java index 4aedd17e8..d443dbe09 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPattern.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPattern.java @@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.api.autocrafting; import com.raoulvdberge.refinedstorage.api.util.IComparer; import net.minecraft.item.ItemStack; +import javax.annotation.Nullable; import java.util.List; /** @@ -46,8 +47,9 @@ public interface ICraftingPattern { /** * @param took the items took - * @return the outputs based on the items took + * @return the outputs based on the items took, null when failed */ + @Nullable List getOutputs(ItemStack[] took); /** diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPattern.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPattern.java index 9def54ef1..4eccebe1d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPattern.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPattern.java @@ -15,6 +15,7 @@ import net.minecraft.world.World; import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.ShapedOreRecipe; +import javax.annotation.Nullable; import java.lang.reflect.InvocationTargetException; import java.util.*; import java.util.stream.Collectors; @@ -193,6 +194,7 @@ public class CraftingPattern implements ICraftingPattern { } @Override + @Nullable public List getOutputs(ItemStack[] took) { List outputs = new ArrayList<>(); @@ -209,7 +211,11 @@ public class CraftingPattern implements ICraftingPattern { } } - ItemStack cleaned = recipe.getCraftingResult(inv).copy(); + ItemStack cleaned = recipe.getCraftingResult(inv); + if (cleaned.isEmpty()) { + return null; + } + cleaned = cleaned.copy(); if (mekanism && cleaned.hasTagCompound()) { cleaned.getTagCompound().removeTag("mekData"); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java index 2ee0a865e..d33c98fa4 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java @@ -177,7 +177,7 @@ public abstract class CraftingStep implements ICraftingStep { return AvailableType.ITEM; } - protected boolean extractItems(IStackList actualInputs, int compare, Deque toInsertItems) { + protected boolean extractItems(List actualInputs, int compare, Deque toInsertItems) { for (ItemStack insertStack : getToInsert()) { // This will be a tool, like a hammer if (insertStack.isItemStackDamageable()) { @@ -203,7 +203,7 @@ public abstract class CraftingStep implements ICraftingStep { if (abort) { // Abort task re-insert taken stacks and reset state - toInsertItems.addAll(actualInputs.getStacks()); + toInsertItems.addAll(actualInputs); startedProcessing = false; return false; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java index 050b2e79f..45b1adf28 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java @@ -61,23 +61,32 @@ public class CraftingStepCraft extends CraftingStep { @Override public void execute(Deque toInsertItems, Deque toInsertFluids) { - IStackList actualInputs = API.instance().createItemStackList(); + List actualInputs = new LinkedList<>(); int compare = CraftingTask.DEFAULT_COMPARE | (getPattern().isOredict() ? IComparer.COMPARE_OREDICT : 0); if (extractItems(actualInputs, compare, toInsertItems)) { + IStackList stackList = API.instance().createItemStackList(); + actualInputs.forEach(stackList::add); - ItemStack[] took = StackListItem.toCraftingGrid(actualInputs, toInsert, compare); + ItemStack[] took = StackListItem.toCraftingGrid(stackList, toInsert, compare); + + List outputs = pattern.isOredict() ? pattern.getOutputs(took) : pattern.getOutputs(); + if (outputs == null) { + toInsertItems.addAll(actualInputs); + startedProcessing = false; + return; + } + + for (ItemStack output : outputs) { + if (output != null) { + toInsertItems.add(output.copy()); + } + } for (ItemStack byproduct : (pattern.isOredict() ? pattern.getByproducts(took) : pattern.getByproducts())) { if (byproduct != null) { toInsertItems.add(byproduct.copy()); } } - - for (ItemStack output : (pattern.isOredict() ? pattern.getOutputs(took) : pattern.getOutputs())) { - if (output != null) { - toInsertItems.add(output.copy()); - } - } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepProcess.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepProcess.java index 9cbf57974..79ebd9879 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepProcess.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepProcess.java @@ -72,12 +72,12 @@ public class CraftingStepProcess extends CraftingStep { @Override public void execute(Deque toInsertItems, Deque toInsertFluids) { - IStackList actualInputs = API.instance().createItemStackList(); + List actualInputs = new LinkedList<>(); int compare = CraftingTask.DEFAULT_COMPARE | (getPattern().isOredict() ? IComparer.COMPARE_OREDICT : 0); if (extractItems(actualInputs, compare, toInsertItems)) { IItemHandler inventory = getPattern().getContainer().getFacingInventory(); - if (insertSimulation(inventory, new ArrayDeque<>(actualInputs.getStacks()))) { - actualInputs.getStacks().forEach(stack -> ItemHandlerHelper.insertItem(inventory, stack, false)); + if (insertSimulation(inventory, new ArrayDeque<>(actualInputs))) { + actualInputs.forEach(stack -> ItemHandlerHelper.insertItem(inventory, stack, false)); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java index 9e27760cc..b087d5ae8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java @@ -226,14 +226,19 @@ public class CraftingTask implements ICraftingTask { } } - for (ItemStack byproduct : (!pattern.isProcessing() && pattern.isOredict() && missing.isEmpty() ? pattern.getByproducts(took) : pattern.getByproducts())) { - toInsert.add(byproduct.copy()); + List outputs = !pattern.isProcessing() && pattern.isOredict() && missing.isEmpty() ? pattern.getOutputs(took) : pattern.getOutputs(); + if (outputs == null) { // Bla Bla what evs + outputs = pattern.getOutputs(); } - for (ItemStack output : (!pattern.isProcessing() && pattern.isOredict() && missing.isEmpty() ? pattern.getOutputs(took) : pattern.getOutputs())) { + for (ItemStack output : outputs) { toInsert.add(output.copy()); } + for (ItemStack byproduct : (!pattern.isProcessing() && pattern.isOredict() && missing.isEmpty() ? pattern.getByproducts(took) : pattern.getByproducts())) { + toInsert.add(byproduct.copy()); + } + usedPatterns.remove(pattern); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackItem.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackItem.java index 5f9304c2f..ac6cf8b15 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackItem.java @@ -20,8 +20,7 @@ public class ClientStackItem implements IClientStack { private boolean displayCraftText; public ClientStackItem(ByteBuf buf) { - stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt(), buf.readInt()); - stack.setTagCompound(ByteBufUtils.readTag(buf)); + stack = RSUtils.readItemStack(buf); hash = buf.readInt(); craftable = buf.readBoolean(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemBlockFluidStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemBlockFluidStorage.java index e0c658c1a..697784d6f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemBlockFluidStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemBlockFluidStorage.java @@ -90,7 +90,13 @@ public class ItemBlockFluidStorage extends ItemBlockBase { @Override public NBTTagCompound getNBTShareTag(ItemStack stack) { - return !isValid(stack) ? super.getNBTShareTag(stack) : StorageFluidNBT.getNBTShareTag(stack.getTagCompound().getCompoundTag(TileFluidStorage.NBT_STORAGE)); + if (!isValid(stack)) { + return super.getNBTShareTag(stack); + } else { + NBTTagCompound shareTag = new NBTTagCompound(); + shareTag.setTag(TileFluidStorage.NBT_STORAGE, StorageFluidNBT.getNBTShareTag(stack.getTagCompound().getCompoundTag(TileFluidStorage.NBT_STORAGE))); + return shareTag; + } } public static ItemStack initNBT(ItemStack stack) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemBlockStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemBlockStorage.java index 4df682e64..d88b462fe 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemBlockStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemBlockStorage.java @@ -90,7 +90,13 @@ public class ItemBlockStorage extends ItemBlockBase { @Override public NBTTagCompound getNBTShareTag(ItemStack stack) { - return !isValid(stack) ? super.getNBTShareTag(stack) : StorageItemNBT.getNBTShareTag(stack.getTagCompound().getCompoundTag(TileStorage.NBT_STORAGE)); + if (!isValid(stack)) { + return super.getNBTShareTag(stack); + } else { + NBTTagCompound shareTag = new NBTTagCompound(); + shareTag.setTag(TileStorage.NBT_STORAGE, StorageItemNBT.getNBTShareTag(stack.getTagCompound().getCompoundTag(TileStorage.NBT_STORAGE))); + return shareTag; + } } public static ItemStack initNBT(ItemStack stack) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemDelta.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemDelta.java index 04375060b..e00328f65 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemDelta.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemDelta.java @@ -35,7 +35,7 @@ public class MessageGridItemDelta implements IMessage, IMessageHandler(size); for (int i = 0; i < size; i++) { - this.inputs.add(ByteBufUtils.readItemStack(buf)); + this.inputs.add(RSUtils.readItemStack(buf)); } size = buf.readInt(); @@ -37,7 +37,7 @@ public class MessageProcessingPatternEncoderTransfer extends MessageHandlerPlaye this.outputs = new ArrayList<>(size); for (int i = 0; i < size; i++) { - this.outputs.add(ByteBufUtils.readItemStack(buf)); + this.outputs.add(RSUtils.readItemStack(buf)); } } @@ -46,13 +46,13 @@ public class MessageProcessingPatternEncoderTransfer extends MessageHandlerPlaye buf.writeInt(inputs.size()); for (ItemStack stack : inputs) { - ByteBufUtils.writeItemStack(buf, stack); + RSUtils.writeItemStack(buf, stack); } buf.writeInt(outputs.size()); for (ItemStack stack : outputs) { - ByteBufUtils.writeItemStack(buf, stack); + RSUtils.writeItemStack(buf, stack); } }