@Override
public Map<String, Object> getItemStackMetadata(ItemStack itemstack) {
if (itemstack == null) return NULL;
Map<String, Object> map = Maps.newHashMap();
Item item = itemstack.getItem();
fillBasicProperties(map, item, itemstack);
@SuppressWarnings("unchecked")
final Iterable<IItemStackMetadataProvider<Object>> providers = (Iterable<IItemStackMetadataProvider<Object>>)MetaProvidersRegistry.ITEMS.getProviders(item.getClass());
for (IItemStackMetadataProvider<Object> provider : providers) {
Object converted = provider.getMeta(item, itemstack);
if (converted != null) {
final String key = provider.getKey();