From 38b0a7a153b8b007645cbb3c4c520ddb3c3b81c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Fri, 2 Apr 2021 18:48:28 -0300 Subject: [PATCH] handle interface slots serverside --- .../java/appeng/client/gui/AEBaseGui.java | 45 +++-------- .../ContainerInterfaceTerminal.java | 75 ++++++++++++------- 2 files changed, 58 insertions(+), 62 deletions(-) diff --git a/src/main/java/appeng/client/gui/AEBaseGui.java b/src/main/java/appeng/client/gui/AEBaseGui.java index 631285860..de1448f0a 100644 --- a/src/main/java/appeng/client/gui/AEBaseGui.java +++ b/src/main/java/appeng/client/gui/AEBaseGui.java @@ -387,29 +387,13 @@ public abstract class AEBaseGui extends GuiContainer implements IMTModGuiContain { if( !itemstack.isEmpty() ) { - Set visitedInterfaces = new HashSet<>(); for( final Slot dr : this.drag_click ) { - IItemHandler interfaceHandler = ( (SlotDisconnected) slot ).getSlot().getInventory(); - if (visitedInterfaces.contains( interfaceHandler )) break; - visitedInterfaces.add( interfaceHandler ); - boolean canInsert = true; - for( int s = 0; s < interfaceHandler.getSlots(); s++ ) + if( slot.getStack().isEmpty() ) { - if( ItemStack.areItemStacksEqual( interfaceHandler.getStackInSlot( s ), itemstack ) ) - { - canInsert = false; - break; - } - } - if( canInsert ) - { - if( slot.getStack().isEmpty() ) - { - InventoryAction action = InventoryAction.SPLIT_OR_PLACE_SINGLE; - final PacketInventoryAction p = new PacketInventoryAction( action, dr.getSlotIndex(), ( (SlotDisconnected) slot ).getSlot().getId() ); - NetworkHandler.instance().sendToServer( p ); - } + InventoryAction action = InventoryAction.SPLIT_OR_PLACE_SINGLE; + final PacketInventoryAction p = new PacketInventoryAction( action, dr.getSlotIndex(), ( (SlotDisconnected) slot ).getSlot().getId() ); + NetworkHandler.instance().sendToServer( p ); } } } @@ -538,23 +522,12 @@ public abstract class AEBaseGui extends GuiContainer implements IMTModGuiContain case PICKUP: // pickup / set-down. if( slot.getStack().isEmpty() && !player.inventory.getItemStack().isEmpty() ) { - boolean canInsert = true; - IItemHandler interfaceHandler = ( (SlotDisconnected) slot ).getSlot().getInventory(); - for( int s = 0; s < interfaceHandler.getSlots(); s++ ) - { - if( ItemStack.areItemStacksEqual( interfaceHandler.getStackInSlot( s ), player.inventory.getItemStack() ) ) - { - canInsert = false; - break; - } - } - if( canInsert ) - { - action = InventoryAction.SPLIT_OR_PLACE_SINGLE; - } - break; + action = InventoryAction.SPLIT_OR_PLACE_SINGLE; + } + if( !slot.getStack().isEmpty() && player.inventory.getItemStack().getCount() <= 1 ) + { + action = InventoryAction.PICKUP_OR_SET_DOWN; } - if( !slot.getStack().isEmpty() && player.inventory.getItemStack().getCount() <= 1 ) action = InventoryAction.PICKUP_OR_SET_DOWN; break; case QUICK_MOVE: action = ( mouseButton == 1 ) ? InventoryAction.PICKUP_SINGLE : InventoryAction.SHIFT_CLICK; diff --git a/src/main/java/appeng/container/implementations/ContainerInterfaceTerminal.java b/src/main/java/appeng/container/implementations/ContainerInterfaceTerminal.java index 78a397430..3c2b45f85 100644 --- a/src/main/java/appeng/container/implementations/ContainerInterfaceTerminal.java +++ b/src/main/java/appeng/container/implementations/ContainerInterfaceTerminal.java @@ -215,35 +215,48 @@ public final class ContainerInterfaceTerminal extends AEBaseContainer final IItemHandler theSlot = new WrapperFilteredItemHandler( new WrapperRangeItemHandler( inv.server, slot, slot + 1 ), new PatternSlotFilter() ); final InventoryAdaptor interfaceSlot = new AdaptorItemHandler( theSlot ); - switch( action ) + IItemHandler interfaceHandler = inv.server; + boolean canInsert = true; + + switch ( action ) { case PICKUP_OR_SET_DOWN: - if( hasItemInHand ) { - ItemStack inSlot = theSlot.getStackInSlot( 0 ); - if( inSlot.isEmpty() ) + for( int s = 0; s < interfaceHandler.getSlots(); s++ ) { - player.inventory.setItemStack( interfaceSlot.addItems( player.inventory.getItemStack() ) ); - } - else - { - inSlot = inSlot.copy(); - final ItemStack inHand = player.inventory.getItemStack().copy(); - - ItemHandlerUtil.setStackInSlot( theSlot, 0, ItemStack.EMPTY ); - player.inventory.setItemStack( ItemStack.EMPTY ); - - player.inventory.setItemStack( interfaceSlot.addItems( inHand.copy() ) ); - - if( player.inventory.getItemStack().isEmpty() ) + if( Platform.itemComparisons().isSameItem( interfaceHandler.getStackInSlot( s ), player.inventory.getItemStack() ) ) { - player.inventory.setItemStack( inSlot ); + canInsert = false; + break; + } + } + if( canInsert ) + { + ItemStack inSlot = theSlot.getStackInSlot( 0 ); + if( inSlot.isEmpty() ) + { + player.inventory.setItemStack( interfaceSlot.addItems( player.inventory.getItemStack() ) ); } else { - player.inventory.setItemStack( inHand ); - ItemHandlerUtil.setStackInSlot( theSlot, 0, inSlot ); + inSlot = inSlot.copy(); + final ItemStack inHand = player.inventory.getItemStack().copy(); + + ItemHandlerUtil.setStackInSlot( theSlot, 0, ItemStack.EMPTY ); + player.inventory.setItemStack( ItemStack.EMPTY ); + + player.inventory.setItemStack( interfaceSlot.addItems( inHand.copy() ) ); + + if( player.inventory.getItemStack().isEmpty() ) + { + player.inventory.setItemStack( inSlot ); + } + else + { + player.inventory.setItemStack( inHand ); + ItemHandlerUtil.setStackInSlot( theSlot, 0, inSlot ); + } } } } @@ -254,17 +267,27 @@ public final class ContainerInterfaceTerminal extends AEBaseContainer break; case SPLIT_OR_PLACE_SINGLE: - if( hasItemInHand ) { - ItemStack extra = playerHand.removeItems( 1, ItemStack.EMPTY, null ); - if( !extra.isEmpty() && !interfaceSlot.containsItems()) + for( int s = 0; s < interfaceHandler.getSlots(); s++ ) { - extra = interfaceSlot.addItems( extra ); + if( Platform.itemComparisons().isSameItem( interfaceHandler.getStackInSlot( s ), player.inventory.getItemStack() ) ) + { + canInsert = false; + break; + } } - if( !extra.isEmpty() ) + if( canInsert ) { - playerHand.addItems( extra ); + ItemStack extra = playerHand.removeItems( 1, ItemStack.EMPTY, null ); + if( !extra.isEmpty() && !interfaceSlot.containsItems() ) + { + extra = interfaceSlot.addItems( extra ); + } + if( !extra.isEmpty() ) + { + playerHand.addItems( extra ); + } } } else if( !is.isEmpty() )