From fb884fb2253c7bee0e3d8143aa784a4d0d8e8099 Mon Sep 17 00:00:00 2001 From: Lizbeth Rika Date: Thu, 4 Dec 2014 18:24:54 +0000 Subject: [PATCH] Render ALL the baubles! --- .../core/handler/BaubleRenderHandler.java | 6 ++- .../botania/client/lib/LibResources.java | 3 ++ .../equipment/bauble/ItemBloodPendant.java | 44 +++++++++++++++-- .../item/equipment/bauble/ItemDivaCharm.java | 33 ++++++++++++- .../equipment/bauble/ItemGoldenLaurel.java | 37 +++++++++++++- .../item/equipment/bauble/ItemIcePendant.java | 45 +++++++++++++++++- .../equipment/bauble/ItemKnockbackBelt.java | 33 ++++++++++++- .../equipment/bauble/ItemLavaPendant.java | 41 +++++++++++++++- .../bauble/ItemSuperLavaPendant.java | 42 +++++++++++++++- .../equipment/bauble/ItemSuperTravelBelt.java | 9 ++++ .../item/equipment/bauble/ItemTravelBelt.java | 35 +++++++++++++- .../botania/textures/items/bloodPendant2.png | Bin 0 -> 2838 bytes .../botania/textures/items/bloodPendant3.png | Bin 0 -> 2962 bytes .../botania/textures/items/icePendant.png | Bin 323 -> 2939 bytes .../botania/textures/items/icePendantGem.png | Bin 0 -> 2927 bytes .../botania/textures/items/lavaPendantGem.png | Bin 0 -> 3047 bytes .../textures/items/superLavaPendantGem.png | Bin 0 -> 3000 bytes .../botania/textures/model/knockbackBelt.png | Bin 0 -> 3444 bytes .../textures/model/superTravelBelt.png | Bin 0 -> 3456 bytes .../botania/textures/model/travelBelt.png | Bin 0 -> 3463 bytes 20 files changed, 317 insertions(+), 11 deletions(-) create mode 100644 src/main/resources/assets/botania/textures/items/bloodPendant2.png create mode 100644 src/main/resources/assets/botania/textures/items/bloodPendant3.png create mode 100644 src/main/resources/assets/botania/textures/items/icePendantGem.png create mode 100644 src/main/resources/assets/botania/textures/items/lavaPendantGem.png create mode 100644 src/main/resources/assets/botania/textures/items/superLavaPendantGem.png create mode 100644 src/main/resources/assets/botania/textures/model/knockbackBelt.png create mode 100644 src/main/resources/assets/botania/textures/model/superTravelBelt.png create mode 100644 src/main/resources/assets/botania/textures/model/travelBelt.png diff --git a/src/main/java/vazkii/botania/client/core/handler/BaubleRenderHandler.java b/src/main/java/vazkii/botania/client/core/handler/BaubleRenderHandler.java index 72942ad10..9654aa62b 100644 --- a/src/main/java/vazkii/botania/client/core/handler/BaubleRenderHandler.java +++ b/src/main/java/vazkii/botania/client/core/handler/BaubleRenderHandler.java @@ -57,8 +57,12 @@ public final class BaubleRenderHandler { private void dispatchRenders(InventoryBaubles inv, RenderPlayerEvent event, RenderType type) { for(int i = 0; i < inv.getSizeInventory(); i++) { ItemStack stack = inv.getStackInSlot(i); - if(stack != null && stack.getItem() instanceof IBaubleRender) + if(stack != null && stack.getItem() instanceof IBaubleRender) { + GL11.glPushMatrix(); + GL11.glColor4f(1F, 1F, 1F, 1F); ((IBaubleRender) stack.getItem()).onPlayerBaubleRender(stack, event, type); + GL11.glPopMatrix(); + } } } diff --git a/src/main/java/vazkii/botania/client/lib/LibResources.java b/src/main/java/vazkii/botania/client/lib/LibResources.java index 124d86a4f..eced4486a 100644 --- a/src/main/java/vazkii/botania/client/lib/LibResources.java +++ b/src/main/java/vazkii/botania/client/lib/LibResources.java @@ -95,6 +95,9 @@ public final class LibResources { public static final String MODEL_TINY_POTATO = PREFIX_MODEL + "tinyPotato.png"; public static final String MODEL_SPAWNER_CLAW = PREFIX_MODEL + "spawnerClaw.png"; public static final String MODEL_BREWERY = PREFIX_MODEL + "brewery.png"; + public static final String MODEL_TRAVEL_BELT = PREFIX_MODEL + "travelBelt.png"; + public static final String MODEL_SUPER_TRAVEL_BELT = PREFIX_MODEL + "superTravelBelt.png"; + public static final String MODEL_KNOCKBACK_BELT = PREFIX_MODEL + "knockbackBelt.png"; public static final String MODEL_CAPE = "/assets/botania/textures/model/cape.png"; diff --git a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemBloodPendant.java b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemBloodPendant.java index 1e1f06a57..73661e08e 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemBloodPendant.java +++ b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemBloodPendant.java @@ -14,7 +14,14 @@ package vazkii.botania.common.item.equipment.bauble; import java.awt.Color; import java.util.List; +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -27,11 +34,14 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderPlayerEvent; import baubles.api.BaubleType; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.brew.Brew; import vazkii.botania.api.brew.IBrewContainer; import vazkii.botania.api.brew.IBrewItem; +import vazkii.botania.api.item.IBaubleRender; +import vazkii.botania.api.item.IBaubleRender.Helper; import vazkii.botania.api.mana.IManaUsingItem; import vazkii.botania.api.mana.ManaItemHandler; import vazkii.botania.client.core.handler.ClientTickHandler; @@ -41,7 +51,7 @@ import vazkii.botania.common.item.ModItems; import vazkii.botania.common.item.brew.ItemBrewBase; import vazkii.botania.common.lib.LibItemNames; -public class ItemBloodPendant extends ItemBauble implements IBrewContainer, IBrewItem, IManaUsingItem { +public class ItemBloodPendant extends ItemBauble implements IBrewContainer, IBrewItem, IManaUsingItem, IBaubleRender { private static final String TAG_BREW_KEY = "brewKey"; @@ -64,8 +74,8 @@ public class ItemBloodPendant extends ItemBauble implements IBrewContainer, IBre @Override public void registerIcons(IIconRegister par1IconRegister) { - icons = new IIcon[2]; - for(int i = 0; i < 2; i++) + icons = new IIcon[4]; + for(int i = 0; i < 4; i++) icons[i] = IconHelper.forItem(par1IconRegister, this, i); } @@ -177,4 +187,32 @@ public class ItemBloodPendant extends ItemBauble implements IBrewContainer, IBre return getBrew(stack) != BotaniaAPI.fallbackBrew; } + @Override + public void onPlayerBaubleRender(ItemStack stack, RenderPlayerEvent event, RenderType type) { + if(type == RenderType.BODY) { + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + Helper.rotateIfSneaking(event.entityPlayer); + boolean armor = event.entityPlayer.getCurrentArmor(2) != null; + GL11.glRotatef(180F, 1F, 0F, 0F); + GL11.glTranslatef(-0.26F, -0.4F, armor ? 0.2F : 0.15F); + GL11.glScalef(0.5F, 0.5F, 0.5F); + + for(int i = 2; i < 4; i++) { + IIcon icon = icons[i]; + float f = icon.getMinU(); + float f1 = icon.getMaxU(); + float f2 = icon.getMinV(); + float f3 = icon.getMaxV(); + ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 1F / 32F); + + Color color = new Color(getColorFromItemStack(stack, 1)); + GL11.glColor3ub((byte) color.getRed(), (byte) color.getGreen(), (byte) color.getBlue()); + int light = 15728880; + int lightmapX = light % 65536; + int lightmapY = light / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightmapX, lightmapY); + } + } + } + } diff --git a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemDivaCharm.java b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemDivaCharm.java index 8d17047f1..f5bb764a0 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemDivaCharm.java +++ b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemDivaCharm.java @@ -13,14 +13,24 @@ package vazkii.botania.common.item.equipment.bauble; import java.util.List; +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.entity.monster.IMob; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.client.event.RenderPlayerEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingHurtEvent; +import vazkii.botania.api.item.IBaubleRender; +import vazkii.botania.api.item.IBaubleRender.Helper; +import vazkii.botania.api.item.IBaubleRender.RenderType; import vazkii.botania.api.mana.IManaUsingItem; import vazkii.botania.api.mana.ManaItemHandler; import vazkii.botania.common.Botania; @@ -31,8 +41,10 @@ import baubles.api.BaubleType; import baubles.common.lib.PlayerHandler; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.relauncher.ReflectionHelper; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; -public class ItemDivaCharm extends ItemBauble implements IManaUsingItem { +public class ItemDivaCharm extends ItemBauble implements IManaUsingItem, IBaubleRender { public ItemDivaCharm() { super(LibItemNames.DIVA_CHARM); @@ -83,5 +95,24 @@ public class ItemDivaCharm extends ItemBauble implements IManaUsingItem { public boolean usesMana(ItemStack stack) { return true; } + + @Override + @SideOnly(Side.CLIENT) + public void onPlayerBaubleRender(ItemStack stack, RenderPlayerEvent event, RenderType type) { + if(type == RenderType.HEAD) { + float f = itemIcon.getMinU(); + float f1 = itemIcon.getMaxU(); + float f2 = itemIcon.getMinV(); + float f3 = itemIcon.getMaxV(); + boolean armor = event.entityPlayer.getCurrentArmor(3) != null; + Helper.translateToHeadLevel(event.entityPlayer); + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + GL11.glRotatef(90F, 0F, 1F, 0F); + GL11.glRotatef(180F, 1F, 0F, 0F); + GL11.glTranslatef(-0.4F, 0.1F, armor ? -0.35F : -0.3F); + GL11.glScalef(0.5F, 0.5F, 0.5F); + ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, itemIcon.getIconWidth(), itemIcon.getIconHeight(), 1F / 16F); + } + } } diff --git a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemGoldenLaurel.java b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemGoldenLaurel.java index d5bc72d88..98b5d702b 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemGoldenLaurel.java +++ b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemGoldenLaurel.java @@ -11,20 +11,32 @@ */ package vazkii.botania.common.item.equipment.bauble; +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ChatComponentTranslation; +import net.minecraftforge.client.event.RenderPlayerEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingDeathEvent; +import vazkii.botania.api.item.IBaubleRender; +import vazkii.botania.api.item.IBaubleRender.Helper; +import vazkii.botania.api.item.IBaubleRender.RenderType; import vazkii.botania.common.lib.LibItemNames; import baubles.api.BaubleType; import baubles.common.lib.PlayerHandler; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; -public class ItemGoldenLaurel extends ItemBauble { +public class ItemGoldenLaurel extends ItemBauble implements IBaubleRender { public ItemGoldenLaurel() { super(LibItemNames.GOLDEN_LAUREL); @@ -52,4 +64,27 @@ public class ItemGoldenLaurel extends ItemBauble { public BaubleType getBaubleType(ItemStack itemstack) { return BaubleType.AMULET; } + + @Override + @SideOnly(Side.CLIENT) + public void onPlayerBaubleRender(ItemStack stack, RenderPlayerEvent event, RenderType type) { + if(type == RenderType.HEAD) { + float f = itemIcon.getMinU(); + float f1 = itemIcon.getMaxU(); + float f2 = itemIcon.getMinV(); + float f3 = itemIcon.getMaxV(); + boolean armor = event.entityPlayer.getCurrentArmor(3) != null; + Helper.translateToHeadLevel(event.entityPlayer); + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + GL11.glRotatef(180F, 0F, 0F, 1F); + GL11.glRotatef(90F, 0F, 1F, 0F); + GL11.glRotatef(-100F, 1F, 0F, 0F); + GL11.glTranslatef(-0.5F, -0.55F, 0.3F); + if(armor) { + GL11.glScalef(1.1F, 1.1F, 1F); + GL11.glTranslatef(-0.05F, -0.1F, 0F); + } + ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, itemIcon.getIconWidth(), itemIcon.getIconHeight(), 1F / 32F); + } + } } diff --git a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemIcePendant.java b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemIcePendant.java index c6e1cc6b5..fa787f7dd 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemIcePendant.java +++ b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemIcePendant.java @@ -11,24 +11,42 @@ */ package vazkii.botania.common.item.equipment.bauble; +import java.awt.Color; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderPlayerEvent; +import vazkii.botania.api.item.IBaubleRender; +import vazkii.botania.api.item.IBaubleRender.Helper; +import vazkii.botania.api.item.IBaubleRender.RenderType; +import vazkii.botania.client.core.helper.IconHelper; import vazkii.botania.common.lib.LibItemNames; import baubles.api.BaubleType; -public class ItemIcePendant extends ItemBauble { +public class ItemIcePendant extends ItemBauble implements IBaubleRender { + IIcon gemIcon; public static Map> playerIceBlocks = new HashMap(); public ItemIcePendant() { @@ -40,6 +58,12 @@ public class ItemIcePendant extends ItemBauble { return BaubleType.AMULET; } + @Override + public void registerIcons(IIconRegister par1IconRegister) { + super.registerIcons(par1IconRegister); + gemIcon = IconHelper.forItem(par1IconRegister, this, "Gem"); + } + @Override public void onWornTick(ItemStack stack, EntityLivingBase entity) { super.onWornTick(stack, entity); @@ -91,6 +115,25 @@ public class ItemIcePendant extends ItemBauble { ice.tick(player.worldObj, removers); } + @Override + public void onPlayerBaubleRender(ItemStack stack, RenderPlayerEvent event, RenderType type) { + if(type == RenderType.BODY) { + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + Helper.rotateIfSneaking(event.entityPlayer); + boolean armor = event.entityPlayer.getCurrentArmor(2) != null; + GL11.glRotatef(180F, 1F, 0F, 0F); + GL11.glTranslatef(-0.36F, -0.3F, armor ? 0.2F : 0.15F); + GL11.glRotatef(-45F, 0F, 0F, 1F); + GL11.glScalef(0.5F, 0.5F, 0.5F); + + float f = gemIcon.getMinU(); + float f1 = gemIcon.getMaxU(); + float f2 = gemIcon.getMinV(); + float f3 = gemIcon.getMaxV(); + ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, gemIcon.getIconWidth(), gemIcon.getIconHeight(), 1F / 32F); + } + } + class IceRemover { int time = 30; diff --git a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemKnockbackBelt.java b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemKnockbackBelt.java index 52f35f541..45ab23021 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemKnockbackBelt.java +++ b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemKnockbackBelt.java @@ -13,16 +13,32 @@ package vazkii.botania.common.item.equipment.bauble; import java.util.UUID; +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.RenderPlayerEvent; +import vazkii.botania.api.item.IBaubleRender; +import vazkii.botania.api.item.IBaubleRender.Helper; +import vazkii.botania.api.item.IBaubleRender.RenderType; +import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.lib.LibItemNames; import baubles.api.BaubleType; import com.google.common.collect.Multimap; -public class ItemKnockbackBelt extends ItemBaubleModifier { +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +public class ItemKnockbackBelt extends ItemBaubleModifier implements IBaubleRender { + + private static final ResourceLocation texture = new ResourceLocation(LibResources.MODEL_KNOCKBACK_BELT); + private static final ModelBiped model = new ModelBiped(); + public ItemKnockbackBelt() { super(LibItemNames.KNOCKBACK_BELT); } @@ -36,5 +52,20 @@ public class ItemKnockbackBelt extends ItemBaubleModifier { void fillModifiers(Multimap attributes) { attributes.put(SharedMonsterAttributes.knockbackResistance.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(2745708 /** Random number **/, 43743), "Bauble modifier", 1, 0)); } + + @Override + @SideOnly(Side.CLIENT) + public void onPlayerBaubleRender(ItemStack stack, RenderPlayerEvent event, RenderType type) { + if(type == RenderType.BODY) { + Minecraft.getMinecraft().renderEngine.bindTexture(texture); + Helper.rotateIfSneaking(event.entityPlayer); + boolean armor = event.entityPlayer.getCurrentArmor(1) != null; + GL11.glTranslatef(0F, 0.1F, 0F); + + float s = (armor ? 1.3F : 1.05F) / 16F; + GL11.glScalef(s, s, s); + model.bipedBody.render(1F); + } + } } diff --git a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemLavaPendant.java b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemLavaPendant.java index 3fad823a3..b55cb7467 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemLavaPendant.java +++ b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemLavaPendant.java @@ -11,13 +11,27 @@ */ package vazkii.botania.common.item.equipment.bauble; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.client.event.RenderPlayerEvent; + +import org.lwjgl.opengl.GL11; + +import vazkii.botania.api.item.IBaubleRender; +import vazkii.botania.client.core.helper.IconHelper; import vazkii.botania.common.lib.LibItemNames; import baubles.api.BaubleType; -public class ItemLavaPendant extends ItemBauble { +public class ItemLavaPendant extends ItemBauble implements IBaubleRender { + IIcon gemIcon; + public ItemLavaPendant() { super(LibItemNames.LAVA_PENDANT); } @@ -33,4 +47,29 @@ public class ItemLavaPendant extends ItemBauble { return BaubleType.AMULET; } + @Override + public void registerIcons(IIconRegister par1IconRegister) { + super.registerIcons(par1IconRegister); + gemIcon = IconHelper.forItem(par1IconRegister, this, "Gem"); + } + + @Override + public void onPlayerBaubleRender(ItemStack stack, RenderPlayerEvent event, RenderType type) { + if(type == RenderType.BODY) { + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + Helper.rotateIfSneaking(event.entityPlayer); + boolean armor = event.entityPlayer.getCurrentArmor(2) != null; + GL11.glRotatef(180F, 1F, 0F, 0F); + GL11.glTranslatef(-0.36F, -0.24F, armor ? 0.2F : 0.15F); + GL11.glRotatef(-45F, 0F, 0F, 1F); + GL11.glScalef(0.5F, 0.5F, 0.5F); + + float f = gemIcon.getMinU(); + float f1 = gemIcon.getMaxU(); + float f2 = gemIcon.getMinV(); + float f3 = gemIcon.getMaxV(); + ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, gemIcon.getIconWidth(), gemIcon.getIconHeight(), 1F / 32F); + } + } + } diff --git a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemSuperLavaPendant.java b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemSuperLavaPendant.java index 418f0579d..79aec3e55 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemSuperLavaPendant.java +++ b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemSuperLavaPendant.java @@ -11,16 +11,31 @@ */ package vazkii.botania.common.item.equipment.bauble; +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.client.event.RenderPlayerEvent; +import vazkii.botania.api.item.IBaubleRender; +import vazkii.botania.api.item.IBaubleRender.Helper; +import vazkii.botania.api.item.IBaubleRender.RenderType; +import vazkii.botania.client.core.helper.IconHelper; import vazkii.botania.common.lib.LibItemNames; import vazkii.botania.common.lib.LibObfuscation; import baubles.api.BaubleType; import cpw.mods.fml.relauncher.ReflectionHelper; -public class ItemSuperLavaPendant extends ItemBauble { +public class ItemSuperLavaPendant extends ItemBauble implements IBaubleRender { + IIcon gemIcon; + public ItemSuperLavaPendant() { super(LibItemNames.SUPER_LAVA_PENDANT); } @@ -43,4 +58,29 @@ public class ItemSuperLavaPendant extends ItemBauble { public BaubleType getBaubleType(ItemStack itemstack) { return BaubleType.AMULET; } + + @Override + public void registerIcons(IIconRegister par1IconRegister) { + super.registerIcons(par1IconRegister); + gemIcon = IconHelper.forItem(par1IconRegister, this, "Gem"); + } + + @Override + public void onPlayerBaubleRender(ItemStack stack, RenderPlayerEvent event, RenderType type) { + if(type == RenderType.BODY) { + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + Helper.rotateIfSneaking(event.entityPlayer); + boolean armor = event.entityPlayer.getCurrentArmor(2) != null; + GL11.glRotatef(180F, 1F, 0F, 0F); + GL11.glTranslatef(-0.36F, -0.24F, armor ? 0.2F : 0.15F); + GL11.glRotatef(-45F, 0F, 0F, 1F); + GL11.glScalef(0.5F, 0.5F, 0.5F); + + float f = gemIcon.getMinU(); + float f1 = gemIcon.getMaxU(); + float f2 = gemIcon.getMinV(); + float f3 = gemIcon.getMaxV(); + ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, gemIcon.getIconWidth(), gemIcon.getIconHeight(), 1F / 32F); + } + } } diff --git a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemSuperTravelBelt.java b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemSuperTravelBelt.java index db91272be..8e1eb1fdb 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemSuperTravelBelt.java +++ b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemSuperTravelBelt.java @@ -11,11 +11,20 @@ */ package vazkii.botania.common.item.equipment.bauble; +import net.minecraft.util.ResourceLocation; +import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.lib.LibItemNames; public class ItemSuperTravelBelt extends ItemTravelBelt { + private static final ResourceLocation texture = new ResourceLocation(LibResources.MODEL_SUPER_TRAVEL_BELT); + public ItemSuperTravelBelt() { super(LibItemNames.SUPER_TRAVEL_BELT, 0.085F, 0.3F, 4F); } + + @Override + public ResourceLocation getRenderTexture() { + return texture; + } } diff --git a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemTravelBelt.java b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemTravelBelt.java index fed7fe0cc..b71db04e2 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemTravelBelt.java +++ b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemTravelBelt.java @@ -11,19 +11,32 @@ */ package vazkii.botania.common.item.equipment.bauble; +import org.lwjgl.opengl.GL11; + import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.RenderPlayerEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent; +import vazkii.botania.api.item.IBaubleRender; +import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.lib.LibItemNames; import baubles.api.BaubleType; import baubles.common.lib.PlayerHandler; import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; -public class ItemTravelBelt extends ItemBauble { +public class ItemTravelBelt extends ItemBauble implements IBaubleRender { + private static final ResourceLocation texture = new ResourceLocation(LibResources.MODEL_TRAVEL_BELT); + private static final ModelBiped model = new ModelBiped(); + final float speed; final float jump; final float fallBuffer; @@ -84,4 +97,24 @@ public class ItemTravelBelt extends ItemBauble { player.stepHeight = 0.5F; } + @SideOnly(Side.CLIENT) + ResourceLocation getRenderTexture() { + return texture; + } + + @Override + @SideOnly(Side.CLIENT) + public void onPlayerBaubleRender(ItemStack stack, RenderPlayerEvent event, RenderType type) { + if(type == RenderType.BODY) { + Minecraft.getMinecraft().renderEngine.bindTexture(getRenderTexture()); + Helper.rotateIfSneaking(event.entityPlayer); + boolean armor = event.entityPlayer.getCurrentArmor(1) != null; + GL11.glTranslatef(0F, 0.1F, 0F); + + float s = (armor ? 1.3F : 1.05F) / 16F; + GL11.glScalef(s, s, s); + model.bipedBody.render(1F); + } + } + } diff --git a/src/main/resources/assets/botania/textures/items/bloodPendant2.png b/src/main/resources/assets/botania/textures/items/bloodPendant2.png new file mode 100644 index 0000000000000000000000000000000000000000..a980b9c5f365f96e1b8f09747bb3637fda47409f GIT binary patch literal 2838 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 IM6N<$g83bW*#H0l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/botania/textures/items/icePendant.png b/src/main/resources/assets/botania/textures/items/icePendant.png index 7c921c989410be0b1852b485e35cd67063074c22..12a44963c516e39570abdeee6994a2de586e1b51 100644 GIT binary patch delta 2915 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 N002ovPDHLkV1oCDb?X2C delta 276 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 Z830m+!vvMS%+LS;002ovPDHLkV1iOuba4Ox literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/botania/textures/items/lavaPendantGem.png b/src/main/resources/assets/botania/textures/items/lavaPendantGem.png new file mode 100644 index 0000000000000000000000000000000000000000..629b3e68a5f2ff37988208dd5607e22c06dd8ba0 GIT binary patch literal 3047 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 U)MGY!i}C=Vr)8|!0C9NzUl);SfdBvi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/botania/textures/model/travelBelt.png b/src/main/resources/assets/botania/textures/model/travelBelt.png new file mode 100644 index 0000000000000000000000000000000000000000..450452e25e1443e317cdce0d0e4b342050475b99 GIT binary patch literal 3463 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 literal 0 HcmV?d00001