mirror of
https://github.com/GTNewHorizons/Botania.git
synced 2026-11-12 16:27:37 +00:00
Baubles now render on the player. In this commit: Seperation of tiara render code to a framework, The Spectator and Tiny Planet render code
This commit is contained in:
1 parent
30a78a8ed7
commit
9e4f2df4ea
9 files changed
+355
-191
No files matched your search
@@ -0,0 +1,77 @@
|
||||
/**
|
||||
* This class was created by <Vazkii>. It's distributed as
|
||||
* part of the Botania Mod. Get the Source Code in github:
|
||||
* https://github.com/Vazkii/Botania
|
||||
*
|
||||
* Botania is Open Source and distributed under a
|
||||
* Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License
|
||||
* (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB)
|
||||
*
|
||||
* File Created @ [Dec 4, 2014, 3:28:43 PM (GMT)]
|
||||
*/
|
||||
package vazkii.botania.api.item;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.client.event.RenderPlayerEvent;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
/**
|
||||
* A Bauble Item that implements this will be have hooks to render something on
|
||||
* the player while its equipped.
|
||||
* This class doesn't extend IBauble to make the API not depend on the Baubles
|
||||
* API, but the item in question still needs to implement IBauble.
|
||||
*/
|
||||
@SideOnly(Side.CLIENT)
|
||||
public interface IBaubleRender {
|
||||
|
||||
/**
|
||||
* Called for the rendering of the bauble on the player. The player instance can be
|
||||
* acquired through the event parameter. Transformations are already applied for
|
||||
* the RenderType passed in. Make sure to check against the type parameter for
|
||||
* rendering.
|
||||
*/
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void onPlayerBaubleRender(ItemStack stack, RenderPlayerEvent event, RenderType type);
|
||||
|
||||
/**
|
||||
* A few helper methods for the render.
|
||||
*/
|
||||
public static class Helper {
|
||||
|
||||
public static void rotateIfSneaking(EntityPlayer player) {
|
||||
if(player.isSneaking())
|
||||
applySneakingRotation();
|
||||
}
|
||||
|
||||
public static void applySneakingRotation() {
|
||||
GL11.glRotatef(28.64789F, 1.0F, 0.0F, 0.0F);
|
||||
}
|
||||
|
||||
public static void translateToHeadLevel(EntityPlayer player) {
|
||||
GL11.glTranslated(0, -player.getDefaultEyeHeight() + (player.isSneaking() ? 0.0625 : 0), 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static enum RenderType {
|
||||
/**
|
||||
* Render Type for the player's body, translations apply on the player's rotation.
|
||||
* Sneaking is not handled and should be done during the render.
|
||||
* @see IBaubleRender.Helper
|
||||
*/
|
||||
BODY,
|
||||
|
||||
/**
|
||||
* Render Type for the player's body, translations apply on the player's head rotations.
|
||||
* Sneaking is not handled and should be done during the render.~
|
||||
* @see IBaubleRender.Helper
|
||||
*/
|
||||
HEAD;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
@API(owner = "Botania", apiVersion = "23", provides = "BotaniaAPI")
|
||||
@API(owner = "Botania", apiVersion = "24", provides = "BotaniaAPI")
|
||||
package vazkii.botania.api;
|
||||
import cpw.mods.fml.common.API;
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
/**
|
||||
* This class was created by <Vazkii>. It's distributed as
|
||||
* part of the Botania Mod. Get the Source Code in github:
|
||||
* https://github.com/Vazkii/Botania
|
||||
*
|
||||
* Botania is Open Source and distributed under a
|
||||
* Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License
|
||||
* (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB)
|
||||
*
|
||||
* File Created @ [Aug 27, 2014, 8:55:00 PM (GMT)]
|
||||
*/
|
||||
package vazkii.botania.client.core.handler;
|
||||
|
||||
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.TextureMap;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.event.RenderPlayerEvent;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import vazkii.botania.api.item.IBaubleRender;
|
||||
import vazkii.botania.api.item.IBaubleRender.RenderType;
|
||||
import vazkii.botania.client.core.helper.ShaderHelper;
|
||||
import vazkii.botania.client.lib.LibResources;
|
||||
import vazkii.botania.common.item.equipment.bauble.ItemFlightTiara;
|
||||
import baubles.common.container.InventoryBaubles;
|
||||
import baubles.common.lib.PlayerHandler;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
public final class BaubleRenderHandler {
|
||||
|
||||
@SubscribeEvent
|
||||
public void onPlayerRender(RenderPlayerEvent.Specials.Post event) {
|
||||
EntityPlayer player = event.entityPlayer;
|
||||
InventoryBaubles inv = PlayerHandler.getPlayerBaubles(player);
|
||||
|
||||
dispatchRenders(inv, event, RenderType.BODY);
|
||||
|
||||
float yaw = player.prevRotationYawHead + (player.rotationYawHead - player.prevRotationYawHead) * event.partialRenderTick;
|
||||
float yawOffset = player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * event.partialRenderTick;
|
||||
float pitch = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * event.partialRenderTick;
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glRotatef(yawOffset, 0, -1, 0);
|
||||
GL11.glRotatef(yaw - 270, 0, 1, 0);
|
||||
GL11.glRotatef(pitch, 0, 0, 1);
|
||||
dispatchRenders(inv, event, RenderType.HEAD);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
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)
|
||||
((IBaubleRender) stack.getItem()).onPlayerBaubleRender(stack, event, type);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,185 +0,0 @@
|
||||
/**
|
||||
* This class was created by <Vazkii>. It's distributed as
|
||||
* part of the Botania Mod. Get the Source Code in github:
|
||||
* https://github.com/Vazkii/Botania
|
||||
*
|
||||
* Botania is Open Source and distributed under a
|
||||
* Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License
|
||||
* (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB)
|
||||
*
|
||||
* File Created @ [Aug 27, 2014, 8:55:00 PM (GMT)]
|
||||
*/
|
||||
package vazkii.botania.client.core.handler;
|
||||
|
||||
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.TextureMap;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.event.RenderPlayerEvent;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import vazkii.botania.client.core.helper.ShaderHelper;
|
||||
import vazkii.botania.client.lib.LibResources;
|
||||
import vazkii.botania.common.item.equipment.bauble.ItemFlightTiara;
|
||||
import baubles.common.container.InventoryBaubles;
|
||||
import baubles.common.lib.PlayerHandler;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
public final class TiaraWingRenderHandler {
|
||||
|
||||
private static ResourceLocation textureHalo = new ResourceLocation(LibResources.MISC_HALO);
|
||||
|
||||
@SubscribeEvent
|
||||
public void onPlayerRender(RenderPlayerEvent.Specials.Post event) {
|
||||
InventoryBaubles inv = PlayerHandler.getPlayerBaubles(event.entityPlayer);
|
||||
if(inv.getStackInSlot(0) != null && inv.getStackInSlot(0).getItem() instanceof ItemFlightTiara) {
|
||||
int meta = inv.getStackInSlot(0).getItemDamage();
|
||||
if(meta > 0 && meta <= ItemFlightTiara.wingIcons.length) {
|
||||
IIcon icon = ItemFlightTiara.wingIcons[meta - 1];
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
|
||||
|
||||
boolean flying = event.entityPlayer.capabilities.isFlying;
|
||||
|
||||
float rz = 120F;
|
||||
float rx = 20F + (float) ((Math.sin((double) (event.entityPlayer.ticksExisted + event.partialRenderTick) * (flying ? 0.4F : 0.2F)) + 0.5F) * (flying ? 30F : 5F));
|
||||
float ry = 0F;
|
||||
float h = 0.2F;
|
||||
float i = 0.15F;
|
||||
float s = 1F;
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
GL11.glColor4f(1F, 1F, 1F, 1F);
|
||||
|
||||
switch(meta) {
|
||||
case 1 : { // Jibril
|
||||
h = 0.4F;
|
||||
break;
|
||||
}
|
||||
case 2 : { // Sephiroth
|
||||
s = 1.3F;
|
||||
break;
|
||||
}
|
||||
case 3 : { // Cirno
|
||||
h = -0.1F;
|
||||
rz = 0F;
|
||||
rx = 0F;
|
||||
i = 0.3F;
|
||||
break;
|
||||
}
|
||||
case 4 : { // Fire
|
||||
int light = 15728880;
|
||||
int lightmapX = light % 65536;
|
||||
int lightmapY = light / 65536;
|
||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightmapX, lightmapY);
|
||||
break;
|
||||
}
|
||||
case 5 : { // Kuroyukihime
|
||||
h = 0.8F;
|
||||
rz = 180F;
|
||||
ry = -rx;
|
||||
rx = 0F;
|
||||
s = 2F;
|
||||
break;
|
||||
}
|
||||
case 6 : { // Random Devil
|
||||
rz = 150F;
|
||||
break;
|
||||
}
|
||||
case 7 : { // Lyfa
|
||||
h = -0.1F;
|
||||
rz = 0F;
|
||||
ry = -rx;
|
||||
rx = 0F;
|
||||
GL11.glColor4f(1F, 1F, 1F, 0.5F + (float) Math.cos((double) (event.entityPlayer.ticksExisted + event.partialRenderTick) * 0.3F) * 0.2F);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
float f = icon.getMinU();
|
||||
float f1 = icon.getMaxU();
|
||||
float f2 = icon.getMinV();
|
||||
float f3 = icon.getMaxV();
|
||||
float sr = 1F / s;
|
||||
|
||||
if(event.entityPlayer.isSneaking())
|
||||
GL11.glRotatef(28.64789F, 1.0F, 0.0F, 0.0F);
|
||||
|
||||
GL11.glTranslatef(0F, h, i);
|
||||
|
||||
GL11.glRotatef(rz, 0F, 0F, 1F);
|
||||
GL11.glRotatef(rx, 1F, 0F, 0F);
|
||||
GL11.glRotatef(ry, 0F, 1F, 0F);
|
||||
GL11.glScalef(s, s, s);
|
||||
ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 1F / 32F);
|
||||
GL11.glScalef(sr, sr, sr);
|
||||
GL11.glRotatef(-ry, 0F, 1F, 0F);
|
||||
GL11.glRotatef(-rx, 1F, 0F, 0F);
|
||||
GL11.glRotatef(-rz, 0F, 0F, 1F);
|
||||
|
||||
if(meta != 2) { // Sephiroth
|
||||
GL11.glScalef(-1F, 1F, 1F);
|
||||
GL11.glRotatef(rz, 0F, 0F, 1F);
|
||||
GL11.glRotatef(rx, 1F, 0F, 0F);
|
||||
GL11.glRotatef(ry, 0F, 1F, 0F);
|
||||
GL11.glScalef(s, s, s);
|
||||
ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 1F / 32F);
|
||||
GL11.glScalef(sr, sr, sr);
|
||||
GL11.glRotatef(-ry, 1F, 0F, 0F);
|
||||
GL11.glRotatef(-rx, 1F, 0F, 0F);
|
||||
GL11.glRotatef(-rz, 0F, 0F, 1F);
|
||||
}
|
||||
|
||||
GL11.glColor3f(1F, 1F, 1F);
|
||||
GL11.glPopMatrix();
|
||||
|
||||
// Jibril's Halo
|
||||
if(meta == 1)
|
||||
renderHalo(event.entityPlayer, event.partialRenderTick);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void renderHalo(EntityPlayer player, float partialTicks) {
|
||||
float yaw = player.prevRotationYawHead + (player.rotationYawHead - player.prevRotationYawHead) * partialTicks;
|
||||
float yawOffset = player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialTicks;
|
||||
float pitch = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * partialTicks;
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glRotatef(yawOffset, 0, -1, 0);
|
||||
GL11.glRotatef(yaw - 270, 0, 1, 0);
|
||||
GL11.glRotatef(pitch, 0, 0, 1);
|
||||
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
GL11.glColor4f(1F, 1F, 1F, 1F);
|
||||
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(textureHalo);
|
||||
|
||||
GL11.glTranslated(0, -player.getDefaultEyeHeight() + (player.isSneaking() ? 0.0625 : 0), 0);
|
||||
GL11.glRotated(30, 1, 0, -1);
|
||||
GL11.glTranslatef(-0.1F, -0.5F, -0.1F);
|
||||
GL11.glRotatef(player.ticksExisted + partialTicks, 0, 1, 0);
|
||||
|
||||
Tessellator tes = Tessellator.instance;
|
||||
ShaderHelper.useShader(ShaderHelper.halo);
|
||||
tes.startDrawingQuads();
|
||||
tes.addVertexWithUV(-0.75, 0, -0.75, 0, 0);
|
||||
tes.addVertexWithUV(-0.75, 0, 0.75, 0, 1);
|
||||
tes.addVertexWithUV(0.75, 0, 0.75, 1, 1);
|
||||
tes.addVertexWithUV(0.75, 0, -0.75, 1, 0);
|
||||
tes.draw();
|
||||
ShaderHelper.releaseShader();
|
||||
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,7 @@ import vazkii.botania.client.core.handler.ClientTickHandler;
|
||||
import vazkii.botania.client.core.handler.DebugHandler;
|
||||
import vazkii.botania.client.core.handler.HUDHandler;
|
||||
import vazkii.botania.client.core.handler.LightningHandler;
|
||||
import vazkii.botania.client.core.handler.TiaraWingRenderHandler;
|
||||
import vazkii.botania.client.core.handler.BaubleRenderHandler;
|
||||
import vazkii.botania.client.core.handler.TooltipHandler;
|
||||
import vazkii.botania.client.core.helper.ShaderHelper;
|
||||
import vazkii.botania.client.fx.FXSparkle;
|
||||
@@ -123,7 +123,7 @@ public class ClientProxy extends CommonProxy {
|
||||
if(ConfigHandler.boundBlockWireframe)
|
||||
MinecraftForge.EVENT_BUS.register(new BoundTileRenderer());
|
||||
MinecraftForge.EVENT_BUS.register(new TooltipHandler());
|
||||
MinecraftForge.EVENT_BUS.register(new TiaraWingRenderHandler());
|
||||
MinecraftForge.EVENT_BUS.register(new BaubleRenderHandler());
|
||||
MinecraftForge.EVENT_BUS.register(new DebugHandler());
|
||||
|
||||
if(ConfigHandler.versionCheckEnabled)
|
||||
|
||||
@@ -14,18 +14,30 @@ package vazkii.botania.common.item.equipment.bauble;
|
||||
import java.util.ArrayList;
|
||||
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.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.StatCollector;
|
||||
import net.minecraftforge.client.event.RenderPlayerEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
||||
import vazkii.botania.api.item.IBaubleRender;
|
||||
import vazkii.botania.api.mana.IManaUsingItem;
|
||||
import vazkii.botania.api.mana.ManaItemHandler;
|
||||
import vazkii.botania.client.core.helper.IconHelper;
|
||||
import vazkii.botania.client.core.helper.ShaderHelper;
|
||||
import vazkii.botania.client.lib.LibResources;
|
||||
import vazkii.botania.common.Botania;
|
||||
import vazkii.botania.common.lib.LibItemNames;
|
||||
import baubles.api.BaubleType;
|
||||
@@ -36,8 +48,10 @@ import cpw.mods.fml.common.gameevent.PlayerEvent;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
public class ItemFlightTiara extends ItemBauble implements IManaUsingItem {
|
||||
public class ItemFlightTiara extends ItemBauble implements IManaUsingItem, IBaubleRender {
|
||||
|
||||
private static ResourceLocation textureHalo = new ResourceLocation(LibResources.MISC_HALO);
|
||||
|
||||
public static List<String> playersWithFlight = new ArrayList();
|
||||
private static final int COST = 35;
|
||||
|
||||
@@ -175,5 +189,141 @@ public class ItemFlightTiara extends ItemBauble implements IManaUsingItem {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void onPlayerBaubleRender(ItemStack stack, RenderPlayerEvent event, RenderType type) {
|
||||
int meta = stack.getItemDamage();
|
||||
if(type == RenderType.BODY) {
|
||||
if(meta > 0 && meta <= ItemFlightTiara.wingIcons.length) {
|
||||
IIcon icon = ItemFlightTiara.wingIcons[meta - 1];
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
|
||||
|
||||
boolean flying = event.entityPlayer.capabilities.isFlying;
|
||||
|
||||
float rz = 120F;
|
||||
float rx = 20F + (float) ((Math.sin((double) (event.entityPlayer.ticksExisted + event.partialRenderTick) * (flying ? 0.4F : 0.2F)) + 0.5F) * (flying ? 30F : 5F));
|
||||
float ry = 0F;
|
||||
float h = 0.2F;
|
||||
float i = 0.15F;
|
||||
float s = 1F;
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
GL11.glColor4f(1F, 1F, 1F, 1F);
|
||||
|
||||
switch(meta) {
|
||||
case 1 : { // Jibril
|
||||
h = 0.4F;
|
||||
break;
|
||||
}
|
||||
case 2 : { // Sephiroth
|
||||
s = 1.3F;
|
||||
break;
|
||||
}
|
||||
case 3 : { // Cirno
|
||||
h = -0.1F;
|
||||
rz = 0F;
|
||||
rx = 0F;
|
||||
i = 0.3F;
|
||||
break;
|
||||
}
|
||||
case 4 : { // Fire
|
||||
int light = 15728880;
|
||||
int lightmapX = light % 65536;
|
||||
int lightmapY = light / 65536;
|
||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightmapX, lightmapY);
|
||||
break;
|
||||
}
|
||||
case 5 : { // Kuroyukihime
|
||||
h = 0.8F;
|
||||
rz = 180F;
|
||||
ry = -rx;
|
||||
rx = 0F;
|
||||
s = 2F;
|
||||
break;
|
||||
}
|
||||
case 6 : { // Random Devil
|
||||
rz = 150F;
|
||||
break;
|
||||
}
|
||||
case 7 : { // Lyfa
|
||||
h = -0.1F;
|
||||
rz = 0F;
|
||||
ry = -rx;
|
||||
rx = 0F;
|
||||
GL11.glColor4f(1F, 1F, 1F, 0.5F + (float) Math.cos((double) (event.entityPlayer.ticksExisted + event.partialRenderTick) * 0.3F) * 0.2F);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
float f = icon.getMinU();
|
||||
float f1 = icon.getMaxU();
|
||||
float f2 = icon.getMinV();
|
||||
float f3 = icon.getMaxV();
|
||||
float sr = 1F / s;
|
||||
|
||||
Helper.rotateIfSneaking(event.entityPlayer);
|
||||
|
||||
GL11.glTranslatef(0F, h, i);
|
||||
|
||||
GL11.glRotatef(rz, 0F, 0F, 1F);
|
||||
GL11.glRotatef(rx, 1F, 0F, 0F);
|
||||
GL11.glRotatef(ry, 0F, 1F, 0F);
|
||||
GL11.glScalef(s, s, s);
|
||||
ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 1F / 32F);
|
||||
GL11.glScalef(sr, sr, sr);
|
||||
GL11.glRotatef(-ry, 0F, 1F, 0F);
|
||||
GL11.glRotatef(-rx, 1F, 0F, 0F);
|
||||
GL11.glRotatef(-rz, 0F, 0F, 1F);
|
||||
|
||||
if(meta != 2) { // Sephiroth
|
||||
GL11.glScalef(-1F, 1F, 1F);
|
||||
GL11.glRotatef(rz, 0F, 0F, 1F);
|
||||
GL11.glRotatef(rx, 1F, 0F, 0F);
|
||||
GL11.glRotatef(ry, 0F, 1F, 0F);
|
||||
GL11.glScalef(s, s, s);
|
||||
ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 1F / 32F);
|
||||
GL11.glScalef(sr, sr, sr);
|
||||
GL11.glRotatef(-ry, 1F, 0F, 0F);
|
||||
GL11.glRotatef(-rx, 1F, 0F, 0F);
|
||||
GL11.glRotatef(-rz, 0F, 0F, 1F);
|
||||
}
|
||||
|
||||
GL11.glColor3f(1F, 1F, 1F);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
} else if(meta == 1) // Jibril's Halo
|
||||
renderHalo(event.entityPlayer, event.partialRenderTick);
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private void renderHalo(EntityPlayer player, float partialTicks) {
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
GL11.glColor4f(1F, 1F, 1F, 1F);
|
||||
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(textureHalo);
|
||||
|
||||
Helper.translateToHeadLevel(player);
|
||||
GL11.glRotated(30, 1, 0, -1);
|
||||
GL11.glTranslatef(-0.1F, -0.5F, -0.1F);
|
||||
GL11.glRotatef(player.ticksExisted + partialTicks, 0, 1, 0);
|
||||
|
||||
Tessellator tes = Tessellator.instance;
|
||||
ShaderHelper.useShader(ShaderHelper.halo);
|
||||
tes.startDrawingQuads();
|
||||
tes.addVertexWithUV(-0.75, 0, -0.75, 0, 0);
|
||||
tes.addVertexWithUV(-0.75, 0, 0.75, 0, 1);
|
||||
tes.addVertexWithUV(0.75, 0, 0.75, 1, 1);
|
||||
tes.addVertexWithUV(0.75, 0, -0.75, 1, 0);
|
||||
tes.draw();
|
||||
ShaderHelper.releaseShader();
|
||||
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -14,6 +14,13 @@ package vazkii.botania.common.item.equipment.bauble;
|
||||
import java.util.ArrayList;
|
||||
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.IIconRegister;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
@@ -26,8 +33,12 @@ import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.village.MerchantRecipe;
|
||||
import net.minecraftforge.client.event.RenderPlayerEvent;
|
||||
import vazkii.botania.api.item.IBaubleRender;
|
||||
import vazkii.botania.client.core.helper.IconHelper;
|
||||
import vazkii.botania.common.Botania;
|
||||
import vazkii.botania.common.core.helper.ItemNBTHelper;
|
||||
import vazkii.botania.common.lib.LibItemNames;
|
||||
@@ -38,15 +49,24 @@ import baubles.common.lib.PlayerHandler;
|
||||
import baubles.common.network.PacketHandler;
|
||||
import baubles.common.network.PacketSyncBauble;
|
||||
import cpw.mods.fml.relauncher.ReflectionHelper;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
public class ItemItemFinder extends ItemBauble {
|
||||
public class ItemItemFinder extends ItemBauble implements IBaubleRender {
|
||||
|
||||
IIcon gemIcon;
|
||||
private static final String TAG_POSITIONS = "highlightPositions";
|
||||
|
||||
public ItemItemFinder() {
|
||||
super(LibItemNames.ITEM_FINDER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerIcons(IIconRegister par1IconRegister) {
|
||||
super.registerIcons(par1IconRegister);
|
||||
gemIcon = IconHelper.forItem(par1IconRegister, this, "Gem");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWornTick(ItemStack stack, EntityLivingBase player) {
|
||||
super.onWornTick(stack, player);
|
||||
@@ -194,4 +214,23 @@ public class ItemItemFinder extends ItemBauble {
|
||||
return BaubleType.AMULET;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void onPlayerBaubleRender(ItemStack stack, RenderPlayerEvent event, RenderType type) {
|
||||
if(type == RenderType.HEAD) {
|
||||
float f = gemIcon.getMinU();
|
||||
float f1 = gemIcon.getMaxU();
|
||||
float f2 = gemIcon.getMinV();
|
||||
float f3 = gemIcon.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.3F : -0.25F);
|
||||
GL11.glScalef(0.75F, 0.75F, 0.75F);
|
||||
ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, gemIcon.getIconWidth(), gemIcon.getIconHeight(), 1F / 16F);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,19 +13,27 @@ 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.RenderBlocks;
|
||||
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.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.client.event.RenderPlayerEvent;
|
||||
import vazkii.botania.api.internal.IManaBurst;
|
||||
import vazkii.botania.api.item.IBaubleRender;
|
||||
import vazkii.botania.api.mana.ITinyPlanetExcempt;
|
||||
import vazkii.botania.common.block.ModBlocks;
|
||||
import vazkii.botania.common.core.helper.Vector3;
|
||||
import vazkii.botania.common.lib.LibItemNames;
|
||||
import baubles.api.BaubleType;
|
||||
|
||||
public class ItemTinyPlanet extends ItemBauble {
|
||||
public class ItemTinyPlanet extends ItemBauble implements IBaubleRender {
|
||||
|
||||
public static final String TAG_ORBIT = "orbit";
|
||||
|
||||
@@ -94,4 +102,14 @@ public class ItemTinyPlanet extends ItemBauble {
|
||||
cmp.setInteger(TAG_ORBIT, time + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerBaubleRender(ItemStack stack, RenderPlayerEvent event, RenderType type) {
|
||||
if(type == RenderType.HEAD) {
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture);
|
||||
GL11.glTranslatef(0.25F, -0.5F, 0F);
|
||||
GL11.glScalef(0.5F, 0.5F, 0.5F);
|
||||
RenderBlocks.getInstance().renderBlockAsItem(ModBlocks.tinyPlanet, 0, 1F);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
Reference in new issue
Block a user