From b3a055925059061ac3a315148040950bc82b2f66 Mon Sep 17 00:00:00 2001 From: mezz Date: Mon, 10 Oct 2016 16:51:45 -0700 Subject: [PATCH] Add better handling for recipe transfer into restricted slots --- .../jei/transfer/BasicRecipeTransferHandler.java | 6 ------ .../BasicRecipeTransferHandlerServer.java | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/mezz/jei/transfer/BasicRecipeTransferHandler.java b/src/main/java/mezz/jei/transfer/BasicRecipeTransferHandler.java index 0cc8181d1..267cb7f9f 100644 --- a/src/main/java/mezz/jei/transfer/BasicRecipeTransferHandler.java +++ b/src/main/java/mezz/jei/transfer/BasicRecipeTransferHandler.java @@ -129,12 +129,6 @@ public IRecipeTransferError transferRecipe(C container, IRecipeLayout recipeLayo Log.error("Recipes Transfer Helper {} references slot {} outside of the inventory's size {}", transferHelper.getClass(), slotNumber, container.inventorySlots.size()); return handlerHelper.createInternalError(); } - Slot slot = container.getSlot(slotNumber); - ItemStack stack = container.getSlot(entry.getValue()).getStack(); - if (!slot.isItemValid(stack)) { - Log.error("The ItemStack {} is not valid for the slot number {}", stack, slotNumber); - return handlerHelper.createInternalError(); - } } if (doTransfer) { diff --git a/src/main/java/mezz/jei/transfer/BasicRecipeTransferHandlerServer.java b/src/main/java/mezz/jei/transfer/BasicRecipeTransferHandlerServer.java index 00add97a8..d57d7800c 100644 --- a/src/main/java/mezz/jei/transfer/BasicRecipeTransferHandlerServer.java +++ b/src/main/java/mezz/jei/transfer/BasicRecipeTransferHandlerServer.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; @@ -76,12 +75,21 @@ public static void setItems(EntityPlayer player, Map slotIdMap ItemStack stack = entry.getValue(); stack.stackSize *= removedSets; - slot.putStack(stack); + if (slot.isItemValid(stack)) { + slot.putStack(stack); + } else { + clearedCraftingItems.add(stack); + } } - // put cleared items back into the player's inventory + // put cleared items back into the inventory for (ItemStack oldCraftingItem : clearedCraftingItems) { - InventoryHelper.addStack(container, inventorySlots, oldCraftingItem, true); + int added = InventoryHelper.addStack(container, inventorySlots, oldCraftingItem, true); + if (added < oldCraftingItem.stackSize) { + if (!player.inventory.addItemStackToInventory(oldCraftingItem)) { + player.dropItem(oldCraftingItem, false); + } + } } container.detectAndSendChanges();