fix: dupe bug with controller
Remainders weren't being accounted for when inserting to player inv. Fixes #3544
This commit is contained in:
@@ -23,6 +23,9 @@ import net.minecraft.world.item.crafting.CraftingRecipe;
|
|||||||
import net.minecraftforge.common.ForgeHooks;
|
import net.minecraftforge.common.ForgeHooks;
|
||||||
import net.minecraftforge.event.ForgeEventFactory;
|
import net.minecraftforge.event.ForgeEventFactory;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
|
import net.minecraftforge.items.wrapper.InvWrapper;
|
||||||
|
import net.minecraftforge.items.wrapper.PlayerInvWrapper;
|
||||||
|
import net.minecraftforge.items.wrapper.PlayerMainInvWrapper;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -123,18 +126,20 @@ public class CraftingGridBehavior implements ICraftingGridBehavior {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (ItemStack craftedItem : craftedItemsList) {
|
for (ItemStack craftedItem : craftedItemsList) {
|
||||||
if (!player.getInventory().add(craftedItem.copy())) {
|
ItemStack remainder = ItemHandlerHelper.insertItem(
|
||||||
ItemStack remainder = craftedItem;
|
new PlayerMainInvWrapper(player.getInventory()),
|
||||||
|
craftedItem.copy(),
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
if (useNetwork) {
|
if (!remainder.isEmpty() && useNetwork) {
|
||||||
remainder = network.insertItem(craftedItem, craftedItem.getCount(), Action.PERFORM);
|
remainder = network.insertItem(remainder, remainder.getCount(), Action.PERFORM);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!remainder.isEmpty()) {
|
if (!remainder.isEmpty()) {
|
||||||
Containers.dropItemStack(player.getCommandSenderWorld(), player.getX(), player.getY(), player.getZ(), remainder);
|
Containers.dropItemStack(player.getCommandSenderWorld(), player.getX(), player.getY(), player.getZ(), remainder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// @Volatile: This is some logic copied from ResultSlot#checkTakeAchievements. We call this manually for shift clicking because
|
// @Volatile: This is some logic copied from ResultSlot#checkTakeAchievements. We call this manually for shift clicking because
|
||||||
// otherwise it's not being called.
|
// otherwise it's not being called.
|
||||||
|
Reference in New Issue
Block a user