From 8d7d587e01e6401fe641ea9d160fdf64656fe66c Mon Sep 17 00:00:00 2001 From: WayofTime Date: Sun, 19 Jul 2015 21:07:45 -0400 Subject: [PATCH] Arm now renders over all layers. --- .../client/ClientEventHandler.java | 1 - .../client/ClientUtils.java | 123 +++++++++++++++++- .../client/POVArmourModelWrapper.java | 6 +- 3 files changed, 120 insertions(+), 10 deletions(-) diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java b/src/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java index 231d573a..b99319df 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java +++ b/src/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java @@ -33,7 +33,6 @@ public class ClientEventHandler { currentPlayerTexture = ((AbstractClientPlayer) mc.thePlayer).getLocationSkin(); -// if(mc.thePlayer.isAirBorne) ClientUtils.renderPlayerArmourInPOV(mc.thePlayer, event.partialTicks); event.setCanceled(true); } diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/ClientUtils.java b/src/main/java/WayofTime/alchemicalWizardry/client/ClientUtils.java index 81a2aeb1..b7474db3 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/client/ClientUtils.java +++ b/src/main/java/WayofTime/alchemicalWizardry/client/ClientUtils.java @@ -1,19 +1,27 @@ 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.entity.EntityClientPlayerMP; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.OpenGlHelper; 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.RenderManager; import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.item.ItemCloth; +import net.minecraft.item.ItemMap; import net.minecraft.item.ItemStack; 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.GL12; @@ -22,8 +30,11 @@ public class ClientUtils { 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) - { + { + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); float f1 = 1.0f;//this.prevEquippedProgress + (this.equippedProgress - this.prevEquippedProgress) * partialTickTime; EntityClientPlayerMP entityclientplayermp = mc.thePlayer; float f2 = entityclientplayermp.prevRotationPitch + (entityclientplayermp.rotationPitch - entityclientplayermp.prevRotationPitch) * partialTickTime; @@ -75,7 +86,92 @@ public class ClientUtils 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(); f13 = 0.8F; @@ -170,6 +266,24 @@ public class ClientUtils 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(); } else if (!entityclientplayermp.isInvisible()) @@ -224,14 +338,11 @@ public class ClientUtils renderer.modelBipedMain.bipedRightArm.render(0.0625F); GL11.glPushMatrix(); -// GL11.glTranslatef(-0.3f, -0.25f, 0); mRenderer.rotateAngleX = renderer.modelBipedMain.bipedRightArm.rotateAngleX; mRenderer.rotateAngleY = renderer.modelBipedMain.bipedRightArm.rotateAngleY; mRenderer.rotateAngleZ = renderer.modelBipedMain.bipedRightArm.rotateAngleZ; mRenderer.render(0.0625F); GL11.glPopMatrix(); GL11.glPopMatrix(); -// renderer.modelBipedMain.bipedRightArm.addChild(new POVArmourModelWrapper(renderer.modelBipedMain)); -// renderer.modelBipedMain.bipedRightArm.render(0.0625F); - } + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/POVArmourModelWrapper.java b/src/main/java/WayofTime/alchemicalWizardry/client/POVArmourModelWrapper.java index cac139e7..1355fdac 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/client/POVArmourModelWrapper.java +++ b/src/main/java/WayofTime/alchemicalWizardry/client/POVArmourModelWrapper.java @@ -22,10 +22,10 @@ public class POVArmourModelWrapper extends ModelRenderer public POVArmourModelWrapper(ModelBase model) { super(model); - ItemStack plateStack = new ItemStack(ModItems.boundPlate); - ModelBiped bipedModel = ((BoundArmour)ModItems.boundPlate).getArmorModel(Minecraft.getMinecraft().thePlayer, plateStack, 1); + ItemStack plateStack = new ItemStack(ModItems.boundPlateFire); + ModelBiped bipedModel = ((BoundArmour)ModItems.boundPlateFire).getArmorModel(Minecraft.getMinecraft().thePlayer, plateStack, 1); 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 }