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 ModularStorageRenderer extends DefaultISBRH { @Override public int getRenderId() { return ModularStorageBlock.RENDERID_MODULARSTORAGE; } private static final float OFFS = 0.005f; private static final float L = 0.19f; private static final float R = 0.25f; private static final float U = 0.32f; private static final float D = 0.82f; private static final Quad quadsBar[] = new Quad[] { new Quad(new Vt(R, -OFFS, 1-U), new Vt(L, -OFFS, 1-U), new Vt(L, -OFFS, 1-D), new Vt(R, -OFFS, 1-D)), // DOWN new Quad(new Vt(L, 1+OFFS, 1-U), new Vt(R, 1+OFFS, 1-U), new Vt(R, 1+OFFS, 1-D), new Vt(L, 1+OFFS, 1-D)), // UP new Quad(new Vt(1-L, U, -OFFS), new Vt(1-R, U, -OFFS), new Vt(1-R, D, -OFFS), new Vt(1-L, D, -OFFS)), // NORTH new Quad(new Vt(L, U, 1+OFFS), new Vt(R, U, 1+OFFS), new Vt(R, D, 1+OFFS), new Vt(L, D, 1+OFFS)), // SOUTH new Quad(new Vt(-OFFS, U, L), new Vt(-OFFS, U, R), new Vt(-OFFS, D, R), new Vt(-OFFS, D, L)), // WEST new Quad(new Vt(1+OFFS, U, 1-L), new Vt(1+OFFS, U, 1-R), new Vt(1+OFFS, D, 1-R), new Vt(1+OFFS, D, 1-L)), // 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) { ModularStorageTileEntity modularStorageTileEntity = (ModularStorageTileEntity) world.getTileEntity(x, y, z); int level = modularStorageTileEntity.getRenderLevel(); if (level == -1) { return rc; // No storage module. } ForgeDirection front = ModularStorageSetup.modularStorageBlock.getOrientation(world.getBlockMetadata(x, y, z)); Tessellator tessellator = Tessellator.instance; tessellator.addTranslation(x, y, z); tessellator.setBrightness(240); tessellator.setColorRGBA_I(0xffffff, 255); IIcon icon = ModularStorageSetup.modularStorageBlock.getOverlayIcon(); int remoteId = modularStorageTileEntity.getRemoteId(); float pct = level / 7.0f; float u1 = icon.getMinU(); float u2 = icon.getMaxU(); u2 = u1 + (u2-u1) / 2; float du = (u2-u1) * (1-pct); u1 += du; u2 += du; float v1 = icon.getMinV(); float v2 = icon.getMaxV(); float dv = (v2-v1) / 2; v2 = v1 + dv / 8; if (remoteId != 0) { v1 += dv; v2 += dv; } Quad quad = quadsBar[front.ordinal()]; tessellator.addVertexWithUV(quad.v1.x, quad.v1.y, quad.v1.z, u1, v1); tessellator.addVertexWithUV(quad.v2.x, quad.v2.y, quad.v2.z, u1, v2); tessellator.addVertexWithUV(quad.v3.x, quad.v3.y, quad.v3.z, u2, v2); tessellator.addVertexWithUV(quad.v4.x, quad.v4.y, quad.v4.z, u2, v1); tessellator.addTranslation(-x, -y, -z); } return rc; } @Override public boolean shouldRender3DInInventory(int modelId) { return true; } }