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.handler.pollution.PollutionHandler.PollutionType;
|
||||||
import com.hbm.items.armor.IArmorDisableModel;
|
import com.hbm.items.armor.IArmorDisableModel;
|
||||||
import com.hbm.items.armor.IArmorDisableModel.EnumPlayerPart;
|
import com.hbm.items.armor.IArmorDisableModel.EnumPlayerPart;
|
||||||
import com.hbm.items.weapon.sedna.ItemGunBase;
|
|
||||||
import com.hbm.packet.PermaSyncHandler;
|
import com.hbm.packet.PermaSyncHandler;
|
||||||
import com.hbm.render.item.weapon.sedna.ItemRenderWeaponBase;
|
import com.hbm.render.item.weapon.sedna.ItemRenderWeaponBase;
|
||||||
import com.hbm.render.model.ModelMan;
|
import com.hbm.render.model.ModelMan;
|
||||||
@ -418,16 +417,14 @@ public class ModEventHandlerRenderer {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onRenderHand(RenderHandEvent event) {
|
public void onRenderHand(RenderHandEvent event) {
|
||||||
|
|
||||||
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
|
//can't use plaxer.getHeldItem() here because the item rendering persists for a few frames after hitting the switch key
|
||||||
ItemStack held = player.getHeldItem();
|
ItemStack toRender = Minecraft.getMinecraft().entityRenderer.itemRenderer.itemToRender;
|
||||||
|
|
||||||
if(held != null) {
|
if(toRender != null) {
|
||||||
IItemRenderer renderer = MinecraftForgeClient.getItemRenderer(held, ItemRenderType.EQUIPPED_FIRST_PERSON);
|
IItemRenderer renderer = MinecraftForgeClient.getItemRenderer(toRender, ItemRenderType.EQUIPPED_FIRST_PERSON);
|
||||||
|
|
||||||
if(renderer instanceof ItemRenderWeaponBase) {
|
if(renderer instanceof ItemRenderWeaponBase) {
|
||||||
renderer.renderItem(ItemRenderType.FIRST_PERSON_MAP, held, null /*RenderBlocks*/, player);
|
((ItemRenderWeaponBase) renderer).setPerspectiveAndRender(toRender, event.partialTicks);
|
||||||
//Minecraft.getMinecraft().entityRenderer.itemRenderer.renderItemInFirstPerson(event.partialTicks);
|
|
||||||
|
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,14 +1,28 @@
|
|||||||
package com.hbm.render.item.weapon.sedna;
|
package com.hbm.render.item.weapon.sedna;
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
import org.lwjgl.opengl.GL12;
|
||||||
import org.lwjgl.util.glu.Project;
|
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.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.item.ItemStack;
|
||||||
|
import net.minecraft.util.MathHelper;
|
||||||
import net.minecraftforge.client.IItemRenderer;
|
import net.minecraftforge.client.IItemRenderer;
|
||||||
|
|
||||||
public abstract class ItemRenderWeaponBase implements IItemRenderer {
|
public abstract class ItemRenderWeaponBase implements IItemRenderer {
|
||||||
|
|
||||||
|
public static float interp;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
|
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
|
||||||
return type != ItemRenderType.FIRST_PERSON_MAP;
|
return type != ItemRenderType.FIRST_PERSON_MAP;
|
||||||
@ -32,48 +46,137 @@ public abstract class ItemRenderWeaponBase implements IItemRenderer {
|
|||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setupFirstPerson(ItemStack stack) {
|
public void setPerspectiveAndRender(ItemStack stack, float interp) {
|
||||||
GL11.glMatrixMode(GL11.GL_PROJECTION);
|
|
||||||
GL11.glLoadIdentity();
|
|
||||||
float f1 = 0.07F;
|
|
||||||
Minecraft mc = Minecraft.getMinecraft();
|
|
||||||
float farPlaneDistance = mc.gameSettings.renderDistanceChunks * 16;
|
|
||||||
float interp = 0;
|
|
||||||
|
|
||||||
Project.gluPerspective(1, (float)mc.displayWidth / (float)mc.displayHeight, 0.05F, farPlaneDistance * 2.0F);
|
this.interp = interp;
|
||||||
|
|
||||||
|
Minecraft mc = Minecraft.getMinecraft();
|
||||||
|
EntityRenderer entityRenderer = mc.entityRenderer;
|
||||||
|
float farPlaneDistance = mc.gameSettings.renderDistanceChunks * 16;
|
||||||
|
|
||||||
GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
|
||||||
GL11.glLoadIdentity();
|
GL11.glMatrixMode(GL11.GL_PROJECTION);
|
||||||
|
GL11.glLoadIdentity();
|
||||||
|
|
||||||
GL11.glPushMatrix();
|
Project.gluPerspective(this.getFOVModifier(interp, false), (float) mc.displayWidth / (float) mc.displayHeight, 0.05F, farPlaneDistance * 2.0F);
|
||||||
//this.hurtCameraEffect(interp);
|
|
||||||
|
|
||||||
if (mc.gameSettings.thirdPersonView == 0 && !mc.renderViewEntity.isPlayerSleeping() && !mc.gameSettings.hideGUI && !mc.playerController.enableEverythingIsScrewedUpMode())
|
GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
||||||
{
|
GL11.glLoadIdentity();
|
||||||
//this.enableLightmap((double)p_78476_1_);
|
|
||||||
this.renderItem(ItemRenderType.EQUIPPED_FIRST_PERSON, stack, null, mc.thePlayer);
|
|
||||||
//this.disableLightmap((double)p_78476_1_);
|
|
||||||
}
|
|
||||||
|
|
||||||
GL11.glPopMatrix();
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setupTransformsAndRender(ItemStack itemstack) {
|
||||||
|
Minecraft mc = Minecraft.getMinecraft();
|
||||||
|
EntityPlayer player = mc.thePlayer;
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
float f8;
|
||||||
|
float f13;
|
||||||
|
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
|
||||||
|
f13 = 0.8F;
|
||||||
|
|
||||||
|
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(90, 0, 1, 0);
|
||||||
//GL11.glRotated(40, -1, 0, 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.glScaled(1, 1, -1);
|
||||||
GL11.glTranslated(8, 8, 0);
|
GL11.glTranslated(8, 8, 0);
|
||||||
GL11.glRotated(225, 0, 0, 1);
|
GL11.glRotated(225, 0, 0, 1);
|
||||||
GL11.glRotated(90, 0, 1, 0);
|
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
|
# ChunkProviderServer
|
||||||
public net.minecraft.world.gen.ChunkProviderServer field_73248_b # chunksToUnload
|
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