Arm now renders over all layers.
This commit is contained in:
parent
724f09c130
commit
8d7d587e01
3 changed files with 120 additions and 10 deletions
|
@ -33,7 +33,6 @@ public class ClientEventHandler
|
||||||
{
|
{
|
||||||
currentPlayerTexture = ((AbstractClientPlayer) mc.thePlayer).getLocationSkin();
|
currentPlayerTexture = ((AbstractClientPlayer) mc.thePlayer).getLocationSkin();
|
||||||
|
|
||||||
// if(mc.thePlayer.isAirBorne)
|
|
||||||
ClientUtils.renderPlayerArmourInPOV(mc.thePlayer, event.partialTicks);
|
ClientUtils.renderPlayerArmourInPOV(mc.thePlayer, event.partialTicks);
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,27 @@
|
||||||
package WayofTime.alchemicalWizardry.client;
|
package WayofTime.alchemicalWizardry.client;
|
||||||
|
|
||||||
|
import static net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON;
|
||||||
|
import static net.minecraftforge.client.IItemRenderer.ItemRenderType.FIRST_PERSON_MAP;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.entity.EntityClientPlayerMP;
|
import net.minecraft.client.entity.EntityClientPlayerMP;
|
||||||
import net.minecraft.client.entity.EntityPlayerSP;
|
import net.minecraft.client.entity.EntityPlayerSP;
|
||||||
import net.minecraft.client.model.ModelRenderer;
|
import net.minecraft.client.model.ModelRenderer;
|
||||||
import net.minecraft.client.renderer.OpenGlHelper;
|
import net.minecraft.client.renderer.OpenGlHelper;
|
||||||
import net.minecraft.client.renderer.RenderHelper;
|
import net.minecraft.client.renderer.RenderHelper;
|
||||||
|
import net.minecraft.client.renderer.Tessellator;
|
||||||
import net.minecraft.client.renderer.entity.Render;
|
import net.minecraft.client.renderer.entity.Render;
|
||||||
import net.minecraft.client.renderer.entity.RenderManager;
|
import net.minecraft.client.renderer.entity.RenderManager;
|
||||||
import net.minecraft.client.renderer.entity.RenderPlayer;
|
import net.minecraft.client.renderer.entity.RenderPlayer;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.EnumAction;
|
import net.minecraft.item.EnumAction;
|
||||||
import net.minecraft.item.ItemCloth;
|
import net.minecraft.item.ItemCloth;
|
||||||
|
import net.minecraft.item.ItemMap;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.MathHelper;
|
import net.minecraft.util.MathHelper;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.world.storage.MapData;
|
||||||
|
import net.minecraftforge.client.IItemRenderer;
|
||||||
|
import net.minecraftforge.client.MinecraftForgeClient;
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
import org.lwjgl.opengl.GL12;
|
import org.lwjgl.opengl.GL12;
|
||||||
|
@ -22,8 +30,11 @@ public class ClientUtils
|
||||||
{
|
{
|
||||||
public static Minecraft mc = Minecraft.getMinecraft();
|
public static Minecraft mc = Minecraft.getMinecraft();
|
||||||
|
|
||||||
|
private static final ResourceLocation RES_MAP_BACKGROUND = new ResourceLocation("textures/map/map_background.png");
|
||||||
|
|
||||||
public static void renderPlayerArmourInPOV(EntityPlayer player, float partialTickTime)
|
public static void renderPlayerArmourInPOV(EntityPlayer player, float partialTickTime)
|
||||||
{
|
{
|
||||||
|
GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
|
||||||
float f1 = 1.0f;//this.prevEquippedProgress + (this.equippedProgress - this.prevEquippedProgress) * partialTickTime;
|
float f1 = 1.0f;//this.prevEquippedProgress + (this.equippedProgress - this.prevEquippedProgress) * partialTickTime;
|
||||||
EntityClientPlayerMP entityclientplayermp = mc.thePlayer;
|
EntityClientPlayerMP entityclientplayermp = mc.thePlayer;
|
||||||
float f2 = entityclientplayermp.prevRotationPitch + (entityclientplayermp.rotationPitch - entityclientplayermp.prevRotationPitch) * partialTickTime;
|
float f2 = entityclientplayermp.prevRotationPitch + (entityclientplayermp.rotationPitch - entityclientplayermp.prevRotationPitch) * partialTickTime;
|
||||||
|
@ -75,7 +86,92 @@ public class ClientUtils
|
||||||
RenderPlayer renderplayer;
|
RenderPlayer renderplayer;
|
||||||
|
|
||||||
|
|
||||||
if (itemstack != null)
|
if (itemstack != null && itemstack.getItem() instanceof ItemMap)
|
||||||
|
{
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
f13 = 0.8F;
|
||||||
|
f5 = entityclientplayermp.getSwingProgress(partialTickTime);
|
||||||
|
f6 = MathHelper.sin(f5 * (float)Math.PI);
|
||||||
|
f7 = MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI);
|
||||||
|
GL11.glTranslatef(-f7 * 0.4F, MathHelper.sin(MathHelper.sqrt_float(f5) * (float)Math.PI * 2.0F) * 0.2F, -f6 * 0.2F);
|
||||||
|
f5 = 1.0F - f2 / 45.0F + 0.1F;
|
||||||
|
|
||||||
|
if (f5 < 0.0F)
|
||||||
|
{
|
||||||
|
f5 = 0.0F;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (f5 > 1.0F)
|
||||||
|
{
|
||||||
|
f5 = 1.0F;
|
||||||
|
}
|
||||||
|
|
||||||
|
f5 = -MathHelper.cos(f5 * (float)Math.PI) * 0.5F + 0.5F;
|
||||||
|
GL11.glTranslatef(0.0F, 0.0F * f13 - (1.0F - f1) * 1.2F - f5 * 0.5F + 0.04F, -0.9F * f13);
|
||||||
|
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
|
||||||
|
GL11.glRotatef(f5 * -85.0F, 0.0F, 0.0F, 1.0F);
|
||||||
|
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
|
||||||
|
mc.getTextureManager().bindTexture(entityclientplayermp.getLocationSkin());
|
||||||
|
|
||||||
|
for (int i1 = 0; i1 < 2; ++i1)
|
||||||
|
{
|
||||||
|
int j1 = i1 * 2 - 1;
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
GL11.glTranslatef(-0.0F, -0.6F, 1.1F * (float)j1);
|
||||||
|
GL11.glRotatef((float)(-45 * j1), 1.0F, 0.0F, 0.0F);
|
||||||
|
GL11.glRotatef(-90.0F, 0.0F, 0.0F, 1.0F);
|
||||||
|
GL11.glRotatef(59.0F, 0.0F, 0.0F, 1.0F);
|
||||||
|
GL11.glRotatef((float)(-65 * j1), 0.0F, 1.0F, 0.0F);
|
||||||
|
render = RenderManager.instance.getEntityRenderObject(mc.thePlayer);
|
||||||
|
renderplayer = (RenderPlayer)render;
|
||||||
|
f10 = 1.0F;
|
||||||
|
GL11.glScalef(f10, f10, f10);
|
||||||
|
renderFirstPersonArm(renderplayer, mc.thePlayer);
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
|
f6 = entityclientplayermp.getSwingProgress(partialTickTime);
|
||||||
|
f7 = MathHelper.sin(f6 * f6 * (float)Math.PI);
|
||||||
|
f8 = MathHelper.sin(MathHelper.sqrt_float(f6) * (float)Math.PI);
|
||||||
|
GL11.glRotatef(-f7 * 20.0F, 0.0F, 1.0F, 0.0F);
|
||||||
|
GL11.glRotatef(-f8 * 20.0F, 0.0F, 0.0F, 1.0F);
|
||||||
|
GL11.glRotatef(-f8 * 80.0F, 1.0F, 0.0F, 0.0F);
|
||||||
|
f9 = 0.38F;
|
||||||
|
GL11.glScalef(f9, f9, f9);
|
||||||
|
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
|
||||||
|
GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
|
||||||
|
GL11.glTranslatef(-1.0F, -1.0F, 0.0F);
|
||||||
|
f10 = 0.015625F;
|
||||||
|
GL11.glScalef(f10, f10, f10);
|
||||||
|
mc.getTextureManager().bindTexture(RES_MAP_BACKGROUND);
|
||||||
|
Tessellator tessellator = Tessellator.instance;
|
||||||
|
GL11.glNormal3f(0.0F, 0.0F, -1.0F);
|
||||||
|
tessellator.startDrawingQuads();
|
||||||
|
byte b0 = 7;
|
||||||
|
tessellator.addVertexWithUV((double)(0 - b0), (double)(128 + b0), 0.0D, 0.0D, 1.0D);
|
||||||
|
tessellator.addVertexWithUV((double)(128 + b0), (double)(128 + b0), 0.0D, 1.0D, 1.0D);
|
||||||
|
tessellator.addVertexWithUV((double)(128 + b0), (double)(0 - b0), 0.0D, 1.0D, 0.0D);
|
||||||
|
tessellator.addVertexWithUV((double)(0 - b0), (double)(0 - b0), 0.0D, 0.0D, 0.0D);
|
||||||
|
tessellator.draw();
|
||||||
|
|
||||||
|
IItemRenderer custom = MinecraftForgeClient.getItemRenderer(itemstack, FIRST_PERSON_MAP);
|
||||||
|
MapData mapdata = ((ItemMap)itemstack.getItem()).getMapData(itemstack, mc.theWorld);
|
||||||
|
|
||||||
|
if (custom == null)
|
||||||
|
{
|
||||||
|
if (mapdata != null)
|
||||||
|
{
|
||||||
|
mc.entityRenderer.getMapItemRenderer().func_148250_a(mapdata, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
custom.renderItem(FIRST_PERSON_MAP, itemstack, mc.thePlayer, mc.getTextureManager(), mapdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
}
|
||||||
|
else if (itemstack != null)
|
||||||
{
|
{
|
||||||
GL11.glPushMatrix();
|
GL11.glPushMatrix();
|
||||||
f13 = 0.8F;
|
f13 = 0.8F;
|
||||||
|
@ -170,6 +266,24 @@ public class ClientUtils
|
||||||
GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
|
GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (itemstack.getItem().requiresMultipleRenderPasses())
|
||||||
|
{
|
||||||
|
RenderManager.instance.itemRenderer.renderItem(entityclientplayermp, itemstack, 0, EQUIPPED_FIRST_PERSON);
|
||||||
|
for (int x = 1; x < itemstack.getItem().getRenderPasses(itemstack.getItemDamage()); x++)
|
||||||
|
{
|
||||||
|
int k1 = itemstack.getItem().getColorFromItemStack(itemstack, x);
|
||||||
|
f10 = (float)(k1 >> 16 & 255) / 255.0F;
|
||||||
|
f11 = (float)(k1 >> 8 & 255) / 255.0F;
|
||||||
|
f12 = (float)(k1 & 255) / 255.0F;
|
||||||
|
GL11.glColor4f(1.0F * f10, 1.0F * f11, 1.0F * f12, 1.0F);
|
||||||
|
RenderManager.instance.itemRenderer.renderItem(entityclientplayermp, itemstack, x, EQUIPPED_FIRST_PERSON);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RenderManager.instance.itemRenderer.renderItem(entityclientplayermp, itemstack, 0, EQUIPPED_FIRST_PERSON);
|
||||||
|
}
|
||||||
|
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
}
|
}
|
||||||
else if (!entityclientplayermp.isInvisible())
|
else if (!entityclientplayermp.isInvisible())
|
||||||
|
@ -224,14 +338,11 @@ public class ClientUtils
|
||||||
renderer.modelBipedMain.bipedRightArm.render(0.0625F);
|
renderer.modelBipedMain.bipedRightArm.render(0.0625F);
|
||||||
|
|
||||||
GL11.glPushMatrix();
|
GL11.glPushMatrix();
|
||||||
// GL11.glTranslatef(-0.3f, -0.25f, 0);
|
|
||||||
mRenderer.rotateAngleX = renderer.modelBipedMain.bipedRightArm.rotateAngleX;
|
mRenderer.rotateAngleX = renderer.modelBipedMain.bipedRightArm.rotateAngleX;
|
||||||
mRenderer.rotateAngleY = renderer.modelBipedMain.bipedRightArm.rotateAngleY;
|
mRenderer.rotateAngleY = renderer.modelBipedMain.bipedRightArm.rotateAngleY;
|
||||||
mRenderer.rotateAngleZ = renderer.modelBipedMain.bipedRightArm.rotateAngleZ;
|
mRenderer.rotateAngleZ = renderer.modelBipedMain.bipedRightArm.rotateAngleZ;
|
||||||
mRenderer.render(0.0625F);
|
mRenderer.render(0.0625F);
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
// renderer.modelBipedMain.bipedRightArm.addChild(new POVArmourModelWrapper(renderer.modelBipedMain));
|
|
||||||
// renderer.modelBipedMain.bipedRightArm.render(0.0625F);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,10 +22,10 @@ public class POVArmourModelWrapper extends ModelRenderer
|
||||||
public POVArmourModelWrapper(ModelBase model)
|
public POVArmourModelWrapper(ModelBase model)
|
||||||
{
|
{
|
||||||
super(model);
|
super(model);
|
||||||
ItemStack plateStack = new ItemStack(ModItems.boundPlate);
|
ItemStack plateStack = new ItemStack(ModItems.boundPlateFire);
|
||||||
ModelBiped bipedModel = ((BoundArmour)ModItems.boundPlate).getArmorModel(Minecraft.getMinecraft().thePlayer, plateStack, 1);
|
ModelBiped bipedModel = ((BoundArmour)ModItems.boundPlateFire).getArmorModel(Minecraft.getMinecraft().thePlayer, plateStack, 1);
|
||||||
armModel = bipedModel.bipedRightArm;
|
armModel = bipedModel.bipedRightArm;
|
||||||
resource = new ResourceLocation(((BoundArmour)ModItems.boundPlate).getArmorTexture(plateStack, Minecraft.getMinecraft().thePlayer, 1, "POV"));
|
resource = new ResourceLocation(((BoundArmour)ModItems.boundPlateFire).getArmorTexture(plateStack, Minecraft.getMinecraft().thePlayer, 1, "POV"));
|
||||||
addBox(0, 0, 0, 0, 0, 0); //Adds in a blank box as it's required in certain cases such as rendering arrows in entities
|
addBox(0, 0, 0, 0, 0, 0); //Adds in a blank box as it's required in certain cases such as rendering arrows in entities
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue