public ItemStack addMeta(int meta, String name) {
if(meta > MAX) {
throw new IllegalArgumentException(String
.format("Metadata for %s too high, highest supported value is %d. Meta was %d", name, MAX, meta));
}
else if(isValid(meta)) {
throw new IllegalArgumentException(String
.format("Metadata for %s is already taken. Meta %d is %s", name, meta, names
.get(meta)));
}
while(meta >= availabilityMask.length) {
availabilityMask = Arrays.copyOf(availabilityMask, availabilityMask.length * 2);
}
setValid(meta);
names.put(meta, name);
return new ItemStack(this, 1, meta);
}