From 95703d2ea7794da4e747af5cebaaa650de5d3438 Mon Sep 17 00:00:00 2001 From: AJ Ferguson Date: Wed, 13 Jan 2021 19:59:11 -0900 Subject: [PATCH] Update inventory if request was rejected --- .../inventory/InventoryTranslator.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java index fab81933a..64f73ac54 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java @@ -151,28 +151,39 @@ public abstract class InventoryTranslator { } public void translateRequests(GeyserSession session, Inventory inventory, List requests) { + boolean refresh = false; ItemStackResponsePacket responsePacket = new ItemStackResponsePacket(); for (ItemStackRequestPacket.Request request : requests) { + ItemStackResponsePacket.Response response; if (request.getActions().length > 0) { StackRequestActionData firstAction = request.getActions()[0]; if (shouldHandleRequestFirst(firstAction, inventory)) { // Some special request that shouldn't be processed normally - responsePacket.getEntries().add(translateSpecialRequest(session, inventory, request)); + response = translateSpecialRequest(session, inventory, request); } else if (firstAction.getType() == StackRequestActionType.CRAFT_RECIPE) { - responsePacket.getEntries().add(translateCraftingRequest(session, inventory, request)); + response = translateCraftingRequest(session, inventory, request); } else if (firstAction.getType() == StackRequestActionType.CRAFT_RECIPE_AUTO) { - responsePacket.getEntries().add(translateAutoCraftingRequest(session, inventory, request)); + response = translateAutoCraftingRequest(session, inventory, request); } else if (firstAction.getType() == StackRequestActionType.CRAFT_CREATIVE) { // This is also used for pulling items out of creative - responsePacket.getEntries().add(translateCreativeRequest(session, inventory, request)); + response = translateCreativeRequest(session, inventory, request); } else { - responsePacket.getEntries().add(translateRequest(session, inventory, request)); + response = translateRequest(session, inventory, request); } } else { - responsePacket.getEntries().add(rejectRequest(request)); + response = rejectRequest(request); } + if (response.getResult() == ItemStackResponsePacket.ResponseStatus.ERROR) { + refresh = true; + } + responsePacket.getEntries().add(response); } session.sendUpstreamPacket(responsePacket); + + if (refresh) { + InventoryUtils.updateCursor(session); + updateInventory(session, inventory); + } } public ItemStackResponsePacket.Response translateRequest(GeyserSession session, Inventory inventory, ItemStackRequestPacket.Request request) {