package openblocks.client.renderer.block; import java.util.List; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; import openblocks.common.block.BlockCanvas; import openblocks.common.sync.SyncableBlockLayers; import openblocks.common.sync.SyncableBlockLayers.Layer; import openblocks.common.tileentity.TileEntityCanvas; import openmods.renderer.FixedRenderBlocks; import openmods.renderer.IBlockRenderer; import openmods.utils.render.RenderUtils; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; public class BlockCanvasRenderer implements IBlockRenderer<BlockCanvas> { public FixedRenderBlocks renderBlocks = new FixedRenderBlocks(); @Override public void renderInventoryBlock(BlockCanvas block, int metadata, int modelID, RenderBlocks renderer) { GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); RenderUtils.renderInventoryBlock(renderer, block, 0); } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, BlockCanvas block, int modelId, RenderBlocks renderer) { if (renderer.hasOverrideBlockTexture()) { // breaking animation handling renderer.setRenderBoundsFromBlock(block); block.setLayerForRender(BlockCanvas.NO_LAYER); block.setSideForRender(BlockCanvas.RENDER_ALL_SIDES); renderer.renderStandardBlock(block, x, y, z); return true; } renderBlocks.setWorld(world); renderBlocks.setRenderBoundsFromBlock(block); boolean visible = false; TileEntity tile = world.getTileEntity(x, y, z); if (tile instanceof TileEntityCanvas) { TileEntityCanvas canvas = (TileEntityCanvas)tile; for (int i = 0; i < 6; i++) { renderBlocks.setAllFaces(0); block.setLayerForRender(-1); block.setSideForRender(i); if (renderBlocks.renderStandardBlock(block, x, y, z)) { visible = true; SyncableBlockLayers sideLayersContainer = canvas.getLayersForSide(i); List<Layer> layers = sideLayersContainer.getAllLayers(); for (int l = 0; l < layers.size(); l++) { block.setLayerForRender(l); byte rot = layers.get(l).getRotation(); if (rot == 2) { rot = 3; } else if (rot == 3) { rot = 2; } renderBlocks.setAllFaces(rot); renderBlocks.renderStandardBlock(block, x, y, z); } } } RenderUtils.resetFacesOnRenderer(renderBlocks); } return visible; } }