classic-casting/src/main/java/net/anvilcraft/classiccasting/render/BlockCrystalRenderer.java

163 lines
5.8 KiB
Java

package net.anvilcraft.classiccasting.render;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.anvilcraft.classiccasting.blocks.BlockCrystal;
import net.anvilcraft.classiccasting.tiles.TileCrystalCapacitor;
import net.anvilcraft.classiccasting.tiles.TileCrystalCore;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;
import thaumcraft.client.renderers.block.BlockRenderer;
public class BlockCrystalRenderer
extends BlockRenderer implements ISimpleBlockRenderingHandler {
public static int RI;
@Override
public void renderInventoryBlock(
final Block block,
final int metadata,
final int modelID,
final RenderBlocks renderer
) {
if (metadata == 0) {
GL11.glRotatef(90.0f, 0.0f, 1.0f, 0.0f);
GL11.glTranslatef(-0.5f, -0.5f, -0.5f);
final TileCrystalCore tc2 = new TileCrystalCore();
tc2.blockMetadata = 0;
TileEntityRendererDispatcher.instance.renderTileEntityAt(
(TileEntity) tc2, 0.0, 0.0, 0.0, 0.0f
);
GL11.glEnable(32826);
} else if (metadata == 1) {
block.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
renderer.setRenderBoundsFromBlock(block);
BlockRenderer.drawFaces(
renderer, block, ((BlockCrystal) block).iconFrame, false
);
this.drawFacesInside(renderer, block, ((BlockCrystal) block).iconFrame);
GL11.glTranslatef(-0.5f, -0.5f, -0.5f);
final TileCrystalCapacitor tc3 = new TileCrystalCapacitor();
tc3.blockMetadata = 0;
tc3.storedVis = 50;
TileEntityRendererDispatcher.instance.renderTileEntityAt(
(TileEntity) tc3, 0.0, 0.0, 0.0, 0.0f
);
GL11.glEnable(32826);
}
}
@Override
public boolean renderWorldBlock(
final IBlockAccess world,
final int x,
final int y,
final int z,
final Block block,
final int modelId,
final RenderBlocks renderer
) {
final int md = world.getBlockMetadata(x, y, z);
if (md == 1) {
final IIcon icon = ((BlockCrystal) block).iconFrame;
BlockRenderer.setBrightness(world, x, y, z, block);
block.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
renderer.setRenderBoundsFromBlock(block);
renderer.renderStandardBlock(block, x, y, z);
renderer.renderFaceXPos(
block,
(double) (x - 1.0f + BlockRenderer.W2 - 0.01f),
(double) y,
(double) z,
icon
);
renderer.renderFaceXNeg(
block,
(double) (x + 1.0f - BlockRenderer.W2 + 0.01f),
(double) y,
(double) z,
icon
);
renderer.renderFaceZPos(
block,
(double) x,
(double) y,
(double) (z - 1.0f + BlockRenderer.W2 - 0.01f),
icon
);
renderer.renderFaceZNeg(
block,
(double) x,
(double) y,
(double) (z + 1.0f - BlockRenderer.W2 + 0.01f),
icon
);
renderer.renderFaceYPos(
block,
(double) x,
(double) (y - 1.0f + BlockRenderer.W2 - 0.01f),
(double) z,
icon
);
renderer.renderFaceYNeg(
block,
(double) x,
(double) (y + 1.0f - BlockRenderer.W2 + 0.01f),
(double) z,
icon
);
renderer.clearOverrideBlockTexture();
block.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
renderer.setRenderBoundsFromBlock(block);
return true;
}
return false;
}
void
drawFacesInside(final RenderBlocks renderblocks, final Block block, final IIcon i1) {
final Tessellator tessellator = Tessellator.instance;
GL11.glTranslatef(-0.5f, -0.5f, -0.5f);
tessellator.startDrawingQuads();
tessellator.setNormal(0.0f, -1.0f, 0.0f);
renderblocks.renderFaceYNeg(block, 0.0, 1.0 - BlockRenderer.W2, 0.0, i1);
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0f, 1.0f, 0.0f);
renderblocks.renderFaceYPos(block, 0.0, -1.0 + BlockRenderer.W2, 0.0, i1);
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0f, 0.0f, 1.0f);
renderblocks.renderFaceXNeg(block, 1.0 - BlockRenderer.W2, 0.0, 0.0, i1);
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0f, 0.0f, -1.0f);
renderblocks.renderFaceXPos(block, -1.0 + BlockRenderer.W2, 0.0, 0.0, i1);
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(1.0f, 0.0f, 0.0f);
renderblocks.renderFaceZNeg(block, 0.0, 0.0, 1.0 - BlockRenderer.W2, i1);
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(-1.0f, 0.0f, 0.0f);
renderblocks.renderFaceZPos(block, 0.0, 0.0, -1.0 + BlockRenderer.W2, i1);
tessellator.draw();
GL11.glTranslatef(0.5f, 0.5f, 0.5f);
}
@Override
public boolean shouldRender3DInInventory(int meta) {
return true;
}
@Override
public int getRenderId() {
return RI;
}
}