package ljfa.glassshards.items;
import com.google.common.collect.Multimap;
import ljfa.glassshards.Reference;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.MathHelper;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/*
* Metadata:
* 0 - 15: colored shards
* 16 : clear shards
*/
public class ItemGlassShards extends Item {
public static final String[] colorNames = {"white", "orange", "magenta", "light_blue", "yellow", "lime", "pink",
"gray", "silver", "cyan", "purple", "blue", "brown", "green", "red", "black",
"none"};
public ItemGlassShards() {
setHasSubtypes(true);
setCreativeTab(CreativeTabs.MATERIALS);
ModItems.register(this, "glass_shards");
if(FMLCommonHandler.instance().getSide().isClient())
registerModels();
}
@Override
public String getUnlocalizedName(ItemStack stack) {
String prefix = "item." + Reference.MODID + ":glass_shards";
int meta = stack.getItemDamage();
if(meta < 16)
return prefix + "." + colorNames[meta];
else
return prefix;
}
@Override
public Multimap<String, AttributeModifier> getAttributeModifiers(EntityEquipmentSlot equipmentSlot, ItemStack stack) {
Multimap<String, AttributeModifier> multimap = super.getAttributeModifiers(equipmentSlot, stack);
if(equipmentSlot == EntityEquipmentSlot.MAINHAND) {
double damage = 1.0;
double speed = -2.0;
multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(),
new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", damage, 0));
multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(),
new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", speed, 0));
}
return multimap;
}
@SideOnly(Side.CLIENT)
@Override
public void getSubItems(Item item, CreativeTabs creativeTabs, NonNullList<ItemStack> list) {
//List clear shards first
list.add(new ItemStack(item, 1, 16));
for(int i = 0; i < 16; i++)
list.add(new ItemStack(item, 1, i));
}
@SideOnly(Side.CLIENT)
private void registerModels() {
final ModelResourceLocation[] variants = new ModelResourceLocation[17];
for(int i = 0; i < 17; i++)
variants[i] = new ModelResourceLocation(Reference.MODID + ":glass_shards", "color=" + colorNames[i]);
ModelBakery.registerItemVariants(this, variants);
ModelLoader.setCustomMeshDefinition(this, new ItemMeshDefinition() {
@Override
public ModelResourceLocation getModelLocation(ItemStack stack) {
return variants[MathHelper.clamp(stack.getItemDamage(), 0, 16)];
}
});
}
}