diff options
| author | OnyxDarkKnight <sor1n.iliutza16@gmail.com> | 2015-02-03 21:09:09 +0000 |
|---|---|---|
| committer | OnyxDarkKnight <sor1n.iliutza16@gmail.com> | 2015-02-03 21:09:09 +0000 |
| commit | 3f4c717de5ebc9b942d65ae45ac87c43bdf8a31b (patch) | |
| tree | 15c68c8b61dbd0b7f44937a5c790c4b844e50f58 /java/darkknight/jewelrycraft/item | |
| parent | 73ca377dc01f859dabd7b07738cb7aeb762272b1 (diff) | |
Made a few modifications to some classes, added earrings and bracelets. Improved coloring algorithm and balanced the Thieving Glove
Diffstat (limited to 'java/darkknight/jewelrycraft/item')
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemBaseJewelry.java | 201 | ||||
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemBracelet.java | 27 | ||||
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemClayMolds.java | 4 | ||||
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemCrystal.java | 6 | ||||
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemEarrings.java | 27 | ||||
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemList.java | 8 | ||||
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemMolds.java | 2 | ||||
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemMoltenMetal.java | 75 | ||||
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemMoltenMetalBucket.java | 85 | ||||
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemMultiIngot.java | 46 | ||||
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemNecklace.java | 261 | ||||
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemRing.java | 601 | ||||
| -rw-r--r-- | java/darkknight/jewelrycraft/item/ItemThiefGloves.java | 100 |
13 files changed, 458 insertions, 985 deletions
diff --git a/java/darkknight/jewelrycraft/item/ItemBaseJewelry.java b/java/darkknight/jewelrycraft/item/ItemBaseJewelry.java new file mode 100644 index 0000000..9d65a60 --- /dev/null +++ b/java/darkknight/jewelrycraft/item/ItemBaseJewelry.java @@ -0,0 +1,201 @@ +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; +import java.util.Collections; +import java.util.Comparator; +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.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.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.util.JewelryNBT; + +public class ItemBaseJewelry extends Item +{ + public ItemBaseJewelry() + { + super(); + this.setMaxStackSize(1); + } + + @Override + public boolean requiresMultipleRenderPasses() + { + return true; + } + + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack stack, int pass) + { + try + { + return color(stack, pass); + } + catch (IOException e) + { + e.printStackTrace(); + } + return 16777215; + } + + 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()); + 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++) + { + int rgb = icon.getRGB(i, j); + 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); + } + 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()); + 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++) + { + int rgb = icon.getRGB(i, j); + 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); + } + int color = getMostCommonColour(m); + if (JewelryNBT.gem(stack).getItem().getColorFromItemStack(JewelryNBT.gem(stack), 1) == 16777215) JewelryNBT.addGemColor(stack, color); + else JewelryNBT.addGemColor(stack, JewelryNBT.gem(stack).getItem().getColorFromItemStack(JewelryNBT.gem(stack), 1)); + } + if (pass == 0 && JewelryNBT.ingot(stack) != null) return JewelryNBT.ingotColor(stack); + if (pass == 1 && JewelryNBT.gem(stack) != null) return JewelryNBT.gemColor(stack); + else if (JewelryNBT.ingot(stack) != null) return JewelryNBT.ingotColor(stack); + return 16777215; + } + + public static int getMostCommonColour(Map map) + { + List list = new LinkedList(map.entrySet()); + Collections.sort(list, new Comparator() + { + public int compare(Object o1, Object o2) + { + 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++) + { + float alpha = Float.valueOf(list.get(i).toString().split("=")[1]); + if (alpha < 180) me = (Map.Entry) list.get(i); + } + int rgb = (Integer) me.getKey(); + return rgb; + } + + public static boolean isGray(int[] rgbArr) + { + int rgbSum = rgbArr[0] + rgbArr[1] + rgbArr[2]; + if (rgbSum > 0 && rgbSum < 256 * 3) { return false; } + return true; + } + + 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(); + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean 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++) + list.add(EnumChatFormatting.DARK_PURPLE + modifier.get(i).getDisplayName() + " x" + modifier.get(i).stackSize); + } + } +} diff --git a/java/darkknight/jewelrycraft/item/ItemBracelet.java b/java/darkknight/jewelrycraft/item/ItemBracelet.java new file mode 100644 index 0000000..8b034c7 --- /dev/null +++ b/java/darkknight/jewelrycraft/item/ItemBracelet.java @@ -0,0 +1,27 @@ +package darkknight.jewelrycraft.item; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import darkknight.jewelrycraft.util.JewelryNBT; + +public class ItemBracelet extends ItemBaseJewelry +{ + public IIcon gem; + public ItemBracelet() + { + } + + public void registerIcons(IIconRegister iconRegister) + { + itemIcon = iconRegister.registerIcon("jewelrycraft:bracelet"); + gem = iconRegister.registerIcon("jewelrycraft:jewelBracelet"); + } + + public IIcon getIcon(ItemStack stack, int pass) + { + if (pass == 0) return itemIcon; + if (pass == 1 && JewelryNBT.gem(stack) != null) return gem; + return itemIcon; + } +} diff --git a/java/darkknight/jewelrycraft/item/ItemClayMolds.java b/java/darkknight/jewelrycraft/item/ItemClayMolds.java index 8c2eafa..29a2526 100644 --- a/java/darkknight/jewelrycraft/item/ItemClayMolds.java +++ b/java/darkknight/jewelrycraft/item/ItemClayMolds.java @@ -15,7 +15,7 @@ public class ItemClayMolds extends Item { /** List of molds color names */ public static final String[] moldsItemNames = new String[] - { "clayIngot", "clayRing", "clayNecklace" }; + { "clayIngot", "clayRing", "clayNecklace", "clayBracelet", "clayEarrings"}; @SideOnly(Side.CLIENT) private IIcon[] moldsIcons; @@ -42,7 +42,7 @@ public class ItemClayMolds extends Item * ItemStack so different stacks can have different names based on their * damage or NBT. */ - public String getUnlocalizedNameInefficiently(ItemStack par1ItemStack) + public String getUnlocalizedName(ItemStack par1ItemStack) { int i = MathHelper.clamp_int(par1ItemStack.getItemDamage(), 0, moldsItemNames.length - 1); return super.getUnlocalizedName() + "." + moldsItemNames[i]; diff --git a/java/darkknight/jewelrycraft/item/ItemCrystal.java b/java/darkknight/jewelrycraft/item/ItemCrystal.java index e044385..c9a234b 100644 --- a/java/darkknight/jewelrycraft/item/ItemCrystal.java +++ b/java/darkknight/jewelrycraft/item/ItemCrystal.java @@ -59,10 +59,14 @@ public class ItemCrystal extends Item public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int i, int j, int k, int side, float par8, float par9, float par10) { - //System.out.println(world.getBlockMetadata(i, j, k)); return true; } + public String getUnlocalizedName(ItemStack stack) + { + return super.getUnlocalizedName() + "." + stack.getItemDamage(); + } + @SuppressWarnings( { "unchecked", "rawtypes" }) public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List par3List) diff --git a/java/darkknight/jewelrycraft/item/ItemEarrings.java b/java/darkknight/jewelrycraft/item/ItemEarrings.java new file mode 100644 index 0000000..abff9cc --- /dev/null +++ b/java/darkknight/jewelrycraft/item/ItemEarrings.java @@ -0,0 +1,27 @@ +package darkknight.jewelrycraft.item; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import darkknight.jewelrycraft.util.JewelryNBT; + +public class ItemEarrings extends ItemBaseJewelry +{ + public IIcon gem; + public ItemEarrings() + { + } + + public void registerIcons(IIconRegister iconRegister) + { + itemIcon = iconRegister.registerIcon("jewelrycraft:earrings"); + gem = iconRegister.registerIcon("jewelrycraft:jewelEarrings"); + } + + public IIcon getIcon(ItemStack stack, int pass) + { + if (pass == 0) return itemIcon; + if (pass == 1 && JewelryNBT.gem(stack) != null) return gem; + return itemIcon; + } +} diff --git a/java/darkknight/jewelrycraft/item/ItemList.java b/java/darkknight/jewelrycraft/item/ItemList.java index fa718df..1d060ec 100644 --- a/java/darkknight/jewelrycraft/item/ItemList.java +++ b/java/darkknight/jewelrycraft/item/ItemList.java @@ -20,6 +20,8 @@ public class ItemList public static Item crystal; public static ItemRing ring; public static ItemNecklace necklace; + public static ItemBracelet bracelet; + public static ItemEarrings earrings; public static Item guide; public static ItemMoltenMetalBucket bucket; public static ItemMoltenMetal metal; @@ -35,8 +37,10 @@ public class ItemList molds = new ItemMolds().setUnlocalizedName("Jewelrycraft.mold").setTextureName("Mold").setCreativeTab(JewelrycraftMod.jewelrycraft); clayMolds = new ItemClayMolds().setUnlocalizedName("Jewelrycraft.mold").setTextureName("Mold").setCreativeTab(JewelrycraftMod.jewelrycraft); ring = (ItemRing) new ItemRing().setUnlocalizedName("Jewelrycraft.ring").setTextureName("jewelrycraft:ring"); - crystal = new ItemCrystal().setUnlocalizedName("Jewelrycraft.crystal").setTextureName("jewelrycraft:crystal").setCreativeTab(JewelrycraftMod.jewelrycraft); necklace = (ItemNecklace) new ItemNecklace().setUnlocalizedName("Jewelrycraft.necklace").setTextureName("jewelrycraft:necklace"); + bracelet = (ItemBracelet) new ItemBracelet().setUnlocalizedName("Jewelrycraft.bracelet").setTextureName("jewelrycraft:bracelet"); + earrings = (ItemEarrings) new ItemEarrings().setUnlocalizedName("Jewelrycraft.earrings").setTextureName("jewelrycraft:earrings"); + crystal = new ItemCrystal().setUnlocalizedName("Jewelrycraft.crystal").setTextureName("jewelrycraft:crystal").setCreativeTab(JewelrycraftMod.jewelrycraft); guide = new ItemGuide().setUnlocalizedName("Jewelrycraft.guide").setTextureName("jewelrycraft:guide").setCreativeTab(JewelrycraftMod.jewelrycraft); bucket = (ItemMoltenMetalBucket) new ItemMoltenMetalBucket().setUnlocalizedName("Jewelrycraft.bucket"); metal = (ItemMoltenMetal) new ItemMoltenMetal().setUnlocalizedName("Jewelrycraft.bucket"); @@ -47,6 +51,8 @@ public class ItemList GameRegistry.registerItem(clayMolds, "clayMolds"); GameRegistry.registerItem(ring, "ring"); GameRegistry.registerItem(necklace, "necklace"); + GameRegistry.registerItem(bracelet, "bracelet"); + GameRegistry.registerItem(earrings, "earrings"); GameRegistry.registerItem(crystal, "crystal"); GameRegistry.registerItem(guide, "guide"); GameRegistry.registerItem(bucket, "moltenMetalBucket"); diff --git a/java/darkknight/jewelrycraft/item/ItemMolds.java b/java/darkknight/jewelrycraft/item/ItemMolds.java index a335df8..0703997 100644 --- a/java/darkknight/jewelrycraft/item/ItemMolds.java +++ b/java/darkknight/jewelrycraft/item/ItemMolds.java @@ -15,7 +15,7 @@ public class ItemMolds extends Item { /** List of molds color names */ public static final String[] moldsItemNames = new String[] - { "ingot", "ring", "necklace" }; + { "ingot", "ring", "necklace", "bracelet", "earrings" }; @SideOnly(Side.CLIENT) private IIcon[] moldsIcons; diff --git a/java/darkknight/jewelrycraft/item/ItemMoltenMetal.java b/java/darkknight/jewelrycraft/item/ItemMoltenMetal.java index 53f1926..ef098f5 100644 --- a/java/darkknight/jewelrycraft/item/ItemMoltenMetal.java +++ b/java/darkknight/jewelrycraft/item/ItemMoltenMetal.java @@ -1,8 +1,13 @@ package darkknight.jewelrycraft.item; import java.awt.image.BufferedImage; -import java.io.File; import java.io.IOException; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; import javax.imageio.ImageIO; @@ -53,7 +58,6 @@ public class ItemMoltenMetal extends Item String domain = "", texture; IResourceManager rm = Minecraft.getMinecraft().getResourceManager(); BufferedImage icon; - int x = 0, y = 0, ok = 0, red, green, blue; if (stack != null && JewelryNBT.ingot(stack) != null && Item.getIdFromItem(JewelryNBT.ingot(stack).getItem()) > 0 && JewelryNBT.ingot(stack).getIconIndex() != null && JewelryNBT.ingotColor(stack) == 16777215) { IIcon itemIcon = JewelryNBT.ingot(stack).getItem().getIcon(JewelryNBT.ingot(stack), 0); @@ -70,32 +74,61 @@ public class ItemMoltenMetal extends Item else ingot = new ResourceLocation(domain.toLowerCase(), "textures/blocks/" + texture); icon = ImageIO.read(rm.getResource(ingot).getInputStream()); - while (ok == 0) - { - red = (icon.getRGB(x, y) >> 16) & 0xFF; - green = (icon.getRGB(x, y) >> 8) & 0xFF; - blue = icon.getRGB(x, y) & 0xFF; - if (!isColorPretty(red, green, blue)) + 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++) { - if (x < icon.getTileWidth() - 1) x++; - if (x >= icon.getTileWidth() - 1 && y < icon.getTileWidth() - 1) - { - x = 0; - y++; - } - if (x == icon.getTileWidth() - 1 && y == icon.getTileWidth() - 1) ok = 1; + int rgb = icon.getRGB(i, j); + 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); } - else ok = 1; + try + { + 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); + } + catch (Exception e) + { + JewelryNBT.addIngotColor(stack, 16777215); } - JewelryNBT.addIngotColor(stack, icon.getRGB(x, y)); } if (JewelryNBT.ingot(stack) != null) return JewelryNBT.ingotColor(stack); - return 16777215; + return 0; + } + + public static int getMostCommonColour(Map map) + { + List list = new LinkedList(map.entrySet()); + Collections.sort(list, new Comparator() + { + public int compare(Object o1, Object o2) + { + 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++) + { + float alpha = Float.valueOf(list.get(i).toString().split("=")[1]); + if (alpha < 180) me = (Map.Entry) list.get(i); + } + int rgb = (Integer) me.getKey(); + return rgb; } - public static boolean isColorPretty(int r, int g, int b) + public static boolean isGray(int[] rgbArr) { - if ((r >= 100 && g >= 100 && b >= 100 && r < 230 && b < 230 && g < 230) || ((r >= 100 && (g < 100 || b < 100)) || (g >= 100 && (r < 100 || b < 100)) || (b >= 100 && (g < 100 || r < 100)))) return true; - else return false; + int rgbSum = rgbArr[0] + rgbArr[1] + rgbArr[2]; + if (rgbSum > 0 && rgbSum < 256 * 3) { return false; } + return true; } } diff --git a/java/darkknight/jewelrycraft/item/ItemMoltenMetalBucket.java b/java/darkknight/jewelrycraft/item/ItemMoltenMetalBucket.java index c4c0a2f..5c61398 100644 --- a/java/darkknight/jewelrycraft/item/ItemMoltenMetalBucket.java +++ b/java/darkknight/jewelrycraft/item/ItemMoltenMetalBucket.java @@ -2,6 +2,12 @@ package darkknight.jewelrycraft.item; import java.awt.image.BufferedImage; import java.io.IOException; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; import javax.imageio.ImageIO; @@ -41,8 +47,7 @@ public class ItemMoltenMetalBucket extends Item } /** - * Called whenever this item is equipped and the right mouse button is - * pressed. Args: itemStack, world, entityPlayer + * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer */ public ItemStack onItemRightClick(ItemStack stack, World par2World, EntityPlayer par3EntityPlayer) { @@ -180,9 +185,9 @@ public class ItemMoltenMetalBucket extends Item else if (stack != null && JewelryNBT.ingot(stack) != null) { if (!world.isRemote && flag && !material.isLiquid()) world.func_147480_a(x, y, z, true); - - JewelrycraftMod.saveData.setString(x + " " + y + " " + z + " " + world.provider.dimensionId, Item.getIdFromItem(JewelryNBT.ingot(stack).getItem()) + ":" + JewelryNBT.ingot(stack).getItemDamage()); - JewelrycraftMod.netWrapper.sendToAll(new PacketSendLiquidData(world.provider.dimensionId, x, y, z, Item.getIdFromItem(JewelryNBT.ingot(stack).getItem()), JewelryNBT.ingot(stack).getItemDamage())); + int color = color(stack, 1); + JewelrycraftMod.saveData.setString(x + " " + y + " " + z + " " + world.provider.dimensionId, Item.getIdFromItem(JewelryNBT.ingot(stack).getItem()) + ":" + JewelryNBT.ingot(stack).getItemDamage() + ":" + color); + JewelrycraftMod.netWrapper.sendToAll(new PacketSendLiquidData(world.provider.dimensionId, x, y, z, Item.getIdFromItem(JewelryNBT.ingot(stack).getItem()), JewelryNBT.ingot(stack).getItemDamage(), color)); world.setBlock(x, y, z, BlockList.moltenMetal, 0, 3); return true; @@ -229,7 +234,6 @@ public class ItemMoltenMetalBucket extends Item String domain = "", texture; IResourceManager rm = Minecraft.getMinecraft().getResourceManager(); BufferedImage icon; - int x = 0, y = 0, ok = 0, red, green, blue; if (pass == 1 && stack != null && JewelryNBT.ingot(stack) != null && Item.getIdFromItem(JewelryNBT.ingot(stack).getItem()) > 0 && JewelryNBT.ingot(stack).getIconIndex() != null && JewelryNBT.ingotColor(stack) == 16777215) { IIcon itemIcon = JewelryNBT.ingot(stack).getItem().getIcon(JewelryNBT.ingot(stack), 0); @@ -246,33 +250,54 @@ public class ItemMoltenMetalBucket extends Item else ingot = new ResourceLocation(domain.toLowerCase(), "textures/blocks/" + texture); icon = ImageIO.read(rm.getResource(ingot).getInputStream()); - while (ok == 0) - { - red = (icon.getRGB(x, y) >> 16) & 0xFF; - green = (icon.getRGB(x, y) >> 8) & 0xFF; - blue = icon.getRGB(x, y) & 0xFF; - if (!isColorPretty(red, green, blue)) + 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++) { - if (x < icon.getTileWidth() - 1) x++; - if (x >= icon.getTileWidth() - 1 && y < icon.getTileWidth() - 1) - { - x = 0; - y++; - } - if (x == icon.getTileWidth() - 1 && y == icon.getTileWidth() - 1) ok = 1; + int rgb = icon.getRGB(i, j); + 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); } - else ok = 1; - } - JewelryNBT.addIngotColor(stack, icon.getRGB(x, y)); + 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); } if (JewelryNBT.ingot(stack) != null && pass == 1) return JewelryNBT.ingotColor(stack); return 16777215; } - public static boolean isColorPretty(int r, int g, int b) + public static int getMostCommonColour(Map map) { - if ((r >= 100 && g >= 100 && b >= 100 && r < 230 && b < 230 && g < 230) || ((r >= 100 && (g < 100 || b < 100)) || (g >= 100 && (r < 100 || b < 100)) || (b >= 100 && (g < 100 || r < 100)))) return true; - else return false; + List list = new LinkedList(map.entrySet()); + Collections.sort(list, new Comparator() + { + public int compare(Object o1, Object o2) + { + 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++) + { + float alpha = Float.valueOf(list.get(i).toString().split("=")[1]); + if (alpha < 180) me = (Map.Entry) list.get(i); + } + int rgb = (Integer) me.getKey(); + return rgb; + } + + public static boolean isGray(int[] rgbArr) + { + int rgbSum = rgbArr[0] + rgbArr[1] + rgbArr[2]; + if (rgbSum > 0 && rgbSum < 256 * 3) { return false; } + return true; } public ItemStack getModifiedItemStack(ItemStack ingot) @@ -284,14 +309,10 @@ public class ItemMoltenMetalBucket extends Item public String getItemStackDisplayName(ItemStack stack) { - if (JewelryNBT.ingot(stack) != null){ + if (JewelryNBT.ingot(stack) != null) + { ItemStack ingot = JewelryNBT.ingot(stack); - if(Item.getIdFromItem(ingot.getItem()) == Block.getIdFromBlock(Blocks.stained_glass) - || Item.getIdFromItem(ingot.getItem()) == Block.getIdFromBlock(Blocks.stained_glass_pane) - || Item.getIdFromItem(ingot.getItem()) == Block.getIdFromBlock(Blocks.stained_hardened_clay) - || Item.getIdFromItem(ingot.getItem()) == Block.getIdFromBlock(Blocks.wool) - || Item.getIdFromItem(ingot.getItem()) == Block.getIdFromBlock(Blocks.carpet)) - ingot.setItemDamage(15 - ingot.getItemDamage()); + if (Item.getIdFromItem(ingot.getItem()) == Block.getIdFromBlock(Blocks.stained_glass) || Item.getIdFromItem(ingot.getItem()) == Block.getIdFromBlock(Blocks.stained_hardened_clay) || Item.getIdFromItem(ingot.getItem()) == Block.getIdFromBlock(Blocks.wool) || Item.getIdFromItem(ingot.getItem()) == Block.getIdFromBlock(Blocks.carpet)) ingot.setItemDamage(15 - ingot.getItemDamage()); return (StatCollector.translateToLocal(this.getUnlocalizedNameInefficiently(stack) + ".name")).trim() + " " + ingot.getDisplayName().replace("Ingot", " ").trim(); } return ("" + StatCollector.translateToLocal(this.getUnlocalizedNameInefficiently(stack) + ".name")).trim() + " Metal"; diff --git a/java/darkknight/jewelrycraft/item/ItemMultiIngot.java b/java/darkknight/jewelrycraft/item/ItemMultiIngot.java deleted file mode 100644 index 8e29690..0000000 --- a/java/darkknight/jewelrycraft/item/ItemMultiIngot.java +++ /dev/null @@ -1,46 +0,0 @@ -package darkknight.jewelrycraft.item; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -public class ItemMultiIngot extends Item -{ - public IIcon[] icons = new IIcon[2]; - - public ItemMultiIngot() - { - super(); - setHasSubtypes(true); - } - - @Override - public void getSubItems(Item item, CreativeTabs tab, List items) - { - items.add(new ItemStack(item, 1, 0)); - items.add(new ItemStack(item, 1, 1)); - } - - @Override - public String getUnlocalizedName(ItemStack stack) - { - return super.getUnlocalizedName() + "." + stack.getItemDamage(); - } - - @Override - public void registerIcons(IIconRegister register) - { - icons[0] = register.registerIcon("jewelrycraft:test/ingot2"); - icons[1] = register.registerIcon("jewelrycraft:ingot3"); - } - - @Override - public IIcon getIconFromDamage(int dmg) - { - return dmg == 1 ? icons[1] : icons[0]; - } -} diff --git a/java/darkknight/jewelrycraft/item/ItemNecklace.java b/java/darkknight/jewelrycraft/item/ItemNecklace.java index c6bfbbc..e5905b5 100644 --- a/java/darkknight/jewelrycraft/item/ItemNecklace.java +++ b/java/darkknight/jewelrycraft/item/ItemNecklace.java @@ -1,43 +1,16 @@ package darkknight.jewelrycraft.item; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -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.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import darkknight.jewelrycraft.util.JewelryNBT; -import darkknight.jewelrycraft.util.JewelrycraftUtil; -public class ItemNecklace extends Item +public class ItemNecklace extends ItemBaseJewelry { - public IIcon gem; - private double amplifier; - int index = 0; - + public IIcon gem; public ItemNecklace() { - super(); - this.setMaxStackSize(1); - } + } public void registerIcons(IIconRegister iconRegister) { @@ -45,238 +18,10 @@ public class ItemNecklace extends Item gem = iconRegister.registerIcon("jewelrycraft:jewelNecklace"); } - @Override - public boolean requiresMultipleRenderPasses() - { - return true; - } - - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int pass) - { - try - { - return ItemRing.color(stack, pass); - } - catch (IOException e) - { - e.printStackTrace(); - } - return 16777215; - } - public IIcon getIcon(ItemStack stack, int pass) { if (pass == 0) return itemIcon; if (pass == 1 && JewelryNBT.gem(stack) != null) return gem; return itemIcon; } - - 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(); - } - - @SuppressWarnings( - { "rawtypes" }) - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!world.isRemote) - { - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(player.posX - 1.5D, player.posY, player.posZ - 1.5D, player.posX + 1.5D, player.posY + 2D, player.posZ + 1.5D)); - if (JewelryNBT.playerPosX(stack) != -1 && JewelryNBT.playerPosY(stack) != -1 && JewelryNBT.playerPosZ(stack) != -1) - { - double posX = JewelryNBT.playerPosX(stack), posY = JewelryNBT.playerPosY(stack), posZ = JewelryNBT.playerPosZ(stack); - if (JewelryNBT.isGemX(stack, new ItemStack(Items.ender_pearl)) && JewelryNBT.isModifierX(stack, new ItemStack(Items.bed)) && JewelryNBT.dimension(stack) != -2 && JewelryNBT.dimName(stack) != null) - { - int dimension = JewelryNBT.dimension(stack); - for (int i = 1; i <= 20; i++) - world.spawnParticle("largesmoke", player.posX - 0.5D + Math.random(), player.posY - 1.5D + Math.random(), player.posZ - 0.5D + Math.random(), 0.0D, 0.0D, 0.0D); - if (!JewelryNBT.isDimensionX(stack, player.dimension)) player.travelToDimension(dimension); - for (int i = 0; i < entities.size(); i++) - ((EntityLivingBase) entities.get(i)).setPositionAndUpdate(posX, posY, posZ); - for (int i = 1; i <= 300; i++) - world.spawnParticle("portal", posX - 0.5D + Math.random(), posY + Math.random(), posZ - 0.5D + Math.random(), 0.0D, 0.0D, 0.0D); - } - else if (JewelryNBT.isDimensionX(stack, player.dimension)) - { - for (int i = 1; i <= 20; i++) - world.spawnParticle("largesmoke", player.posX - 0.5D + Math.random(), player.posY - 1.5D + Math.random(), player.posZ - 0.5D + Math.random(), 0.0D, 0.0D, 0.0D); - for (int i = 0; i < entities.size(); i++) - ((EntityLivingBase) entities.get(i)).setPositionAndUpdate(posX, posY, posZ); - for (int i = 1; i <= 300; i++) - world.spawnParticle("portal", posX - 0.5D + Math.random(), posY + Math.random(), posZ - 0.5D + Math.random(), 0.0D, 0.0D, 0.0D); - } - else player.addChatMessage(new ChatComponentText("You can't teleport to these coordonates! You need to be in the same dimension they were set!")); - } - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.ender_pearl)) && JewelryNBT.isModifierX(stack, new ItemStack(Items.bed)) && JewelryNBT.dimension(stack) == -2 && JewelryNBT.playerPosX(stack) == -1 && JewelryNBT.playerPosY(stack) == -1 && JewelryNBT.playerPosZ(stack) == -1) - { - JewelryNBT.addCoordonatesAndDimension(stack, player.posX, player.posY, player.posZ, world.provider.dimensionId, world.provider.getDimensionName()); - JewelryNBT.addFakeEnchantment(stack); - } - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.ender_pearl)) && !JewelryNBT.hasTag(stack, "modifier") && JewelryNBT.playerPosX(stack) == -1 && JewelryNBT.playerPosY(stack) == -1 && JewelryNBT.playerPosZ(stack) == -1) - { - JewelryNBT.addCoordonatesAndDimension(stack, player.posX, player.posY, player.posZ, world.provider.dimensionId, world.provider.getDimensionName()); - JewelryNBT.addFakeEnchantment(stack); - } - - if (JewelryNBT.hasTag(stack, "mode")) - { - String mode = ""; - if (JewelryNBT.isModeX(stack, "Activated")) mode = "Deactivated"; - else if (JewelryNBT.isModeX(stack, "Deactivated")) mode = "Activated"; - if (mode != "") - { - player.addChatMessage(new ChatComponentText("The Necklace has been " + mode)); - JewelryNBT.addMode(stack, mode); - } - } - } - return stack; - } - - // @Override - // public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer - // player, EntityLivingBase entity) - // { - // if (!player.worldObj.isRemote && entity instanceof EntityLivingBase && - // JewelryNBT.isGemX(stack, new ItemStack(Item.netherStar)) && - // JewelryNBT.isModifierX(stack, new ItemStack(Block.chest)) && - // JewelryNBT.entity(stack, player) == null){ - // JewelryNBT.addEntity(stack, entity); - // JewelryNBT.addEntityID(stack, entity); - // entity.setDead(); - // JewelryNBT.addFakeEnchantment(stack); - // } - // return true; - // } - - /** - * allows items to add custom lines of information to the mouseover - * description - */ - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean 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++) list.add(EnumChatFormatting.DARK_PURPLE + modifier.get(i).getDisplayName() + " x" + modifier.get(i).stackSize); - - double playerPosX = JewelryNBT.playerPosX(stack), playerPosY = JewelryNBT.playerPosY(stack), playerPosZ = JewelryNBT.playerPosZ(stack); - if (playerPosX != -1 && playerPosY != -1 && playerPosZ != -1) list.add(EnumChatFormatting.YELLOW + "X: " + EnumChatFormatting.GRAY + (int) playerPosX + EnumChatFormatting.YELLOW + " Y: " + EnumChatFormatting.GRAY + (int) playerPosY + EnumChatFormatting.YELLOW + " Z: " + EnumChatFormatting.GRAY + (int) playerPosZ); - - int posX = JewelryNBT.blockCoordX(stack), posY = JewelryNBT.blockCoordY(stack), posZ = JewelryNBT.blockCoordZ(stack); - if (posX != -1 && posY != -1 && posZ != -1) list.add(EnumChatFormatting.YELLOW + "X: " + EnumChatFormatting.GRAY + (int) posX + EnumChatFormatting.YELLOW + " Y: " + EnumChatFormatting.GRAY + (int) posY + EnumChatFormatting.YELLOW + " Z: " + EnumChatFormatting.GRAY + (int) posZ); - - String name = JewelryNBT.dimName(stack); - if (name != null) list.add("Dimension: " + EnumChatFormatting.DARK_GREEN + name); - - EntityLivingBase entity = JewelryNBT.entity(stack, player); - if (entity != null) list.add("Entity: " + EnumChatFormatting.GOLD + entity.getCommandSenderName()); - - String modeN = JewelryNBT.modeName(stack); - if (modeN != null) list.add("Mode: " + modeN); - - int block = JewelryNBT.blockID(stack); - if (block != -1) list.add("Block: " + StatCollector.translateToLocalFormatted(Block.getBlockById(block).getUnlocalizedName())); - - int blockmeta = JewelryNBT.blockMetadata(stack); - if (blockmeta != -1) list.add("Block Metadata: " + blockmeta); - - TileEntity tile = JewelryNBT.tileEntity(stack); - if (tile != null) list.add(EnumChatFormatting.RED + "Contains a tile entity"); - - int blockX = JewelryNBT.blockCoordX(stack); - if (blockX != -1) list.add("Block Coords X: " + blockX); - - int blockY = JewelryNBT.blockCoordY(stack); - if (blockY != -1) list.add("Block Coords Y: " + blockY); - - int blockZ = JewelryNBT.blockCoordZ(stack); - if (blockZ != -1) list.add("Block Coords Z: " + blockZ); - - // int colorI = JewelryNBT.ingotColor(stack); - // if(colorI != -1) list.add("Ingot Color: " + colorI); - // - // int colorJ = JewelryNBT.gemColor(stack); - // if(colorJ != -1) list.add("gem Color: " + colorJ); - } - } - - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int i, int j, int k, int side, float par8, float par9, float par10) - { - amplifier = 0; - if (JewelryNBT.isGemX(stack, new ItemStack(Items.diamond))) amplifier = 1D; - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.emerald))) amplifier = 2D; - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.nether_star))) amplifier = 5D; - - if (!world.isRemote) - { - onItemRightClick(stack, world, player); - if (JewelryNBT.isModifierX(stack, new ItemStack(Items.dye, 1, 15))) for (int x = (int) -amplifier; x <= amplifier; x++) - for (int z = (int) -amplifier; z <= amplifier; z++) - world.scheduleBlockUpdate(i + x, j, k + z, world.getBlock(i + x, j, k + z), 7 - (int) amplifier); - - for (int x = (int) -1; x <= 1; x++) - for (int z = (int) -1; z <= 1; z++) - if (JewelryNBT.isModifierX(stack, new ItemStack(Items.diamond_pickaxe)) && JewelryNBT.isGemX(stack, new ItemStack(Items.nether_star)) && JewelryNBT.isIngotX(stack, new ItemStack(ItemList.shadowIngot))) if ((side == 0 || side == 1) && j > 0 && world.getBlock(i, j + x, k + z) != Blocks.air && world.getBlock(i + x, j, k + z).getBlockHardness(world, i + x, j, k + z) > 0F) world.func_147480_a(i + x, j, k + z, true); - else if ((side == 2 || side == 3) && j + x > 0 && world.getBlock(i, j + x, k + z) != Blocks.air && world.getBlock(i + z, j + x, k).getBlockHardness(world, i + z, j + x, k) > 0F) world.func_147480_a(i + z, j + x, k, true); - else if ((side == 4 || side == 5) && j + x > 0 && world.getBlock(i, j + x, k + z) != Blocks.air && world.getBlock(i, j + x, k + z).getBlockHardness(world, i, j + x, k + z) > 0F) world.func_147480_a(i, j + x, k + z, true); - } - return true; - } - - public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) - { - amplifier = 0D; - if (!world.isRemote) - { - EntityPlayer entityplayer = (EntityPlayer) entity; - int posX = (int) Math.floor(entityplayer.posX), posY = (int) Math.floor(entityplayer.posY), posZ = (int) Math.floor(entityplayer.posZ); - - if (JewelryNBT.isGemX(stack, new ItemStack(Items.diamond))) amplifier = 1D; - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.emerald))) amplifier = 2D; - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.nether_star))) amplifier = 5D; - - if (JewelryNBT.isModifierX(stack, new ItemStack(Items.dye, 1, 15)) && world.getBlock(posX, posY - 1, posZ) == Blocks.farmland) for (int i = (int) -amplifier; i <= amplifier; i++) - for (int j = (int) -amplifier; j <= amplifier; j++) - world.setBlockMetadataWithNotify(posX + i, posY - 1, posZ + j, 1, 7); - - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(entityplayer.posX - amplifier, entityplayer.posY - amplifier, entityplayer.posZ - amplifier, entityplayer.posX + amplifier, entityplayer.posY + 2 * amplifier, entityplayer.posZ + amplifier)); - if (JewelryNBT.isModeX(stack, "Activated")) - { - for (int i = 0; i < entities.size(); i++) - { - if (JewelryNBT.isModifierX(stack, new ItemStack(Items.blaze_powder))) ((EntityLivingBase) entities.get(i)).addPotionEffect(new PotionEffect(Potion.fireResistance.id, 4, 0, true)); - else if (JewelryNBT.isModifierX(stack, new ItemStack(Items.sugar))) ((EntityLivingBase) entities.get(i)).addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 4, 0, true)); - else if (JewelryNBT.isModifierX(stack, new ItemStack(Items.iron_pickaxe)) && !JewelryNBT.isGemX(stack, new ItemStack(Items.ender_pearl))) ((EntityLivingBase) entities.get(i)).addPotionEffect(new PotionEffect(Potion.digSpeed.id, 4, 0, true)); - else if (JewelryNBT.isModifierX(stack, new ItemStack(Items.feather))) - { - ((EntityLivingBase) entities.get(i)).addPotionEffect(new PotionEffect(Potion.jump.id, 4, 0, true)); - entityplayer.fallDistance = 0; - } - else if (JewelryNBT.isModifierX(stack, new ItemStack(Items.potionitem, 1, 8270))) ((EntityLivingBase) entities.get(i)).addPotionEffect(new PotionEffect(Potion.invisibility.id, 4, 0, true)); - } - } - } - } - - public ItemStack getModifiedItemStack(ItemStack ingot, ItemStack modifier, ItemStack gem) - { - ItemStack itemstack = new ItemStack(this); - JewelryNBT.addMetal(itemstack, ingot); - JewelryNBT.addModifiers(itemstack, JewelrycraftUtil.addRandomModifiers()); - JewelryNBT.addGem(itemstack, gem); -// if (JewelryNBT.isModifierEffectType(itemstack) && !(JewelryNBT.isGemX(itemstack, new ItemStack(Items.ender_pearl)) && JewelryNBT.isModifierX(itemstack, new ItemStack(Items.iron_pickaxe)))) JewelryNBT.addMode(itemstack, "Activated"); - if (JewelryNBT.isGemX(itemstack, new ItemStack(Items.nether_star)) && JewelryNBT.isModifierX(itemstack, new ItemStack(Items.book))) JewelryNBT.addMode(itemstack, "Disenchant"); - return itemstack; - } } diff --git a/java/darkknight/jewelrycraft/item/ItemRing.java b/java/darkknight/jewelrycraft/item/ItemRing.java index ac05e73..af546fe 100644 --- a/java/darkknight/jewelrycraft/item/ItemRing.java +++ b/java/darkknight/jewelrycraft/item/ItemRing.java @@ -1,64 +1,16 @@ package darkknight.jewelrycraft.item; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Random; - -import javax.imageio.ImageIO; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockChest; -import net.minecraft.block.BlockSkull; -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.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.EntityIronGolem; -import net.minecraft.entity.monster.EntitySnowman; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.inventory.InventoryEnderChest; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityChest; -import net.minecraft.tileentity.TileEntitySkull; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import cpw.mods.fml.common.network.internal.FMLNetworkHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import darkknight.jewelrycraft.JewelrycraftMod; -import darkknight.jewelrycraft.block.BlockList; import darkknight.jewelrycraft.util.JewelryNBT; -import darkknight.jewelrycraft.util.JewelrycraftUtil; -public class ItemRing extends Item +public class ItemRing extends ItemBaseJewelry { - public IIcon gem; - private int amplifier, cooldown = 0; - int index = 0; - + public IIcon gem; public ItemRing() { super(); - this.setMaxStackSize(1); } public void registerIcons(IIconRegister iconRegister) @@ -67,559 +19,10 @@ public class ItemRing extends Item gem = iconRegister.registerIcon("jewelrycraft:jewelRing"); } - @Override - public boolean requiresMultipleRenderPasses() - { - return true; - } - - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int pass) - { - try - { - return color(stack, pass); - } - catch (IOException e) - { - e.printStackTrace(); - } - return 16777215; - } - public IIcon getIcon(ItemStack stack, int pass) { if (pass == 0) return itemIcon; if (pass == 1 && JewelryNBT.gem(stack) != null) return gem; return itemIcon; } - - public static int color(ItemStack stack, int pass) throws IOException - { - String domain = "", texture; - IResourceManager rm = Minecraft.getMinecraft().getResourceManager(); - BufferedImage icon; - int x = 0, y = 0, ok = 0, red, green, blue; - 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) - { - IIcon itemIcon = JewelryNBT.ingot(stack).getItem().getIcon(JewelryNBT.ingot(stack), 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()); - while (ok == 0) - { - red = (icon.getRGB(x, y) >> 16) & 0xFF; - green = (icon.getRGB(x, y) >> 8) & 0xFF; - blue = icon.getRGB(x, y) & 0xFF; - if (!isColorPretty(red, green, blue)) - { - if (x < icon.getTileWidth() - 1) x++; - if (x >= icon.getTileWidth() - 1 && y < icon.getTileWidth() - 1) - { - x = 0; - y++; - } - if (x == icon.getTileWidth() - 1 && y == icon.getTileWidth() - 1) ok = 1; - } - else ok = 1; - } - JewelryNBT.addIngotColor(stack, icon.getRGB(x, y)); - } - 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(); - x = 0; - y = 0; - ok = 0; - - 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()); - while (ok == 0) - { - red = (icon.getRGB(x, y) >> 16) & 0xFF; - green = (icon.getRGB(x, y) >> 8) & 0xFF; - blue = icon.getRGB(x, y) & 0xFF; - if (!isColorPretty(red, green, blue)) - { - if (x < icon.getTileWidth() - 1) x++; - if (x >= icon.getTileWidth() - 1 && y < icon.getTileWidth() - 1) - { - x = 0; - y++; - } - if (x == icon.getTileWidth() - 1 && y == icon.getTileWidth() - 1) ok = 1; - } - else ok = 1; - } - if (JewelryNBT.gem(stack).getItem().getColorFromItemStack(JewelryNBT.gem(stack), 1) == 16777215) JewelryNBT.addGemColor(stack, icon.getRGB(x, y)); - else JewelryNBT.addGemColor(stack, JewelryNBT.gem(stack).getItem().getColorFromItemStack(JewelryNBT.gem(stack), 1)); - } - if (pass == 0 && JewelryNBT.ingot(stack) != null) return JewelryNBT.ingotColor(stack); - if (pass == 1 && JewelryNBT.gem(stack) != null) return JewelryNBT.gemColor(stack); - else if (JewelryNBT.ingot(stack) != null) return JewelryNBT.ingotColor(stack); - return 16777215; - } - - public static boolean isColorPretty(int r, int g, int b) - { - if ((r >= 100 && g >= 100 && b >= 100 && r < 230 && b < 230 && g < 230) || ((r >= 100 && (g < 100 || b < 100)) || (g >= 100 && (r < 100 || b < 100)) || (b >= 100 && (g < 100 || r < 100)))) return true; - else return false; - } - - public String getItemStackDisplayName(ItemStack stack) - { - if (JewelryNBT.ingot(stack) != null && JewelryNBT.gem(stack) != null && JewelryNBT.modifier(stack) == null && JewelryNBT.isGemX(stack, new ItemStack(Items.diamond)) && JewelryNBT.isIngotX(stack, new ItemStack(Items.gold_ingot))) return "Wedding Ring"; - else 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(); - } - - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) - { - if (!world.isRemote) - { - if (JewelryNBT.playerPosX(stack) != -1 && JewelryNBT.playerPosY(stack) != -1 && JewelryNBT.playerPosZ(stack) != -1) - { - double posX = JewelryNBT.playerPosX(stack), posY = JewelryNBT.playerPosY(stack), posZ = JewelryNBT.playerPosZ(stack); - if (JewelryNBT.isGemX(stack, new ItemStack(Items.ender_pearl)) && JewelryNBT.isModifierX(stack, new ItemStack(Items.bed)) && JewelryNBT.dimension(stack) != -2 && JewelryNBT.dimName(stack) != null) - { - int dimension = JewelryNBT.dimension(stack); - for (int i = 1; i <= 20; i++) - world.spawnParticle("largesmoke", player.posX - 0.5D + Math.random(), player.posY - 1.5D + Math.random(), player.posZ - 0.5D + Math.random(), 0.0D, 0.0D, 0.0D); - if (!JewelryNBT.isDimensionX(stack, player.dimension)) player.travelToDimension(dimension); - player.setPositionAndUpdate(posX, posY, posZ); - for (int i = 1; i <= 300; i++) - world.spawnParticle("portal", posX - 0.5D + Math.random(), posY + Math.random(), posZ - 0.5D + Math.random(), 0.0D, 0.0D, 0.0D); - } - else if (JewelryNBT.isDimensionX(stack, player.dimension)) - { - for (int i = 1; i <= 20; i++) - world.spawnParticle("largesmoke", player.posX - 0.5D + Math.random(), player.posY - 1.5D + Math.random(), player.posZ - 0.5D + Math.random(), 0.0D, 0.0D, 0.0D); - player.setPositionAndUpdate(posX, posY, posZ); - for (int i = 1; i <= 300; i++) - world.spawnParticle("portal", posX - 0.5D + Math.random(), posY + Math.random(), posZ - 0.5D + Math.random(), 0.0D, 0.0D, 0.0D); - } - else player.addChatMessage(new ChatComponentText("You can't teleport to these coordonates! You need to be in the same dimension they were set!")); - } - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.ender_pearl)) && JewelryNBT.isModifierX(stack, new ItemStack(Items.bed)) && JewelryNBT.dimension(stack) == -2 && JewelryNBT.playerPosX(stack) == -1 && JewelryNBT.playerPosY(stack) == -1 && JewelryNBT.playerPosZ(stack) == -1) - { - JewelryNBT.addCoordonatesAndDimension(stack, player.posX, player.posY, player.posZ, world.provider.dimensionId, world.provider.getDimensionName()); - JewelryNBT.addFakeEnchantment(stack); - } - else if (JewelryNBT.isGemX(stack, new ItemStack(Blocks.obsidian)) && JewelryNBT.isModifierX(stack, new ItemStack(Items.ender_eye))) - { - InventoryEnderChest inventoryenderchest = player.getInventoryEnderChest(); - player.displayGUIChest(inventoryenderchest); - } - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.ender_pearl)) && JewelryNBT.isModifierX(stack, new ItemStack(Blocks.chest))) - { - int i = JewelryNBT.blockCoordX(stack), j = JewelryNBT.blockCoordY(stack), k = JewelryNBT.blockCoordZ(stack); - if (player.getDistance(i + 0.5F, j + 0.5F, k + 0.5F) <= 128 && i != -1 && j != -1 && k != -1) - { - Block block = world.getBlock(i, j, k); - if (!block.isAir(world, i, j, k) && block instanceof BlockChest) - { - TileEntity tile = world.getTileEntity(i, j, k); - if (tile != null && tile instanceof TileEntityChest) FMLNetworkHandler.openGui(player, JewelrycraftMod.instance, 0, world, i, j, k); - } - } - else if (i != -1 && j != -1 && k != -1) player.addChatMessage(new ChatComponentText("Chest out of range! You need to be " + ((int) player.getDistance(i + 0.5F, j + 0.5F, k + 0.5F) - 127) + " blocks closer.")); - else player.addChatMessage(new ChatComponentText("You need to link the ring with a chest first, before using it!")); - } - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.ender_pearl)) && !JewelryNBT.hasTag(stack, "modifier") && JewelryNBT.playerPosX(stack) == -1 && JewelryNBT.playerPosY(stack) == -1 && JewelryNBT.playerPosZ(stack) == -1) - { - JewelryNBT.addCoordonatesAndDimension(stack, player.posX, player.posY, player.posZ, world.provider.dimensionId, world.provider.getDimensionName()); - JewelryNBT.addFakeEnchantment(stack); - } - - if (JewelryNBT.hasTag(stack, "mode")) - { - String mode = ""; - if (JewelryNBT.isModeX(stack, "Disenchant")) mode = "Transfer"; - else if (JewelryNBT.isModeX(stack, "Transfer")) mode = "Enchant"; - else if (JewelryNBT.isModeX(stack, "Enchant")) mode = "Disenchant"; - if (mode != "") - { - player.addChatMessage(new ChatComponentText("Switched to " + mode + " mode")); - JewelryNBT.addMode(stack, mode); - } - if (JewelryNBT.isModeX(stack, "Activated")) mode = "Deactivated"; - else if (JewelryNBT.isModeX(stack, "Deactivated")) mode = "Activated"; - if (mode != "" && mode != "Transfer" && mode != "Enchant" && mode != "Disenchant") - { - player.addChatMessage(new ChatComponentText("The Ring has been " + mode)); - JewelryNBT.addMode(stack, mode); - } - } - } - return stack; - } - - @Override - public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity) - { - if (!player.worldObj.isRemote && entity instanceof EntityLivingBase && JewelryNBT.isGemX(stack, new ItemStack(Items.nether_star)) && JewelryNBT.isModifierX(stack, new ItemStack(Blocks.chest)) && JewelryNBT.entity(stack, player) == null) - { - JewelryNBT.addEntity(stack, entity); - JewelryNBT.addEntityID(stack, entity); - entity.setDead(); - JewelryNBT.addFakeEnchantment(stack); - } - return true; - } - - /** - * allows items to add custom lines of information to the mouseover - * description - */ - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean par4) - { - if (stack.hasTagCompound() && par4 && stack.getDisplayName() != "Wedding Ring") - { - 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++) list.add(EnumChatFormatting.DARK_PURPLE + modifier.get(i).getDisplayName() + " x" + modifier.get(i).stackSize); - - double playerPosX = JewelryNBT.playerPosX(stack), playerPosY = JewelryNBT.playerPosY(stack), playerPosZ = JewelryNBT.playerPosZ(stack); - if (playerPosX != -1 && playerPosY != -1 && playerPosZ != -1) list.add(EnumChatFormatting.YELLOW + "X: " + EnumChatFormatting.GRAY + (int) playerPosX + EnumChatFormatting.YELLOW + " Y: " + EnumChatFormatting.GRAY + (int) playerPosY + EnumChatFormatting.YELLOW + " Z: " + EnumChatFormatting.GRAY + (int) playerPosZ); - - int posX = JewelryNBT.blockCoordX(stack), posY = JewelryNBT.blockCoordY(stack), posZ = JewelryNBT.blockCoordZ(stack); - if (posX != -1 && posY != -1 && posZ != -1) list.add(EnumChatFormatting.YELLOW + "X: " + EnumChatFormatting.GRAY + (int) posX + EnumChatFormatting.YELLOW + " Y: " + EnumChatFormatting.GRAY + (int) posY + EnumChatFormatting.YELLOW + " Z: " + EnumChatFormatting.GRAY + (int) posZ); - - String name = JewelryNBT.dimName(stack); - if (name != null) list.add("Dimension: " + EnumChatFormatting.DARK_GREEN + name); - - EntityLivingBase entity = JewelryNBT.entity(stack, player); - if (entity != null) list.add("Entity: " + EnumChatFormatting.GOLD + entity.getCommandSenderName()); - - String modeN = JewelryNBT.modeName(stack); - if (modeN != null) list.add("Mode: " + modeN); - - int block = JewelryNBT.blockID(stack); - if (block != -1) list.add("Block: " + StatCollector.translateToLocalFormatted(Block.getBlockById(block).getUnlocalizedName())); - - int blockmeta = JewelryNBT.blockMetadata(stack); - if (blockmeta != -1) list.add("Block Metadata: " + blockmeta); - - TileEntity tile = JewelryNBT.tileEntity(stack); - if (tile != null) list.add(EnumChatFormatting.RED + "Contains a tile entity"); - - int blockX = JewelryNBT.blockCoordX(stack); - if (blockX != -1) list.add("Block Coords X: " + blockX); - - int blockY = JewelryNBT.blockCoordY(stack); - if (blockY != -1) list.add("Block Coords Y: " + blockY); - - int blockZ = JewelryNBT.blockCoordZ(stack); - if (blockZ != -1) list.add("Block Coords Z: " + blockZ); - - // int colorI = JewelryNBT.ingotColor(stack); - // if(colorI != -1) list.add("Ingot Color: " + colorI); - // - // int colorJ = JewelryNBT.gemColor(stack); - // if(colorJ != -1) list.add("Jewel Color: " + colorJ); - } - } - - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int i, int j, int k, int side, float par8, float par9, float par10) - { - amplifier = 0; - if (JewelryNBT.isGemX(stack, new ItemStack(Items.diamond))) amplifier = 1; - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.emerald))) amplifier = 2; - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.nether_star))) amplifier = 7; - - if (!world.isRemote) - { - EntityLivingBase entity = JewelryNBT.entity(stack, player); - boolean used = false; - if (entity != null && entity instanceof EntityLivingBase) - { - entity.setLocationAndAngles(i + 0.5D, j + 1D, k + 0.5D, MathHelper.wrapAngleTo180_float(world.rand.nextFloat() * 360.0F), 0.0F); - world.spawnEntityInWorld(entity); - JewelryNBT.removeEntity(stack); - } - if (JewelryNBT.isGemX(stack, new ItemStack(Items.ender_pearl)) && JewelryNBT.isModifierX(stack, new ItemStack(Blocks.chest)) && world.getBlock(i, j, k) == Blocks.chest) JewelryNBT.addBlockCoordonates(stack, i, j, k); - onItemRightClick(stack, world, player); - if (JewelryNBT.isModifierX(stack, new ItemStack(Items.dye, 1, 15))) world.scheduleBlockUpdate(i, j, k, world.getBlock(i, j, k), 7 - amplifier); - if (JewelryNBT.isModifierX(stack, new ItemStack(Items.diamond_pickaxe)) && JewelryNBT.isGemX(stack, new ItemStack(Items.ender_pearl))) - { - if (JewelryNBT.hasTag(stack, "blockID") && !used) - { - int shiftX = 0, shiftY = 0, shiftZ = 0; - if (side == 0) shiftY = -1; - else if (side == 1) shiftY = 1; - else if (side == 2) shiftZ = -1; - else if (side == 3) shiftZ = 1; - else if (side == 4) shiftX = -1; - else if (side == 5) shiftX = 1; - world.setBlock(i + shiftX, j + shiftY, k + shiftZ, Block.getBlockById(JewelryNBT.blockID(stack))); - world.setBlockMetadataWithNotify(i + shiftX, j + shiftY, k + shiftZ, JewelryNBT.blockMetadata(stack), 2); - if (JewelryNBT.hasTag(stack, "tile")) world.setTileEntity(i + shiftX, j + shiftY, k + shiftZ, JewelryNBT.tileEntity(stack)); - if (JewelryNBT.tileEntity(stack) instanceof TileEntitySkull) ((BlockSkull) Blocks.skull).func_149965_a(world, i + shiftX, j + shiftY, k + shiftZ, (TileEntitySkull) JewelryNBT.tileEntity(stack)); - if (Block.getBlockById(JewelryNBT.blockID(stack)) == Blocks.pumpkin || Block.getBlockById(JewelryNBT.blockID(stack)) == Blocks.lit_pumpkin) createGolems(world, i + shiftX, j + shiftY, k + shiftZ); - JewelryNBT.removeBlock(stack); - used = true; - } - - if (!JewelryNBT.hasTag(stack, "tile") && world.getTileEntity(i, j, k) != null && !used && world.getBlock(i, j, k).getBlockHardness(world, i, j, k) > 0F) - { - JewelryNBT.addTileEntityBlock(stack, world, i, j, k); - world.removeTileEntity(i, j, k); - world.setBlock(i, j, k, Block.getBlockById(0)); - } - else if (!JewelryNBT.hasTag(stack, "blockID") && !used && world.getBlock(i, j, k).getBlockHardness(world, i, j, k) > 0F) - { - JewelryNBT.addBlock(stack, Block.getIdFromBlock(world.getBlock(i, j, k)), world.getBlockMetadata(i, j, k)); - JewelryNBT.addBlockCoordonates(stack, i, j, k); - world.setBlock(i, j, k, Block.getBlockById(0)); - } - } - if (JewelryNBT.isModifierX(stack, new ItemStack(Items.diamond_pickaxe)) && JewelryNBT.isGemX(stack, new ItemStack(Items.nether_star)) && JewelryNBT.isIngotX(stack, new ItemStack(ItemList.shadowIngot)) && j > 0 && world.getBlock(i, j, k).getBlockHardness(world, i, j, k) > 0F) world.func_147480_a(i, j, k, true); - } - return true; - } - - public boolean canDisenchant(EntityPlayer player) - { - if (player.capabilities.isCreativeMode) return true; - else if (player.experienceLevel >= 2) return true; - return false; - } - - public void dynamicLight(World world, EntityPlayer player) - { - world.setBlock((int) player.prevPosX, (int) player.prevPosY, (int) player.prevPosZ, Block.getBlockById(0)); - world.setBlock((int) player.posX, (int) player.posY, (int) player.posZ, BlockList.glow); - } - - @SuppressWarnings( - { "unchecked", "rawtypes" }) - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) - { - amplifier = 0; - if (cooldown > 0) cooldown--; - if (!world.isRemote) - { - EntityPlayer entityplayer = (EntityPlayer) entity; - int posX = (int) Math.floor(entityplayer.posX), posY = (int) Math.floor(entityplayer.posY), posZ = (int) Math.floor(entityplayer.posZ); - - if (JewelryNBT.isGemX(stack, new ItemStack(Items.diamond))) amplifier = 1; - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.emerald))) amplifier = 2; - else if (JewelryNBT.isGemX(stack, new ItemStack(Items.nether_star))) amplifier = 7; - - if (JewelryNBT.isModifierX(stack, new ItemStack(Items.dye, 1, 15)) && world.getBlock(posX, posY - 1, posZ) == Blocks.farmland) world.setBlockMetadataWithNotify(posX, posY - 1, posZ, 1, 7); - - if (JewelryNBT.isModeX(stack, "Activated")) - { - if (JewelryNBT.isModifierX(stack, new ItemStack(Items.blaze_powder)) && entityplayer != null) entityplayer.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 4, amplifier, true)); - else if (JewelryNBT.isModifierX(stack, new ItemStack(Items.sugar)) && entityplayer != null) - { - entityplayer.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 4, amplifier, true)); - entityplayer.addExhaustion(0.05f * amplifier); - } - else if (JewelryNBT.isModifierX(stack, new ItemStack(Items.iron_pickaxe)) && entityplayer != null && !JewelryNBT.isGemX(stack, new ItemStack(Items.ender_pearl))) entityplayer.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 4, amplifier, true)); - else if (JewelryNBT.isModifierX(stack, new ItemStack(Items.feather)) && entityplayer != null) - { - entityplayer.addPotionEffect(new PotionEffect(Potion.jump.id, 4, amplifier, true)); - if (entityplayer.inventory.armorInventory[0] != null) - { - int damage = entityplayer.inventory.armorInventory[0].getMaxDamage() - entityplayer.inventory.armorInventory[0].getItemDamage(); - if (damage - entityplayer.fallDistance > 0) - { - entityplayer.inventory.armorInventory[0].damageItem((int) entityplayer.fallDistance, entityplayer); - entityplayer.fallDistance = 0; - } - else - { - --entityplayer.inventory.armorInventory[0].stackSize; - entityplayer.fallDistance -= damage; - } - } - } - else if (JewelryNBT.isModifierX(stack, new ItemStack(Items.potionitem, 1, 8270)) && entityplayer != null) entityplayer.addPotionEffect(new PotionEffect(Potion.invisibility.id, 4, amplifier, true)); - } - if (entityplayer.inventory.getCurrentItem() != null && JewelryNBT.isGemX(stack, new ItemStack(Items.nether_star)) && JewelryNBT.isModifierX(stack, new ItemStack(Items.book)) && entityplayer.inventory.getCurrentItem().getItem() == stack.getItem()) - { - ItemStack item = null; - if (entityplayer.inventory.currentItem + 1 <= 8 && entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem + 1) != null && entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem + 1).isItemEnchanted()) item = entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem + 1); - if (entityplayer.inventory.currentItem - 1 >= 0 && entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem - 1) != null && entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem - 1).isItemEnchanted()) item = entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem - 1); - if (item != null && JewelryNBT.isModeX(stack, "Disenchant")) - { - ItemStack enchBook = new ItemStack(Items.enchanted_book); - Map enchItem = EnchantmentHelper.getEnchantments(item); - Map book = EnchantmentHelper.getEnchantments(enchBook); - Iterator iterator = enchItem.keySet().iterator(); - int e; - - if (iterator.hasNext() && canDisenchant(entityplayer)) - { - e = ((Integer) iterator.next()).intValue(); - book.put(Integer.valueOf(e), Integer.valueOf(((Integer) enchItem.get(Integer.valueOf(e))).intValue())); - EnchantmentHelper.setEnchantments(book, enchBook); - if (entityplayer.inventory.addItemStackToInventory(enchBook)) - { - if (!entityplayer.capabilities.isCreativeMode) - { - entityplayer.addExperienceLevel(-2); - entityplayer.heal(-1f); - } - enchItem.remove(Integer.valueOf(e)); - if (item.isItemStackDamageable() && (item.getMaxDamage() - item.getItemDamage()) / 3 > 0) item.damageItem((item.getMaxDamage() - item.getItemDamage()) / 3, entityplayer); - EnchantmentHelper.setEnchantments(enchItem, item); - } - } - } - if (entityplayer.inventory.currentItem + 1 <= 8 && entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem + 1) != null && entityplayer.inventory.currentItem - 1 >= 0 && entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem - 1) != null && JewelryNBT.isModeX(stack, "Transfer")) - { - if (cooldown > 0) entityplayer.addChatMessage(new ChatComponentText("Ring is currently cooling down!")); - ItemStack enchantedItem = null, enchantableItem = null; - if (entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem - 1).isItemEnchanted() && entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem + 1) != null) - { - enchantedItem = entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem - 1); - enchantableItem = entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem + 1); - - } - if (enchantedItem != null && enchantableItem != null) - { - Map enchItem = EnchantmentHelper.getEnchantments(enchantedItem); - Map resultItem = EnchantmentHelper.getEnchantments(enchantableItem); - Iterator iterator = enchItem.keySet().iterator(); - int e; - - if (iterator.hasNext() && cooldown == 0) - { - e = ((Integer) iterator.next()).intValue(); - if (!EnchantmentHelper.getEnchantments(enchantableItem).containsKey(Integer.valueOf(e))) - { - resultItem.put(Integer.valueOf(e), Integer.valueOf(((Integer) enchItem.get(Integer.valueOf(e))).intValue())); - EnchantmentHelper.setEnchantments(resultItem, enchantableItem); - enchItem.remove(Integer.valueOf(e)); - EnchantmentHelper.setEnchantments(enchItem, enchantedItem); - cooldown = 50000; - } - } - } - } - if (entityplayer.inventory.currentItem + 1 <= 8 && entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem + 1) != null) item = entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem + 1); - else if (entityplayer.inventory.currentItem - 1 >= 0 && entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem - 1) != null) item = entityplayer.inventory.getStackInSlot(entityplayer.inventory.currentItem - 1); - if (item != null && !item.isItemEnchanted() && item.isItemEnchantable() && entityplayer.experienceLevel > 0 && JewelryNBT.isModeX(stack, "Enchant")) - { - Map enchItem = EnchantmentHelper.getEnchantments(item); - int level = entityplayer.experienceLevel; - if (entityplayer.experienceLevel > 6) level = 6; - if (!entityplayer.capabilities.isCreativeMode) entityplayer.addExperienceLevel(-level); - enchItem.put(Enchantment.enchantmentsBookList[new Random().nextInt(Enchantment.enchantmentsBookList.length)].effectId, level); - EnchantmentHelper.setEnchantments(enchItem, item); - } - } - } - } - - public ItemStack getModifiedItemStack(ItemStack ingot, ItemStack modifier, ItemStack gem) - { - ItemStack itemstack = new ItemStack(this); - JewelryNBT.addMetal(itemstack, ingot); - JewelryNBT.addModifiers(itemstack, JewelrycraftUtil.addRandomModifiers()); - JewelryNBT.addGem(itemstack, gem); -// if (JewelryNBT.isModifierEffectType(itemstack) && !(JewelryNBT.isGemX(itemstack, new ItemStack(Items.ender_pearl)) && JewelryNBT.isModifierX(itemstack, new ItemStack(Items.iron_pickaxe)))) JewelryNBT.addMode(itemstack, "Activated"); - if (JewelryNBT.isGemX(itemstack, new ItemStack(Items.nether_star)) && JewelryNBT.isModifierX(itemstack, new ItemStack(Items.book))) JewelryNBT.addMode(itemstack, "Disenchant"); - return itemstack; - } - - public void createGolems(World world, int i, int j, int k) - { - if (world.getBlock(i, j - 1, k) == Blocks.snow && world.getBlock(i, j - 2, k) == Blocks.snow) - { - if (!world.isRemote) - { - world.setBlock(i, j, k, Block.getBlockById(0), 0, 2); - world.setBlock(i, j - 1, k, Block.getBlockById(0), 0, 2); - world.setBlock(i, j - 2, k, Block.getBlockById(0), 0, 2); - EntitySnowman entitysnowman = new EntitySnowman(world); - entitysnowman.setLocationAndAngles((double) i + 0.5D, (double) j - 1.95D, (double) k + 0.5D, 0.0F, 0.0F); - world.spawnEntityInWorld(entitysnowman); - world.notifyBlockChange(i, j, k, Block.getBlockById(0)); - world.notifyBlockChange(i, j - 1, k, Block.getBlockById(0)); - world.notifyBlockChange(i, j - 2, k, Block.getBlockById(0)); - } - - for (int l = 0; l < 120; ++l) - { - world.spawnParticle("snowshovel", (double) i + world.rand.nextDouble(), (double) (j - 2) + world.rand.nextDouble() * 2.5D, (double) k + world.rand.nextDouble(), 0.0D, 0.0D, 0.0D); - } - } - else if (world.getBlock(i, j - 1, k) == Blocks.iron_block && world.getBlock(i, j - 2, k) == Blocks.iron_block) - { - boolean flag = world.getBlock(i - 1, j - 1, k) == Blocks.iron_block && world.getBlock(i + 1, j - 1, k) == Blocks.iron_block; - boolean flag1 = world.getBlock(i, j - 1, k - 1) == Blocks.iron_block && world.getBlock(i, j - 1, k + 1) == Blocks.iron_block; - - if (flag || flag1) - { - world.setBlock(i, j, k, Block.getBlockById(0), 0, 2); - world.setBlock(i, j - 1, k, Block.getBlockById(0), 0, 2); - world.setBlock(i, j - 2, k, Block.getBlockById(0), 0, 2); - - if (flag) - { - world.setBlock(i - 1, j - 1, k, Block.getBlockById(0), 0, 2); - world.setBlock(i + 1, j - 1, k, Block.getBlockById(0), 0, 2); - } - else - { - world.setBlock(i, j - 1, k - 1, Block.getBlockById(0), 0, 2); - world.setBlock(i, j - 1, k + 1, Block.getBlockById(0), 0, 2); - } - - EntityIronGolem entityirongolem = new EntityIronGolem(world); - entityirongolem.setPlayerCreated(true); - entityirongolem.setLocationAndAngles((double) i + 0.5D, (double) j - 1.95D, (double) k + 0.5D, 0.0F, 0.0F); - world.spawnEntityInWorld(entityirongolem); - - for (int i1 = 0; i1 < 120; ++i1) - { - world.spawnParticle("snowballpoof", (double) i + world.rand.nextDouble(), (double) (j - 2) + world.rand.nextDouble() * 3.9D, (double) k + world.rand.nextDouble(), 0.0D, 0.0D, 0.0D); - } - - world.notifyBlockChange(i, j, k, Block.getBlockById(0)); - world.notifyBlockChange(i, j - 1, k, Block.getBlockById(0)); - world.notifyBlockChange(i, j - 2, k, Block.getBlockById(0)); - - if (flag) - { - world.notifyBlockChange(i - 1, j - 1, k, Block.getBlockById(0)); - world.notifyBlockChange(i + 1, j - 1, k, Block.getBlockById(0)); - } - else - { - world.notifyBlockChange(i, j - 1, k - 1, Block.getBlockById(0)); - world.notifyBlockChange(i, j - 1, k + 1, Block.getBlockById(0)); - } - } - } - } } diff --git a/java/darkknight/jewelrycraft/item/ItemThiefGloves.java b/java/darkknight/jewelrycraft/item/ItemThiefGloves.java index 344f9a6..658e9cc 100644 --- a/java/darkknight/jewelrycraft/item/ItemThiefGloves.java +++ b/java/darkknight/jewelrycraft/item/ItemThiefGloves.java @@ -11,6 +11,9 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.village.MerchantRecipe; @@ -21,10 +24,11 @@ import org.lwjgl.input.Keyboard; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.ReflectionHelper; import cpw.mods.fml.relauncher.Side; +import darkknight.jewelrycraft.util.PlayerUtils; public class ItemThiefGloves extends Item { - public Random rand; + public Random rand = new Random(); public ItemThiefGloves() { @@ -35,43 +39,91 @@ public class ItemThiefGloves extends Item } @Override - public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer par2EntityPlayer, EntityLivingBase par3EntityLivingBase) + public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity) { - if (par3EntityLivingBase instanceof EntityVillager) + if (entity instanceof EntityVillager) { - EntityVillager villager = (EntityVillager) par3EntityLivingBase; + EntityVillager villager = (EntityVillager) entity; int wealth = (Integer) ReflectionHelper.getPrivateValue(EntityVillager.class, villager, "wealth", "field_70956_bz"); MerchantRecipeList buyingList = (MerchantRecipeList) ReflectionHelper.getPrivateValue(EntityVillager.class, villager, "buyingList", "field_70963_i"); + int chance = 5; + boolean areOtherVillagersAround = false, canTheySeeYou = false; + AxisAlignedBB axisalignedbb = villager.boundingBox.expand(4.0D, 4.0D, 4.0D); + List entities = villager.worldObj.getEntitiesWithinAABBExcludingEntity(villager, axisalignedbb); + for (Object s : entities) + if (s instanceof EntityVillager) + { + areOtherVillagersAround = true; + chance += rand.nextInt(2); + if (((EntityVillager) s).canEntityBeSeen(player)) + { + chance += 2; + canTheySeeYou = true; + } + } + if (villager.canEntityBeSeen(player)) chance += 5; + if (player.isPotionActive(Potion.invisibility)) chance -= (0.8 * chance); + if (player.capabilities.isCreativeMode) chance = 1; + int steal = rand.nextInt(chance); + NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); if (buyingList != null) { Iterator<?> iterator = buyingList.iterator(); - while (iterator.hasNext()) + if (steal == 0) + { + while (iterator.hasNext()) + { + MerchantRecipe recipe = (MerchantRecipe) iterator.next(); + int toolUses = (Integer) ReflectionHelper.getPrivateValue(MerchantRecipe.class, recipe, "toolUses", "field_77400_d"); + int quantity; + if (recipe.getItemToSell().isStackable()) quantity = recipe.getItemToSell().stackSize * (7 - toolUses); + else quantity = recipe.getItemToSell().stackSize; + ItemStack s = new ItemStack(recipe.getItemToSell().getItem(), quantity, recipe.getItemToSell().getItemDamage()); + s.setTagCompound(recipe.getItemToSell().getTagCompound()); + if (player.inventory.addItemStackToInventory(s)) + ; + else villager.entityDropItem(s, 0); + if (playerInfo.hasKey("cursePoints")) playerInfo.setInteger("cursePoints", playerInfo.getInteger("cursePoints") + 5); + else playerInfo.setInteger("cursePoints", 5); + player.addChatMessage(new ChatComponentText("Villager #" + villager.getProfession() + ": Hmmm... I seem to have lost my " + s.getDisplayName() + "!")); + stack.damageItem(1, player); + } + buyingList.clear(); + ReflectionHelper.setPrivateValue(EntityVillager.class, villager, 300, "timeUntilReset", "field_70961_j"); + ReflectionHelper.setPrivateValue(EntityVillager.class, villager, true, "needsInitilization", "field_70959_by"); + player.addChatMessage(new ChatComponentText("You hear a faint whisper in your ear: ")); + player.addChatMessage(new ChatComponentText(EnumChatFormatting.DARK_PURPLE + "Those who steal but don't get caught get rewarded and do not.")); + player.addChatMessage(new ChatComponentText(EnumChatFormatting.DARK_PURPLE + "Embrace the path you have gone, for the darkness will not")); + player.addChatMessage(new ChatComponentText(EnumChatFormatting.DARK_PURPLE + "dwell on.")); + } + else { - MerchantRecipe recipe = (MerchantRecipe) iterator.next(); - int toolUses = (Integer) ReflectionHelper.getPrivateValue(MerchantRecipe.class, recipe, "toolUses", "field_77400_d"); - int quantity; - if (recipe.getItemToSell().isStackable()) quantity = recipe.getItemToSell().stackSize * (7 - toolUses); - else quantity = 1; - ItemStack s = new ItemStack(recipe.getItemToSell().getItem(), quantity, recipe.getItemToSell().getItemDamage()); - s.setTagCompound(recipe.getItemToSell().getTagCompound()); - if (par2EntityPlayer.inventory.addItemStackToInventory(s)) - ; - else villager.entityDropItem(s, 0); - par2EntityPlayer.addChatMessage(new ChatComponentText("Villager #" + villager.getProfession() + ": Hmmm... I seem to have lost my " + s.getDisplayName() + "!")); - stack.damageItem(1, par2EntityPlayer); + if (player.isPotionActive(Potion.invisibility)) player.addChatMessage(new ChatComponentText("Villager #" + villager.getProfession() + " sensed a strange presence around him, making him cling on to his items. You didn't get anything.")); + else + { + if (areOtherVillagersAround) + { + if (!canTheySeeYou) player.addChatMessage(new ChatComponentText("As he was passing by, a random villager caught you trying to steal from Villager #" + villager.getProfession() + ".")); + else player.addChatMessage(new ChatComponentText("A villager nearby saw you trying to steal from Villager #" + villager.getProfession() + ".")); + } + else player.addChatMessage(new ChatComponentText("Villager #" + villager.getProfession() + " caught you trying to steal from him.")); + player.addChatMessage(new ChatComponentText("Villager #" + villager.getProfession() + " curses you for the attempt.")); + } + stack.damageItem(1, player); + if (playerInfo.hasKey("cursePoints")) playerInfo.setInteger("cursePoints", playerInfo.getInteger("cursePoints") + 25); + else playerInfo.setInteger("cursePoints", 25); } - buyingList.clear(); - ReflectionHelper.setPrivateValue(EntityVillager.class, villager, 300, "timeUntilReset", "field_70961_j"); - ReflectionHelper.setPrivateValue(EntityVillager.class, villager, true, "needsInitilization", "field_70959_by"); } - - villager.dropItem(Items.emerald, wealth); - ReflectionHelper.setPrivateValue(EntityVillager.class, villager, 0, "wealth", "field_70956_bz"); + if (steal == 0) + { + villager.dropItem(Items.emerald, wealth); + ReflectionHelper.setPrivateValue(EntityVillager.class, villager, 0, "wealth", "field_70956_bz"); + } return true; } else { - return super.itemInteractionForEntity(stack, par2EntityPlayer, par3EntityLivingBase); + return super.itemInteractionForEntity(stack, player, entity); } } |
