mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
this commit has a working faux first person item renderer
This commit is contained in:
parent
77cb82b502
commit
49d49d47e3
@ -8,7 +8,6 @@ import com.hbm.config.RadiationConfig;
|
||||
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
|
||||
import com.hbm.items.armor.IArmorDisableModel;
|
||||
import com.hbm.items.armor.IArmorDisableModel.EnumPlayerPart;
|
||||
import com.hbm.items.weapon.sedna.ItemGunBase;
|
||||
import com.hbm.packet.PermaSyncHandler;
|
||||
import com.hbm.render.item.weapon.sedna.ItemRenderWeaponBase;
|
||||
import com.hbm.render.model.ModelMan;
|
||||
@ -418,16 +417,14 @@ public class ModEventHandlerRenderer {
|
||||
@SubscribeEvent
|
||||
public void onRenderHand(RenderHandEvent event) {
|
||||
|
||||
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
|
||||
ItemStack held = player.getHeldItem();
|
||||
//can't use plaxer.getHeldItem() here because the item rendering persists for a few frames after hitting the switch key
|
||||
ItemStack toRender = Minecraft.getMinecraft().entityRenderer.itemRenderer.itemToRender;
|
||||
|
||||
if(held != null) {
|
||||
IItemRenderer renderer = MinecraftForgeClient.getItemRenderer(held, ItemRenderType.EQUIPPED_FIRST_PERSON);
|
||||
if(toRender != null) {
|
||||
IItemRenderer renderer = MinecraftForgeClient.getItemRenderer(toRender, ItemRenderType.EQUIPPED_FIRST_PERSON);
|
||||
|
||||
if(renderer instanceof ItemRenderWeaponBase) {
|
||||
renderer.renderItem(ItemRenderType.FIRST_PERSON_MAP, held, null /*RenderBlocks*/, player);
|
||||
//Minecraft.getMinecraft().entityRenderer.itemRenderer.renderItemInFirstPerson(event.partialTicks);
|
||||
|
||||
((ItemRenderWeaponBase) renderer).setPerspectiveAndRender(toRender, event.partialTicks);
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,13 +1,27 @@
|
||||
package com.hbm.render.item.weapon.sedna;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
import org.lwjgl.util.glu.Project;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityPlayerSP;
|
||||
import net.minecraft.client.renderer.ActiveRenderInfo;
|
||||
import net.minecraft.client.renderer.EntityRenderer;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.EnumAction;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraftforge.client.IItemRenderer;
|
||||
|
||||
public abstract class ItemRenderWeaponBase implements IItemRenderer {
|
||||
|
||||
public static float interp;
|
||||
|
||||
@Override
|
||||
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
|
||||
@ -31,49 +45,138 @@ public abstract class ItemRenderWeaponBase implements IItemRenderer {
|
||||
}
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
public void setPerspectiveAndRender(ItemStack stack, float interp) {
|
||||
|
||||
this.interp = interp;
|
||||
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
EntityRenderer entityRenderer = mc.entityRenderer;
|
||||
float farPlaneDistance = mc.gameSettings.renderDistanceChunks * 16;
|
||||
|
||||
GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
|
||||
GL11.glMatrixMode(GL11.GL_PROJECTION);
|
||||
GL11.glLoadIdentity();
|
||||
|
||||
Project.gluPerspective(this.getFOVModifier(interp, false), (float) mc.displayWidth / (float) mc.displayHeight, 0.05F, farPlaneDistance * 2.0F);
|
||||
|
||||
GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
||||
GL11.glLoadIdentity();
|
||||
|
||||
GL11.glPushMatrix();
|
||||
|
||||
if(mc.gameSettings.thirdPersonView == 0 && !mc.renderViewEntity.isPlayerSleeping() && !mc.gameSettings.hideGUI && !mc.playerController.enableEverythingIsScrewedUpMode()) {
|
||||
entityRenderer.enableLightmap(interp);
|
||||
this.setupTransformsAndRender(stack);
|
||||
entityRenderer.disableLightmap(interp);
|
||||
}
|
||||
|
||||
GL11.glPopMatrix();
|
||||
|
||||
if(mc.gameSettings.thirdPersonView == 0 && !mc.renderViewEntity.isPlayerSleeping()) {
|
||||
entityRenderer.itemRenderer.renderOverlays(interp);
|
||||
}
|
||||
}
|
||||
|
||||
private float getFOVModifier(float interp, boolean useFOVSetting) {
|
||||
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
EntityLivingBase entityplayer = (EntityLivingBase) mc.renderViewEntity;
|
||||
float fov = 70.0F;
|
||||
|
||||
if(useFOVSetting) fov = mc.gameSettings.fovSetting;
|
||||
|
||||
if(entityplayer.getHealth() <= 0.0F) {
|
||||
float f2 = (float) entityplayer.deathTime + interp;
|
||||
fov /= (1.0F - 500.0F / (f2 + 500.0F)) * 2.0F + 1.0F;
|
||||
}
|
||||
|
||||
Block block = ActiveRenderInfo.getBlockAtEntityViewpoint(mc.theWorld, entityplayer, interp);
|
||||
if(block.getMaterial() == Material.water) fov = fov * 60.0F / 70.0F;
|
||||
|
||||
return fov;
|
||||
}
|
||||
|
||||
public void setupFirstPerson(ItemStack stack) {
|
||||
GL11.glMatrixMode(GL11.GL_PROJECTION);
|
||||
GL11.glLoadIdentity();
|
||||
float f1 = 0.07F;
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
float farPlaneDistance = mc.gameSettings.renderDistanceChunks * 16;
|
||||
float interp = 0;
|
||||
protected void setupTransformsAndRender(ItemStack itemstack) {
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
EntityPlayer player = mc.thePlayer;
|
||||
|
||||
Project.gluPerspective(1, (float)mc.displayWidth / (float)mc.displayHeight, 0.05F, farPlaneDistance * 2.0F);
|
||||
float pitch = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * interp;
|
||||
GL11.glPushMatrix();
|
||||
GL11.glRotatef(pitch, 1.0F, 0.0F, 0.0F);
|
||||
GL11.glRotatef(player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * interp, 0.0F, 1.0F, 0.0F);
|
||||
RenderHelper.enableStandardItemLighting();
|
||||
GL11.glPopMatrix();
|
||||
EntityPlayerSP entityplayersp = (EntityPlayerSP) player;
|
||||
float armPitch = entityplayersp.prevRenderArmPitch + (entityplayersp.renderArmPitch - entityplayersp.prevRenderArmPitch) * interp;
|
||||
float armYaw = entityplayersp.prevRenderArmYaw + (entityplayersp.renderArmYaw - entityplayersp.prevRenderArmYaw) * interp;
|
||||
GL11.glRotatef((player.rotationPitch - armPitch) * 0.1F, 1.0F, 0.0F, 0.0F);
|
||||
GL11.glRotatef((player.rotationYaw - armYaw) * 0.1F, 0.0F, 1.0F, 0.0F);
|
||||
|
||||
int i = mc.theWorld.getLightBrightnessForSkyBlocks(MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ), 0);
|
||||
int j = i % 65536;
|
||||
int k = i / 65536;
|
||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j / 1.0F, (float) k / 1.0F);
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
|
||||
GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
||||
GL11.glLoadIdentity();
|
||||
if(itemstack != null) {
|
||||
int l = itemstack.getItem().getColorFromItemStack(itemstack, 0);
|
||||
float r = (float) (l >> 16 & 255) / 255.0F;
|
||||
float g = (float) (l >> 8 & 255) / 255.0F;
|
||||
float b = (float) (l & 255) / 255.0F;
|
||||
GL11.glColor4f(r, g, b, 1.0F);
|
||||
}
|
||||
|
||||
GL11.glPushMatrix();
|
||||
//this.hurtCameraEffect(interp);
|
||||
float f8;
|
||||
float f13;
|
||||
|
||||
if (mc.gameSettings.thirdPersonView == 0 && !mc.renderViewEntity.isPlayerSleeping() && !mc.gameSettings.hideGUI && !mc.playerController.enableEverythingIsScrewedUpMode())
|
||||
{
|
||||
//this.enableLightmap((double)p_78476_1_);
|
||||
this.renderItem(ItemRenderType.EQUIPPED_FIRST_PERSON, stack, null, mc.thePlayer);
|
||||
//this.disableLightmap((double)p_78476_1_);
|
||||
}
|
||||
GL11.glPushMatrix();
|
||||
|
||||
f13 = 0.8F;
|
||||
|
||||
GL11.glPopMatrix();
|
||||
|
||||
float swing = player.getSwingProgress(interp);
|
||||
float swingZ = MathHelper.sin(swing * (float) Math.PI);
|
||||
float swingX = MathHelper.sin(MathHelper.sqrt_float(swing) * (float) Math.PI);
|
||||
GL11.glTranslatef(-swingX * 0.4F, MathHelper.sin(MathHelper.sqrt_float(swing) * (float) Math.PI * 2.0F) * 0.2F, -swingZ * 0.2F);
|
||||
|
||||
GL11.glTranslatef(0.7F * f13, -0.65F * f13 - (1.0F - 1/* raiseprogress */) * 0.6F, -0.9F * f13);
|
||||
GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
|
||||
float swingYaw = MathHelper.sin(swing * swing * (float) Math.PI);
|
||||
float swingPitchRoll = MathHelper.sin(MathHelper.sqrt_float(swing) * (float) Math.PI);
|
||||
GL11.glRotatef(-swingYaw * 20.0F, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glRotatef(-swingPitchRoll * 20.0F, 0.0F, 0.0F, 1.0F);
|
||||
GL11.glRotatef(-swingPitchRoll * 80.0F, 1.0F, 0.0F, 0.0F);
|
||||
|
||||
f8 = 0.4F;
|
||||
GL11.glScalef(f8, f8, f8);
|
||||
|
||||
this.renderItem(ItemRenderType.EQUIPPED_FIRST_PERSON, itemstack, null, player);
|
||||
|
||||
GL11.glPopMatrix();
|
||||
|
||||
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
}
|
||||
|
||||
protected void setupFirstPerson(ItemStack stack) {
|
||||
//GL11.glRotated(90, 0, 1, 0);
|
||||
//GL11.glRotated(40, -1, 0, 0);
|
||||
}
|
||||
|
||||
public void setupThirdPerson(ItemStack stack) {
|
||||
|
||||
protected void setupThirdPerson(ItemStack stack) {
|
||||
double scale = 0.125D;
|
||||
GL11.glScaled(scale, scale, scale);
|
||||
}
|
||||
|
||||
public void setupInv(ItemStack stack) {
|
||||
protected void setupInv(ItemStack stack) {
|
||||
GL11.glScaled(1, 1, -1);
|
||||
GL11.glTranslated(8, 8, 0);
|
||||
GL11.glRotated(225, 0, 0, 1);
|
||||
GL11.glRotated(90, 0, 1, 0);
|
||||
}
|
||||
|
||||
public void setupEntity(ItemStack stack) {
|
||||
protected void setupEntity(ItemStack stack) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -34,3 +34,6 @@ public net.minecraft.world.gen.ChunkProviderFlat field_82702_h # ha
|
||||
|
||||
# ChunkProviderServer
|
||||
public net.minecraft.world.gen.ChunkProviderServer field_73248_b # chunksToUnload
|
||||
|
||||
# ItemRenderer
|
||||
public net.minecraft.client.renderer.ItemRenderer.field_78453_b # itemToRender
|
||||
Loading…
x
Reference in New Issue
Block a user