initial commit

This commit is contained in:
Sen 2025-03-11 00:23:54 +01:00 committed by Sen
parent 3c9ee26b06
commit 22186c33b9
1458 changed files with 282792 additions and 0 deletions

View file

@ -0,0 +1,636 @@
package game.renderer;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import game.ExtMath;
import game.Game;
import game.WCF;
import game.block.Block;
import game.entity.npc.EntityNPC;
import game.entity.types.EntityLiving;
import game.item.Item;
import game.item.ItemAction;
import game.item.ItemStack;
import game.renderer.blockmodel.Transforms;
import game.renderer.entity.RenderItem;
import game.renderer.entity.RenderManager;
import game.renderer.entity.RenderNpc;
import game.renderer.texture.TextureAtlasSprite;
import game.renderer.texture.TextureMap;
import game.world.BlockPos;
import game.world.State;
import game.world.Vec3;
public class ItemRenderer
{
private static final FloatBuffer BUFFER = ByteBuffer.allocateDirect(16 << 2).order(ByteOrder.nativeOrder()).asFloatBuffer();
private static final Vec3 LIGHT0_POS = (new Vec3(0.20000000298023224D, 1.0D, -0.699999988079071D)).normalize();
private static final Vec3 LIGHT1_POS = (new Vec3(-0.20000000298023224D, 1.0D, 0.699999988079071D)).normalize();
/** A reference to the Game object. */
private final Game gm;
private ItemStack itemToRender;
/**
* How far the current item has been equipped (0 disequipped and 1 fully up)
*/
private float equippedProgress;
private float prevEquippedProgress;
private final RenderManager renderManager;
private final RenderItem itemRenderer;
/** The index of the currently held item (0-8, or -1 if not yet updated) */
private int equippedItemSlot = -1;
private static FloatBuffer setColorBuffer(float r, float g, float b, float a)
{
BUFFER.clear();
BUFFER.put(r).put(g).put(b).put(a);
BUFFER.flip();
return BUFFER;
}
public static void enableGUIStandardItemLighting()
{
WCF.glPushMatrix();
WCF.glRotatef(-30.0F, 0.0F, 1.0F, 0.0F);
WCF.glRotatef(165.0F, 1.0F, 0.0F, 0.0F);
enableStandardItemLighting();
WCF.glPopMatrix();
}
public static void enableStandardItemLighting()
{
GlState.enableLighting();
GlState.enableLight(0);
GlState.enableLight(1);
GlState.enableColorMaterial();
GlState.colorMaterial(WCF.GL_FRONT_AND_BACK, WCF.GL_AMBIENT_AND_DIFFUSE);
float f = 0.4F;
float f1 = 0.6F;
float f2 = 0.0F;
WCF.glLight(WCF.GL_LIGHT0, WCF.GL_POSITION, setColorBuffer(
(float)LIGHT0_POS.xCoord, (float)LIGHT0_POS.yCoord, (float)LIGHT0_POS.zCoord, 0.0f));
WCF.glLight(WCF.GL_LIGHT0, WCF.GL_DIFFUSE, setColorBuffer(f1, f1, f1, 1.0F));
WCF.glLight(WCF.GL_LIGHT0, WCF.GL_AMBIENT, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F));
WCF.glLight(WCF.GL_LIGHT0, WCF.GL_SPECULAR, setColorBuffer(f2, f2, f2, 1.0F));
WCF.glLight(WCF.GL_LIGHT1, WCF.GL_POSITION, setColorBuffer(
(float)LIGHT1_POS.xCoord, (float)LIGHT1_POS.yCoord, (float)LIGHT1_POS.zCoord, 0.0f));
WCF.glLight(WCF.GL_LIGHT1, WCF.GL_DIFFUSE, setColorBuffer(f1, f1, f1, 1.0F));
WCF.glLight(WCF.GL_LIGHT1, WCF.GL_AMBIENT, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F));
WCF.glLight(WCF.GL_LIGHT1, WCF.GL_SPECULAR, setColorBuffer(f2, f2, f2, 1.0F));
GlState.shadeModel(7424);
WCF.glLightModel(WCF.GL_LIGHT_MODEL_AMBIENT, setColorBuffer(f, f, f, 1.0F));
}
public static void disableStandardItemLighting()
{
GlState.disableLighting();
GlState.disableLight(0);
GlState.disableLight(1);
GlState.disableColorMaterial();
}
public ItemRenderer(Game gmIn)
{
this.gm = gmIn;
this.renderManager = gmIn.getRenderManager();
this.itemRenderer = gmIn.getRenderItem();
}
public void renderItem(EntityLiving entityIn, ItemStack heldStack, Transforms.Camera transform)
{
if (heldStack != null)
{
Item item = heldStack.getItem();
if(item.isFirstPerson() || transform != Transforms.Camera.FIRST_PERSON) {
Block block = item.getBlock();
WCF.glPushMatrix();
if (this.itemRenderer.shouldRenderItemIn3D(heldStack))
{
WCF.glScalef(2.0F, 2.0F, 2.0F);
if (this.isBlockTranslucent(block))
{
GlState.depthMask(false);
}
}
this.itemRenderer.renderItemModelForEntity(heldStack, entityIn, transform);
if (this.isBlockTranslucent(block))
{
GlState.depthMask(true);
}
WCF.glPopMatrix();
}
}
}
/**
* Returns true if given block is translucent
*/
private boolean isBlockTranslucent(Block blockIn)
{
return blockIn != null && blockIn.getBlockLayer() == BlockLayer.TRANSLUCENT;
}
/**
* Rotate the render around X and Y
*
* @param angleY The angle for the rotation arround Y
*/
private void rotateArroundXAndY(float angle, float angleY)
{
WCF.glPushMatrix();
WCF.glRotatef(angle, 1.0F, 0.0F, 0.0F);
WCF.glRotatef(angleY, 0.0F, 1.0F, 0.0F);
ItemRenderer.enableStandardItemLighting();
WCF.glPopMatrix();
}
/**
* Set the OpenGL LightMapTextureCoords based on the EntityNPCClient
*/
private void setLightMapFromPlayer(EntityNPC clientPlayer)
{
int i = this.gm.theWorld.getCombinedLight(new BlockPos(clientPlayer.posX, clientPlayer.posY + (double)clientPlayer.getEyeHeight(), clientPlayer.posZ), 0);
float f = (float)(i & 65535);
float f1 = (float)(i >> 16);
WCF.glMultiTexCoord2f(WCF.GL_TEXTURE1, f, f1);
}
/**
* Rotate the render according to the player's yaw and pitch
*/
private void rotateWithPlayerRotations(EntityNPC entityplayerspIn, float partialTicks)
{
float f = entityplayerspIn.prevRenderArmPitch + (entityplayerspIn.renderArmPitch - entityplayerspIn.prevRenderArmPitch) * partialTicks;
float f1 = entityplayerspIn.prevRenderArmYaw + (entityplayerspIn.renderArmYaw - entityplayerspIn.prevRenderArmYaw) * partialTicks;
WCF.glRotatef((entityplayerspIn.rotPitch - f) * 0.1F, 1.0F, 0.0F, 0.0F);
WCF.glRotatef((entityplayerspIn.rotYaw - f1) * 0.1F, 0.0F, 1.0F, 0.0F);
}
/**
* Return the angle to render the Map
*
* @param pitch The player's pitch
*/
private float getMapAngleFromPitch(float pitch)
{
float f = 1.0F - pitch / 45.0F + 0.1F;
f = ExtMath.clampf(f, 0.0F, 1.0F);
f = -ExtMath.cos(f * (float)Math.PI) * 0.5F + 0.5F;
return f;
}
// private void renderRightArm(RenderPlayer renderPlayerIn)
// {
// SKC.glPushMatrix();
// SKC.glRotatef(54.0F, 0.0F, 1.0F, 0.0F);
// SKC.glRotatef(64.0F, 1.0F, 0.0F, 0.0F);
// SKC.glRotatef(-62.0F, 0.0F, 0.0F, 1.0F);
// SKC.glTranslatef(0.25F, -0.85F, 0.75F);
// renderPlayerIn.renderRightArm(this.gm.thePlayer);
// SKC.glPopMatrix();
// }
//
// private void renderLeftArm(RenderPlayer renderPlayerIn)
// {
// SKC.glPushMatrix();
// SKC.glRotatef(92.0F, 0.0F, 1.0F, 0.0F);
// SKC.glRotatef(45.0F, 1.0F, 0.0F, 0.0F);
// SKC.glRotatef(41.0F, 0.0F, 0.0F, 1.0F);
// SKC.glTranslatef(-0.3F, -1.1F, 0.45F);
// renderPlayerIn.renderLeftArm(this.gm.thePlayer);
// SKC.glPopMatrix();
// }
// private void renderPlayerArms(EntityNPCClient clientPlayer)
// {
// this.gm.getTextureManager().bindTexture(clientPlayer.getLocationSkin());
// Render<EntityNPCClient> render = this.renderManager.<EntityNPCClient>getEntityRenderObject(this.gm.thePlayer);
// RenderPlayer renderplayer = (RenderPlayer)render;
//
// if (!clientPlayer.isInvisible())
// {
// GlState.disableCull();
// this.renderRightArm(renderplayer);
// this.renderLeftArm(renderplayer);
// GlState.enableCull();
// }
// }
// private void renderItemMap(EntityNPCClient clientPlayer, float pitch, float equipmentProgress, float swingProgress)
// {
// float f = -0.4F * MathHelper.sin(MathHelper.sqrt_float(swingProgress) * (float)Math.PI);
// float f1 = 0.2F * MathHelper.sin(MathHelper.sqrt_float(swingProgress) * (float)Math.PI * 2.0F);
// float f2 = -0.2F * MathHelper.sin(swingProgress * (float)Math.PI);
// SKC.glTranslatef(f, f1, f2);
// float f3 = this.getMapAngleFromPitch(pitch);
// SKC.glTranslatef(0.0F, 0.04F, -0.72F);
// SKC.glTranslatef(0.0F, equipmentProgress * -1.2F, 0.0F);
// SKC.glTranslatef(0.0F, f3 * -0.5F, 0.0F);
// SKC.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
// SKC.glRotatef(f3 * -85.0F, 0.0F, 0.0F, 1.0F);
// SKC.glRotatef(0.0F, 1.0F, 0.0F, 0.0F);
// this.renderPlayerArms(clientPlayer);
// float f4 = MathHelper.sin(swingProgress * swingProgress * (float)Math.PI);
// float f5 = MathHelper.sin(MathHelper.sqrt_float(swingProgress) * (float)Math.PI);
// SKC.glRotatef(f4 * -20.0F, 0.0F, 1.0F, 0.0F);
// SKC.glRotatef(f5 * -20.0F, 0.0F, 0.0F, 1.0F);
// SKC.glRotatef(f5 * -80.0F, 1.0F, 0.0F, 0.0F);
// SKC.glScalef(0.38F, 0.38F, 0.38F);
// SKC.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
// SKC.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
// SKC.glRotatef(0.0F, 1.0F, 0.0F, 0.0F);
// SKC.glTranslatef(-1.0F, -1.0F, 0.0F);
// SKC.glScalef(0.015625F, 0.015625F, 0.015625F);
// this.gm.getTextureManager().bindTexture(RES_MAP_BACKGROUND);
//// Tessellator tessellator = Tessellator.getInstance();
// RenderBuffer worldrenderer = Tessellator.getBuffer();
// SKC.glNormal3f(0.0F, 0.0F, -1.0F);
// worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
// worldrenderer.pos(-7.0D, 135.0D, 0.0D).tex(0.0D, 1.0D).endVertex();
// worldrenderer.pos(135.0D, 135.0D, 0.0D).tex(1.0D, 1.0D).endVertex();
// worldrenderer.pos(135.0D, -7.0D, 0.0D).tex(1.0D, 0.0D).endVertex();
// worldrenderer.pos(-7.0D, -7.0D, 0.0D).tex(0.0D, 0.0D).endVertex();
// Tessellator.draw();
// MapData mapdata = Items.filled_map.getMapData(this.itemToRender, this.gm.theWorld);
//
// if (mapdata != null)
// {
// this.gm.entityRenderer.getMapItemRenderer().renderMap(mapdata, false);
// }
// }
/**
* Render the player's arm
*
* @param equipProgress The progress of equiping the item
* @param swingProgress The swing movement progression
*/
private void renderPlayerArm(EntityNPC clientPlayer, float equipProgress, float swingProgress)
{
float f = -0.3F * ExtMath.sin(ExtMath.sqrtf(swingProgress) * (float)Math.PI);
float f1 = 0.4F * ExtMath.sin(ExtMath.sqrtf(swingProgress) * (float)Math.PI * 2.0F);
float f2 = -0.4F * ExtMath.sin(swingProgress * (float)Math.PI);
WCF.glTranslatef(f, f1, f2);
WCF.glTranslatef(0.64000005F, -0.6F, -0.71999997F);
WCF.glTranslatef(0.0F, equipProgress * -0.6F, 0.0F);
WCF.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
float f3 = ExtMath.sin(swingProgress * swingProgress * (float)Math.PI);
float f4 = ExtMath.sin(ExtMath.sqrtf(swingProgress) * (float)Math.PI);
WCF.glRotatef(f4 * 70.0F, 0.0F, 1.0F, 0.0F);
WCF.glRotatef(f3 * -20.0F, 0.0F, 0.0F, 1.0F);
this.gm.getTextureManager().bindTexture(clientPlayer.getLocationSkin());
WCF.glTranslatef(-1.0F, 3.6F, 3.5F);
WCF.glRotatef(120.0F, 0.0F, 0.0F, 1.0F);
WCF.glRotatef(200.0F, 1.0F, 0.0F, 0.0F);
WCF.glRotatef(-135.0F, 0.0F, 1.0F, 0.0F);
WCF.glScalef(1.0F, 1.0F, 1.0F);
WCF.glTranslatef(5.6F, 0.0F, 0.0F);
RenderNpc render = this.renderManager.getRenderObject(this.gm.thePlayer.getModel());
GlState.disableCull();
render.renderPlayerArm(this.gm.thePlayer);
GlState.enableCull();
}
/**
* Rotate and translate render to show item consumption
*
* @param swingProgress The swing movement progress
*/
private void doItemUsedTransformations(float swingProgress)
{
float f = -0.4F * ExtMath.sin(ExtMath.sqrtf(swingProgress) * (float)Math.PI);
float f1 = 0.2F * ExtMath.sin(ExtMath.sqrtf(swingProgress) * (float)Math.PI * 2.0F);
float f2 = -0.2F * ExtMath.sin(swingProgress * (float)Math.PI);
WCF.glTranslatef(f, f1, f2);
}
// /**
// * Perform the drinking animation movement
// *
// * @param partialTicks Partials ticks
// */
// private void performDrinking(EntityNPCSP clientPlayer, float partialTicks)
// {
// float f = (float)clientPlayer.getItemInUseCount() - partialTicks + 1.0F;
// float f1 = f / (float)this.itemToRender.getMaxItemUseDuration();
// float f2 = ExtMath.absf(ExtMath.cos(f / 4.0F * (float)Math.PI) * 0.1F);
//
// if (f1 >= 0.8F)
// {
// f2 = 0.0F;
// }
//
// SKC.glTranslatef(0.0F, f2, 0.0F);
// float f3 = 1.0F - (float)Math.pow((double)f1, 27.0D);
// SKC.glTranslatef(f3 * 0.6F, f3 * -0.5F, f3 * 0.0F);
// SKC.glRotatef(f3 * 90.0F, 0.0F, 1.0F, 0.0F);
// SKC.glRotatef(f3 * 10.0F, 1.0F, 0.0F, 0.0F);
// SKC.glRotatef(f3 * 30.0F, 0.0F, 0.0F, 1.0F);
// }
/**
* Performs transformations prior to the rendering of a held item in first person.
*/
private void transformFirstPersonItem(float equipProgress, float swingProgress)
{
WCF.glTranslatef(0.56F, -0.52F, -0.71999997F);
WCF.glTranslatef(0.0F, equipProgress * -0.6F, 0.0F);
WCF.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
float f = ExtMath.sin(swingProgress * swingProgress * (float)Math.PI);
float f1 = ExtMath.sin(ExtMath.sqrtf(swingProgress) * (float)Math.PI);
WCF.glRotatef(f * -20.0F, 0.0F, 1.0F, 0.0F);
WCF.glRotatef(f1 * -20.0F, 0.0F, 0.0F, 1.0F);
WCF.glRotatef(f1 * -80.0F, 1.0F, 0.0F, 0.0F);
WCF.glScalef(0.4F, 0.4F, 0.4F);
}
/**
* Translate and rotate the render to look like holding a bow
*
* @param partialTicks Partial ticks
*/
private void doBowTransformations(float partialTicks, EntityNPC clientPlayer)
{
WCF.glRotatef(-18.0F, 0.0F, 0.0F, 1.0F);
WCF.glRotatef(-12.0F, 0.0F, 1.0F, 0.0F);
WCF.glRotatef(-8.0F, 1.0F, 0.0F, 0.0F);
WCF.glTranslatef(-0.9F, 0.2F, 0.0F);
float f = (float)this.itemToRender.getMaxItemUseDuration() - ((float)clientPlayer.getItemInUseCount() - partialTicks + 1.0F);
float f1 = f / 20.0F;
f1 = (f1 * f1 + f1 * 2.0F) / 3.0F;
if (f1 > 1.0F)
{
f1 = 1.0F;
}
if (f1 > 0.1F)
{
float f2 = ExtMath.sin((f - 0.1F) * 1.3F);
float f3 = f1 - 0.1F;
float f4 = f2 * f3;
WCF.glTranslatef(f4 * 0.0F, f4 * 0.01F, f4 * 0.0F);
}
WCF.glTranslatef(f1 * 0.0F, f1 * 0.0F, f1 * 0.1F);
WCF.glScalef(1.0F, 1.0F, 1.0F + f1 * 0.2F);
}
/**
* Translate and rotate the render for holding a block
*/
private void doBlockTransformations()
{
WCF.glTranslatef(-0.5F, 0.2F, 0.0F);
WCF.glRotatef(30.0F, 0.0F, 1.0F, 0.0F);
WCF.glRotatef(-80.0F, 1.0F, 0.0F, 0.0F);
WCF.glRotatef(60.0F, 0.0F, 1.0F, 0.0F);
}
/**
* Renders the active item in the player's hand when in first person mode. Args: partialTickTime
*/
public void renderItemInFirstPerson(float partialTicks)
{
float f = 1.0F - (this.prevEquippedProgress + (this.equippedProgress - this.prevEquippedProgress) * partialTicks);
EntityNPC clientplayer = this.gm.thePlayer;
float f1 = clientplayer.getSwingProgress(partialTicks);
float f2 = clientplayer.prevPitch + (clientplayer.rotPitch - clientplayer.prevPitch) * partialTicks;
float f3 = clientplayer.prevYaw + (clientplayer.rotYaw - clientplayer.prevYaw) * partialTicks;
this.rotateArroundXAndY(f2, f3);
this.setLightMapFromPlayer(clientplayer);
this.rotateWithPlayerRotations(clientplayer, partialTicks);
GlState.enableRescaleNormal();
WCF.glPushMatrix();
if (this.itemToRender != null)
{
// if (this.itemToRender.getItem() == Items.filled_map)
// {
// this.renderItemMap(clientplayer, f2, f, f1);
// }
// else
if (clientplayer.getItemInUseCount() > 0)
{
ItemAction enumaction = this.itemToRender.getItemUseAction();
switch (enumaction)
{
case NONE:
this.transformFirstPersonItem(f, 0.0F);
break;
case EAT:
case DRINK:
// this.performDrinking(clientplayer, partialTicks);
// this.transformFirstPersonItem(f, 0.0F);
// break;
case BLOCK:
this.transformFirstPersonItem(f, 0.0F);
this.doBlockTransformations();
break;
case AIM:
this.transformFirstPersonItem(f, 0.0F);
this.doBowTransformations(partialTicks, clientplayer);
}
}
else
{
this.doItemUsedTransformations(f1);
this.transformFirstPersonItem(f, f1);
}
this.renderItem(clientplayer, this.itemToRender, Transforms.Camera.FIRST_PERSON);
}
else // if (!clientplayer.isInvisible())
{
this.renderPlayerArm(clientplayer, f, f1);
}
WCF.glPopMatrix();
GlState.disableRescaleNormal();
ItemRenderer.disableStandardItemLighting();
}
/**
* Renders all the overlays that are in first person mode. Args: partialTickTime
*/
public void renderOverlays(float partialTicks)
{
GlState.disableAlpha();
if (this.gm.thePlayer.isEntityInsideOpaqueBlock())
{
State iblockstate = this.gm.theWorld.getState(new BlockPos(this.gm.thePlayer));
EntityNPC entityplayer = this.gm.thePlayer;
for (int i = 0; i < 8; ++i)
{
double d0 = entityplayer.posX + (double)(((float)((i >> 0) % 2) - 0.5F) * entityplayer.width * 0.8F);
double d1 = entityplayer.posY + (double)(((float)((i >> 1) % 2) - 0.5F) * 0.1F);
double d2 = entityplayer.posZ + (double)(((float)((i >> 2) % 2) - 0.5F) * entityplayer.width * 0.8F);
BlockPos blockpos = new BlockPos(d0, d1 + (double)entityplayer.getEyeHeight(), d2);
State iblockstate1 = this.gm.theWorld.getState(blockpos);
if (iblockstate1.getBlock().isVisuallyOpaque())
{
iblockstate = iblockstate1;
}
}
if (iblockstate.getBlock().getRenderType() != -1)
{
this.renderBlockInHand(partialTicks, this.gm.getBlockRendererDispatcher().getModelManager().getTexture(iblockstate));
}
}
if(this.gm.thePlayer.isBurning()) {
this.renderFireInFirstPerson(partialTicks);
}
GlState.enableAlpha();
}
/**
* Render the block in the player's hand
*
* @param partialTicks Partial ticks
* @param atlas The TextureAtlasSprite to render
*/
private void renderBlockInHand(float partialTicks, TextureAtlasSprite atlas)
{
this.gm.getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
// Tessellator tessellator = Tessellator.getInstance();
RenderBuffer worldrenderer = Tessellator.getBuffer();
float f = 0.1F;
GlState.color(0.1F, 0.1F, 0.1F, 0.5F);
WCF.glPushMatrix();
float f1 = -1.0F;
float f2 = 1.0F;
float f3 = -1.0F;
float f4 = 1.0F;
float f5 = -0.5F;
float f6 = atlas.getMinU();
float f7 = atlas.getMaxU();
float f8 = atlas.getMinV();
float f9 = atlas.getMaxV();
worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
worldrenderer.pos(-1.0D, -1.0D, -0.5D).tex((double)f7, (double)f9).endVertex();
worldrenderer.pos(1.0D, -1.0D, -0.5D).tex((double)f6, (double)f9).endVertex();
worldrenderer.pos(1.0D, 1.0D, -0.5D).tex((double)f6, (double)f8).endVertex();
worldrenderer.pos(-1.0D, 1.0D, -0.5D).tex((double)f7, (double)f8).endVertex();
Tessellator.draw();
WCF.glPopMatrix();
GlState.color(1.0F, 1.0F, 1.0F, 1.0F);
}
/**
* Renders the fire on the screen for first person mode. Arg: partialTickTime
*
* @param partialTicks Partial ticks
*/
private void renderFireInFirstPerson(float partialTicks)
{
// Tessellator tessellator = Tessellator.getInstance();
RenderBuffer worldrenderer = Tessellator.getBuffer();
GlState.color(1.0F, 1.0F, 1.0F, 0.9F);
GlState.depthFunc(519);
GlState.depthMask(false);
GlState.enableBlend();
GlState.tryBlendFuncSeparate(770, 771, 1, 0);
float f = 1.0F;
for (int i = 0; i < 2; ++i)
{
WCF.glPushMatrix();
TextureAtlasSprite textureatlassprite = this.gm.getTextureMapBlocks().getAtlasSprite("blocks/fire_layer_1");
this.gm.getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
float f1 = textureatlassprite.getMinU();
float f2 = textureatlassprite.getMaxU();
float f3 = textureatlassprite.getMinV();
float f4 = textureatlassprite.getMaxV();
float f5 = (0.0F - f) / 2.0F;
float f6 = f5 + f;
float f7 = 0.0F - f / 2.0F;
float f8 = f7 + f;
float f9 = -0.5F;
WCF.glTranslatef((float)(-(i * 2 - 1)) * 0.24F, -0.3F, 0.0F);
WCF.glRotatef((float)(i * 2 - 1) * 10.0F, 0.0F, 1.0F, 0.0F);
worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX);
worldrenderer.pos((double)f5, (double)f7, (double)f9).tex((double)f2, (double)f4).endVertex();
worldrenderer.pos((double)f6, (double)f7, (double)f9).tex((double)f1, (double)f4).endVertex();
worldrenderer.pos((double)f6, (double)f8, (double)f9).tex((double)f1, (double)f3).endVertex();
worldrenderer.pos((double)f5, (double)f8, (double)f9).tex((double)f2, (double)f3).endVertex();
Tessellator.draw();
WCF.glPopMatrix();
}
GlState.color(1.0F, 1.0F, 1.0F, 1.0F);
GlState.disableBlend();
GlState.depthMask(true);
GlState.depthFunc(515);
}
public void updateEquippedItem()
{
this.prevEquippedProgress = this.equippedProgress;
EntityNPC entityplayer = this.gm.thePlayer;
ItemStack itemstack = entityplayer.inventory.getCurrentItem();
boolean flag = false;
if (this.itemToRender != null && itemstack != null)
{
if (!this.itemToRender.getIsItemStackEqual(itemstack))
{
flag = true;
}
}
else if (this.itemToRender == null && itemstack == null)
{
flag = false;
}
else
{
flag = true;
}
float f = 0.4F;
float f1 = flag ? 0.0F : 1.0F;
float f2 = ExtMath.clampf(f1 - this.equippedProgress, -f, f);
this.equippedProgress += f2;
if (this.equippedProgress < 0.1F)
{
this.itemToRender = itemstack;
this.equippedItemSlot = entityplayer.inventory.currentItem;
}
}
/**
* Resets equippedProgress
*/
public void resetEquippedProgress()
{
this.equippedProgress = 0.0F;
}
/**
* Resets equippedProgress
*/
public void resetEquippedProgress2()
{
this.equippedProgress = 0.0F;
}
}