440 lines
17 KiB
Java
440 lines
17 KiB
Java
package mods.tinker.tconstruct.client;
|
|
|
|
import mods.tinker.tconstruct.blocks.liquids.LiquidMetalBase;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockFluid;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.client.renderer.RenderBlocks;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.util.Icon;
|
|
import net.minecraft.util.MathHelper;
|
|
import net.minecraft.world.IBlockAccess;
|
|
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
|
import cpw.mods.fml.client.registry.RenderingRegistry;
|
|
|
|
public class FluidRender implements ISimpleBlockRenderingHandler
|
|
{
|
|
public static int fluidModel = RenderingRegistry.getNextAvailableRenderId();
|
|
@Override
|
|
public void renderInventoryBlock (Block block, int metadata, int modelID, RenderBlocks renderer)
|
|
{
|
|
//Inventory should be an item. renderer is not here!
|
|
}
|
|
|
|
@Override
|
|
public boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, Block block, int modelID, RenderBlocks renderer)
|
|
{
|
|
return renderBlockFluids(renderer, world, block, x, y, z);
|
|
}
|
|
|
|
@Override
|
|
public boolean shouldRender3DInInventory ()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public int getRenderId ()
|
|
{
|
|
return fluidModel;
|
|
}
|
|
|
|
public boolean renderBlockFluids(RenderBlocks renderer, IBlockAccess world, Block block, int x, int y, int z)
|
|
{
|
|
Tessellator tessellator = Tessellator.instance;
|
|
int l = block.colorMultiplier(world, x, y, z);
|
|
float f = (float)(l >> 16 & 255) / 255.0F;
|
|
float f1 = (float)(l >> 8 & 255) / 255.0F;
|
|
float f2 = (float)(l & 255) / 255.0F;
|
|
boolean flag = block.shouldSideBeRendered(world, x, y + 1, z, 1);
|
|
boolean flag1 = block.shouldSideBeRendered(world, x, y - 1, z, 0);
|
|
boolean[] aboolean = new boolean[] {block.shouldSideBeRendered(world, x, y, z - 1, 2), block.shouldSideBeRendered(world, x, y, z + 1, 3), block.shouldSideBeRendered(world, x - 1, y, z, 4), block.shouldSideBeRendered(world, x + 1, y, z, 5)};
|
|
|
|
if (!flag && !flag1 && !aboolean[0] && !aboolean[1] && !aboolean[2] && !aboolean[3])
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
boolean flag2 = false;
|
|
float f3 = 0.5F;
|
|
float f4 = 1.0F;
|
|
float f5 = 0.8F;
|
|
float f6 = 0.6F;
|
|
double d0 = 0.0D;
|
|
double d1 = 1.0D;
|
|
Material material = block.blockMaterial;
|
|
int i1 = world.getBlockMetadata(x, y, z);
|
|
double d2 = (double)renderer.getFluidHeight(x, y, z, material);
|
|
double d3 = (double)renderer.getFluidHeight(x, y, z + 1, material);
|
|
double d4 = (double)renderer.getFluidHeight(x + 1, y, z + 1, material);
|
|
double d5 = (double)renderer.getFluidHeight(x + 1, y, z, material);
|
|
double d6 = 0.0010000000474974513D;
|
|
float f7;
|
|
|
|
if (renderer.renderAllFaces || flag)
|
|
{
|
|
flag2 = true;
|
|
Icon icon = renderer.func_94165_a(block, 1, i1);
|
|
float f8 = (float)BlockFluid.getFlowDirection(world, x, y, z, material);
|
|
|
|
if (f8 > -999.0F)
|
|
{
|
|
icon = renderer.func_94165_a(block, 2, i1);
|
|
}
|
|
|
|
d2 -= d6;
|
|
d3 -= d6;
|
|
d4 -= d6;
|
|
d5 -= d6;
|
|
double d7;
|
|
double d8;
|
|
double d9;
|
|
double d10;
|
|
double d11;
|
|
double d12;
|
|
double d13;
|
|
double d14;
|
|
|
|
if (f8 < -999.0F)
|
|
{
|
|
d8 = (double)icon.func_94214_a(0.0D);
|
|
d12 = (double)icon.func_94207_b(0.0D);
|
|
d7 = d8;
|
|
d11 = (double)icon.func_94207_b(16.0D);
|
|
d10 = (double)icon.func_94214_a(16.0D);
|
|
d14 = d11;
|
|
d9 = d10;
|
|
d13 = d12;
|
|
}
|
|
else
|
|
{
|
|
f7 = MathHelper.sin(f8) * 0.25F;
|
|
float f9 = MathHelper.cos(f8) * 0.25F;
|
|
d8 = (double)icon.func_94214_a((double)(8.0F + (-f9 - f7) * 16.0F));
|
|
d12 = (double)icon.func_94207_b((double)(8.0F + (-f9 + f7) * 16.0F));
|
|
d7 = (double)icon.func_94214_a((double)(8.0F + (-f9 + f7) * 16.0F));
|
|
d11 = (double)icon.func_94207_b((double)(8.0F + (f9 + f7) * 16.0F));
|
|
d10 = (double)icon.func_94214_a((double)(8.0F + (f9 + f7) * 16.0F));
|
|
d14 = (double)icon.func_94207_b((double)(8.0F + (f9 - f7) * 16.0F));
|
|
d9 = (double)icon.func_94214_a((double)(8.0F + (f9 - f7) * 16.0F));
|
|
d13 = (double)icon.func_94207_b((double)(8.0F + (-f9 - f7) * 16.0F));
|
|
}
|
|
|
|
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
|
|
f7 = 1.0F;
|
|
tessellator.setColorOpaque_F(f4 * f7 * f, f4 * f7 * f1, f4 * f7 * f2);
|
|
tessellator.addVertexWithUV((double)(x + 0), (double)y + d2, (double)(z + 0), d8, d12);
|
|
tessellator.addVertexWithUV((double)(x + 0), (double)y + d3, (double)(z + 1), d7, d11);
|
|
tessellator.addVertexWithUV((double)(x + 1), (double)y + d4, (double)(z + 1), d10, d14);
|
|
tessellator.addVertexWithUV((double)(x + 1), (double)y + d5, (double)(z + 0), d9, d13);
|
|
}
|
|
|
|
if (renderer.renderAllFaces || flag1)
|
|
{
|
|
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y - 1, z));
|
|
float f10 = 1.0F;
|
|
tessellator.setColorOpaque_F(f3 * f10, f3 * f10, f3 * f10);
|
|
renderer.renderBottomFace(block, (double)x, (double)y + d6, (double)z, renderer.func_94173_a(block, 0));
|
|
flag2 = true;
|
|
}
|
|
|
|
for (int j1 = 0; j1 < 4; ++j1)
|
|
{
|
|
int k1 = x;
|
|
int l1 = z;
|
|
|
|
if (j1 == 0)
|
|
{
|
|
l1 = z - 1;
|
|
}
|
|
|
|
if (j1 == 1)
|
|
{
|
|
++l1;
|
|
}
|
|
|
|
if (j1 == 2)
|
|
{
|
|
k1 = x - 1;
|
|
}
|
|
|
|
if (j1 == 3)
|
|
{
|
|
++k1;
|
|
}
|
|
|
|
Icon icon1 = renderer.func_94165_a(block, j1 + 2, i1);
|
|
|
|
if (renderer.renderAllFaces || aboolean[j1])
|
|
{
|
|
double d15;
|
|
double d16;
|
|
double d17;
|
|
double d18;
|
|
double d19;
|
|
double d20;
|
|
|
|
if (j1 == 0)
|
|
{
|
|
d15 = d2;
|
|
d17 = d5;
|
|
d16 = (double)x;
|
|
d18 = (double)(x + 1);
|
|
d19 = (double)z + d6;
|
|
d20 = (double)z + d6;
|
|
}
|
|
else if (j1 == 1)
|
|
{
|
|
d15 = d4;
|
|
d17 = d3;
|
|
d16 = (double)(x + 1);
|
|
d18 = (double)x;
|
|
d19 = (double)(z + 1) - d6;
|
|
d20 = (double)(z + 1) - d6;
|
|
}
|
|
else if (j1 == 2)
|
|
{
|
|
d15 = d3;
|
|
d17 = d2;
|
|
d16 = (double)x + d6;
|
|
d18 = (double)x + d6;
|
|
d19 = (double)(z + 1);
|
|
d20 = (double)z;
|
|
}
|
|
else
|
|
{
|
|
d15 = d5;
|
|
d17 = d4;
|
|
d16 = (double)(x + 1) - d6;
|
|
d18 = (double)(x + 1) - d6;
|
|
d19 = (double)z;
|
|
d20 = (double)(z + 1);
|
|
}
|
|
|
|
flag2 = true;
|
|
float f11 = icon1.func_94214_a(0.0D);
|
|
f7 = icon1.func_94214_a(8.0D);
|
|
int i2 = icon1.func_94216_b();
|
|
float f12 = icon1.func_94207_b((1.0D - d15) * 16.0D * 0.5D);
|
|
float f13 = icon1.func_94207_b((1.0D - d17) * 16.0D * 0.5D);
|
|
float f14 = icon1.func_94207_b(8.0D);
|
|
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, k1, y, l1));
|
|
float f15 = 1.0F;
|
|
|
|
if (j1 < 2)
|
|
{
|
|
f15 *= f5;
|
|
}
|
|
else
|
|
{
|
|
f15 *= f6;
|
|
}
|
|
|
|
tessellator.setColorOpaque_F(f4 * f15 * f, f4 * f15 * f1, f4 * f15 * f2);
|
|
tessellator.addVertexWithUV(d16, (double)y + d15, d19, (double)f11, (double)f12);
|
|
tessellator.addVertexWithUV(d18, (double)y + d17, d20, (double)f7, (double)f13);
|
|
tessellator.addVertexWithUV(d18, (double)(y + 0), d20, (double)f7, (double)f14);
|
|
tessellator.addVertexWithUV(d16, (double)(y + 0), d19, (double)f11, (double)f14);
|
|
}
|
|
}
|
|
|
|
renderer.renderMinY = d0;
|
|
renderer.renderMaxY = d1;
|
|
return flag2;
|
|
}
|
|
}
|
|
|
|
/*public boolean renderBlockFluids(RenderBlocks renderer, IBlockAccess world, Block block, int x, int y, int z)
|
|
{
|
|
Tessellator tessellator = Tessellator.instance;
|
|
int blockColor = block.colorMultiplier(world, x, y, z);
|
|
float var7 = (float)(blockColor >> 16 & 255) / 255.0F;
|
|
float var8 = (float)(blockColor >> 8 & 255) / 255.0F;
|
|
float var9 = (float)(blockColor & 255) / 255.0F;
|
|
boolean renderTop = block.shouldSideBeRendered(world, x, y + 1, z, 1);
|
|
boolean renderBottom = block.shouldSideBeRendered(world, x, y - 1, z, 0);
|
|
boolean[] var12 = new boolean[] {block.shouldSideBeRendered(world, x, y, z - 1, 2), block.shouldSideBeRendered(world, x, y, z + 1, 3), block.shouldSideBeRendered(world, x - 1, y, z, 4), block.shouldSideBeRendered(world, x + 1, y, z, 5)};
|
|
|
|
if (!renderTop && !renderBottom && !var12[0] && !var12[1] && !var12[2] && !var12[3])
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
boolean var13 = false;
|
|
float var14 = 0.5F;
|
|
float var15 = 1.0F;
|
|
float var16 = 0.8F;
|
|
float var17 = 0.6F;
|
|
double var18 = 0.0D;
|
|
double var20 = 1.0D;
|
|
Material var22 = block.blockMaterial;
|
|
//int var23 = world.getBlockMetadata(x, y, z);
|
|
double var24 = (double)renderer.getFluidHeight(x, y, z, var22);
|
|
double var26 = (double)renderer.getFluidHeight(x, y, z + 1, var22);
|
|
double var28 = (double)renderer.getFluidHeight(x + 1, y, z + 1, var22);
|
|
double var30 = (double)renderer.getFluidHeight(x + 1, y, z, var22);
|
|
double var32 = 0.0010000000474974513D;
|
|
int texturePos;
|
|
int textureBase = block.getBlockTexture(world, x, y, z, 0);
|
|
int var37;
|
|
|
|
if (renderer.renderAllFaces || renderTop)
|
|
{
|
|
var13 = true;
|
|
texturePos = block.getBlockTextureFromSide(1) + textureBase;
|
|
float var35 = (float)LiquidMetalBase.getFlowDirection(world, x, y, z, var22);
|
|
|
|
if (var35 > -999.0F)
|
|
{
|
|
texturePos = block.getBlockTextureFromSide(2) + textureBase;
|
|
}
|
|
|
|
var24 -= var32;
|
|
var26 -= var32;
|
|
var28 -= var32;
|
|
var30 -= var32;
|
|
int var36 = (texturePos & 15) << 4;
|
|
var37 = texturePos & 240;
|
|
double var38 = ((double)var36 + 8.0D) / 256.0D;
|
|
double var40 = ((double)var37 + 8.0D) / 256.0D;
|
|
|
|
if (var35 < -999.0F)
|
|
{
|
|
var35 = 0.0F;
|
|
}
|
|
else
|
|
{
|
|
var38 = (double)((float)(var36 + 16) / 256.0F);
|
|
var40 = (double)((float)(var37 + 16) / 256.0F);
|
|
}
|
|
|
|
double var42 = (double)(MathHelper.sin(var35) * 8.0F) / 256.0D;
|
|
double var44 = (double)(MathHelper.cos(var35) * 8.0F) / 256.0D;
|
|
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
|
|
float var46 = 1.0F;
|
|
tessellator.setColorOpaque_F(var15 * var46 * var7, var15 * var46 * var8, var15 * var46 * var9);
|
|
tessellator.addVertexWithUV((double)(x + 0), (double)y + var24, (double)(z + 0), var38 - var44 - var42, var40 - var44 + var42);
|
|
tessellator.addVertexWithUV((double)(x + 0), (double)y + var26, (double)(z + 1), var38 - var44 + var42, var40 + var44 + var42);
|
|
tessellator.addVertexWithUV((double)(x + 1), (double)y + var28, (double)(z + 1), var38 + var44 + var42, var40 + var44 - var42);
|
|
tessellator.addVertexWithUV((double)(x + 1), (double)y + var30, (double)(z + 0), var38 + var44 - var42, var40 - var44 - var42);
|
|
}
|
|
|
|
if (renderer.renderAllFaces || renderBottom)
|
|
{
|
|
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y - 1, z));
|
|
float var65 = 1.0F;
|
|
tessellator.setColorOpaque_F(var14 * var65, var14 * var65, var14 * var65);
|
|
renderer.renderBottomFace(block, (double)x, (double)y + var32, (double)z, block.getBlockTextureFromSide(0));
|
|
var13 = true;
|
|
}
|
|
|
|
for (texturePos = 0; texturePos < 4; ++texturePos)
|
|
{
|
|
int var64 = x;
|
|
var37 = z;
|
|
|
|
if (texturePos == 0)
|
|
{
|
|
var37 = z - 1;
|
|
}
|
|
|
|
if (texturePos == 1)
|
|
{
|
|
++var37;
|
|
}
|
|
|
|
if (texturePos == 2)
|
|
{
|
|
var64 = x - 1;
|
|
}
|
|
|
|
if (texturePos == 3)
|
|
{
|
|
++var64;
|
|
}
|
|
|
|
int var66 = block.getBlockTextureFromSide(texturePos + 2) + textureBase;
|
|
int var39 = (var66 & 15) << 4;
|
|
int var67 = var66 & 240;
|
|
|
|
if (renderer.renderAllFaces || var12[texturePos])
|
|
{
|
|
double var43;
|
|
double var41;
|
|
double var47;
|
|
double var45;
|
|
double var51;
|
|
double var49;
|
|
|
|
if (texturePos == 0)
|
|
{
|
|
var41 = var24;
|
|
var43 = var30;
|
|
var45 = (double)x;
|
|
var49 = (double)(x + 1);
|
|
var47 = (double)z + var32;
|
|
var51 = (double)z + var32;
|
|
}
|
|
else if (texturePos == 1)
|
|
{
|
|
var41 = var28;
|
|
var43 = var26;
|
|
var45 = (double)(x + 1);
|
|
var49 = (double)x;
|
|
var47 = (double)(z + 1) - var32;
|
|
var51 = (double)(z + 1) - var32;
|
|
}
|
|
else if (texturePos == 2)
|
|
{
|
|
var41 = var26;
|
|
var43 = var24;
|
|
var45 = (double)x + var32;
|
|
var49 = (double)x + var32;
|
|
var47 = (double)(z + 1);
|
|
var51 = (double)z;
|
|
}
|
|
else
|
|
{
|
|
var41 = var30;
|
|
var43 = var28;
|
|
var45 = (double)(x + 1) - var32;
|
|
var49 = (double)(x + 1) - var32;
|
|
var47 = (double)z;
|
|
var51 = (double)(z + 1);
|
|
}
|
|
|
|
var13 = true;
|
|
double var53 = (double)((float)(var39 + 0) / 256.0F);
|
|
double var55 = ((double)(var39 + 16) - 0.01D) / 256.0D;
|
|
double var57 = ((double)var67 + (1.0D - var41) * 16.0D) / 256.0D;
|
|
double var59 = ((double)var67 + (1.0D - var43) * 16.0D) / 256.0D;
|
|
double var61 = ((double)(var67 + 16) - 0.01D) / 256.0D;
|
|
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, var64, y, var37));
|
|
float var63 = 1.0F;
|
|
|
|
if (texturePos < 2)
|
|
{
|
|
var63 *= var16;
|
|
}
|
|
else
|
|
{
|
|
var63 *= var17;
|
|
}
|
|
|
|
tessellator.setColorOpaque_F(var15 * var63 * var7, var15 * var63 * var8, var15 * var63 * var9);
|
|
tessellator.addVertexWithUV(var45, (double)y + var41, var47, var53, var57);
|
|
tessellator.addVertexWithUV(var49, (double)y + var43, var51, var55, var59);
|
|
tessellator.addVertexWithUV(var49, (double)(y + 0), var51, var55, var61);
|
|
tessellator.addVertexWithUV(var45, (double)(y + 0), var47, var53, var61);
|
|
}
|
|
}
|
|
|
|
renderer.renderMinY = var18;
|
|
renderer.renderMaxY = var20;
|
|
return var13;
|
|
}
|
|
}*/
|
|
}
|