From ed871e23336405012118958061ccc6fd49cf1599 Mon Sep 17 00:00:00 2001 From: mezz Date: Sat, 22 Aug 2020 17:56:35 -0700 Subject: [PATCH] Fix #2017 Exploit when transferring recipes in containers with locked slots --- gradle.properties | 2 +- .../mezz/jei/transfer/BasicRecipeTransferHandlerServer.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 05d1d5db0..47b8f5b63 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,4 +8,4 @@ curse_project_id=238222 version_major=7 version_minor=1 -version_patch=1 +version_patch=2 diff --git a/src/main/java/mezz/jei/transfer/BasicRecipeTransferHandlerServer.java b/src/main/java/mezz/jei/transfer/BasicRecipeTransferHandlerServer.java index 96e11dc99..4da8abf1f 100644 --- a/src/main/java/mezz/jei/transfer/BasicRecipeTransferHandlerServer.java +++ b/src/main/java/mezz/jei/transfer/BasicRecipeTransferHandlerServer.java @@ -40,7 +40,7 @@ public static void setItems(PlayerEntity player, Map slotIdMap // and a max-transfer operation has been requested by the player. boolean transferAsCompleteSets = requireCompleteSets || !maxTransfer; - Map toTransfer = removeItemsFromInventory(container, slotMap, craftingSlots, inventorySlots, transferAsCompleteSets, maxTransfer); + Map toTransfer = removeItemsFromInventory(player, container, slotMap, craftingSlots, inventorySlots, transferAsCompleteSets, maxTransfer); if (toTransfer.isEmpty()) { return; @@ -98,6 +98,7 @@ public static void setItems(PlayerEntity player, Map slotIdMap @Nonnull private static Map removeItemsFromInventory( + PlayerEntity player, Container container, Map required, List craftingSlots, @@ -137,7 +138,7 @@ private static Map removeItemsFromInventory( // Locate a slot that has what we need. final Slot slot = getSlotWithStack(container, requiredStack, craftingSlots, inventorySlots); - boolean itemFound = (slot != null) && !slot.getStack().isEmpty(); + boolean itemFound = (slot != null) && !slot.getStack().isEmpty() && slot.canTakeStack(player); ItemStack resultItemStack = result.get(entry.getKey()); boolean resultItemStackLimitReached = (resultItemStack != null) && (resultItemStack.getCount() == resultItemStack.getMaxStackSize());