193 lines
4.6 KiB
Java
193 lines
4.6 KiB
Java
package resonantinduction.old.client.render;
|
|
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.client.renderer.entity.Render;
|
|
import net.minecraft.client.renderer.texture.TextureMap;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraft.world.IBlockAccess;
|
|
import net.minecraft.world.World;
|
|
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
import universalelectricity.api.vector.Vector3;
|
|
|
|
public class RenderBlockEntity extends Render
|
|
{
|
|
|
|
public static RenderBlockEntity INSTANCE = new RenderBlockEntity();
|
|
|
|
private RenderBlockEntity()
|
|
{
|
|
}
|
|
|
|
@Override
|
|
public void doRender(Entity entity, double i, double j, double k, float f, float f1)
|
|
{
|
|
doRenderBlock((EntityFakeBlock) entity, i, j, k);
|
|
}
|
|
|
|
public void doRenderBlock(EntityFakeBlock entity, double i, double j, double k)
|
|
{
|
|
if (entity.isDead)
|
|
return;
|
|
|
|
shadowSize = entity.shadowSize;
|
|
World world = entity.worldObj;
|
|
BlockRenderInfo util = new BlockRenderInfo();
|
|
util.texture = entity.texture;
|
|
this.bindTexture(TextureMap.locationBlocksTexture);
|
|
|
|
for (int iBase = 0; iBase < entity.iSize; ++iBase)
|
|
{
|
|
for (int jBase = 0; jBase < entity.jSize; ++jBase)
|
|
{
|
|
for (int kBase = 0; kBase < entity.kSize; ++kBase)
|
|
{
|
|
|
|
util.min = new Vector3();
|
|
util.max = new Vector3();
|
|
|
|
double remainX = entity.iSize - iBase;
|
|
double remainY = entity.jSize - jBase;
|
|
double remainZ = entity.kSize - kBase;
|
|
|
|
util.max.x = (remainX > 1.0 ? 1.0 : remainX);
|
|
util.max.y = (remainY > 1.0 ? 1.0 : remainY);
|
|
util.max.z = (remainZ > 1.0 ? 1.0 : remainZ);
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslatef((float) i, (float) j, (float) k);
|
|
GL11.glRotatef(entity.rotationX, 1, 0, 0);
|
|
GL11.glRotatef(entity.rotationY, 0, 1, 0);
|
|
GL11.glRotatef(entity.rotationZ, 0, 0, 1);
|
|
GL11.glTranslatef(iBase, jBase, kBase);
|
|
|
|
int lightX, lightY, lightZ;
|
|
|
|
lightX = (int) (Math.floor(entity.posX) + iBase);
|
|
lightY = (int) (Math.floor(entity.posY) + jBase);
|
|
lightZ = (int) (Math.floor(entity.posZ) + kBase);
|
|
|
|
GL11.glDisable(2896 /* GL_LIGHTING */);
|
|
renderBlock(util, world, lightX, lightY, lightZ, false, true);
|
|
GL11.glEnable(2896 /* GL_LIGHTING */);
|
|
GL11.glPopMatrix();
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void renderBlock(BlockRenderInfo block, IBlockAccess blockAccess, int x, int y, int z, boolean doLight, boolean doTessellating)
|
|
{
|
|
float f = 0.5F;
|
|
float f1 = 1.0F;
|
|
float f2 = 0.8F;
|
|
float f3 = 0.6F;
|
|
|
|
renderBlocks.renderMaxX = block.max.x;
|
|
renderBlocks.renderMinX = block.min.x;
|
|
|
|
renderBlocks.renderMaxY = block.max.y;
|
|
renderBlocks.renderMinY = block.min.y;
|
|
|
|
renderBlocks.renderMaxZ = block.max.z;
|
|
renderBlocks.renderMinZ = block.min.z;
|
|
|
|
renderBlocks.enableAO = false;
|
|
|
|
Tessellator tessellator = Tessellator.instance;
|
|
|
|
if (doTessellating)
|
|
{
|
|
tessellator.startDrawingQuads();
|
|
}
|
|
|
|
float f4 = 0, f5 = 0;
|
|
|
|
if (doLight)
|
|
{
|
|
f4 = block.getBlockBrightness(blockAccess, x, y, z);
|
|
f5 = block.getBlockBrightness(blockAccess, x, y, z);
|
|
if (f5 < f4)
|
|
{
|
|
f5 = f4;
|
|
}
|
|
tessellator.setColorOpaque_F(f * f5, f * f5, f * f5);
|
|
}
|
|
|
|
renderBlocks.renderFaceYNeg(null, 0, 0, 0, block.getBlockTextureFromSide(0));
|
|
|
|
if (doLight)
|
|
{
|
|
f5 = block.getBlockBrightness(blockAccess, x, y, z);
|
|
if (f5 < f4)
|
|
{
|
|
f5 = f4;
|
|
}
|
|
tessellator.setColorOpaque_F(f1 * f5, f1 * f5, f1 * f5);
|
|
}
|
|
|
|
renderBlocks.renderFaceYPos(null, 0, 0, 0, block.getBlockTextureFromSide(1));
|
|
|
|
if (doLight)
|
|
{
|
|
f5 = block.getBlockBrightness(blockAccess, x, y, z);
|
|
if (f5 < f4)
|
|
{
|
|
f5 = f4;
|
|
}
|
|
tessellator.setColorOpaque_F(f2 * f5, f2 * f5, f2 * f5);
|
|
}
|
|
|
|
renderBlocks.renderFaceZNeg(null, 0, 0, 0, block.getBlockTextureFromSide(2));
|
|
|
|
if (doLight)
|
|
{
|
|
f5 = block.getBlockBrightness(blockAccess, x, y, z);
|
|
if (f5 < f4)
|
|
{
|
|
f5 = f4;
|
|
}
|
|
tessellator.setColorOpaque_F(f2 * f5, f2 * f5, f2 * f5);
|
|
}
|
|
|
|
renderBlocks.renderFaceZPos(null, 0, 0, 0, block.getBlockTextureFromSide(3));
|
|
|
|
if (doLight)
|
|
{
|
|
f5 = block.getBlockBrightness(blockAccess, x, y, z);
|
|
if (f5 < f4)
|
|
{
|
|
f5 = f4;
|
|
}
|
|
tessellator.setColorOpaque_F(f3 * f5, f3 * f5, f3 * f5);
|
|
}
|
|
|
|
renderBlocks.renderFaceXNeg(null, 0, 0, 0, block.getBlockTextureFromSide(4));
|
|
|
|
if (doLight)
|
|
{
|
|
f5 = block.getBlockBrightness(blockAccess, x, y, z);
|
|
if (f5 < f4)
|
|
{
|
|
f5 = f4;
|
|
}
|
|
tessellator.setColorOpaque_F(f3 * f5, f3 * f5, f3 * f5);
|
|
}
|
|
|
|
renderBlocks.renderFaceXPos(null, 0, 0, 0, block.getBlockTextureFromSide(5));
|
|
|
|
if (doTessellating)
|
|
{
|
|
tessellator.draw();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected ResourceLocation getEntityTexture(Entity entity)
|
|
{
|
|
throw new UnsupportedOperationException("Not supported yet.");
|
|
}
|
|
}
|