From d17826bf67eec6de4561041832670d18074655e8 Mon Sep 17 00:00:00 2001 From: OnyxDarkKnight Date: Mon, 8 Jun 2015 23:18:07 +0100 Subject: Improved Hearts and Added Spawn Eggs for them. --- .../darkknight/jewelrycraft/item/ItemList.java | 135 ++++++++-------- .../darkknight/jewelrycraft/item/ItemSpawnEgg.java | 177 +++++++++++++++++++++ .../jewelrycraft/item/render/BraceletRender.java | 5 +- 3 files changed, 250 insertions(+), 67 deletions(-) create mode 100644 src/main/java/darkknight/jewelrycraft/item/ItemSpawnEgg.java (limited to 'src/main/java/darkknight/jewelrycraft/item') diff --git a/src/main/java/darkknight/jewelrycraft/item/ItemList.java b/src/main/java/darkknight/jewelrycraft/item/ItemList.java index 064ee58..49c6679 100644 --- a/src/main/java/darkknight/jewelrycraft/item/ItemList.java +++ b/src/main/java/darkknight/jewelrycraft/item/ItemList.java @@ -1,66 +1,69 @@ -package darkknight.jewelrycraft.item; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.registry.GameRegistry; -import darkknight.jewelrycraft.JewelrycraftMod; -import darkknight.jewelrycraft.util.Variables; - -public class ItemList -{ - public static Item thiefGloves; - public static Item shadowIngot; - public static Item molds; - public static Item clayMolds; - public static ItemRing ring; - public static ItemNecklace necklace; - public static ItemBracelet bracelet; - public static ItemEarrings earrings; - public static Item guide; - public static Item jewelryModifier; - public static ItemMoltenMetalBucket bucket; - public static ItemMoltenMetal metal; - public static Item goldObj; - public static Item structureGen; - private static boolean isInitialized = false; - - /** - * @param e - */ - public static void preInit(FMLPreInitializationEvent e) - { - thiefGloves = new ItemThiefGloves().setUnlocalizedName(Variables.MODID + ".thiefGloves").setTextureName(Variables.MODID + ":thiefGloves").setCreativeTab(JewelrycraftMod.jewelrycraft); - shadowIngot = new Item().setUnlocalizedName(Variables.MODID + ".ingotShadow").setTextureName(Variables.MODID + ":ingotShadow").setCreativeTab(JewelrycraftMod.jewelrycraft); - molds = new ItemMolds().setUnlocalizedName(Variables.MODID + ".mold").setTextureName("Mold").setCreativeTab(JewelrycraftMod.jewelrycraft); - clayMolds = new ItemClayMolds().setUnlocalizedName(Variables.MODID + ".mold").setTextureName("Mold").setCreativeTab(JewelrycraftMod.jewelrycraft); - ring = (ItemRing)new ItemRing().setUnlocalizedName(Variables.MODID + ".ring").setTextureName(Variables.MODID + ":ring").setCreativeTab(JewelrycraftMod.jewelrycraft); - necklace = (ItemNecklace)new ItemNecklace().setUnlocalizedName(Variables.MODID + ".necklace").setTextureName(Variables.MODID + ":necklace").setCreativeTab(JewelrycraftMod.jewelrycraft); - bracelet = (ItemBracelet)new ItemBracelet().setUnlocalizedName(Variables.MODID + ".bracelet").setTextureName(Variables.MODID + ":bracelet").setCreativeTab(JewelrycraftMod.jewelrycraft); - earrings = (ItemEarrings)new ItemEarrings().setUnlocalizedName(Variables.MODID + ".earrings").setTextureName(Variables.MODID + ":earrings").setCreativeTab(JewelrycraftMod.jewelrycraft); - guide = new ItemGuide().setUnlocalizedName(Variables.MODID + ".guide").setTextureName(Variables.MODID + ":guide").setCreativeTab(JewelrycraftMod.jewelrycraft); - bucket = (ItemMoltenMetalBucket)new ItemMoltenMetalBucket().setUnlocalizedName(Variables.MODID + ".bucket"); - metal = (ItemMoltenMetal)new ItemMoltenMetal().setUnlocalizedName(Variables.MODID + ".bucket"); - jewelryModifier = new ItemJewelryModifier().setUnlocalizedName(Variables.MODID + ".jewelryModifier").setTextureName(Variables.MODID + ":jewelryModifier").setCreativeTab(JewelrycraftMod.jewelrycraft); - goldObj = new ItemGoldObj().setUnlocalizedName(Variables.MODID + ".goldObject"); - structureGen = new ItemStructureGen().setUnlocalizedName(Variables.MODID + ".structureGen").setTextureName(Variables.MODID + ":structureGen").setCreativeTab(JewelrycraftMod.jewelrycraft); - - GameRegistry.registerItem(thiefGloves, "thiefGloves"); - GameRegistry.registerItem(shadowIngot, "shadowIngot"); - GameRegistry.registerItem(molds, "molds"); - GameRegistry.registerItem(clayMolds, "clayMolds"); - GameRegistry.registerItem(ring, "ring"); - GameRegistry.registerItem(necklace, "necklace"); - GameRegistry.registerItem(bracelet, "bracelet"); - GameRegistry.registerItem(earrings, "earrings"); - GameRegistry.registerItem(guide, "guide"); - GameRegistry.registerItem(bucket, "moltenMetalBucket"); - GameRegistry.registerItem(metal, "moltenMetal"); - GameRegistry.registerItem(jewelryModifier, "jewelryModifier"); - GameRegistry.registerItem(goldObj, "goldObject"); - GameRegistry.registerItem(structureGen, "structureGen"); - - OreDictionary.registerOre("ingotShadow", new ItemStack(ItemList.shadowIngot)); - } -} +package darkknight.jewelrycraft.item; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.registry.GameRegistry; +import darkknight.jewelrycraft.JewelrycraftMod; +import darkknight.jewelrycraft.util.Variables; + +public class ItemList +{ + public static Item thiefGloves; + public static Item shadowIngot; + public static Item molds; + public static Item clayMolds; + public static ItemRing ring; + public static ItemNecklace necklace; + public static ItemBracelet bracelet; + public static ItemEarrings earrings; + public static Item guide; + public static Item jewelryModifier; + public static ItemMoltenMetalBucket bucket; + public static ItemMoltenMetal metal; + public static Item goldObj; + public static Item structureGen; + public static Item spawnEgg; + private static boolean isInitialized = false; + + /** + * @param e + */ + public static void preInit(FMLPreInitializationEvent e) + { + thiefGloves = new ItemThiefGloves().setUnlocalizedName(Variables.MODID + ".thiefGloves").setTextureName(Variables.MODID + ":thiefGloves").setCreativeTab(JewelrycraftMod.jewelrycraft); + shadowIngot = new Item().setUnlocalizedName(Variables.MODID + ".ingotShadow").setTextureName(Variables.MODID + ":ingotShadow").setCreativeTab(JewelrycraftMod.jewelrycraft); + molds = new ItemMolds().setUnlocalizedName(Variables.MODID + ".mold").setTextureName("Mold").setCreativeTab(JewelrycraftMod.jewelrycraft); + clayMolds = new ItemClayMolds().setUnlocalizedName(Variables.MODID + ".mold").setTextureName("Mold").setCreativeTab(JewelrycraftMod.jewelrycraft); + ring = (ItemRing)new ItemRing().setUnlocalizedName(Variables.MODID + ".ring").setTextureName(Variables.MODID + ":ring").setCreativeTab(JewelrycraftMod.jewelrycraft); + necklace = (ItemNecklace)new ItemNecklace().setUnlocalizedName(Variables.MODID + ".necklace").setTextureName(Variables.MODID + ":necklace").setCreativeTab(JewelrycraftMod.jewelrycraft); + bracelet = (ItemBracelet)new ItemBracelet().setUnlocalizedName(Variables.MODID + ".bracelet").setTextureName(Variables.MODID + ":bracelet").setCreativeTab(JewelrycraftMod.jewelrycraft); + earrings = (ItemEarrings)new ItemEarrings().setUnlocalizedName(Variables.MODID + ".earrings").setTextureName(Variables.MODID + ":earrings").setCreativeTab(JewelrycraftMod.jewelrycraft); + guide = new ItemGuide().setUnlocalizedName(Variables.MODID + ".guide").setTextureName(Variables.MODID + ":guide").setCreativeTab(JewelrycraftMod.jewelrycraft); + bucket = (ItemMoltenMetalBucket)new ItemMoltenMetalBucket().setUnlocalizedName(Variables.MODID + ".bucket"); + metal = (ItemMoltenMetal)new ItemMoltenMetal().setUnlocalizedName(Variables.MODID + ".bucket"); + jewelryModifier = new ItemJewelryModifier().setUnlocalizedName(Variables.MODID + ".jewelryModifier").setTextureName(Variables.MODID + ":jewelryModifier").setCreativeTab(JewelrycraftMod.jewelrycraft); + goldObj = new ItemGoldObj().setUnlocalizedName(Variables.MODID + ".goldObject"); + structureGen = new ItemStructureGen().setUnlocalizedName(Variables.MODID + ".structureGen").setTextureName(Variables.MODID + ":structureGen").setCreativeTab(JewelrycraftMod.jewelrycraft); + spawnEgg = new ItemSpawnEgg().setUnlocalizedName(Variables.MODID + ".monsterPlacer").setTextureName("spawn_egg"); + + GameRegistry.registerItem(thiefGloves, "thiefGloves"); + GameRegistry.registerItem(shadowIngot, "shadowIngot"); + GameRegistry.registerItem(molds, "molds"); + GameRegistry.registerItem(clayMolds, "clayMolds"); + GameRegistry.registerItem(ring, "ring"); + GameRegistry.registerItem(necklace, "necklace"); + GameRegistry.registerItem(bracelet, "bracelet"); + GameRegistry.registerItem(earrings, "earrings"); + GameRegistry.registerItem(guide, "guide"); + GameRegistry.registerItem(bucket, "moltenMetalBucket"); + GameRegistry.registerItem(metal, "moltenMetal"); + GameRegistry.registerItem(jewelryModifier, "jewelryModifier"); + GameRegistry.registerItem(goldObj, "goldObject"); + GameRegistry.registerItem(structureGen, "structureGen"); + GameRegistry.registerItem(spawnEgg, "spawnEgg"); + + OreDictionary.registerOre("ingotShadow", new ItemStack(ItemList.shadowIngot)); + } +} diff --git a/src/main/java/darkknight/jewelrycraft/item/ItemSpawnEgg.java b/src/main/java/darkknight/jewelrycraft/item/ItemSpawnEgg.java new file mode 100644 index 0000000..708c69c --- /dev/null +++ b/src/main/java/darkknight/jewelrycraft/item/ItemSpawnEgg.java @@ -0,0 +1,177 @@ +package darkknight.jewelrycraft.item; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemMonsterPlacer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Facing; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.MovingObjectPosition.MovingObjectType; +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.entities.EntityHeart; +import darkknight.jewelrycraft.util.Variables; + +/** + * @author Betweenlands + */ +public class ItemSpawnEgg extends ItemMonsterPlacer { + private static final Map eggTypes = new LinkedHashMap(); + + public static void registerSpawnEgg(Class entity, String entityName, int id, int eggBackgroundColor, int eggForegroundColor) { + eggTypes.put((short) id, new EggData(id, entityName, entity, eggBackgroundColor, eggForegroundColor)); + } + + private static EggData getEggData(ItemStack is) { + return eggTypes.get((short) is.getItemDamage()); + } + + public ItemSpawnEgg() { + setHasSubtypes(true); + setCreativeTab(CreativeTabs.tabMisc); + } + + @Override + public String getItemStackDisplayName(ItemStack is) { + String s = StatCollector.translateToLocal(getUnlocalizedName() + ".name").trim(); + String mob = ""; + + EggData egg = getEggData(is); + if (egg != null) mob = StatCollector.translateToLocal("entity." + Variables.MODID + "." + egg.entityName + ".name"); + + return String.format(s, mob); + } + + @Override + public boolean onItemUse(ItemStack is, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) { + if (world.isRemote) return true; + + Block block = world.getBlock(x, y, z); + x += Facing.offsetsXForSide[side]; + y += Facing.offsetsYForSide[side]; + z += Facing.offsetsZForSide[side]; + + EggData egg = getEggData(is); + if (egg != null) { + egg.spawnMob(world, x + 0.5D, y + (side == 1 && block != null && block.getRenderType() == 11 ? 0.5D : 0D), z + 0.5D, is); + + if (!player.capabilities.isCreativeMode) --is.stackSize; + } + + return true; + } + + @Override + public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player) { + if (world.isRemote) return is; + + MovingObjectPosition mop = getMovingObjectPositionFromPlayer(world, player, true); + + if (mop != null && mop.typeOfHit == MovingObjectType.BLOCK) { + int x = mop.blockX, y = mop.blockY, z = mop.blockZ; + + if (!world.canMineBlock(player, x, y, z) || !player.canPlayerEdit(x, y, z, mop.sideHit, is)) return is; + + if (world.getBlock(x, y, z).getMaterial() == Material.water) { + EggData egg = getEggData(is); + if (egg != null) { + egg.spawnMob(world, x, y, z, is); + + if (!player.capabilities.isCreativeMode) --is.stackSize; + } + } + } + + return is; + } + + public static EntityLiving getEntity(World world, double x, double y, double z, ItemStack is) { + EggData egg = getEggData(is); + return egg.spawnMob(world, x, y, z, is); + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack is, int pass) { + EggData egg = getEggData(is); + return egg != null ? pass == 0 ? egg.primaryColor : egg.secondaryColor : 16777215; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item id, CreativeTabs tab, List list) { + for (Short s : eggTypes.keySet()) + list.add(new ItemStack(id, 1, s)); + } + + static class EggData { + private final short id; + String entityName; + private final Class entityClass; + int primaryColor; + int secondaryColor; + + EggData(int id, String entityName, Class entityClass, int[] rgbPrimaryColor, int[] rgbSecondaryColor) { + this(id, entityName, entityClass, rgbPrimaryColor[0] << 16 | rgbPrimaryColor[1] << 8 | rgbPrimaryColor[2], rgbSecondaryColor[0] << 16 | rgbSecondaryColor[1] << 8 | rgbSecondaryColor[2]); + } + + EggData(int id, String entityName, Class entityClass, int primaryColor, int secondaryColor) { + this.id = (short) id; + this.entityName = entityName; + this.entityClass = entityClass; + this.primaryColor = primaryColor; + this.secondaryColor = secondaryColor; + } + + public EntityLiving spawnMob(World world, double x, double y, double z, ItemStack is) { + EntityLiving e = null; + + try { + e = entityClass.getConstructor(World.class).newInstance(world); + } catch (Exception ex) { + ex.printStackTrace(); + return null; + } + + if (e == null) return null; + + if (e instanceof EntityHeart) { + if (id == 2) ((EntityHeart) e).setType("White"); + else if (id == 3) ((EntityHeart) e).setType("Blue"); + else if (id == 4) ((EntityHeart) e).setType("Black"); + else if (id == 6) ((EntityHeart) e).setType("White"); + else if (id == 7) ((EntityHeart) e).setType("Blue"); + else if (id == 8) ((EntityHeart) e).setType("Black"); + else ((EntityHeart) e).setType("Red"); + } + e.setLocationAndAngles(x, y, z, MathHelper.wrapAngleTo180_float(world.rand.nextFloat() * 360F), 0F); + e.rotationYawHead = e.rotationYaw; + e.renderYawOffset = e.rotationYaw; + e.onSpawnWithEgg((IEntityLivingData) null); + world.spawnEntityInWorld(e); + e.playLivingSound(); + + if (is.hasDisplayName()) e.setCustomNameTag(is.getDisplayName()); + + return e; + } + + @Override + public int hashCode() { + return id; + } + } +} diff --git a/src/main/java/darkknight/jewelrycraft/item/render/BraceletRender.java b/src/main/java/darkknight/jewelrycraft/item/render/BraceletRender.java index 047cd93..bdec55d 100644 --- a/src/main/java/darkknight/jewelrycraft/item/render/BraceletRender.java +++ b/src/main/java/darkknight/jewelrycraft/item/render/BraceletRender.java @@ -3,9 +3,12 @@ package darkknight.jewelrycraft.item.render; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; + import org.lwjgl.opengl.GL11; + import cpw.mods.fml.common.Loader; import darkknight.jewelrycraft.model.ModelBracelet; import darkknight.jewelrycraft.util.Variables; @@ -25,7 +28,7 @@ public class BraceletRender extends TileEntitySpecialRenderer GL11.glPushMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(texture); if ((float)z != -1) bracelet.render(entity, 0F, 0F, 0F, (float)z, f, 1.0F); - if (Loader.isModLoaded("alpaca")){ + if (Loader.isModLoaded("alpaca") && fiskfille.alpaca.AlpacaAPI.isAlpacaClient((EntityPlayer)entity)){ GL11.glTranslatef(1F, 0F, -9F); GL11.glRotatef(25F, 1F, 0F, 0F); GL11.glRotatef(-25F, 0F, 1F, 0F); -- cgit v1.2.3