ff12aa1673
Added Partial ItemStack packets to report to the server what itemstack is the target of interation. Fixed Repairing Items in CraftingTerminal.
87 lines
2.3 KiB
Java
87 lines
2.3 KiB
Java
package appeng.core.sync.packets;
|
|
|
|
import io.netty.buffer.ByteBuf;
|
|
import io.netty.buffer.Unpooled;
|
|
|
|
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;
|
|
import appeng.helpers.InventoryAction;
|
|
import appeng.util.Platform;
|
|
import appeng.util.item.AEItemStack;
|
|
|
|
public class PacketInventoryAction extends AppEngPacket
|
|
{
|
|
|
|
final public InventoryAction action;
|
|
final public int slot;
|
|
final public IAEItemStack slotItem;
|
|
|
|
// automatic.
|
|
public PacketInventoryAction(ByteBuf stream) throws IOException {
|
|
action = InventoryAction.values()[stream.readInt()];
|
|
slot = stream.readInt();
|
|
boolean hasItem = stream.readBoolean();
|
|
if ( hasItem )
|
|
slotItem = AEItemStack.loadItemStackFromPacket( stream );
|
|
else
|
|
slotItem = null;
|
|
}
|
|
|
|
@Override
|
|
public void serverPacketData(INetworkInfo manager, AppEngPacket packet, EntityPlayer player)
|
|
{
|
|
EntityPlayerMP sender = (EntityPlayerMP) player;
|
|
if ( sender.openContainer instanceof AEBaseContainer )
|
|
{
|
|
AEBaseContainer aebc = (AEBaseContainer) sender.openContainer;
|
|
aebc.doAction( sender, action, slot );
|
|
}
|
|
}
|
|
|
|
@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 {
|
|
|
|
if ( Platform.isClient() && slotItem != null )
|
|
throw new RuntimeException( "invalid packet, client cannot post inv actions with stacks." );
|
|
|
|
this.action = action;
|
|
this.slot = slot;
|
|
this.slotItem = slotItem;
|
|
|
|
ByteBuf data = Unpooled.buffer();
|
|
|
|
data.writeInt( getPacketID() );
|
|
data.writeInt( action.ordinal() );
|
|
data.writeInt( slot );
|
|
|
|
if ( slotItem == null )
|
|
data.writeBoolean( false );
|
|
else
|
|
{
|
|
data.writeBoolean( true );
|
|
slotItem.writeToPacket( data );
|
|
}
|
|
|
|
configureWrite( data );
|
|
}
|
|
|
|
}
|