Files
TinkersConstruct/tconstruct/client/block/PaneRender.java
T

395 lines
20 KiB
Java

package tconstruct.client.block;
import tconstruct.blocks.PaneBase;
import tconstruct.client.TProxyClient;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.Icon;
import net.minecraft.world.IBlockAccess;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
public class PaneRender implements ISimpleBlockRenderingHandler
{
public static int model = RenderingRegistry.getNextAvailableRenderId();
@Override
public void renderInventoryBlock (Block block, int metadata, int modelID, RenderBlocks renderer)
{
if (modelID == model)
{
renderer.setRenderBounds(0.0F, 0.0F, 0.4375F, 1.0F, 1.0F, 0.5625F);
TProxyClient.renderStandardInvBlock(renderer, block, metadata);
}
}
@Override
public boolean renderWorldBlock (IBlockAccess world, int x, int y, int z, Block block, int modelID, RenderBlocks renderer)
{
if (modelID == model)
{
return renderPaneInWorld(renderer, world, x, y, z, (PaneBase) block);
}
else
{
return false;
}
}
@Override
public boolean shouldRender3DInInventory ()
{
return true;
}
@Override
public int getRenderId ()
{
return model;
}
public static boolean renderPaneInWorld (RenderBlocks renderblocks, IBlockAccess iblockaccess, int x, int y, int z, PaneBase pane)
{
int l = iblockaccess.getHeight();
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(pane.getMixedBrightnessForBlock(iblockaccess, x, y, z));
float f = 1.0F;
int i1 = pane.colorMultiplier(iblockaccess, x, y, z);
float f1 = (float) (i1 >> 16 & 0xff) / 255F;
float f2 = (float) (i1 >> 8 & 0xff) / 255F;
float f3 = (float) (i1 & 0xff) / 255F;
if (EntityRenderer.anaglyphEnable)
{
float f4 = (f1 * 30F + f2 * 59F + f3 * 11F) / 100F;
float f5 = (f1 * 30F + f2 * 70F) / 100F;
float f6 = (f1 * 30F + f3 * 70F) / 100F;
f1 = f4;
f2 = f5;
f3 = f6;
}
tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
boolean flag = false;
boolean flag1 = false;
Icon icon;
Icon icon1;
int meta = iblockaccess.getBlockMetadata(x, y, z);
icon = renderblocks.getBlockIconFromSideAndMetadata(pane, 0, meta);
icon1 = pane.getSideTextureIndex(meta);
meta = icon.getOriginX();
int k1 = icon.getOriginY();
double d = (double) icon.getMinU();
double d1 = (double) icon.getInterpolatedU(8.0D);
double d2 = (double) icon.getMaxU();
double d3 = (double) icon.getMinV();
double d4 = (double) icon.getMaxV();
int l1 = icon1.getOriginX();
int i2 = icon1.getOriginY();
double d5 = (double) icon1.getInterpolatedU(7.0D);
double d6 = (double) icon1.getInterpolatedU(9.0D);
double d7 = (double) icon1.getMinV();
double d8 = (double) icon1.getInterpolatedV(8.0D);
double d9 = (double) icon1.getMaxV();
/*int blockTextureIndex;
int blockSideIndex;
int j1 = iblockaccess.getBlockMetadata(x, y, z);
blockTextureIndex = pane.getBlockTextureFromSideAndMetadata(0, j1);
blockSideIndex = pane.getSideTextureIndex(j1);
int k1 = (blockTextureIndex & 0xf) << 4;
int j2 = blockTextureIndex & 0xf0;
double d = (float) k1 / 256F;
double d1 = ((float) k1 + 7.99F) / 256F;
double d2 = ((float) k1 + 15.99F) / 256F;
double d3 = (float) j2 / 256F;
double d4 = ((float) j2 + 15.99F) / 256F;
int k2 = (blockSideIndex & 0xf) << 4;
int l2 = blockSideIndex & 0xf0;
double d5 = (float) (k2 + 7) / 256F;
double d6 = ((float) k2 + 8.99F) / 256F;
double d7 = (float) l2 / 256F;
double d8 = (float) (l2 + 8) / 256F;
double d9 = ((float) l2 + 15.99F) / 256F;*/
double xBot = x;
double xMid = (double) x + 0.5D;
double xTop = x + 1;
double zBot = z;
double zMid = (double) z + 0.5D;
double zTop = z + 1;
double xMidDown = ((double) x + 0.5D) - 0.0625D;
double xMidUp = (double) x + 0.5D + 0.0625D;
double zMidDown = ((double) z + 0.5D) - 0.0625D;
double zMidUp = (double) z + 0.5D + 0.0625D;
boolean west = pane.canConnectTo(iblockaccess.getBlockId(x, y, z - 1));
boolean east = pane.canConnectTo(iblockaccess.getBlockId(x, y, z + 1));
boolean south = pane.canConnectTo(iblockaccess.getBlockId(x - 1, y, z));
boolean north = pane.canConnectTo(iblockaccess.getBlockId(x + 1, y, z));
boolean renderAbove = pane.shouldSideBeRendered(iblockaccess, x, y + 1, z, 1);
boolean renderBelow = pane.shouldSideBeRendered(iblockaccess, x, y - 1, z, 0);
if ((!south || !north) && (south || north || west || east))
{
if (south && !north)
{
tessellator.addVertexWithUV(xBot, y + 1, zMidDown, d, d3);
tessellator.addVertexWithUV(xBot, y + 0, zMidDown, d, d4);
tessellator.addVertexWithUV(xMid, y + 0, zMidDown, d1, d4);
tessellator.addVertexWithUV(xMid, y + 1, zMidDown, d1, d3);
tessellator.addVertexWithUV(xMid, y + 1, zMidUp, d, d3);
tessellator.addVertexWithUV(xMid, y + 0, zMidUp, d, d4);
tessellator.addVertexWithUV(xBot, y + 0, zMidUp, d1, d4);
tessellator.addVertexWithUV(xBot, y + 1, zMidUp, d1, d3);
if (!east && !west)
{
tessellator.addVertexWithUV(xMid, y + 1, zMidUp, d5, d7);
tessellator.addVertexWithUV(xMid, y + 0, zMidUp, d5, d9);
tessellator.addVertexWithUV(xMid, y + 0, zMidDown, d6, d9);
tessellator.addVertexWithUV(xMid, y + 1, zMidDown, d6, d7);
}
if (renderAbove || y < l - 1 && iblockaccess.isAirBlock(x - 1, y + 1, z))
{
tessellator.addVertexWithUV(xBot, (double) (y + 1) + 0.01D, zMidUp, d6, d8);
tessellator.addVertexWithUV(xMid, (double) (y + 1) + 0.01D, zMidUp, d6, d9);
tessellator.addVertexWithUV(xMid, (double) (y + 1) + 0.01D, zMidDown, d5, d9);
tessellator.addVertexWithUV(xBot, (double) (y + 1) + 0.01D, zMidDown, d5, d8);
}
if (renderBelow || y > 1 && iblockaccess.isAirBlock(x - 1, y - 1, z))
{
tessellator.addVertexWithUV(xBot, (double) y - 0.01D, zMidUp, d6, d8);
tessellator.addVertexWithUV(xMid, (double) y - 0.01D, zMidUp, d6, d9);
tessellator.addVertexWithUV(xMid, (double) y - 0.01D, zMidDown, d5, d9);
tessellator.addVertexWithUV(xBot, (double) y - 0.01D, zMidDown, d5, d8);
}
}
else if (!south && north)
{
tessellator.addVertexWithUV(xMid, y + 1, zMidDown, d1, d3);
tessellator.addVertexWithUV(xMid, y + 0, zMidDown, d1, d4);
tessellator.addVertexWithUV(xTop, y + 0, zMidDown, d2, d4);
tessellator.addVertexWithUV(xTop, y + 1, zMidDown, d2, d3);
tessellator.addVertexWithUV(xTop, y + 1, zMidUp, d1, d3);
tessellator.addVertexWithUV(xTop, y + 0, zMidUp, d1, d4);
tessellator.addVertexWithUV(xMid, y + 0, zMidUp, d2, d4);
tessellator.addVertexWithUV(xMid, y + 1, zMidUp, d2, d3);
if (!east && !west)
{
tessellator.addVertexWithUV(xMid, y + 1, zMidDown, d5, d7);
tessellator.addVertexWithUV(xMid, y + 0, zMidDown, d5, d9);
tessellator.addVertexWithUV(xMid, y + 0, zMidUp, d6, d9);
tessellator.addVertexWithUV(xMid, y + 1, zMidUp, d6, d7);
}
if (renderAbove || y < l - 1 && iblockaccess.isAirBlock(x + 1, y + 1, z))
{
tessellator.addVertexWithUV(xMid, (double) (y + 1) + 0.01D, zMidUp, d6, d7);
tessellator.addVertexWithUV(xTop, (double) (y + 1) + 0.01D, zMidUp, d6, d8);
tessellator.addVertexWithUV(xTop, (double) (y + 1) + 0.01D, zMidDown, d5, d8);
tessellator.addVertexWithUV(xMid, (double) (y + 1) + 0.01D, zMidDown, d5, d7);
}
if (renderBelow || y > 1 && iblockaccess.isAirBlock(x + 1, y - 1, z))
{
tessellator.addVertexWithUV(xMid, (double) y - 0.01D, zMidUp, d6, d7);
tessellator.addVertexWithUV(xTop, (double) y - 0.01D, zMidUp, d6, d8);
tessellator.addVertexWithUV(xTop, (double) y - 0.01D, zMidDown, d5, d8);
tessellator.addVertexWithUV(xMid, (double) y - 0.01D, zMidDown, d5, d7);
}
}
}
else
{
tessellator.addVertexWithUV(xBot, y + 1, zMidDown, d, d3);
tessellator.addVertexWithUV(xBot, y + 0, zMidDown, d, d4);
tessellator.addVertexWithUV(xTop, y + 0, zMidDown, d2, d4);
tessellator.addVertexWithUV(xTop, y + 1, zMidDown, d2, d3);
tessellator.addVertexWithUV(xTop, y + 1, zMidUp, d, d3);
tessellator.addVertexWithUV(xTop, y + 0, zMidUp, d, d4);
tessellator.addVertexWithUV(xBot, y + 0, zMidUp, d2, d4);
tessellator.addVertexWithUV(xBot, y + 1, zMidUp, d2, d3);
if (renderAbove)
{
tessellator.addVertexWithUV(xBot, (double) (y + 1) + 0.01D, zMidUp, d6, d9);
tessellator.addVertexWithUV(xTop, (double) (y + 1) + 0.01D, zMidUp, d6, d7);
tessellator.addVertexWithUV(xTop, (double) (y + 1) + 0.01D, zMidDown, d5, d7);
tessellator.addVertexWithUV(xBot, (double) (y + 1) + 0.01D, zMidDown, d5, d9);
}
else
{
if (y < l - 1 && iblockaccess.isAirBlock(x - 1, y + 1, z))
{
tessellator.addVertexWithUV(xBot, (double) (y + 1) + 0.01D, zMidUp, d6, d8);
tessellator.addVertexWithUV(xMid, (double) (y + 1) + 0.01D, zMidUp, d6, d9);
tessellator.addVertexWithUV(xMid, (double) (y + 1) + 0.01D, zMidDown, d5, d9);
tessellator.addVertexWithUV(xBot, (double) (y + 1) + 0.01D, zMidDown, d5, d8);
}
if (y < l - 1 && iblockaccess.isAirBlock(x + 1, y + 1, z))
{
tessellator.addVertexWithUV(xMid, (double) (y + 1) + 0.01D, zMidUp, d6, d7);
tessellator.addVertexWithUV(xTop, (double) (y + 1) + 0.01D, zMidUp, d6, d8);
tessellator.addVertexWithUV(xTop, (double) (y + 1) + 0.01D, zMidDown, d5, d8);
tessellator.addVertexWithUV(xMid, (double) (y + 1) + 0.01D, zMidDown, d5, d7);
}
}
if (renderBelow)
{
tessellator.addVertexWithUV(xBot, (double) y - 0.01D, zMidUp, d6, d9);
tessellator.addVertexWithUV(xTop, (double) y - 0.01D, zMidUp, d6, d7);
tessellator.addVertexWithUV(xTop, (double) y - 0.01D, zMidDown, d5, d7);
tessellator.addVertexWithUV(xBot, (double) y - 0.01D, zMidDown, d5, d9);
}
else
{
if (y > 1 && iblockaccess.isAirBlock(x - 1, y - 1, z))
{
tessellator.addVertexWithUV(xBot, (double) y - 0.01D, zMidUp, d6, d8);
tessellator.addVertexWithUV(xMid, (double) y - 0.01D, zMidUp, d6, d9);
tessellator.addVertexWithUV(xMid, (double) y - 0.01D, zMidDown, d5, d9);
tessellator.addVertexWithUV(xBot, (double) y - 0.01D, zMidDown, d5, d8);
}
if (y > 1 && iblockaccess.isAirBlock(x + 1, y - 1, z))
{
tessellator.addVertexWithUV(xMid, (double) y - 0.01D, zMidUp, d6, d7);
tessellator.addVertexWithUV(xTop, (double) y - 0.01D, zMidUp, d6, d8);
tessellator.addVertexWithUV(xTop, (double) y - 0.01D, zMidDown, d5, d8);
tessellator.addVertexWithUV(xMid, (double) y - 0.01D, zMidDown, d5, d7);
}
}
}
if ((!west || !east) && (south || north || west || east))
{
if (west && !east)
{
tessellator.addVertexWithUV(xMidDown, y + 1, zBot, d, d3);
tessellator.addVertexWithUV(xMidDown, y + 0, zBot, d, d4);
tessellator.addVertexWithUV(xMidDown, y + 0, zMid, d1, d4);
tessellator.addVertexWithUV(xMidDown, y + 1, zMid, d1, d3);
tessellator.addVertexWithUV(xMidUp, y + 1, zMid, d, d3);
tessellator.addVertexWithUV(xMidUp, y + 0, zMid, d, d4);
tessellator.addVertexWithUV(xMidUp, y + 0, zBot, d1, d4);
tessellator.addVertexWithUV(xMidUp, y + 1, zBot, d1, d3);
if (!north && !south)
{
tessellator.addVertexWithUV(xMidDown, y + 1, zMid, d5, d7);
tessellator.addVertexWithUV(xMidDown, y + 0, zMid, d5, d9);
tessellator.addVertexWithUV(xMidUp, y + 0, zMid, d6, d9);
tessellator.addVertexWithUV(xMidUp, y + 1, zMid, d6, d7);
}
if (renderAbove || y < l - 1 && iblockaccess.isAirBlock(x, y + 1, z - 1))
{
tessellator.addVertexWithUV(xMidDown, y + 1, zBot, d6, d7);
tessellator.addVertexWithUV(xMidDown, y + 1, zMid, d6, d8);
tessellator.addVertexWithUV(xMidUp, y + 1, zMid, d5, d8);
tessellator.addVertexWithUV(xMidUp, y + 1, zBot, d5, d7);
}
if (renderBelow || y > 1 && iblockaccess.isAirBlock(x, y - 1, z - 1))
{
tessellator.addVertexWithUV(xMidDown, y, zBot, d6, d7);
tessellator.addVertexWithUV(xMidDown, y, zMid, d6, d8);
tessellator.addVertexWithUV(xMidUp, y, zMid, d5, d8);
tessellator.addVertexWithUV(xMidUp, y, zBot, d5, d7);
}
}
else if (!west && east)
{
tessellator.addVertexWithUV(xMidDown, y + 1, zMid, d1, d3);
tessellator.addVertexWithUV(xMidDown, y + 0, zMid, d1, d4);
tessellator.addVertexWithUV(xMidDown, y + 0, zTop, d2, d4);
tessellator.addVertexWithUV(xMidDown, y + 1, zTop, d2, d3);
tessellator.addVertexWithUV(xMidUp, y + 1, zTop, d1, d3);
tessellator.addVertexWithUV(xMidUp, y + 0, zTop, d1, d4);
tessellator.addVertexWithUV(xMidUp, y + 0, zMid, d2, d4);
tessellator.addVertexWithUV(xMidUp, y + 1, zMid, d2, d3);
if (!north && !south)
{
tessellator.addVertexWithUV(xMidUp, y + 1, zMid, d5, d7);
tessellator.addVertexWithUV(xMidUp, y + 0, zMid, d5, d9);
tessellator.addVertexWithUV(xMidDown, y + 0, zMid, d6, d9);
tessellator.addVertexWithUV(xMidDown, y + 1, zMid, d6, d7);
}
if (renderAbove || y < l - 1 && iblockaccess.isAirBlock(x, y + 1, z + 1))
{
tessellator.addVertexWithUV(xMidDown, y + 1, zMid, d5, d8);
tessellator.addVertexWithUV(xMidDown, y + 1, zTop, d5, d9);
tessellator.addVertexWithUV(xMidUp, y + 1, zTop, d6, d9);
tessellator.addVertexWithUV(xMidUp, y + 1, zMid, d6, d8);
}
if (renderBelow || y > 1 && iblockaccess.isAirBlock(x, y - 1, z + 1))
{
tessellator.addVertexWithUV(xMidDown, y, zMid, d5, d8);
tessellator.addVertexWithUV(xMidDown, y, zTop, d5, d9);
tessellator.addVertexWithUV(xMidUp, y, zTop, d6, d9);
tessellator.addVertexWithUV(xMidUp, y, zMid, d6, d8);
}
}
}
else
{
tessellator.addVertexWithUV(xMidDown, y + 1, zTop, d, d3);
tessellator.addVertexWithUV(xMidDown, y + 0, zTop, d, d4);
tessellator.addVertexWithUV(xMidDown, y + 0, zBot, d2, d4);
tessellator.addVertexWithUV(xMidDown, y + 1, zBot, d2, d3);
tessellator.addVertexWithUV(xMidUp, y + 1, zBot, d, d3);
tessellator.addVertexWithUV(xMidUp, y + 0, zBot, d, d4);
tessellator.addVertexWithUV(xMidUp, y + 0, zTop, d2, d4);
tessellator.addVertexWithUV(xMidUp, y + 1, zTop, d2, d3);
if (renderAbove)
{
tessellator.addVertexWithUV(xMidUp, y + 1, zTop, d6, d9);
tessellator.addVertexWithUV(xMidUp, y + 1, zBot, d6, d7);
tessellator.addVertexWithUV(xMidDown, y + 1, zBot, d5, d7);
tessellator.addVertexWithUV(xMidDown, y + 1, zTop, d5, d9);
}
else
{
if (y < l - 1 && iblockaccess.isAirBlock(x, y + 1, z - 1))
{
tessellator.addVertexWithUV(xMidDown, y + 1, zBot, d6, d7);
tessellator.addVertexWithUV(xMidDown, y + 1, zMid, d6, d8);
tessellator.addVertexWithUV(xMidUp, y + 1, zMid, d5, d8);
tessellator.addVertexWithUV(xMidUp, y + 1, zBot, d5, d7);
}
if (y < l - 1 && iblockaccess.isAirBlock(x, y + 1, z + 1))
{
tessellator.addVertexWithUV(xMidDown, y + 1, zMid, d5, d8);
tessellator.addVertexWithUV(xMidDown, y + 1, zTop, d5, d9);
tessellator.addVertexWithUV(xMidUp, y + 1, zTop, d6, d9);
tessellator.addVertexWithUV(xMidUp, y + 1, zMid, d6, d8);
}
}
if (renderBelow)
{
tessellator.addVertexWithUV(xMidUp, y, zTop, d6, d9);
tessellator.addVertexWithUV(xMidUp, y, zBot, d6, d7);
tessellator.addVertexWithUV(xMidDown, y, zBot, d5, d7);
tessellator.addVertexWithUV(xMidDown, y, zTop, d5, d9);
tessellator.addVertexWithUV(xMidUp, y, zBot, d6, d9);
tessellator.addVertexWithUV(xMidUp, y, zTop, d6, d7);
tessellator.addVertexWithUV(xMidDown, y, zTop, d5, d7);
tessellator.addVertexWithUV(xMidDown, y, zBot, d5, d9);
}
else
{
if (y > 1 && iblockaccess.isAirBlock(x, y - 1, z - 1))
{
tessellator.addVertexWithUV(xMidDown, y, zBot, d6, d7);
tessellator.addVertexWithUV(xMidDown, y, zMid, d6, d8);
tessellator.addVertexWithUV(xMidUp, y, zMid, d5, d8);
tessellator.addVertexWithUV(xMidUp, y, zBot, d5, d7);
}
if (y > 1 && iblockaccess.isAirBlock(x, y - 1, z + 1))
{
tessellator.addVertexWithUV(xMidDown, y, zMid, d5, d8);
tessellator.addVertexWithUV(xMidDown, y, zTop, d5, d9);
tessellator.addVertexWithUV(xMidUp, y, zTop, d6, d9);
tessellator.addVertexWithUV(xMidUp, y, zMid, d6, d8);
}
}
}
return true;
}
}