diff --git a/container/AEBaseContainer.java b/container/AEBaseContainer.java index 83762a9e..aa34990b 100644 --- a/container/AEBaseContainer.java +++ b/container/AEBaseContainer.java @@ -1,5 +1,6 @@ package appeng.container; +import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -37,10 +38,14 @@ import appeng.container.slot.SlotFake; import appeng.container.slot.SlotInaccessable; import appeng.container.slot.SlotPlayerHotBar; import appeng.container.slot.SlotPlayerInv; +import appeng.core.AELog; +import appeng.core.sync.network.NetworkHandler; +import appeng.core.sync.packets.PacketInventoryAction; import appeng.helpers.InventoryAction; import appeng.util.InventoryAdaptor; import appeng.util.Platform; import appeng.util.inv.AdaptorPlayerHand; +import appeng.util.item.AEItemStack; public abstract class AEBaseContainer extends Container { @@ -556,7 +561,7 @@ public abstract class AEBaseContainer extends Container if ( fail != null ) cellInv.injectItems( ais, Actionable.MODULATE, mySrc ); - player.updateHeldItem(); + updateHeld( player ); } } break; @@ -575,7 +580,7 @@ public abstract class AEBaseContainer extends Container player.inventory.setItemStack( ais.getItemStack() ); else player.inventory.setItemStack( null ); - player.updateHeldItem(); + updateHeld( player ); } } else @@ -586,7 +591,7 @@ public abstract class AEBaseContainer extends Container player.inventory.setItemStack( ais.getItemStack() ); else player.inventory.setItemStack( null ); - player.updateHeldItem(); + updateHeld( player ); } break; @@ -606,7 +611,7 @@ public abstract class AEBaseContainer extends Container player.inventory.setItemStack( ais.getItemStack() ); else player.inventory.setItemStack( null ); - player.updateHeldItem(); + updateHeld( player ); } } else @@ -620,7 +625,7 @@ public abstract class AEBaseContainer extends Container is.stackSize--; if ( is.stackSize <= 0 ) player.inventory.setItemStack( null ); - player.updateHeldItem(); + updateHeld( player ); } } @@ -631,7 +636,7 @@ public abstract class AEBaseContainer extends Container ItemStack is = slotItem.getItemStack(); is.stackSize = is.getMaxStackSize(); player.inventory.setItemStack( is ); - player.updateHeldItem(); + updateHeld( player ); } break; case MOVE_REGION: @@ -641,4 +646,16 @@ public abstract class AEBaseContainer extends Container } } + private void updateHeld(EntityPlayerMP p) + { + try + { + NetworkHandler.instance.sendTo( new PacketInventoryAction( InventoryAction.UPDATE_HAND, 0, AEItemStack.create( p.inventory.getItemStack() ) ), p ); + } + catch (IOException e) + { + AELog.error( e ); + } + } + } diff --git a/core/sync/packets/PacketInventoryAction.java b/core/sync/packets/PacketInventoryAction.java index 40805bff..7cc42efc 100644 --- a/core/sync/packets/PacketInventoryAction.java +++ b/core/sync/packets/PacketInventoryAction.java @@ -8,6 +8,7 @@ import java.io.IOException; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import appeng.api.storage.data.IAEItemStack; +import appeng.client.ClientHelper; import appeng.container.AEBaseContainer; import appeng.core.sync.AppEngPacket; import appeng.core.sync.network.INetworkInfo; @@ -43,6 +44,18 @@ public class PacketInventoryAction extends AppEngPacket } } + @Override + public void clientPacketData(INetworkInfo network, AppEngPacket packet, EntityPlayer player) + { + if ( action == InventoryAction.UPDATE_HAND ) + { + if ( slotItem == null ) + ClientHelper.proxy.getPlayers().get( 0 ).inventory.setItemStack( null ); + else + ClientHelper.proxy.getPlayers().get( 0 ).inventory.setItemStack( slotItem.getItemStack() ); + } + } + // api public PacketInventoryAction(InventoryAction action, int slot, IAEItemStack slotItem) throws IOException { this.action = action; diff --git a/helpers/InventoryAction.java b/helpers/InventoryAction.java index f48dba98..8c958dc3 100644 --- a/helpers/InventoryAction.java +++ b/helpers/InventoryAction.java @@ -9,5 +9,5 @@ public enum InventoryAction CRAFT_STACK, CRAFT_ITEM, CRAFT_SHIFT, // extra... - MOVE_REGION, PICKUP_SINGLE + MOVE_REGION, PICKUP_SINGLE, UPDATE_HAND }