From 7fca77193f66d94bf6cf7a0362d2d03f2e23eb55 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 6 Apr 2018 11:31:46 +0200 Subject: [PATCH] Fixed Grid not always using all combinations when using JEI autocompletion --- .../apiimpl/network/node/NetworkNodeGrid.java | 2 +- .../jei/RecipeTransferHandlerGrid.java | 36 +--------- .../network/MessageGridTransfer.java | 71 ++++++++++++------- 3 files changed, 51 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java index cb6ca55ba..837df8e26 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java @@ -367,7 +367,7 @@ public class NetworkNodeGrid extends NetworkNode implements IGridNetworkAware { } } else if (grid.getType() == GridType.PATTERN) { // If we are a pattern grid we can just set the slot - grid.getCraftingMatrix().setInventorySlotContents(i, possibilities[0]); + grid.getCraftingMatrix().setInventorySlotContents(i, possibilities.length == 0 ? ItemStack.EMPTY : possibilities[0]); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeTransferHandlerGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeTransferHandlerGrid.java index e970baa33..f11325b8e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeTransferHandlerGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeTransferHandlerGrid.java @@ -14,14 +14,11 @@ import mezz.jei.api.recipe.transfer.IRecipeTransferHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; import java.util.LinkedList; import java.util.List; -import java.util.Map; +import java.util.stream.Collectors; public class RecipeTransferHandlerGrid implements IRecipeTransferHandler { @Override @@ -41,6 +38,7 @@ public class RecipeTransferHandlerGrid implements IRecipeTransferHandler { for (IGuiIngredient guiIngredient : recipeLayout.getItemStacks().getGuiIngredients().values()) { if (guiIngredient != null && guiIngredient.getDisplayedIngredient() != null) { ItemStack ingredient = guiIngredient.getDisplayedIngredient().copy(); + if (guiIngredient.isInput()) { inputs.add(ingredient); } else { @@ -51,35 +49,7 @@ public class RecipeTransferHandlerGrid implements IRecipeTransferHandler { RS.INSTANCE.network.sendToServer(new MessageGridProcessingTransfer(inputs, outputs)); } else { - Map> inputs = recipeLayout.getItemStacks().getGuiIngredients(); - - NBTTagCompound recipe = new NBTTagCompound(); - - for (Slot slot : container.inventorySlots) { - if (slot.inventory instanceof InventoryCrafting) { - IGuiIngredient ingredient = inputs.get(slot.getSlotIndex() + 1); - - if (ingredient != null) { - NBTTagList tags = new NBTTagList(); - - for (ItemStack possibleItem : ingredient.getAllIngredients()) { - if (possibleItem != null) { - possibleItem = possibleItem.copy(); - possibleItem.setTagCompound(possibleItem.getItem().getNBTShareTag(possibleItem)); - - NBTTagCompound tag = new NBTTagCompound(); - possibleItem.writeToNBT(tag); - - tags.appendTag(tag); - } - } - - recipe.setTag("#" + slot.getSlotIndex(), tags); - } - } - } - - RS.INSTANCE.network.sendToServer(new MessageGridTransfer(recipe)); + RS.INSTANCE.network.sendToServer(new MessageGridTransfer(recipeLayout.getItemStacks().getGuiIngredients(), container.inventorySlots.stream().filter(s -> s.inventory instanceof InventoryCrafting).collect(Collectors.toList()))); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridTransfer.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridTransfer.java index e6c8953b0..01430badc 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridTransfer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridTransfer.java @@ -3,33 +3,70 @@ package com.raoulvdberge.refinedstorage.network; import com.raoulvdberge.refinedstorage.api.network.grid.GridType; import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.container.ContainerGrid; +import com.raoulvdberge.refinedstorage.util.StackUtils; import io.netty.buffer.ByteBuf; +import mezz.jei.api.gui.IGuiIngredient; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + public class MessageGridTransfer extends MessageHandlerPlayerToServer implements IMessage { - private NBTTagCompound recipe; + private Map> inputs; + private List slots; + + private ItemStack[][] recipe = new ItemStack[9][]; public MessageGridTransfer() { } - public MessageGridTransfer(NBTTagCompound recipe) { - this.recipe = recipe; + public MessageGridTransfer(Map> inputs, List slots) { + this.inputs = inputs; + this.slots = slots; } @Override public void fromBytes(ByteBuf buf) { - recipe = ByteBufUtils.readTag(buf); + int slots = buf.readInt(); + + for (int i = 0; i < slots; ++i) { + int ingredients = buf.readInt(); + + recipe[i] = new ItemStack[ingredients]; + + for (int j = 0; j < ingredients; ++j) { + recipe[i][j] = StackUtils.readItemStack(buf); + } + } } @Override public void toBytes(ByteBuf buf) { - ByteBufUtils.writeTag(buf, recipe); + buf.writeInt(slots.size()); + + for (Slot slot : slots) { + IGuiIngredient ingredient = inputs.get(slot.getSlotIndex() + 1); + + List ingredients = new ArrayList<>(); + + if (ingredient != null) { + for (ItemStack possibleStack : ingredient.getAllIngredients()) { + if (possibleStack != null) { + ingredients.add(possibleStack); + } + } + } + + buf.writeInt(ingredients.size()); + + for (ItemStack possibleStack : ingredients) { + StackUtils.writeItemStack(buf, possibleStack); + } + } } @Override @@ -38,21 +75,7 @@ public class MessageGridTransfer extends MessageHandlerPlayerToServer 0) { - actualRecipe[x] = new ItemStack[list.tagCount()]; - - for (int y = 0; y < list.tagCount(); y++) { - actualRecipe[x][y] = new ItemStack(list.getCompoundTagAt(y)); - } - } - } - - grid.onRecipeTransfer(player, actualRecipe); + grid.onRecipeTransfer(player, message.recipe); } } }