this commit has a working faux first person item renderer

This commit is contained in:
Bob 2024-09-06 22:11:53 +02:00
parent 77cb82b502
commit 49d49d47e3
3 changed files with 135 additions and 32 deletions

View File

@ -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);
}
}

View File

@ -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) {
}

View File

@ -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