diff --git a/client/src/main/java/client/renderer/EntityRenderer.java b/client/src/main/java/client/renderer/EntityRenderer.java index 92b56fe1..bf574fca 100755 --- a/client/src/main/java/client/renderer/EntityRenderer.java +++ b/client/src/main/java/client/renderer/EntityRenderer.java @@ -754,9 +754,9 @@ public class EntityRenderer { for (int n = 0; n < 256; ++n) { - float rsky = World.BRIGHTNESS[0][n / 16]; + float rsky = World.BRIGHTNESS[n / 16]; + float rblock = World.BRIGHTNESS[n % 16]; float sky = rsky * msun; - float rblock = World.BRIGHTNESS[0][n % 16]; float block = rblock * (this.torchFlickerX * 0.1F + 1.5F); float sred = Math.max(sky * (sun * 0.65F + 0.35F), brightness); diff --git a/client/src/main/java/client/renderer/RenderGlobal.java b/client/src/main/java/client/renderer/RenderGlobal.java index d4ece181..2e7c28c7 100755 --- a/client/src/main/java/client/renderer/RenderGlobal.java +++ b/client/src/main/java/client/renderer/RenderGlobal.java @@ -647,11 +647,6 @@ public class RenderGlobal break; } } - - if (!flag2 && entity2 instanceof EntityBox) - { - this.gm.getRenderManager().renderFloatingBox(entity2, partialTicks); - } } } } diff --git a/client/src/main/java/client/renderer/entity/Render.java b/client/src/main/java/client/renderer/entity/Render.java index c364f8c6..9bf22b9c 100755 --- a/client/src/main/java/client/renderer/entity/Render.java +++ b/client/src/main/java/client/renderer/entity/Render.java @@ -2,55 +2,30 @@ package client.renderer.entity; import org.lwjgl.opengl.GL11; -import client.Client; -import client.renderer.DefaultVertexFormats; import client.renderer.Drawing; import client.renderer.Frustum; import client.renderer.GlState; -import client.renderer.RenderBuffer; -import client.renderer.Tessellator; -import client.renderer.texture.TextureAtlasSprite; -import client.renderer.texture.TextureMap; -import common.block.Block; import common.entity.Entity; -import common.util.BlockPos; import common.util.BoundingBox; -import common.world.World; public abstract class Render { -// public static boolean drawNames = true; -// private static final String shadowTextures = "textures/world/shadow.png"; - - protected final RenderManager renderManager; -// protected float shadowSize; -// -// /** -// * Determines the darkness of the object's shadow. Higher value makes a darker shadow. -// */ -// protected float shadowOpaque = 1.0F; + protected final RenderManager manager; - protected Render(RenderManager renderManager) + protected Render(RenderManager manager) { - this.renderManager = renderManager; + this.manager = manager; } - public boolean shouldRender(T livingEntity, double camX, double camY, double camZ) + public boolean shouldRender(T entity, double camX, double camY, double camZ) { - BoundingBox axisalignedbb = livingEntity.getEntityBoundingBox(); - - if (axisalignedbb.hasNaN() || axisalignedbb.getAverageEdgeLength() == 0.0D) - { - axisalignedbb = new BoundingBox(livingEntity.posX - 2.0D, livingEntity.posY - 2.0D, livingEntity.posZ - 2.0D, livingEntity.posX + 2.0D, livingEntity.posY + 2.0D, livingEntity.posZ + 2.0D); - } - - return livingEntity.isInRangeToRender3d(camX, camY, camZ) && (livingEntity.noFrustumCheck || Frustum.isInFrustum(axisalignedbb)); + BoundingBox bb = entity.getEntityBoundingBox(); + if (bb.hasNaN() || bb.getAverageEdgeLength() == 0.0D) + bb = new BoundingBox(entity.posX - 2.0D, entity.posY - 2.0D, entity.posZ - 2.0D, entity.posX + 2.0D, entity.posY + 2.0D, entity.posZ + 2.0D); + return entity.isInRangeToRender3d(camX, camY, camZ) && (entity.noFrustumCheck || Frustum.isInFrustum(bb)); } - /** - * Renders the desired {@code T} type Entity. - */ - public void doRender(T entity, double x, double y, double z, float partialTicks) + public void doRender(T entity, double x, double y, double z, float partial) { this.renderName(entity, x, y, z); } @@ -59,320 +34,27 @@ public abstract class Render { String name = entity.getDisplayName(); if(name != null && !name.isEmpty()) - this.renderLivingLabel(entity, name, x, y, z, 64); + this.manager.renderLabel(entity, name, x, y, z, 64); } -// protected boolean canRenderName(T entity) -// { -// return entity.hasCustomName(); -// } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. - */ protected abstract String getEntityTexture(T entity); - public boolean bindEntityTexture(T entity) + public final boolean bindEntityTexture(T entity) { - String resourcelocation = this.getEntityTexture(entity); - - if (resourcelocation == null) - { + String tex = this.getEntityTexture(entity); + if(tex == null) return false; - } - else - { - this.bindTexture(resourcelocation); - return true; - } + this.bindTexture(tex); + return true; } - public void bindTexture(String location) + public final void bindTexture(String tex) { - this.renderManager.renderEngine.bindTexture(location); + this.manager.renderEngine.bindTexture(tex); } - /** - * Renders fire on top of the entity. Args: entity, x, y, z, partialTickTime - */ - private void renderEntityOnFire(Entity entity, double x, double y, double z, float partialTicks) + public final RenderManager getRenderManager() { - GlState.disableLighting(); - TextureMap texturemap = Client.CLIENT.getTextureMapBlocks(); - TextureAtlasSprite textureatlassprite = texturemap.getAtlasSprite("blocks/fire_layer_0"); - TextureAtlasSprite textureatlassprite1 = texturemap.getAtlasSprite("blocks/fire_layer_1"); - GL11.glPushMatrix(); - GL11.glTranslatef((float)x, (float)y, (float)z); - float f = entity.width * 1.4F; - GL11.glScalef(f, f, f); -// Tessellator tessellator = Tessellator.getInstance(); - RenderBuffer worldrenderer = Tessellator.getBuffer(); - float f1 = 0.5F; - float f2 = 0.0F; - float f3 = entity.height / f; - float f4 = (float)(entity.posY - entity.getEntityBoundingBox().minY); - GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); - GL11.glTranslatef(0.0F, 0.0F, -0.3F + (float)((int)f3) * 0.02F); - GlState.color(1.0F, 1.0F, 1.0F, 1.0F); - float f5 = 0.0F; - int i = 0; - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); - - while (f3 > 0.0F) - { - TextureAtlasSprite textureatlassprite2 = i % 2 == 0 ? textureatlassprite : textureatlassprite1; - this.bindTexture(TextureMap.BLOCKS); - float f6 = textureatlassprite2.getMinU(); - float f7 = textureatlassprite2.getMinV(); - float f8 = textureatlassprite2.getMaxU(); - float f9 = textureatlassprite2.getMaxV(); - - if (i / 2 % 2 == 0) - { - float f10 = f8; - f8 = f6; - f6 = f10; - } - - worldrenderer.pos((double)(f1 - f2), (double)(0.0F - f4), (double)f5).tex((double)f8, (double)f9).endVertex(); - worldrenderer.pos((double)(-f1 - f2), (double)(0.0F - f4), (double)f5).tex((double)f6, (double)f9).endVertex(); - worldrenderer.pos((double)(-f1 - f2), (double)(1.4F - f4), (double)f5).tex((double)f6, (double)f7).endVertex(); - worldrenderer.pos((double)(f1 - f2), (double)(1.4F - f4), (double)f5).tex((double)f8, (double)f7).endVertex(); - f3 -= 0.45F; - f4 -= 0.45F; - f1 *= 0.9F; - f5 += 0.03F; - ++i; - } - - Tessellator.draw(); - GL11.glPopMatrix(); - GlState.enableLighting(); - } - -// /** -// * Renders the entity shadows at the position, shadow alpha and partialTickTime. Args: entity, x, y, z, shadowAlpha, -// * partialTickTime -// */ -// private void renderShadow(Entity entityIn, double x, double y, double z, float shadowAlpha, float partialTicks) -// { -// GlState.enableBlend(); -// GlState.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); -// this.renderManager.renderEngine.bindTexture(shadowTextures); -// World world = this.getWorldFromRenderManager(); -// GlState.depthMask(false); -// float f = this.shadowSize; -// -// if (entityIn instanceof EntityLiving) -// { -// EntityLiving entityliving = (EntityLiving)entityIn; -// f *= entityliving.getShadowSize(); -// -// if (entityliving.isChild()) -// { -// f *= 0.5F; -// } -// } -// -// double d5 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double)partialTicks; -// double d0 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double)partialTicks; -// double d1 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double)partialTicks; -// int i = MathHelper.floor_double(d5 - (double)f); -// int j = MathHelper.floor_double(d5 + (double)f); -// int k = MathHelper.floor_double(d0 - (double)f); -// int l = MathHelper.floor_double(d0); -// int i1 = MathHelper.floor_double(d1 - (double)f); -// int j1 = MathHelper.floor_double(d1 + (double)f); -// double d2 = x - d5; -// double d3 = y - d0; -// double d4 = z - d1; -//// Tessellator tessellator = Tessellator.getInstance(); -// RenderBuffer worldrenderer = Tessellator.getBuffer(); -// worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); -// -// for (BlockPos blockpos : BlockPos.getAllInBoxMutable(new BlockPos(i, k, i1), new BlockPos(j, l, j1))) -// { -// Block block = world.getBlockState(blockpos.down()).getBlock(); -// -// if (block.getRenderType() != -1 && world.getLightFromNeighbors(blockpos) > 3) -// { -// this.renderShadowBlock(block, x, y, z, blockpos, shadowAlpha, f, d2, d3, d4); -// } -// } -// -// Tessellator.draw(); -// GlState.color(1.0F, 1.0F, 1.0F, 1.0F); -// GlState.disableBlend(); -// GlState.depthMask(true); -// } - - /** - * Returns the render manager's world object - */ - private World getWorldFromRenderManager() - { - return this.renderManager.worldObj; - } - - private void renderShadowBlock(Block blockIn, double p_180549_2_, double p_180549_4_, double p_180549_6_, BlockPos pos, float p_180549_9_, float p_180549_10_, double p_180549_11_, double p_180549_13_, double p_180549_15_) - { - if (blockIn.isFullCube()) - { -// Tessellator tessellator = Tessellator.getInstance(); - RenderBuffer worldrenderer = Tessellator.getBuffer(); - double d0 = ((double)p_180549_9_ - (p_180549_4_ - ((double)pos.getY() + p_180549_13_)) / 2.0D) * 0.5D * (double)this.getWorldFromRenderManager().getLightBrightness(pos); - - if (d0 >= 0.0D) - { - if (d0 > 1.0D) - { - d0 = 1.0D; - } - - double d1 = (double)pos.getX() + blockIn.getBlockBoundsMinX() + p_180549_11_; - double d2 = (double)pos.getX() + blockIn.getBlockBoundsMaxX() + p_180549_11_; - double d3 = (double)pos.getY() + blockIn.getBlockBoundsMinY() + p_180549_13_ + 0.015625D; - double d4 = (double)pos.getZ() + blockIn.getBlockBoundsMinZ() + p_180549_15_; - double d5 = (double)pos.getZ() + blockIn.getBlockBoundsMaxZ() + p_180549_15_; - float f = (float)((p_180549_2_ - d1) / 2.0D / (double)p_180549_10_ + 0.5D); - float f1 = (float)((p_180549_2_ - d2) / 2.0D / (double)p_180549_10_ + 0.5D); - float f2 = (float)((p_180549_6_ - d4) / 2.0D / (double)p_180549_10_ + 0.5D); - float f3 = (float)((p_180549_6_ - d5) / 2.0D / (double)p_180549_10_ + 0.5D); - worldrenderer.pos(d1, d3, d4).tex((double)f, (double)f2).color(1.0F, 1.0F, 1.0F, (float)d0).endVertex(); - worldrenderer.pos(d1, d3, d5).tex((double)f, (double)f3).color(1.0F, 1.0F, 1.0F, (float)d0).endVertex(); - worldrenderer.pos(d2, d3, d5).tex((double)f1, (double)f3).color(1.0F, 1.0F, 1.0F, (float)d0).endVertex(); - worldrenderer.pos(d2, d3, d4).tex((double)f1, (double)f2).color(1.0F, 1.0F, 1.0F, (float)d0).endVertex(); - } - } - } - - /** - * Renders a white box with the bounds of the AABB translated by the offset. Args: aabb, x, y, z - */ - public static void renderOffsetAABB(BoundingBox boundingBox, double x, double y, double z) - { - GlState.disableTexture2D(); -// Tessellator tessellator = Tessellator.getInstance(); - RenderBuffer worldrenderer = Tessellator.getBuffer(); - GlState.color(1.0F, 1.0F, 1.0F, 1.0F); - worldrenderer.setTranslation(x, y, z); - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_NORMAL); - worldrenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ).normal(0.0F, 0.0F, -1.0F).endVertex(); - worldrenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ).normal(0.0F, 0.0F, -1.0F).endVertex(); - worldrenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ).normal(0.0F, 0.0F, -1.0F).endVertex(); - worldrenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ).normal(0.0F, 0.0F, -1.0F).endVertex(); - worldrenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ).normal(0.0F, 0.0F, 1.0F).endVertex(); - worldrenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ).normal(0.0F, 0.0F, 1.0F).endVertex(); - worldrenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ).normal(0.0F, 0.0F, 1.0F).endVertex(); - worldrenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ).normal(0.0F, 0.0F, 1.0F).endVertex(); - worldrenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ).normal(0.0F, -1.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ).normal(0.0F, -1.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ).normal(0.0F, -1.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ).normal(0.0F, -1.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ).normal(0.0F, 1.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ).normal(0.0F, 1.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ).normal(0.0F, 1.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ).normal(0.0F, 1.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ).normal(-1.0F, 0.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ).normal(-1.0F, 0.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ).normal(-1.0F, 0.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ).normal(-1.0F, 0.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ).normal(1.0F, 0.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ).normal(1.0F, 0.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ).normal(1.0F, 0.0F, 0.0F).endVertex(); - worldrenderer.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ).normal(1.0F, 0.0F, 0.0F).endVertex(); - Tessellator.draw(); - worldrenderer.setTranslation(0.0D, 0.0D, 0.0D); - GlState.enableTexture2D(); - } - - public void doRenderShadowAndFire(Entity entityIn, double x, double y, double z, float partialTicks) - { - if (this.renderManager.gm != null) - { -// if (this.renderManager.options.entityShadows && this.shadowSize > 0.0F && !entityIn.isInvisible() && this.renderManager.isRenderShadow()) -// { -// double d0 = this.renderManager.getDistanceToCamera(entityIn.posX, entityIn.posY, entityIn.posZ); -// float f = (float)((1.0D - d0 / 256.0D) * (double)this.shadowOpaque); -// -// if (f > 0.0F) -// { -// this.renderShadow(entityIn, x, y, z, f, partialTicks); -// } -// } - - if (entityIn.canRenderOnFire()) // && (!(entityIn.isPlayer()) || !((EntityNPC)entityIn).isSpectator())) - { - this.renderEntityOnFire(entityIn, x, y, z, partialTicks); - } - } - } - - protected void renderLivingLabel(T entityIn, String str, double x, double y, double z, int maxDistance) { - double d0 = entityIn.getDistanceSqToEntity(this.renderManager.livingPlayer); - if (d0 <= (double)(maxDistance * maxDistance) && this.renderManager.gm.canRenderHud()) { -// WCF.glPushMatrix(); -// WCF.glTranslatef((float)x, (float)y + entityIn.height + 0.5f, (float)z); -// float f = 1.0f / 64.0f; -// WCF.glScalef(f, f, f); -// int w, h; -// Vec2i size = Drawing.txt_size(0, 0, 0, 0, 65536, 65536, Font.DEFAULT, str); -// int tx = - size.xpos / 2; -// int ty = - size.ypos; -// Drawing.txt_draw(tx, ty, tx, ty, tx + 440, ty + 260, 0xffffffff, 0x3f000000, Font.DEFAULT, str); -//// this.renderManager.addOverlay(x, y + (double)entityIn.height + 0.5, z, str); -// WCF.glPopMatrix(); - -// FontRenderer fontrenderer = this.getFontRendererFromRenderManager(); - float f = 1.0f; // 1.6F; - float f1 = 0.016666668F * f; - GL11.glPushMatrix(); - GL11.glTranslatef((float)x + 0.0F, (float)y + entityIn.height + 0.5F, (float)z); - GL11.glNormal3f(0.0F, 1.0F, 0.0F); - GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); - GL11.glScalef(-f1, -f1, f1); - GlState.disableLighting(); - GlState.depthMask(false); -// GlState.disableDepth(); - GlState.enableBlend(); - GlState.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); -// Tessellator tessellator = Tessellator.getInstance(); - RenderBuffer worldrenderer = Tessellator.getBuffer(); -// int i = 0; - -// if (str.equals("deadmau5")) -// { -// i = -10; -// } - -// Vec2i size = Drawing.txt_size(0, 0, 0, 0, 65536, 65536, str); -// int j = size.xpos / 2; -// GlState.disableTexture2D(); -// worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); -// worldrenderer.pos((double)(-j - 1), (double)(-1 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); -// worldrenderer.pos((double)(-j - 1), (double)(8 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); -// worldrenderer.pos((double)(j + 1), (double)(8 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); -// worldrenderer.pos((double)(j + 1), (double)(-1 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); -// Tessellator.draw(); -// GlState.enableTexture2D(); -// int tx = -size.xpos / 2; // j; -// int ty = 0; // i; -// Drawing.txt_draw(tx, ty, tx, ty, tx + 440, ty + 260, /* 0xffffffff */ 553648127, 0x3f000000, Font.DEFAULT, str); -// FontRenderer.drawString(str, -FontRenderer.getStringWidth(str) / 2, i, 553648127); -// GlState.enableDepth(); - GlState.depthMask(true); - Drawing.drawTextboxCentered(str, 0, 0, 0x3f000000); -// FontRenderer.drawString(str, -FontRenderer.getStringWidth(str) / 2, i, -1); - GlState.enableLighting(); - GlState.disableBlend(); - GlState.color(1.0F, 1.0F, 1.0F, 1.0F); - GL11.glPopMatrix(); - } - } - - public RenderManager getRenderManager() - { - return this.renderManager; + return this.manager; } } diff --git a/client/src/main/java/client/renderer/entity/RenderEntity.java b/client/src/main/java/client/renderer/entity/RenderEntity.java index 40f7baa5..a4ac78d0 100755 --- a/client/src/main/java/client/renderer/entity/RenderEntity.java +++ b/client/src/main/java/client/renderer/entity/RenderEntity.java @@ -2,19 +2,57 @@ package client.renderer.entity; import org.lwjgl.opengl.GL11; +import client.renderer.DefaultVertexFormats; +import client.renderer.GlState; +import client.renderer.RenderBuffer; +import client.renderer.Tessellator; import common.entity.Entity; +import common.util.BoundingBox; public class RenderEntity extends Render { + public static void renderOffsetAABB(BoundingBox bb, double x, double y, double z) + { + GlState.disableTexture2D(); + RenderBuffer rb = Tessellator.getBuffer(); + GlState.color(1.0F, 1.0F, 1.0F, 1.0F); + rb.setTranslation(x, y, z); + rb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_NORMAL); + rb.pos(bb.minX, bb.maxY, bb.minZ).normal(0.0F, 0.0F, -1.0F).endVertex(); + rb.pos(bb.maxX, bb.maxY, bb.minZ).normal(0.0F, 0.0F, -1.0F).endVertex(); + rb.pos(bb.maxX, bb.minY, bb.minZ).normal(0.0F, 0.0F, -1.0F).endVertex(); + rb.pos(bb.minX, bb.minY, bb.minZ).normal(0.0F, 0.0F, -1.0F).endVertex(); + rb.pos(bb.minX, bb.minY, bb.maxZ).normal(0.0F, 0.0F, 1.0F).endVertex(); + rb.pos(bb.maxX, bb.minY, bb.maxZ).normal(0.0F, 0.0F, 1.0F).endVertex(); + rb.pos(bb.maxX, bb.maxY, bb.maxZ).normal(0.0F, 0.0F, 1.0F).endVertex(); + rb.pos(bb.minX, bb.maxY, bb.maxZ).normal(0.0F, 0.0F, 1.0F).endVertex(); + rb.pos(bb.minX, bb.minY, bb.minZ).normal(0.0F, -1.0F, 0.0F).endVertex(); + rb.pos(bb.maxX, bb.minY, bb.minZ).normal(0.0F, -1.0F, 0.0F).endVertex(); + rb.pos(bb.maxX, bb.minY, bb.maxZ).normal(0.0F, -1.0F, 0.0F).endVertex(); + rb.pos(bb.minX, bb.minY, bb.maxZ).normal(0.0F, -1.0F, 0.0F).endVertex(); + rb.pos(bb.minX, bb.maxY, bb.maxZ).normal(0.0F, 1.0F, 0.0F).endVertex(); + rb.pos(bb.maxX, bb.maxY, bb.maxZ).normal(0.0F, 1.0F, 0.0F).endVertex(); + rb.pos(bb.maxX, bb.maxY, bb.minZ).normal(0.0F, 1.0F, 0.0F).endVertex(); + rb.pos(bb.minX, bb.maxY, bb.minZ).normal(0.0F, 1.0F, 0.0F).endVertex(); + rb.pos(bb.minX, bb.minY, bb.maxZ).normal(-1.0F, 0.0F, 0.0F).endVertex(); + rb.pos(bb.minX, bb.maxY, bb.maxZ).normal(-1.0F, 0.0F, 0.0F).endVertex(); + rb.pos(bb.minX, bb.maxY, bb.minZ).normal(-1.0F, 0.0F, 0.0F).endVertex(); + rb.pos(bb.minX, bb.minY, bb.minZ).normal(-1.0F, 0.0F, 0.0F).endVertex(); + rb.pos(bb.maxX, bb.minY, bb.minZ).normal(1.0F, 0.0F, 0.0F).endVertex(); + rb.pos(bb.maxX, bb.maxY, bb.minZ).normal(1.0F, 0.0F, 0.0F).endVertex(); + rb.pos(bb.maxX, bb.maxY, bb.maxZ).normal(1.0F, 0.0F, 0.0F).endVertex(); + rb.pos(bb.maxX, bb.minY, bb.maxZ).normal(1.0F, 0.0F, 0.0F).endVertex(); + Tessellator.draw(); + rb.setTranslation(0.0D, 0.0D, 0.0D); + GlState.enableTexture2D(); + } + public RenderEntity(RenderManager renderManagerIn) { super(renderManagerIn); } - /** - * Renders the desired {@code T} type Entity. - */ public void doRender(Entity entity, double x, double y, double z, float partialTicks) { GL11.glPushMatrix(); @@ -23,9 +61,6 @@ public class RenderEntity extends Render super.doRender(entity, x, y, z, partialTicks); } - /** - * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. - */ protected String getEntityTexture(Entity entity) { return null; diff --git a/client/src/main/java/client/renderer/entity/RenderEntityItem.java b/client/src/main/java/client/renderer/entity/RenderEntityItem.java index f154a921..825c90dc 100755 --- a/client/src/main/java/client/renderer/entity/RenderEntityItem.java +++ b/client/src/main/java/client/renderer/entity/RenderEntityItem.java @@ -43,7 +43,7 @@ public class RenderEntityItem extends Render float f2 = p_177077_9_.getTransforms().get(Transforms.Camera.GROUND).scale(); GL11.glTranslatef((float)p_177077_2_, (float)p_177077_4_ + f1 + 0.25F * f2, (float)p_177077_6_); - if (flag || this.renderManager.gm != null) + if (flag || this.manager.gm != null) { float f3 = (((float)itemIn.getAge() + p_177077_8_) / 20.0F + itemIn.hoverStart) * (180F / (float)Math.PI); GL11.glRotatef(f3, 0.0F, 1.0F, 0.0F); diff --git a/client/src/main/java/client/renderer/entity/RenderFireball.java b/client/src/main/java/client/renderer/entity/RenderFireball.java index 0ed71d93..97e62ce7 100755 --- a/client/src/main/java/client/renderer/entity/RenderFireball.java +++ b/client/src/main/java/client/renderer/entity/RenderFireball.java @@ -43,8 +43,8 @@ public class RenderFireball extends Render float f4 = 1.0F; float f5 = 0.5F; float f6 = 0.25F; - GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(180.0F - this.manager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.manager.playerViewX, 1.0F, 0.0F, 0.0F); worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_NORMAL); worldrenderer.pos(-0.5D, -0.25D, 0.0D).tex((double)f, (double)f3).normal(0.0F, 1.0F, 0.0F).endVertex(); worldrenderer.pos(0.5D, -0.25D, 0.0D).tex((double)f1, (double)f3).normal(0.0F, 1.0F, 0.0F).endVertex(); diff --git a/client/src/main/java/client/renderer/entity/RenderFish.java b/client/src/main/java/client/renderer/entity/RenderFish.java index 65d35f1c..7633c05e 100755 --- a/client/src/main/java/client/renderer/entity/RenderFish.java +++ b/client/src/main/java/client/renderer/entity/RenderFish.java @@ -41,8 +41,8 @@ public class RenderFish extends Render float f4 = 1.0F; float f5 = 0.5F; float f6 = 0.5F; - GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(180.0F - this.manager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.manager.playerViewX, 1.0F, 0.0F, 0.0F); worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_NORMAL); worldrenderer.pos(-0.5D, -0.5D, 0.0D).tex(0.0D, 0.25D).normal(0.0F, 1.0F, 0.0F).endVertex(); worldrenderer.pos(0.5D, -0.5D, 0.0D).tex(0.25D, 0.25D).normal(0.0F, 1.0F, 0.0F).endVertex(); @@ -66,7 +66,7 @@ public class RenderFish extends Render double d2 = entity.angler.prevZ + (entity.angler.posZ - entity.angler.prevZ) * (double)partialTicks + vec3.zCoord; double d3 = (double)entity.angler.getEyeHeight(); - if (this.renderManager.gm != null && this.renderManager.gm.thirdPersonView > 0 || entity.angler != Client.CLIENT.player) + if (this.manager.gm != null && this.manager.gm.thirdPersonView > 0 || entity.angler != Client.CLIENT.player) { float f9 = (entity.angler.prevYawOffset + (entity.angler.yawOffset - entity.angler.prevYawOffset) * partialTicks) * (float)Math.PI / 180.0F; double d4 = (double)ExtMath.sin(f9); diff --git a/client/src/main/java/client/renderer/entity/RenderHumanoid.java b/client/src/main/java/client/renderer/entity/RenderHumanoid.java index 42660a5d..5fe8115a 100755 --- a/client/src/main/java/client/renderer/entity/RenderHumanoid.java +++ b/client/src/main/java/client/renderer/entity/RenderHumanoid.java @@ -69,12 +69,12 @@ public class RenderHumanoid extends RenderNpc public void doRender(EntityNPC entity, double x, double y, double z, float partialTicks) { - if (entity != this.renderManager.gm.player || this.renderManager.livingPlayer == entity) + if (entity != this.manager.gm.player || this.manager.livingPlayer == entity) { // if(entity.isBoss()) // BossStatus.setBossStatus(entity); double d0 = y; - if(/* this.canSneak() && */ entity.isSneakingVisually() && entity != this.renderManager.gm.player) + if(/* this.canSneak() && */ entity.isSneakingVisually() && entity != this.manager.gm.player) d0 = y - 0.125D; this.setModelVisibilities(entity); super.doRender(entity, x, d0, z, partialTicks); diff --git a/client/src/main/java/client/renderer/entity/RenderItemEntity.java b/client/src/main/java/client/renderer/entity/RenderItemEntity.java index af9d47eb..b65fff95 100755 --- a/client/src/main/java/client/renderer/entity/RenderItemEntity.java +++ b/client/src/main/java/client/renderer/entity/RenderItemEntity.java @@ -28,8 +28,8 @@ public class RenderItemEntity extends Render GL11.glTranslatef((float)x, (float)y, (float)z); GlState.enableRescaleNormal(); GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-this.manager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(this.manager.playerViewX, 1.0F, 0.0F, 0.0F); this.bindTexture(TextureMap.BLOCKS); this.itemRenderer.renderItem(this.getStack(entity), Transforms.Camera.GROUND); GlState.disableRescaleNormal(); diff --git a/client/src/main/java/client/renderer/entity/RenderLiving.java b/client/src/main/java/client/renderer/entity/RenderLiving.java index 4e308dd7..6b744bcf 100755 --- a/client/src/main/java/client/renderer/entity/RenderLiving.java +++ b/client/src/main/java/client/renderer/entity/RenderLiving.java @@ -38,7 +38,7 @@ public abstract class RenderLiving extends RendererLivin public void doRender(T entity, double x, double y, double z, float partial) { if(entity.isBoss()) - this.renderManager.gm.setBossStatus(entity); + this.manager.gm.setBossStatus(entity); super.doRender(entity, x, y, z, partial); this.renderLeash(entity, x, y, z, partial); } diff --git a/client/src/main/java/client/renderer/entity/RenderManager.java b/client/src/main/java/client/renderer/entity/RenderManager.java index 6a373ce5..a4c14af1 100755 --- a/client/src/main/java/client/renderer/entity/RenderManager.java +++ b/client/src/main/java/client/renderer/entity/RenderManager.java @@ -8,11 +8,14 @@ import org.lwjgl.opengl.GL13; import client.Client; import client.init.RenderRegistry; import client.renderer.DefaultVertexFormats; +import client.renderer.Drawing; import client.renderer.GlState; import client.renderer.RenderBuffer; import client.renderer.RenderGlobal; import client.renderer.Tessellator; +import client.renderer.texture.TextureAtlasSprite; import client.renderer.texture.TextureManager; +import client.renderer.texture.TextureMap; import common.collect.Maps; import common.entity.Entity; import common.entity.types.EntityLiving; @@ -239,24 +242,6 @@ public class RenderManager return this.renderEntity(entity, d0 - this.renderPosX, d1 - this.renderPosY, d2 - this.renderPosZ, partialTicks); } - public void renderFloatingBox(Entity entityIn, float partialTicks) - { - double d0 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double)partialTicks; - double d1 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double)partialTicks; - double d2 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double)partialTicks; - Render render = this.getEntityRenderObject(entityIn); - - if (render != null && this.renderEngine != null) - { - int i = entityIn.getBrightnessForRender(partialTicks); - int j = i % 65536; - int k = i / 65536; - GL13.glMultiTexCoord2f(GL13.GL_TEXTURE1, (float)j / 1.0F, (float)k / 1.0F); - GlState.color(1.0F, 1.0F, 1.0F, 1.0F); - render.renderName(entityIn, d0 - this.renderPosX, d1 - this.renderPosY, d2 - this.renderPosZ); - } - } - public boolean renderEntity(Entity entity, double x, double y, double z, float partialTicks) { Render render = this.getEntityRenderObject(entity); @@ -270,9 +255,9 @@ public class RenderManager render.doRender(entity, x, y, z, partialTicks); - if (!this.renderOutlines) + if (!this.renderOutlines && this.gm != null && entity.canRenderOnFire()) { - render.doRenderShadowAndFire(entity, x, y, z, partialTicks); + this.renderEntityFire(entity, x, y, z); } if (this.debugBoundingBox) // && !entity.isInvisible()) // && !hideDebugBox) @@ -287,6 +272,85 @@ public class RenderManager return true; } + + public void renderLabel(Entity entity, String str, double x, double y, double z, int maxDistance) { + if(this.gm == null) + return; + double dist = entity.getDistanceSqToEntity(this.livingPlayer); + if(dist > (double)(maxDistance * maxDistance) || !this.gm.canRenderHud()) + return; + float scale = 0.016666668F; + GL11.glPushMatrix(); + GL11.glTranslatef((float)x + 0.0F, (float)y + entity.height + 0.5F, (float)z); + GL11.glNormal3f(0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(this.playerViewX, 1.0F, 0.0F, 0.0F); + GL11.glScalef(-scale, -scale, scale); + GlState.disableLighting(); + GlState.depthMask(false); + GlState.enableBlend(); + GlState.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); + GlState.depthMask(true); + Drawing.drawTextboxCentered(str, 0, 0, 0x3f000000); + GlState.enableLighting(); + GlState.disableBlend(); + GlState.color(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + } + + private void renderEntityFire(Entity entity, double x, double y, double z) + { + GlState.disableLighting(); + TextureMap map = this.gm.getTextureMapBlocks(); + TextureAtlasSprite layer0 = map.getAtlasSprite("blocks/fire_layer_0"); + TextureAtlasSprite layer1 = map.getAtlasSprite("blocks/fire_layer_1"); + GL11.glPushMatrix(); + GL11.glTranslatef((float)x, (float)y, (float)z); + float scale = entity.width * 1.4F; + GL11.glScalef(scale, scale, scale); + RenderBuffer rb = Tessellator.getBuffer(); + float f1 = 0.5F; + float f2 = 0.0F; + float f3 = entity.height / scale; + float f4 = (float)(entity.posY - entity.getEntityBoundingBox().minY); + GL11.glRotatef(-this.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.0F, -0.3F + (float)((int)f3) * 0.02F); + GlState.color(1.0F, 1.0F, 1.0F, 1.0F); + float f5 = 0.0F; + int i = 0; + rb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + + while (f3 > 0.0F) + { + TextureAtlasSprite layer = i % 2 == 0 ? layer0 : layer1; + this.renderEngine.bindTexture(TextureMap.BLOCKS); + float f6 = layer.getMinU(); + float f7 = layer.getMinV(); + float f8 = layer.getMaxU(); + float f9 = layer.getMaxV(); + + if (i / 2 % 2 == 0) + { + float f10 = f8; + f8 = f6; + f6 = f10; + } + + rb.pos((double)(f1 - f2), (double)(0.0F - f4), (double)f5).tex((double)f8, (double)f9).endVertex(); + rb.pos((double)(-f1 - f2), (double)(0.0F - f4), (double)f5).tex((double)f6, (double)f9).endVertex(); + rb.pos((double)(-f1 - f2), (double)(1.4F - f4), (double)f5).tex((double)f6, (double)f7).endVertex(); + rb.pos((double)(f1 - f2), (double)(1.4F - f4), (double)f5).tex((double)f8, (double)f7).endVertex(); + f3 -= 0.45F; + f4 -= 0.45F; + f1 *= 0.9F; + f5 += 0.03F; + ++i; + } + + Tessellator.draw(); + GL11.glPopMatrix(); + GlState.enableLighting(); + } private void renderDebugBoundingBox(Entity entityIn, double x, double y, double z, float partialTicks) { diff --git a/client/src/main/java/client/renderer/entity/RenderXp.java b/client/src/main/java/client/renderer/entity/RenderXp.java index 13e27d5a..a900fcda 100755 --- a/client/src/main/java/client/renderer/entity/RenderXp.java +++ b/client/src/main/java/client/renderer/entity/RenderXp.java @@ -39,8 +39,8 @@ public class RenderXp extends Render { float n = (int)((ExtMath.sin(color + (float)Math.PI) + 1.0F) * 0.5F * 255.0F); int r = (int)(n * (value / 10.0f)); int b = (int)(n * ((10 - value) / 10.0f)); - GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(180.0F - this.manager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.manager.playerViewX, 1.0F, 0.0F, 0.0F); float size = 0.25F; GL11.glScalef(size, size, size); RenderBuffer rb = Tessellator.getBuffer(); @@ -64,7 +64,10 @@ public class RenderXp extends Render { return TEXTURE; } - protected void renderLivingLabel(EntityXp entityIn, String str, double x, double y, double z, int maxDistance) { - super.renderLivingLabel(entityIn, str, x, y - 0.5, z, maxDistance); - } + protected void renderName(EntityXp entity, double x, double y, double z) + { + String name = entity.getDisplayName(); + if(name != null && !name.isEmpty()) + this.manager.renderLabel(entity, name, x, y - 0.5, z, 64); + } } diff --git a/client/src/main/java/client/renderer/entity/RendererLivingEntity.java b/client/src/main/java/client/renderer/entity/RendererLivingEntity.java index c2fe4f81..a5da48ae 100755 --- a/client/src/main/java/client/renderer/entity/RendererLivingEntity.java +++ b/client/src/main/java/client/renderer/entity/RendererLivingEntity.java @@ -502,9 +502,9 @@ public abstract class RendererLivingEntity extends Rende { String name = entity.getDisplayName(); if(name != null && !name.isEmpty()) - this.renderLivingLabel(entity, name, x, entity.isSneakingVisually() ? y - 0.25 : y, z, 64); + this.manager.renderLabel(entity, name, x, entity.isSneakingVisually() ? y - 0.25 : y, z, 64); if(entity.isEntityAlive()) - this.renderLivingLabel(entity, entity.formatStats(), x, (entity.isSneakingVisually() ? y - 0.25 : y) + 0.3, z, 32); + this.manager.renderLabel(entity, entity.formatStats(), x, (entity.isSneakingVisually() ? y - 0.25 : y) + 0.3, z, 32); } // protected boolean canRenderName(T entity) diff --git a/common/src/main/java/common/world/World.java b/common/src/main/java/common/world/World.java index 542065fc..4fcd57ef 100755 --- a/common/src/main/java/common/world/World.java +++ b/common/src/main/java/common/world/World.java @@ -49,16 +49,7 @@ import common.util.Vec3; import common.vars.Vars; public abstract class World implements IWorldAccess { - public static final float[][] BRIGHTNESS = new float[16][16]; - static { - for(int bright = 0; bright < 16; bright++) { - float br = (float)bright / 15.0f; - for(int idx = 0; idx <= 15; idx++) { - float sub = 1.0F - (float)idx / 15.0F; - BRIGHTNESS[bright][idx] = (1.0F - sub) / (sub * 3.0F + 1.0F) * (1.0F - br) + br; - } - } - } + public static final float[] BRIGHTNESS = new float[] {0.0f, 0.02f, 0.04f, 0.06f, 0.08f, 0.11f, 0.14f, 0.18f, 0.22f, 0.27f, 0.33f, 0.41f, 0.5f, 0.62f, 0.78f, 1.0f}; public static final float[] MOON_PHASES = new float[] {1.0F, 0.75F, 0.5F, 0.25F, 0.0F, 0.25F, 0.5F, 0.75F}; public static final int MAX_SIZE = 67108864; public static final int MAX_SIZE_Y = 4096; @@ -568,7 +559,7 @@ public abstract class World implements IWorldAccess { } public float getLightBrightness(BlockPos pos) { - return BRIGHTNESS[this.dimension.getBrightness()][this.getLightFromNeighbors(pos)]; + return Math.max(BRIGHTNESS[this.getLightFromNeighbors(pos)], (float)this.dimension.getBrightness() / 15.0f); } public State getState(BlockPos pos) {