The Additions API allows you to create Custom Items with Custom Textures without using hardcoded durability values. It creates the resource pack itself, provides its own durability system for unbreakable items, allows you to switch through textures on the fly, and much much more!

Documentation is still Work in Progress, but you can view the JavaDoc at

chrismin13 is no longer maintaining the project, so it will likely only receive version updates.