Minecraft displays the player inventory differently, according to how the window was opened. Ranges of slot indices vary in meaning between different "windows". Minecraft indicates which window is being opened according to:
|Inventory Type||Description||Technical Name|
The slot number is calculated starting at 0, counting up through the window's unique slots, and then counting through the players inventory. The number of unique slots in the window is in the Open Window message for all window types except the default inventory window, in which the number of unique slots is 9. This means the slot in the upper-left corner of the player's inventory is slot n where n is the number of unique slots. Slot number -999 is for clicking outside the window.
Rectangular regions are always indexed starting with the upper-left corner and scanning across rows. If a window has a crafting region, the output slot is always slot 0 followed immediately by the input region.
Each window type is described in the following sections. All slot index ranges are inclusive and reflect the indices observed in the Minecraft Beta protocol.
This is the inventory window that the player can always open, typically by pressing "E" since update 1.4. Before you had to press "I".
|1-4||(2x2) crafting input (1 + x + 2 * y)|
|5-8||armor (head, chest, legs, feet)|
Note that this is different than inventory items stored in a player.dat file. This may help: https://gist.github.com/459a1691c3dd751db160
This is the window that is opened when the player right-clicks on a workbench.
|1-9||(3x3) crafting input (1 + x + 3 * y)|
This is the window that is opened when the player right-clicks on a single chest block.
This is the window that is opened when the player right-clicks on a double chest block (two adjacent chest blocks).
This is the window that is opened when the player right-clicks on a dispenser.
|0-8||3x3 dispenser contents (x + 3 * y)|