001package net.minecraft.item; 002 003import cpw.mods.fml.relauncher.Side; 004import cpw.mods.fml.relauncher.SideOnly; 005import java.util.List; 006import net.minecraft.client.renderer.texture.IconRegister; 007import net.minecraft.entity.player.EntityPlayer; 008import net.minecraft.nbt.NBTBase; 009import net.minecraft.nbt.NBTTagCompound; 010import net.minecraft.nbt.NBTTagIntArray; 011import net.minecraft.util.Icon; 012import net.minecraft.util.StatCollector; 013 014public class ItemFireworkCharge extends Item 015{ 016 @SideOnly(Side.CLIENT) 017 private Icon field_94596_a; 018 019 public ItemFireworkCharge(int par1) 020 { 021 super(par1); 022 } 023 024 @SideOnly(Side.CLIENT) 025 026 /** 027 * Gets an icon index based on an item's damage value and the given render pass 028 */ 029 public Icon getIconFromDamageForRenderPass(int par1, int par2) 030 { 031 return par2 > 0 ? this.field_94596_a : super.getIconFromDamageForRenderPass(par1, par2); 032 } 033 034 @SideOnly(Side.CLIENT) 035 public int getColorFromItemStack(ItemStack par1ItemStack, int par2) 036 { 037 if (par2 != 1) 038 { 039 return super.getColorFromItemStack(par1ItemStack, par2); 040 } 041 else 042 { 043 NBTBase nbtbase = func_92108_a(par1ItemStack, "Colors"); 044 045 if (nbtbase == null) 046 { 047 return 9079434; 048 } 049 else 050 { 051 NBTTagIntArray nbttagintarray = (NBTTagIntArray)nbtbase; 052 053 if (nbttagintarray.intArray.length == 1) 054 { 055 return nbttagintarray.intArray[0]; 056 } 057 else 058 { 059 int j = 0; 060 int k = 0; 061 int l = 0; 062 int[] aint = nbttagintarray.intArray; 063 int i1 = aint.length; 064 065 for (int j1 = 0; j1 < i1; ++j1) 066 { 067 int k1 = aint[j1]; 068 j += (k1 & 16711680) >> 16; 069 k += (k1 & 65280) >> 8; 070 l += (k1 & 255) >> 0; 071 } 072 073 j /= nbttagintarray.intArray.length; 074 k /= nbttagintarray.intArray.length; 075 l /= nbttagintarray.intArray.length; 076 return j << 16 | k << 8 | l; 077 } 078 } 079 } 080 } 081 082 @SideOnly(Side.CLIENT) 083 public boolean requiresMultipleRenderPasses() 084 { 085 return true; 086 } 087 088 @SideOnly(Side.CLIENT) 089 public static NBTBase func_92108_a(ItemStack par0ItemStack, String par1Str) 090 { 091 if (par0ItemStack.hasTagCompound()) 092 { 093 NBTTagCompound nbttagcompound = par0ItemStack.getTagCompound().getCompoundTag("Explosion"); 094 095 if (nbttagcompound != null) 096 { 097 return nbttagcompound.getTag(par1Str); 098 } 099 } 100 101 return null; 102 } 103 104 @SideOnly(Side.CLIENT) 105 106 /** 107 * allows items to add custom lines of information to the mouseover description 108 */ 109 public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) 110 { 111 if (par1ItemStack.hasTagCompound()) 112 { 113 NBTTagCompound nbttagcompound = par1ItemStack.getTagCompound().getCompoundTag("Explosion"); 114 115 if (nbttagcompound != null) 116 { 117 func_92107_a(nbttagcompound, par3List); 118 } 119 } 120 } 121 122 @SideOnly(Side.CLIENT) 123 public static void func_92107_a(NBTTagCompound par0NBTTagCompound, List par1List) 124 { 125 byte b0 = par0NBTTagCompound.getByte("Type"); 126 127 if (b0 >= 0 && b0 <= 4) 128 { 129 par1List.add(StatCollector.translateToLocal("item.fireworksCharge.type." + b0).trim()); 130 } 131 else 132 { 133 par1List.add(StatCollector.translateToLocal("item.fireworksCharge.type").trim()); 134 } 135 136 int[] aint = par0NBTTagCompound.getIntArray("Colors"); 137 int i; 138 int j; 139 140 if (aint.length > 0) 141 { 142 boolean flag = true; 143 String s = ""; 144 int[] aint1 = aint; 145 int k = aint.length; 146 147 for (i = 0; i < k; ++i) 148 { 149 j = aint1[i]; 150 151 if (!flag) 152 { 153 s = s + ", "; 154 } 155 156 flag = false; 157 boolean flag1 = false; 158 159 for (int l = 0; l < 16; ++l) 160 { 161 if (j == ItemDye.dyeColors[l]) 162 { 163 flag1 = true; 164 s = s + StatCollector.translateToLocal("item.fireworksCharge." + ItemDye.dyeColorNames[l]); 165 break; 166 } 167 } 168 169 if (!flag1) 170 { 171 s = s + StatCollector.translateToLocal("item.fireworksCharge.customColor"); 172 } 173 } 174 175 par1List.add(s); 176 } 177 178 int[] aint2 = par0NBTTagCompound.getIntArray("FadeColors"); 179 boolean flag2; 180 181 if (aint2.length > 0) 182 { 183 flag2 = true; 184 String s1 = StatCollector.translateToLocal("item.fireworksCharge.fadeTo") + " "; 185 int[] aint3 = aint2; 186 i = aint2.length; 187 188 for (j = 0; j < i; ++j) 189 { 190 int i1 = aint3[j]; 191 192 if (!flag2) 193 { 194 s1 = s1 + ", "; 195 } 196 197 flag2 = false; 198 boolean flag3 = false; 199 200 for (int j1 = 0; j1 < 16; ++j1) 201 { 202 if (i1 == ItemDye.dyeColors[j1]) 203 { 204 flag3 = true; 205 s1 = s1 + StatCollector.translateToLocal("item.fireworksCharge." + ItemDye.dyeColorNames[j1]); 206 break; 207 } 208 } 209 210 if (!flag3) 211 { 212 s1 = s1 + StatCollector.translateToLocal("item.fireworksCharge.customColor"); 213 } 214 } 215 216 par1List.add(s1); 217 } 218 219 flag2 = par0NBTTagCompound.getBoolean("Trail"); 220 221 if (flag2) 222 { 223 par1List.add(StatCollector.translateToLocal("item.fireworksCharge.trail")); 224 } 225 226 boolean flag4 = par0NBTTagCompound.getBoolean("Flicker"); 227 228 if (flag4) 229 { 230 par1List.add(StatCollector.translateToLocal("item.fireworksCharge.flicker")); 231 } 232 } 233 234 @SideOnly(Side.CLIENT) 235 public void func_94581_a(IconRegister par1IconRegister) 236 { 237 super.func_94581_a(par1IconRegister); 238 this.field_94596_a = par1IconRegister.func_94245_a("fireworksCharge_overlay"); 239 } 240}