Alright, I tested this for a bit and looked at the code. The idea and implementation are very good and this is well done!
There's only one thing which I'm inclined to strongly disagree with; The handling of wielded items. Excluding armor and shield, which were added as extra surfaces / materials to the player model exactly as I agree they should. I'm only referring to the representation of the item selected on the hotbar, which has three major problems:
1 - It only works for a few items, apparently just tools (sword, pickaxe, etc). IMO visible wielded items are too incomplete and of little use if they don't automatically work for all and every item.
2 - They update too slowly. When pressing F7 to go into third person view, you can see that it takes about a second until the wielded item changes. I understand that constantly checking the selected item might be a little costly for the server, and I'm not sure if the API can call a Lua function efficiently when the hotbar selection changes. Still, I believe the update should be done at least every 0.1 seconds.
3 - While it's easier to add a square surface to the hand of the player mesh and texture it with the material being held, this limits the appearance of wielded items to a 2D image. I also disagree with stacking so many squares in order to create depth... here is a screenshot of what I mean
. My suggestion is removing those surfaces completely, and using a Lua entity attached to the right hand bone (spawned when the player joins the server and removed when the player disconnects). This entity assumes the exact drawtype and texture of the item held, which allows any visual type (2D, torchlike, nodebox, block, etc) to be shown.
Other than this, I only have a few little suggestions: Firstly, don't allow items which aren't armor into the armor slots, nor any inventory stacks (just single items). Players can seemingly use this to gain extra inventory space, which IMO isn't a good thing. You also can't wear golden boots and diamond boots at the same time for example, so only one item of each type should probably be allowed. I'm not sure what the current Lua API can do about this, so if it's not possible I understand.
Second, there seem to be 6 armor slots, but 4 types of armor + a shield, making this 5 categories of armor items. What if the player could wear two shields simultaneously, one on the left hand and one on the right? Since shields are worn on the arm and not held in hand, it also makes sense that the player can keep using their arms while wearing shields.