diff options
Diffstat (limited to 'java/darkknight/jewelrycraft/item/ItemBaseJewelry.java')
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemBaseJewelry.java | 239 |
1 files changed, 155 insertions, 84 deletions
diff --git a/java/darkknight/jewelrycraft/item/ItemBaseJewelry.java b/java/darkknight/jewelrycraft/item/ItemBaseJewelry.java index 9d65a60..fe614d0 100644 --- a/java/darkknight/jewelrycraft/item/ItemBaseJewelry.java +++ b/java/darkknight/jewelrycraft/item/ItemBaseJewelry.java @@ -1,11 +1,5 @@ package darkknight.jewelrycraft.item; -import java.awt.Graphics2D; -import java.awt.GraphicsConfiguration; -import java.awt.GraphicsDevice; -import java.awt.GraphicsEnvironment; -import java.awt.Image; -import java.awt.Transparency; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.ArrayList; @@ -15,126 +9,97 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; - import javax.imageio.ImageIO; - import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.resources.IResourceManager; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import darkknight.jewelrycraft.effects.ModifierEffects; import darkknight.jewelrycraft.util.JewelryNBT; -public class ItemBaseJewelry extends Item +public abstract class ItemBaseJewelry extends Item { public ItemBaseJewelry() { super(); - this.setMaxStackSize(1); + setMaxStackSize(1); } - @Override public boolean requiresMultipleRenderPasses() { return true; } - @SideOnly(Side.CLIENT) + @SideOnly (Side.CLIENT) public int getColorFromItemStack(ItemStack stack, int pass) { - try - { + try{ return color(stack, pass); } - catch (IOException e) - { + catch(IOException e){ e.printStackTrace(); } return 16777215; } + /** + * @param stack + * @param pass + * @return + * @throws IOException + */ public static int color(ItemStack stack, int pass) throws IOException { - String domain = "", texture; IResourceManager rm = Minecraft.getMinecraft().getResourceManager(); BufferedImage icon; - if (pass == 0 && stack != null && JewelryNBT.ingot(stack) != null && Item.getIdFromItem(JewelryNBT.ingot(stack).getItem()) > 0 && JewelryNBT.ingot(stack).getIconIndex() != null && JewelryNBT.ingotColor(stack) == 16777215) - { - ItemStack in = JewelryNBT.ingot(stack); - if (Item.getIdFromItem(in.getItem()) == Block.getIdFromBlock(Blocks.stained_glass) || Item.getIdFromItem(in.getItem()) == Block.getIdFromBlock(Blocks.stained_hardened_clay) || Item.getIdFromItem(in.getItem()) == Block.getIdFromBlock(Blocks.wool) || Item.getIdFromItem(in.getItem()) == Block.getIdFromBlock(Blocks.carpet)) in.setItemDamage(15 - in.getItemDamage()); - IIcon itemIcon = in.getItem().getIcon(in, 0); - String ingotIconName = itemIcon.getIconName(); - - if (ingotIconName.substring(0, ingotIconName.indexOf(":") + 1) != "") domain = ingotIconName.substring(0, ingotIconName.indexOf(":") + 1).replace(":", " ").trim(); - else domain = "minecraft"; - - texture = ingotIconName.substring(ingotIconName.lastIndexOf(":") + 1) + ".png"; - ResourceLocation ingot = null; - TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager(); - - if (texturemanager.getResourceLocation(JewelryNBT.ingot(stack).getItemSpriteNumber()).toString().contains("items")) ingot = new ResourceLocation(domain.toLowerCase(), "textures/items/" + texture); - else ingot = new ResourceLocation(domain.toLowerCase(), "textures/blocks/" + texture); - - icon = ImageIO.read(rm.getResource(ingot).getInputStream()); + if (pass == 0 && stack != null && JewelryNBT.ingot(stack) != null && Item.getIdFromItem(JewelryNBT.ingot(stack).getItem()) > 0 && JewelryNBT.ingot(stack).getIconIndex() != null && JewelryNBT.ingotColor(stack) == 16777215){ + ItemStack ingot = JewelryNBT.ingot(stack); + icon = ImageIO.read(rm.getResource(getLocation(ingot, stack, true)).getInputStream()); int height = icon.getHeight(); int width = icon.getWidth(); Map m = new HashMap(); - for (int i = 0; i < width; i++) - for (int j = 0; j < height; j++) - { + for(int i = 0; i < width; i++) + for(int j = 0; j < height; j++){ int rgb = icon.getRGB(i, j); - int red = (rgb >> 16) & 0xff; - int green = (rgb >> 8) & 0xff; - int blue = (rgb) & 0xff; + int red = rgb >> 16 & 0xff; + int green = rgb >> 8 & 0xff; + int blue = rgb & 0xff; int[] rgbArr = {red, green, blue}; int Cmax = Math.max(red, Math.max(green, blue)); int Cmin = Math.min(red, Math.min(green, blue)); - if (!isGray(rgbArr)) m.put(rgb, (Cmax + Cmin)/2); + if (!isGray(rgbArr)) m.put(rgb, (Cmax + Cmin) / 2); } int color = getMostCommonColour(m); if (JewelryNBT.ingot(stack) != null && JewelryNBT.ingot(stack).getItem().getColorFromItemStack(JewelryNBT.ingot(stack), 1) != 16777215) JewelryNBT.addIngotColor(stack, JewelryNBT.ingot(stack).getItem().getColorFromItemStack(JewelryNBT.ingot(stack), 1)); else JewelryNBT.addIngotColor(stack, color); - } - else if (pass == 1 && stack != null && JewelryNBT.gem(stack) != null && JewelryNBT.gem(stack).getIconIndex() != null && JewelryNBT.gem(stack) != null) - { - IIcon itemIcon = JewelryNBT.gem(stack).getItem().getIconFromDamage(JewelryNBT.gem(stack).getItemDamage()); - String jewelIconName = itemIcon.getIconName(); - - if (jewelIconName.substring(0, jewelIconName.indexOf(":") + 1) != "") domain = jewelIconName.substring(0, jewelIconName.indexOf(":") + 1).replace(":", " ").trim(); - else domain = "minecraft"; - - texture = jewelIconName.substring(jewelIconName.lastIndexOf(":") + 1) + ".png"; - ResourceLocation jewelLoc = null; - - if (JewelryNBT.gem(stack).getUnlocalizedName().contains("item")) jewelLoc = new ResourceLocation(domain, "textures/items/" + texture); - else jewelLoc = new ResourceLocation(domain, "textures/blocks/" + texture); - - icon = ImageIO.read(rm.getResource(jewelLoc).getInputStream()); + }else if (pass == 1 && stack != null && JewelryNBT.gem(stack) != null && JewelryNBT.gem(stack).getIconIndex() != null && JewelryNBT.gem(stack) != null){ + ItemStack gem = JewelryNBT.gem(stack); + icon = ImageIO.read(rm.getResource(getLocation(gem, stack, true)).getInputStream()); int height = icon.getHeight(); int width = icon.getWidth(); Map m = new HashMap(); - for (int i = 0; i < width; i++) - for (int j = 0; j < height; j++) - { + for(int i = 0; i < width; i++) + for(int j = 0; j < height; j++){ int rgb = icon.getRGB(i, j); - int red = (rgb >> 16) & 0xff; - int green = (rgb >> 8) & 0xff; - int blue = (rgb) & 0xff; + int red = rgb >> 16 & 0xff; + int green = rgb >> 8 & 0xff; + int blue = rgb & 0xff; int[] rgbArr = {red, green, blue}; int Cmax = Math.max(red, Math.max(green, blue)); int Cmin = Math.min(red, Math.min(green, blue)); - if (!isGray(rgbArr)) m.put(rgb, (Cmax + Cmin)/2); + if (!isGray(rgbArr)) m.put(rgb, (Cmax + Cmin) / 2); } int color = getMostCommonColour(m); if (JewelryNBT.gem(stack).getItem().getColorFromItemStack(JewelryNBT.gem(stack), 1) == 16777215) JewelryNBT.addGemColor(stack, color); @@ -146,56 +111,162 @@ public class ItemBaseJewelry extends Item return 16777215; } + /** + * @param item + * @param stack + * @param changeMeta + * @return + */ + public static ResourceLocation getLocation(ItemStack item, ItemStack stack, boolean changeMeta) + { + String domain = ""; + String texture; + if (changeMeta && (Item.getIdFromItem(item.getItem()) == Block.getIdFromBlock(Blocks.stained_glass) || Item.getIdFromItem(item.getItem()) == Block.getIdFromBlock(Blocks.stained_hardened_clay) || Item.getIdFromItem(item.getItem()) == Block.getIdFromBlock(Blocks.wool) || Item.getIdFromItem(item.getItem()) == Block.getIdFromBlock(Blocks.carpet))) item.setItemDamage(15 - item.getItemDamage()); + IIcon itemIcon = item.getItem().getIcon(item, 0); + String iconName = itemIcon.getIconName(); + if (iconName.substring(0, iconName.indexOf(":") + 1) != "") domain = iconName.substring(0, iconName.indexOf(":") + 1).replace(":", " ").trim(); + else domain = "minecraft"; + texture = iconName.substring(iconName.lastIndexOf(":") + 1) + ".png"; + ResourceLocation textureLocation = null; + TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager(); + if (texturemanager.getResourceLocation(item.getItemSpriteNumber()).toString().contains("items")) textureLocation = new ResourceLocation(domain.toLowerCase(), "textures/items/" + texture); + else textureLocation = new ResourceLocation(domain.toLowerCase(), "textures/blocks/" + texture); + return textureLocation; + } + + /** + * @param map + * @return + */ public static int getMostCommonColour(Map map) { List list = new LinkedList(map.entrySet()); - Collections.sort(list, new Comparator() - { + Collections.sort(list, new Comparator(){ public int compare(Object o1, Object o2) { - return ((Comparable) ((Map.Entry) (o1)).getValue()).compareTo(((Map.Entry) (o2)).getValue()); + return ((Comparable)((Map.Entry)o1).getValue()).compareTo(((Map.Entry)o2).getValue()); } }); - Map.Entry me = (Map.Entry) list.get(list.size() - 1); - for (int i = 0; i < list.size(); i++) - { + Map.Entry me = (Map.Entry)list.get(list.size() - 1); + for(int i = 0; i < list.size(); i++){ float alpha = Float.valueOf(list.get(i).toString().split("=")[1]); - if (alpha < 180) me = (Map.Entry) list.get(i); + if (alpha < 180) me = (Map.Entry)list.get(i); } - int rgb = (Integer) me.getKey(); + int rgb = (Integer)me.getKey(); return rgb; } + /** + * @param rgbArr + * @return + */ public static boolean isGray(int[] rgbArr) { int rgbSum = rgbArr[0] + rgbArr[1] + rgbArr[2]; - if (rgbSum > 0 && rgbSum < 256 * 3) { return false; } + if (rgbSum > 0 && rgbSum < 256 * 3) return false; return true; } + /** + * @param stack + * @return + */ public String getItemStackDisplayName(ItemStack stack) { - if (JewelryNBT.ingot(stack) != null && Item.getIdFromItem(JewelryNBT.ingot(stack).getItem()) > 0) return JewelryNBT.ingot(stack).getDisplayName().replace("Ingot", " ").trim() + " " + ("" + StatCollector.translateToLocal(this.getUnlocalizedNameInefficiently(stack) + ".name")).trim(); - return ("" + StatCollector.translateToLocal(this.getUnlocalizedNameInefficiently(stack) + ".name")).trim(); + if (JewelryNBT.ingot(stack) != null && Item.getIdFromItem(JewelryNBT.ingot(stack).getItem()) > 0) return JewelryNBT.ingot(stack).getDisplayName().replace("Ingot", " ").trim() + " " + ("" + StatCollector.translateToLocal(getUnlocalizedNameInefficiently(stack) + ".name")).trim(); + return ("" + StatCollector.translateToLocal(getUnlocalizedNameInefficiently(stack) + ".name")).trim(); } /** - * allows items to add custom lines of information to the mouseover description + * allows items to add custom lines of information to the mouseover description. + * + * @param stack + * @param player + * @param list + * @param par4 */ public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean par4) { - if (stack.hasTagCompound() && par4) - { + if (stack.hasTagCompound() && par4){ ItemStack ingot = JewelryNBT.ingot(stack); if (ingot != null && Item.getIdFromItem(JewelryNBT.ingot(stack).getItem()) > 0) list.add("Ingot: " + EnumChatFormatting.YELLOW + ingot.getDisplayName()); - ItemStack gem = JewelryNBT.gem(stack); if (gem != null) list.add("Gem: " + EnumChatFormatting.BLUE + gem.getDisplayName()); - ArrayList<ItemStack> modifier = JewelryNBT.modifier(stack); if (!modifier.isEmpty()) list.add("Modifiers: "); - for (int i = 0; i < modifier.size(); i++) + for(int i = 0; i < modifier.size(); i++) list.add(EnumChatFormatting.DARK_PURPLE + modifier.get(i).getDisplayName() + " x" + modifier.get(i).stackSize); } } + + /** + * @param stack + * @param player + */ + public void action(ItemStack stack, EntityPlayer player) + { + for(ModifierEffects mod: ModifierEffects.getEffects()) + mod.action(stack, player, this); + } + + /** + * @param item + * @param player + * @param source + * @return + */ + public boolean onPlayerAttackedCacellable(ItemStack item, EntityPlayer player, DamageSource source, float amount) + { + for(ModifierEffects mod: ModifierEffects.getEffects()) + return mod.onPlayerAttackedCacellable(item, player, source, this, amount); + return false; + } + + /** + * @param item + * @param player + * @param target + * @return + */ + public boolean onEntityAttackedCacellable(ItemStack item, EntityPlayer player, Entity target, float amount) + { + for(ModifierEffects mod: ModifierEffects.getEffects()) + return mod.onEntityAttackedCacellable(item, player, target, this, amount); + return false; + } + + /** + * @param item + * @param player + * @param source + * @return + */ + public void onPlayerAttacked(ItemStack item, EntityPlayer player, DamageSource source, float amount) + { + for(ModifierEffects mod: ModifierEffects.getEffects()) mod.onPlayerAttacked(item, player, source, this, amount); + } + + /** + * @param item + * @param player + * @param target + * @return + */ + public void onEntityAttacked(ItemStack item, EntityPlayer player, Entity target, float amount) + { + for(ModifierEffects mod: ModifierEffects.getEffects()) mod.onEntityAttacked(item, player, target, this, amount); + } + + /** + * @param item + * @param player + * @param source + * @return + */ + public boolean onPlayerFall(ItemStack item, EntityPlayer player) + { + for(ModifierEffects mod: ModifierEffects.getEffects()) + return mod.onPlayerFall(item, player, this); + return false; + } } |
