Properly render spectator hand in all custom rendering modes
Fix hand clipping with nearby blocks Immediately show hand/item if a different player is spectated
This commit is contained in:
@@ -29,6 +29,7 @@ import org.lwjgl.util.glu.Project;
|
||||
public class SpectatorRenderer {
|
||||
|
||||
private final Minecraft mc = Minecraft.getMinecraft();
|
||||
private EntityPlayer currentPlayer;
|
||||
|
||||
private EntityPlayer getSpectatedPlayer() {
|
||||
Entity current = ReplayHandler.getCurrentEntity();
|
||||
@@ -36,7 +37,16 @@ public class SpectatorRenderer {
|
||||
return (EntityPlayer)current;
|
||||
}
|
||||
|
||||
protected void gluPerspective(float fovY, float aspect, float zNear, float zFar) {
|
||||
Project.gluPerspective(fovY, aspect, zNear, zFar);
|
||||
}
|
||||
|
||||
public void renderSpectatorHand(EntityPlayer entityPlayer, float partialTicks, int renderPass) {
|
||||
if (entityPlayer != currentPlayer) {
|
||||
updateNow(entityPlayer);
|
||||
}
|
||||
|
||||
GlStateManager.clear(GL11.GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
GlStateManager.matrixMode(GL11.GL_PROJECTION);
|
||||
GlStateManager.loadIdentity();
|
||||
@@ -47,7 +57,7 @@ public class SpectatorRenderer {
|
||||
GlStateManager.translate((float)(-(renderPass * 2 - 1)) * f1, 0.0F, 0.0F);
|
||||
}
|
||||
|
||||
Project.gluPerspective(mc.entityRenderer.getFOVModifier(partialTicks, false),
|
||||
gluPerspective(mc.entityRenderer.getFOVModifier(partialTicks, false),
|
||||
(float) this.mc.displayWidth / (float) this.mc.displayHeight, 0.05F, mc.entityRenderer.farPlaneDistance * 2.0F);
|
||||
|
||||
GlStateManager.matrixMode(GL11.GL_MODELVIEW);
|
||||
@@ -441,6 +451,17 @@ public class SpectatorRenderer {
|
||||
mc.entityRenderer.itemRenderer.equippedItemSlot = player.inventory.currentItem;
|
||||
}
|
||||
}
|
||||
|
||||
public void updateNow(EntityPlayer player) {
|
||||
this.currentPlayer = player;
|
||||
|
||||
prevEquippedProgress = equippedProgress = 1;
|
||||
itemToRender = player.inventory.getCurrentItem();
|
||||
mc.entityRenderer.itemRenderer.equippedItemSlot = player.inventory.currentItem;
|
||||
|
||||
renderArmYaw = prevRenderArmYaw = player.rotationYaw;
|
||||
renderArmPitch = prevRenderArmPitch = player.rotationPitch;
|
||||
}
|
||||
|
||||
/**
|
||||
* The GUI Overlays (Fire, Water)
|
||||
|
||||
@@ -106,4 +106,9 @@ public class CubicEntityRenderer extends CustomEntityRenderer {
|
||||
GlStateManager.translate(0.0F, 0.0F, 0.1F);
|
||||
super.orientCamera(partialTicks);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSpectatorHand(float partialTicks, int renderPass) {
|
||||
// No spectator hands during 360° view
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package eu.crushedpixel.replaymod.video.entity;
|
||||
|
||||
import eu.crushedpixel.replaymod.ReplayMod;
|
||||
import eu.crushedpixel.replaymod.renderer.SpectatorRenderer;
|
||||
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.particle.EffectRenderer;
|
||||
@@ -21,6 +21,12 @@ import static org.lwjgl.opengl.GL11.*;
|
||||
public abstract class CustomEntityRenderer {
|
||||
protected final Minecraft mc = Minecraft.getMinecraft();
|
||||
protected final EntityRenderer proxied = mc.entityRenderer;
|
||||
protected final SpectatorRenderer spectatorRenderer = new SpectatorRenderer(){
|
||||
@Override
|
||||
protected void gluPerspective(float fovY, float aspect, float zNear, float zFar) {
|
||||
CustomEntityRenderer.this.gluPerspective(fovY, aspect, zNear, zFar);
|
||||
}
|
||||
};
|
||||
protected int frameCount;
|
||||
|
||||
protected void gluPerspective(float fovY, float aspect, float zNear, float zFar) {
|
||||
@@ -176,8 +182,14 @@ public abstract class CustomEntityRenderer {
|
||||
|
||||
net.minecraftforge.client.ForgeHooksClient.dispatchRenderLast(renderglobal, partialTicks);
|
||||
|
||||
if(!ReplayHandler.isCamera() && ReplayHandler.getCurrentEntity() instanceof EntityPlayer)
|
||||
ReplayMod.spectatorRenderer.renderSpectatorHand((EntityPlayer)ReplayHandler.getCurrentEntity(), partialTicks, renderPass);
|
||||
renderSpectatorHand(partialTicks, renderPass);
|
||||
}
|
||||
|
||||
protected void renderSpectatorHand(float partialTicks, int renderPass) {
|
||||
Entity currentEntity = ReplayHandler.getCurrentEntity();
|
||||
if(!ReplayHandler.isCamera() && currentEntity instanceof EntityPlayer) {
|
||||
spectatorRenderer.renderSpectatorHand((EntityPlayer) currentEntity, partialTicks, renderPass);
|
||||
}
|
||||
}
|
||||
|
||||
protected void setupCameraTransform(float partialTicks) {
|
||||
|
||||
@@ -16,6 +16,14 @@ public class StereoscopicEntityRenderer extends CustomEntityRenderer {
|
||||
this.leftEye = leftEye;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateCameraAndRender(float renderPartialTicks) {
|
||||
boolean wasAnaglyph = mc.gameSettings.anaglyph;
|
||||
mc.gameSettings.anaglyph = true;
|
||||
super.updateCameraAndRender(renderPartialTicks);
|
||||
mc.gameSettings.anaglyph = wasAnaglyph;
|
||||
}
|
||||
|
||||
protected void translateStereoscopic() {
|
||||
GlStateManager.translate(leftEye ? 0.07 : -0.07, 0, 0);
|
||||
}
|
||||
@@ -36,4 +44,9 @@ public class StereoscopicEntityRenderer extends CustomEntityRenderer {
|
||||
|
||||
orientCamera(partialTicks);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSpectatorHand(float partialTicks, int renderPass) {
|
||||
super.renderSpectatorHand(partialTicks, leftEye ? 1 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user