Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.minecraft.client.renderer.entity;
- import java.nio.FloatBuffer;
- import java.util.List;
- import net.minecraft.client.Minecraft;
- import net.minecraft.client.entity.EntityPlayerSP;
- import net.minecraft.client.model.ModelBase;
- import net.minecraft.client.renderer.GLAllocation;
- import net.minecraft.client.renderer.GlStateManager;
- import net.minecraft.client.renderer.GlStateManager.Profile;
- import net.minecraft.client.renderer.OpenGlHelper;
- import net.minecraft.client.renderer.entity.layers.LayerRenderer;
- import net.minecraft.client.renderer.texture.DynamicTexture;
- import net.minecraft.entity.EntityLivingBase;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.entity.player.EnumPlayerModelParts;
- import net.minecraft.scoreboard.Team;
- import net.minecraft.scoreboard.Team.EnumVisible;
- import net.minecraft.util.math.MathHelper;
- import org.apache.logging.log4j.LogManager;
- import org.apache.logging.log4j.Logger;
- public abstract class RenderLivingBase<T extends EntityLivingBase> extends Render<T>
- {
- private static final Logger LOGGER = ;
- private static final DynamicTexture TEXTURE_BRIGHTNESS = new DynamicTexture(16, 16);
- protected ModelBase mainModel;
- protected FloatBuffer brightnessBuffer = GLAllocation.createDirectFloatBuffer(4);
- protected List<LayerRenderer<T>> layerRenderers = com.google.common.collect.Lists.newArrayList();
- protected boolean renderMarker;
- public RenderLivingBase(RenderManager renderManagerIn, ModelBase modelBaseIn, float shadowSizeIn)
- {
- super(renderManagerIn);
- mainModel = modelBaseIn;
- shadowSize = shadowSizeIn;
- }
- protected <V extends EntityLivingBase, U extends LayerRenderer<V>> boolean addLayer(U layer)
- {
- return layerRenderers.add(layer);
- }
- protected <V extends EntityLivingBase, U extends LayerRenderer<V>> boolean removeLayer(U layer)
- {
- return layerRenderers.remove(layer);
- }
- public ModelBase getMainModel()
- {
- return mainModel;
- }
- protected float interpolateRotation(float prevYawOffset, float yawOffset, float partialTicks)
- {
- for (float f = yawOffset - prevYawOffset; f < -180.0F; f += 360.0F) {}
- while (f >= 180.0F)
- {
- f -= 360.0F;
- }
- return prevYawOffset + partialTicks * f;
- }
- public void transformHeldFull3DItemLayer() {}
- public void doRender(T entity, double x, double y, double z, float entityYaw, float partialTicks)
- {
- GlStateManager.pushMatrix();
- GlStateManager.disableCull();
- mainModel.swingProgress = getSwingProgress(entity, partialTicks);
- mainModel.isRiding = entity.isRiding();
- mainModel.isChild = entity.isChild();
- try
- {
- float f = interpolateRotation(prevRenderYawOffset, renderYawOffset, partialTicks);
- float f1 = interpolateRotation(prevRotationYawHead, rotationYawHead, partialTicks);
- float f2 = f1 - f;
- if ((entity.isRiding()) && ((entity.getRidingEntity() instanceof EntityLivingBase)))
- {
- EntityLivingBase entitylivingbase = (EntityLivingBase)entity.getRidingEntity();
- f = interpolateRotation(prevRenderYawOffset, renderYawOffset, partialTicks);
- f2 = f1 - f;
- float f3 = MathHelper.wrapDegrees(f2);
- if (f3 < -85.0F)
- {
- f3 = -85.0F;
- }
- if (f3 >= 85.0F)
- {
- f3 = 85.0F;
- }
- f = f1 - f3;
- if (f3 * f3 > 2500.0F)
- {
- f += f3 * 0.2F;
- }
- }
- float f7 = prevRotationPitch + (rotationPitch - prevRotationPitch) * partialTicks;
- renderLivingAt(entity, x, y, z);
- float f8 = handleRotationFloat(entity, partialTicks);
- rotateCorpse(entity, f8, f, partialTicks);
- float f4 = prepareScale(entity, partialTicks);
- float f5 = 0.0F;
- float f6 = 0.0F;
- if (!entity.isRiding())
- {
- f5 = prevLimbSwingAmount + (limbSwingAmount - prevLimbSwingAmount) * partialTicks;
- f6 = limbSwing - limbSwingAmount * (1.0F - partialTicks);
- if (entity.isChild())
- {
- f6 *= 3.0F;
- }
- if (f5 > 1.0F)
- {
- f5 = 1.0F;
- }
- }
- GlStateManager.enableAlpha();
- mainModel.setLivingAnimations(entity, f6, f5, partialTicks);
- mainModel.setRotationAngles(f6, f5, f8, f2, f7, f4, entity);
- if (renderOutlines)
- {
- boolean flag1 = setScoreTeamColor(entity);
- GlStateManager.enableColorMaterial();
- GlStateManager.enableOutlineMode(getTeamColor(entity));
- if (!renderMarker)
- {
- renderModel(entity, f6, f5, f8, f2, f7, f4);
- }
- if ((!(entity instanceof EntityPlayer)) || (!((EntityPlayer)entity).isSpectator()))
- {
- renderLayers(entity, f6, f5, partialTicks, f8, f2, f7, f4);
- }
- GlStateManager.disableOutlineMode();
- GlStateManager.disableColorMaterial();
- if (flag1)
- {
- unsetScoreTeamColor();
- }
- }
- else
- {
- boolean flag = setDoRenderBrightness(entity, partialTicks);
- renderModel(entity, f6, f5, f8, f2, f7, f4);
- if (flag)
- {
- unsetBrightness();
- }
- GlStateManager.depthMask(true);
- if ((!(entity instanceof EntityPlayer)) || (!((EntityPlayer)entity).isSpectator()))
- {
- renderLayers(entity, f6, f5, partialTicks, f8, f2, f7, f4);
- }
- }
- GlStateManager.disableRescaleNormal();
- }
- catch (Exception exception)
- {
- LOGGER.error("Couldn't render entity", exception);
- }
- GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
- GlStateManager.enableTexture2D();
- GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
- GlStateManager.enableCull();
- GlStateManager.popMatrix();
- super.doRender(entity, x, y, z, entityYaw, partialTicks);
- }
- public float prepareScale(T entitylivingbaseIn, float partialTicks)
- {
- GlStateManager.enableRescaleNormal();
- GlStateManager.scale(-1.0F, -1.0F, 1.0F);
- preRenderCallback(entitylivingbaseIn, partialTicks);
- float f = 0.0625F;
- GlStateManager.translate(0.0F, -1.501F, 0.0F);
- return 0.0625F;
- }
- protected boolean setScoreTeamColor(T entityLivingBaseIn)
- {
- GlStateManager.disableLighting();
- GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
- GlStateManager.disableTexture2D();
- GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
- return true;
- }
- protected void unsetScoreTeamColor()
- {
- GlStateManager.enableLighting();
- GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
- GlStateManager.enableTexture2D();
- GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
- }
- protected void renderModel(T entitylivingbaseIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor)
- {
- boolean flag = (!entitylivingbaseIn.isInvisible()) || (renderOutlines);
- boolean flag1 = (!flag) && (!entitylivingbaseIn.isInvisibleToPlayer(getMinecraftthePlayer));
- if ((flag) || (flag1))
- {
- if (!bindEntityTexture(entitylivingbaseIn))
- {
- return;
- }
- if (flag1)
- {
- GlStateManager.enableBlendProfile(GlStateManager.Profile.TRANSPARENT_MODEL);
- }
- mainModel.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor);
- if (flag1)
- {
- GlStateManager.disableBlendProfile(GlStateManager.Profile.TRANSPARENT_MODEL);
- }
- }
- }
- protected boolean setDoRenderBrightness(T entityLivingBaseIn, float partialTicks)
- {
- return setBrightness(entityLivingBaseIn, partialTicks, true);
- }
- protected boolean setBrightness(T entitylivingbaseIn, float partialTicks, boolean combineTextures)
- {
- float f = entitylivingbaseIn.getBrightness(partialTicks);
- int i = getColorMultiplier(entitylivingbaseIn, f, partialTicks);
- boolean flag = (i >> 24 & 0xFF) > 0;
- boolean flag1 = (hurtTime > 0) || (deathTime > 0);
- if ((!flag) && (!flag1))
- {
- return false;
- }
- if ((!flag) && (!combineTextures))
- {
- return false;
- }
- GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
- GlStateManager.enableTexture2D();
- GlStateManager.glTexEnvi(8960, 8704, OpenGlHelper.GL_COMBINE);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_RGB, 8448);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_RGB, OpenGlHelper.defaultTexUnit);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_RGB, OpenGlHelper.GL_PRIMARY_COLOR);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_RGB, 768);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_RGB, 768);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_ALPHA, 7681);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_ALPHA, OpenGlHelper.defaultTexUnit);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_ALPHA, 770);
- GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
- GlStateManager.enableTexture2D();
- GlStateManager.glTexEnvi(8960, 8704, OpenGlHelper.GL_COMBINE);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_RGB, OpenGlHelper.GL_INTERPOLATE);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_RGB, OpenGlHelper.GL_CONSTANT);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_RGB, OpenGlHelper.GL_PREVIOUS);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE2_RGB, OpenGlHelper.GL_CONSTANT);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_RGB, 768);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_RGB, 768);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND2_RGB, 770);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_ALPHA, 7681);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_ALPHA, OpenGlHelper.GL_PREVIOUS);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_ALPHA, 770);
- brightnessBuffer.position(0);
- if (flag1)
- {
- brightnessBuffer.put(1.0F);
- brightnessBuffer.put(0.0F);
- brightnessBuffer.put(0.0F);
- brightnessBuffer.put(0.3F);
- }
- else
- {
- float f1 = (i >> 24 & 0xFF) / 255.0F;
- float f2 = (i >> 16 & 0xFF) / 255.0F;
- float f3 = (i >> 8 & 0xFF) / 255.0F;
- float f4 = (i & 0xFF) / 255.0F;
- brightnessBuffer.put(f2);
- brightnessBuffer.put(f3);
- brightnessBuffer.put(f4);
- brightnessBuffer.put(1.0F - f1);
- }
- brightnessBuffer.flip();
- GlStateManager.glTexEnv(8960, 8705, brightnessBuffer);
- GlStateManager.setActiveTexture(OpenGlHelper.GL_TEXTURE2);
- GlStateManager.enableTexture2D();
- GlStateManager.bindTexture(TEXTURE_BRIGHTNESS.getGlTextureId());
- GlStateManager.glTexEnvi(8960, 8704, OpenGlHelper.GL_COMBINE);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_RGB, 8448);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_RGB, OpenGlHelper.GL_PREVIOUS);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_RGB, OpenGlHelper.lightmapTexUnit);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_RGB, 768);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_RGB, 768);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_ALPHA, 7681);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_ALPHA, OpenGlHelper.GL_PREVIOUS);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_ALPHA, 770);
- GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
- return true;
- }
- protected void unsetBrightness()
- {
- GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
- GlStateManager.enableTexture2D();
- GlStateManager.glTexEnvi(8960, 8704, OpenGlHelper.GL_COMBINE);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_RGB, 8448);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_RGB, OpenGlHelper.defaultTexUnit);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_RGB, OpenGlHelper.GL_PRIMARY_COLOR);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_RGB, 768);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_RGB, 768);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_ALPHA, 8448);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_ALPHA, OpenGlHelper.defaultTexUnit);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_ALPHA, OpenGlHelper.GL_PRIMARY_COLOR);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_ALPHA, 770);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_ALPHA, 770);
- GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
- GlStateManager.glTexEnvi(8960, 8704, OpenGlHelper.GL_COMBINE);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_RGB, 8448);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_RGB, 768);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_RGB, 768);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_RGB, 5890);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_RGB, OpenGlHelper.GL_PREVIOUS);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_ALPHA, 8448);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_ALPHA, 770);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_ALPHA, 5890);
- GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
- GlStateManager.setActiveTexture(OpenGlHelper.GL_TEXTURE2);
- GlStateManager.disableTexture2D();
- GlStateManager.bindTexture(0);
- GlStateManager.glTexEnvi(8960, 8704, OpenGlHelper.GL_COMBINE);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_RGB, 8448);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_RGB, 768);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_RGB, 768);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_RGB, 5890);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_RGB, OpenGlHelper.GL_PREVIOUS);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_ALPHA, 8448);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_ALPHA, 770);
- GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_ALPHA, 5890);
- GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
- }
- protected void renderLivingAt(T entityLivingBaseIn, double x, double y, double z)
- {
- GlStateManager.translate((float)x, (float)y, (float)z);
- }
- protected void rotateCorpse(T entityLiving, float p_77043_2_, float p_77043_3_, float partialTicks)
- {
- GlStateManager.rotate(180.0F - p_77043_3_, 0.0F, 1.0F, 0.0F);
- if (deathTime > 0)
- {
- float f = (deathTime + partialTicks - 1.0F) / 20.0F * 1.6F;
- f = MathHelper.sqrt_float(f);
- if (f > 1.0F)
- {
- f = 1.0F;
- }
- GlStateManager.rotate(f * getDeathMaxRotation(entityLiving), 0.0F, 0.0F, 1.0F);
- }
- else
- {
- String s = net.minecraft.util.text.TextFormatting.getTextWithoutFormattingCodes(entityLiving.getName());
- if ((s != null) && (("Dinnerbone".equals(s)) || ("Grumm".equals(s))) && ((!(entityLiving instanceof EntityPlayer)) || (((EntityPlayer)entityLiving).isWearing(EnumPlayerModelParts.CAPE))))
- {
- GlStateManager.translate(0.0F, height + 0.1F, 0.0F);
- GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F);
- }
- }
- }
- protected float getSwingProgress(T livingBase, float partialTickTime)
- {
- return livingBase.getSwingProgress(partialTickTime);
- }
- protected float handleRotationFloat(T livingBase, float partialTicks)
- {
- return ticksExisted + partialTicks;
- }
- protected void renderLayers(T entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scaleIn)
- {
- for (LayerRenderer<T> layerrenderer : layerRenderers)
- {
- boolean flag = setBrightness(entitylivingbaseIn, partialTicks, layerrenderer.shouldCombineTextures());
- layerrenderer.doRenderLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scaleIn);
- if (flag)
- {
- unsetBrightness();
- }
- }
- }
- protected float getDeathMaxRotation(T entityLivingBaseIn)
- {
- return 90.0F;
- }
- protected int getColorMultiplier(T entitylivingbaseIn, float lightBrightness, float partialTickTime)
- {
- return 0;
- }
- protected void preRenderCallback(T entitylivingbaseIn, float partialTickTime) {}
- public void renderName(T entity, double x, double y, double z)
- {
- if (canRenderName(entity))
- {
- double d0 = entity.getDistanceSqToEntity(renderManager.renderViewEntity);
- float f = entity.isSneaking() ? 32.0F : 64.0F;
- if (d0 < f * f)
- {
- String s = entity.getDisplayName().getFormattedText();
- GlStateManager.alphaFunc(516, 0.1F);
- renderEntityName(entity, x, y, z, s, d0);
- }
- }
- }
- protected boolean canRenderName(T entity)
- {
- EntityPlayerSP entityplayersp = getMinecraftthePlayer;
- boolean flag = !entity.isInvisibleToPlayer(entityplayersp);
- if (entity != entityplayersp)
- {
- Team team = entity.getTeam();
- Team team1 = entityplayersp.getTeam();
- if (team != null)
- {
- Team.EnumVisible team$enumvisible = team.getNameTagVisibility();
- switch (RenderLivingBase.1.$SwitchMap$net$minecraft$scoreboard$Team$EnumVisible[team$enumvisible.ordinal()])
- {
- case 1:
- return flag;
- case 2:
- return false;
- case 3:
- return (team.isSameTeam(team1)) && ((team.getSeeFriendlyInvisiblesEnabled()) || (flag)) ? true : team1 == null ? flag : false;
- case 4:
- return (!team.isSameTeam(team1)) && (flag) ? true : team1 == null ? flag : false;
- }
- return true;
- }
- }
- return (Minecraft.isGuiEnabled()) && (entity != renderManager.renderViewEntity) && (flag) && (!entity.isBeingRidden());
- }
- static
- {
- int[] aint = TEXTURE_BRIGHTNESS.getTextureData();
- for (int i = 0; i < 256; i++)
- {
- aint[i] = -1;
- }
- TEXTURE_BRIGHTNESS.updateDynamicTexture();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement