package common.network;

import common.entity.Entity;
import common.entity.animal.EntityHorse;
import common.inventory.IInventory;
import common.inventory.InventoryPlayer;
import common.model.ParticleType;
import common.packet.S14PacketEntity;
import common.packet.S18PacketEntityTeleport;
import common.packet.S19PacketEntityHeadLook;
import common.packet.S1APacketEntityStatus;
import common.packet.S1BPacketEntityAttach;
import common.packet.S1CPacketEntityMetadata;
import common.packet.S1DPacketEntityEffect;
import common.packet.S1EPacketRemoveEntityEffect;
import common.packet.S20PacketEntityProperties;
import common.packet.S27PacketExplosion;
import common.packet.S28PacketEffect;
import common.packet.S29PacketSoundEffect;
import common.packet.S2APacketParticles;
import common.packet.S2BPacketChangeGameState;
import common.packet.S2CPacketSpawnGlobalEntity;
import common.packet.S2DPacketOpenWindow;
import common.packet.S2EPacketCloseWindow;
import common.packet.S2FPacketSetSlot;
import common.packet.S30PacketWindowItems;
import common.packet.S31PacketWindowProperty;
import common.packet.S32PacketConfirmTransaction;
import common.packet.S33PacketUpdateSign;
import common.packet.S35PacketUpdateTileEntity;
import common.packet.S36PacketSignEditorOpen;
import common.packet.S38PacketPlayerListItem;
import common.packet.S39PacketPlayerAbilities;
import common.packet.S3APacketTabComplete;
import common.packet.S43PacketUpdateEntityNBT;
import common.packet.SPacketAnimation;
import common.packet.SPacketBiomes;
import common.packet.SPacketBlockAction;
import common.packet.SPacketBlockBreakAnim;
import common.packet.SPacketBlockChange;
import common.packet.SPacketCamera;
import common.packet.SPacketCharacterList;
import common.packet.SPacketChunkData;
import common.packet.SPacketCollectItem;
import common.packet.SPacketDestroyEntities;
import common.packet.SPacketDimensionName;
import common.packet.SPacketDisconnect;
import common.packet.SPacketEntityEquipment;
import common.packet.SPacketEntityVelocity;
import common.packet.SPacketHeldItemChange;
import common.packet.SPacketJoinGame;
import common.packet.SPacketKeepAlive;
import common.packet.SPacketLoading;
import common.packet.SPacketMapChunkBulk;
import common.packet.SPacketMessage;
import common.packet.SPacketMultiBlockChange;
import common.packet.SPacketPlayerPosLook;
import common.packet.SPacketRespawn;
import common.packet.SPacketServerTick;
import common.packet.SPacketSetExperience;
import common.packet.SPacketSkin;
import common.packet.SPacketSpawnMob;
import common.packet.SPacketSpawnObject;
import common.packet.SPacketSpawnPlayer;
import common.packet.SPacketTimeUpdate;
import common.packet.SPacketTrades;
import common.packet.SPacketUpdateHealth;
import common.packet.SPacketWorld;
import common.sound.Sound;
import common.tileentity.IInteractionObject;
import common.util.BlockPos;
import common.world.World;

public interface IClientPlayer {
	void playSound(Sound sound);
	boolean isRenderViewEntity(Entity entity);
	void updatePlayerMoveState();
	void emitParticleAtEntity(Entity entityIn, ParticleType particleTypes);
	boolean isJumping();
	boolean isSprinting();
	boolean isSneaking();
	float getMoveForward();
	float getMoveStrafe();
	void setMoveForward(float value);
	void setMoveStrafe(float value);
    void addToSendQueue(Packet packet);
    
	void handleJoinGame(SPacketJoinGame packetIn);
	void handleSpawnObject(SPacketSpawnObject packetIn);
	void handleSpawnGlobalEntity(S2CPacketSpawnGlobalEntity packetIn);
	void handleEntityVelocity(SPacketEntityVelocity packetIn);
	void handleEntityMetadata(S1CPacketEntityMetadata packetIn);
	void handleSpawnPlayer(SPacketSpawnPlayer packetIn);
	void handleEntityTeleport(S18PacketEntityTeleport packetIn);
	void handleHeldItemChange(SPacketHeldItemChange packetIn);
	void handleEntityMovement(S14PacketEntity packetIn);
	void handleEntityHeadLook(S19PacketEntityHeadLook packetIn);
	void handleDestroyEntities(SPacketDestroyEntities packetIn);
	void handlePlayerPosLook(SPacketPlayerPosLook packetIn);
	void handleMultiBlockChange(SPacketMultiBlockChange packetIn);
	void handleChunkData(SPacketChunkData packetIn);
	void handleBiomes(SPacketBiomes packetIn);
	void handleBlockChange(SPacketBlockChange packetIn);
	void handleDisconnect(SPacketDisconnect packetIn);
	void handleCollectItem(SPacketCollectItem packetIn);
	void handleMessage(SPacketMessage packetIn);
	void handleLoading(SPacketLoading packet);
	void handleAnimation(SPacketAnimation packetIn);
	void handleSpawnMob(SPacketSpawnMob packetIn);
	void handleTimeUpdate(SPacketTimeUpdate packetIn);
	void handleServerTick(SPacketServerTick packet);
	void handleEntityAttach(S1BPacketEntityAttach packetIn);
	void handleEntityStatus(S1APacketEntityStatus packetIn);
	void handleUpdateHealth(SPacketUpdateHealth packetIn);
	void handleSetExperience(SPacketSetExperience packetIn);
	void handleRespawn(SPacketRespawn packetIn);
	void handleExplosion(S27PacketExplosion packetIn);
	void handleOpenWindow(S2DPacketOpenWindow packetIn);
	void handleSetSlot(S2FPacketSetSlot packetIn);
	void handleConfirmTransaction(S32PacketConfirmTransaction packetIn);
	void handleWindowItems(S30PacketWindowItems packetIn);
	void handleSignEditorOpen(S36PacketSignEditorOpen packetIn);
	void handleUpdateSign(S33PacketUpdateSign packetIn);
	void handleUpdateTileEntity(S35PacketUpdateTileEntity packetIn);
	void handleWindowProperty(S31PacketWindowProperty packetIn);
	void handleEntityEquipment(SPacketEntityEquipment packetIn);
	void handleCloseWindow(S2EPacketCloseWindow packetIn);
	void handleBlockAction(SPacketBlockAction packetIn);
	void handleBlockBreakAnim(SPacketBlockBreakAnim packetIn);
	void handleMapChunkBulk(SPacketMapChunkBulk packetIn);
	void handleChangeGameState(S2BPacketChangeGameState packetIn);
	void handleEffect(S28PacketEffect packetIn);
	void handleEntityEffect(S1DPacketEntityEffect packetIn);
	void handleCamera(SPacketCamera packetIn);
	void handleRemoveEntityEffect(S1EPacketRemoveEntityEffect packetIn);
	void handlePlayerListItem(S38PacketPlayerListItem packetIn);
	void handleCharacterList(SPacketCharacterList packet);
	void handleKeepAlive(SPacketKeepAlive packetIn);
	void handlePlayerAbilities(S39PacketPlayerAbilities packetIn);
	void handleTabComplete(S3APacketTabComplete packetIn);
	void handleSoundEffect(S29PacketSoundEffect packetIn);
	void handleEntityNBT(S43PacketUpdateEntityNBT packetIn);
	void handleParticles(S2APacketParticles packetIn);
	void handleEntityProperties(S20PacketEntityProperties packetIn);
	void handleSkin(SPacketSkin packetIn);
	void handleTrades(SPacketTrades packetIn);
	void handleWorld(SPacketWorld packetIn);
	void handleDimName(SPacketDimensionName packetIn);

	void displayGUIChest(IInventory chestInventory, InventoryPlayer inventory);
	void displayGui(IInteractionObject guiOwner, InventoryPlayer inventory, World worldObj);
	void displayGuiHorse(EntityHorse horse, InventoryPlayer inventory, IInventory horseInventory);
	void displayGuiMerchant(String title, InventoryPlayer inventory, World worldObj);
	void displayGuiSign(BlockPos pos, String[] signText);
	void closeGui();
}