package mcjty.rftools.blocks.storage;
import mcjty.rftools.render.DefaultISBRH;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.util.ForgeDirection;
public class RemoteStorageRenderer extends DefaultISBRH {
@Override
public int getRenderId() {
return RemoteStorageBlock.RENDERID_REMOTESTORAGE;
}
private static final float OFFS = 0.005f;
private static final float L0 = 0.19f;
private static final float R0 = 0.45f;
private static final float U0 = 0.68f;
private static final float D0 = 0.815f;
private static final float L1 = 0.19f;
private static final float R1 = 0.45f;
private static final float U1 = 0.38f;
private static final float D1 = 0.51f;
private static final float L2 = 1 - 0.45f;
private static final float R2 = 1 - 0.19f;
private static final float U2 = 0.68f;
private static final float D2 = 0.815f;
private static final float L3 = 1 - 0.45f;
private static final float R3 = 1 - 0.19f;
private static final float U3 = 0.38f;
private static final float D3 = 0.51f;
private static final Quad quadsBar[][] = {
new Quad[]{
new Quad(new Vt(R0, -OFFS, 1 - U0), new Vt(L0, -OFFS, 1 - U0), new Vt(L0, -OFFS, 1 - D0), new Vt(R0, -OFFS, 1 - D0)), // DOWN
new Quad(new Vt(L0, 1 + OFFS, 1 - U0), new Vt(R0, 1 + OFFS, 1 - U0), new Vt(R0, 1 + OFFS, 1 - D0), new Vt(L0, 1 + OFFS, 1 - D0)), // UP
new Quad(new Vt(1 - L0, U0, -OFFS), new Vt(1 - R0, U0, -OFFS), new Vt(1 - R0, D0, -OFFS), new Vt(1 - L0, D0, -OFFS)), // NORTH
new Quad(new Vt(L0, U0, 1 + OFFS), new Vt(R0, U0, 1 + OFFS), new Vt(R0, D0, 1 + OFFS), new Vt(L0, D0, 1 + OFFS)), // SOUTH
new Quad(new Vt(-OFFS, U0, L0), new Vt(-OFFS, U0, R0), new Vt(-OFFS, D0, R0), new Vt(-OFFS, D0, L0)), // WEST
new Quad(new Vt(1 + OFFS, U0, 1 - L0), new Vt(1 + OFFS, U0, 1 - R0), new Vt(1 + OFFS, D0, 1 - R0), new Vt(1 + OFFS, D0, 1 - L0)), // EAST
},
new Quad[]{
new Quad(new Vt(R1, -OFFS, 1 - U1), new Vt(L1, -OFFS, 1 - U1), new Vt(L1, -OFFS, 1 - D1), new Vt(R1, -OFFS, 1 - D1)), // DOWN
new Quad(new Vt(L1, 1 + OFFS, 1 - U1), new Vt(R1, 1 + OFFS, 1 - U1), new Vt(R1, 1 + OFFS, 1 - D1), new Vt(L1, 1 + OFFS, 1 - D1)), // UP
new Quad(new Vt(1 - L1, U1, -OFFS), new Vt(1 - R1, U1, -OFFS), new Vt(1 - R1, D1, -OFFS), new Vt(1 - L1, D1, -OFFS)), // NORTH
new Quad(new Vt(L1, U1, 1 + OFFS), new Vt(R1, U1, 1 + OFFS), new Vt(R1, D1, 1 + OFFS), new Vt(L1, D1, 1 + OFFS)), // SOUTH
new Quad(new Vt(-OFFS, U1, L1), new Vt(-OFFS, U1, R1), new Vt(-OFFS, D1, R1), new Vt(-OFFS, D1, L1)), // WEST
new Quad(new Vt(1 + OFFS, U1, 1 - L1), new Vt(1 + OFFS, U1, 1 - R1), new Vt(1 + OFFS, D1, 1 - R1), new Vt(1 + OFFS, D1, 1 - L1)), // EAST
},
new Quad[]{
new Quad(new Vt(R2, -OFFS, 1 - U2), new Vt(L2, -OFFS, 1 - U2), new Vt(L2, -OFFS, 1 - D2), new Vt(R2, -OFFS, 1 - D2)), // DOWN
new Quad(new Vt(L2, 1 + OFFS, 1 - U2), new Vt(R2, 1 + OFFS, 1 - U2), new Vt(R2, 1 + OFFS, 1 - D2), new Vt(L2, 1 + OFFS, 1 - D2)), // UP
new Quad(new Vt(1 - L2, U2, -OFFS), new Vt(1 - R2, U2, -OFFS), new Vt(1 - R2, D2, -OFFS), new Vt(1 - L2, D2, -OFFS)), // NORTH
new Quad(new Vt(L2, U2, 1 + OFFS), new Vt(R2, U2, 1 + OFFS), new Vt(R2, D2, 1 + OFFS), new Vt(L2, D2, 1 + OFFS)), // SOUTH
new Quad(new Vt(-OFFS, U2, L2), new Vt(-OFFS, U2, R2), new Vt(-OFFS, D2, R2), new Vt(-OFFS, D2, L2)), // WEST
new Quad(new Vt(1 + OFFS, U2, 1 - L2), new Vt(1 + OFFS, U2, 1 - R2), new Vt(1 + OFFS, D2, 1 - R2), new Vt(1 + OFFS, D2, 1 - L2)), // EAST
},
new Quad[]{
new Quad(new Vt(R3, -OFFS, 1 - U3), new Vt(L3, -OFFS, 1 - U3), new Vt(L3, -OFFS, 1 - D3), new Vt(R3, -OFFS, 1 - D3)), // DOWN
new Quad(new Vt(L3, 1 + OFFS, 1 - U3), new Vt(R3, 1 + OFFS, 1 - U3), new Vt(R3, 1 + OFFS, 1 - D3), new Vt(L3, 1 + OFFS, 1 - D3)), // UP
new Quad(new Vt(1 - L3, U3, -OFFS), new Vt(1 - R3, U3, -OFFS), new Vt(1 - R3, D3, -OFFS), new Vt(1 - L3, D3, -OFFS)), // NORTH
new Quad(new Vt(L3, U3, 1 + OFFS), new Vt(R3, U3, 1 + OFFS), new Vt(R3, D3, 1 + OFFS), new Vt(L3, D3, 1 + OFFS)), // SOUTH
new Quad(new Vt(-OFFS, U3, L3), new Vt(-OFFS, U3, R3), new Vt(-OFFS, D3, R3), new Vt(-OFFS, D3, L3)), // WEST
new Quad(new Vt(1 + OFFS, U3, 1 - L3), new Vt(1 + OFFS, U3, 1 - R3), new Vt(1 + OFFS, D3, 1 - R3), new Vt(1 + OFFS, D3, 1 - L3)), // EAST
}};
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
boolean rc = renderer.renderStandardBlock(block, x, y, z);
if (rc) {
int meta = world.getBlockMetadata(x, y, z);
if ((meta & 0x8) == 0) {
// No power.
return rc;
}
RemoteStorageTileEntity remoteStorageTileEntity = (RemoteStorageTileEntity) world.getTileEntity(x, y, z);
ForgeDirection front = ModularStorageSetup.remoteStorageBlock.getOrientation(world.getBlockMetadata(x, y, z));
Tessellator tessellator = Tessellator.instance;
tessellator.addTranslation(x, y, z);
tessellator.setBrightness(240);
IIcon icon = ModularStorageSetup.remoteStorageBlock.getOverlayIcon();
float u1 = icon.getMinU();
float u2 = icon.getMaxU();
float du = u2 - u1;
u2 = u1 + du / 2;
float v1 = icon.getMinV();
float v2 = icon.getMaxV();
float dv = v2 - v1;
v2 = v1 + dv / 8;
for (int i = 0 ; i < 4 ; i++) {
boolean b = remoteStorageTileEntity.hasStorage(i);
float uu = b ? 0 : (du / 2);
Quad quad = quadsBar[i][front.ordinal()];
tessellator.addVertexWithUV(quad.v1.x, quad.v1.y, quad.v1.z, u1+uu, v1);
tessellator.addVertexWithUV(quad.v2.x, quad.v2.y, quad.v2.z, u1+uu, v2);
tessellator.addVertexWithUV(quad.v3.x, quad.v3.y, quad.v3.z, u2+uu, v2);
tessellator.addVertexWithUV(quad.v4.x, quad.v4.y, quad.v4.z, u2+uu, v1);
}
tessellator.addTranslation(-x, -y, -z);
}
return rc;
}
@Override
public boolean shouldRender3DInInventory(int modelId) {
return true;
}
}