diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java index a6cb0fbb2..8453cad9d 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java @@ -7,12 +7,12 @@ import com.refinedmods.refinedstorage.api.network.INetwork; import com.refinedmods.refinedstorage.api.network.grid.IGrid; import com.refinedmods.refinedstorage.api.network.grid.handler.IItemGridHandler; import com.refinedmods.refinedstorage.api.network.security.Permission; +import com.refinedmods.refinedstorage.api.storage.cache.IStorageCache; import com.refinedmods.refinedstorage.api.util.Action; import com.refinedmods.refinedstorage.api.util.IComparer; import com.refinedmods.refinedstorage.api.util.StackListEntry; import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.apiimpl.autocrafting.preview.ErrorCraftingPreviewElement; -import com.refinedmods.refinedstorage.apiimpl.storage.cache.ItemStorageCache; import com.refinedmods.refinedstorage.container.GridContainer; import com.refinedmods.refinedstorage.network.grid.GridCraftingPreviewResponseMessage; import com.refinedmods.refinedstorage.network.grid.GridCraftingStartResponseMessage; @@ -105,12 +105,11 @@ public class ItemGridHandler implements IItemGridHandler { took.setCount(remainder.getCount()); } } - if (!took.isEmpty()) { - if (ItemHandlerHelper.insertItemStacked(playerInventory.get(), took, true).isEmpty()) { - took = network.extractItem(item, size, Action.PERFORM); - ItemHandlerHelper.insertItemStacked(playerInventory.get(), took, false); - } + if (!took.isEmpty() && ItemHandlerHelper.insertItemStacked(playerInventory.get(), took, true).isEmpty()) { + took = network.extractItem(item, size, Action.PERFORM); + + ItemHandlerHelper.insertItemStacked(playerInventory.get(), took, false); } } } else { @@ -272,15 +271,20 @@ public class ItemGridHandler implements IItemGridHandler { if (shift) { // shift flags |= EXTRACT_SHIFT; - if (up) { // scroll up - player.inventory.setInventorySlotContents(slot, gridHandler.onInsert(player, stackInSlot, true)); - } else { // scroll down - gridHandler.onExtract(player, stackInSlot, slot, flags); + + if (!stackInSlot.isEmpty()) { + if (up) { // scroll up + player.inventory.setInventorySlotContents(slot, gridHandler.onInsert(player, stackInSlot, true)); + } else { // scroll down + gridHandler.onExtract(player, stackInSlot, slot, flags); + } } } else { //ctrl if (up) { // scroll up - gridHandler.onInsert(player, stackOnCursor, true); - player.updateHeldItem(); + if (!stackOnCursor.isEmpty()) { + gridHandler.onInsert(player, stackOnCursor, true); + player.updateHeldItem(); + } } else { //scroll down if (stackOnCursor.isEmpty()) { gridHandler.onExtract(player, stackInSlot, -1, flags); @@ -312,7 +316,7 @@ public class ItemGridHandler implements IItemGridHandler { if (shift && id != null) { flags |= EXTRACT_SHIFT; if (up) { //scroll up, insert hovering stack pulled from Inventory - ItemStorageCache cache = (ItemStorageCache) grid.getStorageCache(); + IStorageCache cache = grid.getStorageCache(); if (cache == null || cache.getList().get(id) == null) { return; } diff --git a/src/main/java/com/refinedmods/refinedstorage/network/grid/GridItemGridScrollMessage.java b/src/main/java/com/refinedmods/refinedstorage/network/grid/GridItemGridScrollMessage.java index 117af81dc..93d6a7e55 100644 --- a/src/main/java/com/refinedmods/refinedstorage/network/grid/GridItemGridScrollMessage.java +++ b/src/main/java/com/refinedmods/refinedstorage/network/grid/GridItemGridScrollMessage.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.container.GridContainer; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; +import javax.annotation.Nullable; import java.util.UUID; import java.util.function.Supplier; @@ -12,7 +13,7 @@ public class GridItemGridScrollMessage { private final boolean shift; private final boolean up; - public GridItemGridScrollMessage(UUID id, boolean shift, boolean up) { + public GridItemGridScrollMessage(@Nullable UUID id, boolean shift, boolean up) { this.id = id; this.shift = shift; this.up = up; diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/grid/GridScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/grid/GridScreen.java index 006053d91..6cdde42cd 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/grid/GridScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/grid/GridScreen.java @@ -529,7 +529,7 @@ public class GridScreen extends BaseScreen implements IScreenInfo } if (isOverInventory(x - guiLeft, y - guiTop)) { - if (grid.getGridType() != GridType.FLUID && hoveredSlot != null) { + if (grid.getGridType() != GridType.FLUID && hoveredSlot != null && hoveredSlot.getHasStack()) { RS.NETWORK_HANDLER.sendToServer(new GridItemInventoryScrollMessage(hoveredSlot.getSlotIndex(), hasShiftDown(), delta > 0)); } } else if (isOverSlotArea(x - guiLeft, y - guiTop)) { @@ -599,7 +599,7 @@ public class GridScreen extends BaseScreen implements IScreenInfo } public boolean canSort() { - return doSort || !hasShiftDown() && !hasControlDown(); + return doSort || (!hasShiftDown() && !hasControlDown()); } public static List getSorters() {