package openmods.renderer; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.world.IBlockAccess; import openmods.block.OpenBlock; import openmods.geometry.Orientation; import openmods.renderer.rotations.IRendererSetup; public class RotatedBlockRenderer<T extends OpenBlock> implements IBlockRenderer<T> { private final IBlockRenderer<T> wrapperRenderer; public RotatedBlockRenderer(IBlockRenderer<T> wrapperRenderer) { this.wrapperRenderer = wrapperRenderer; } @Override public void renderInventoryBlock(T block, int metadata, int modelID, RenderBlocks renderer) { final Orientation orientation = block.getInventoryRenderOrientation(); final int renderMetadata = block.getInventoryRenderMetadata(metadata); final IRendererSetup setup = block.getRotationMode().getRenderSetup(); final RenderBlocks localRenderer = setup.enter(orientation, renderMetadata, renderer); wrapperRenderer.renderInventoryBlock(block, renderMetadata, modelID, localRenderer); setup.exit(localRenderer); } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, T block, int modelId, RenderBlocks renderer) { final int metadata = world.getBlockMetadata(x, y, z); final Orientation orientation = block.getOrientation(metadata); final IRendererSetup setup = block.getRotationMode().getRenderSetup(); final RenderBlocks localRenderer = setup.enter(orientation, metadata, renderer); boolean wasRendered = wrapperRenderer.renderWorldBlock(world, x, y, z, block, modelId, localRenderer); setup.exit(localRenderer); return wasRendered; } public static <T extends OpenBlock> IBlockRenderer<T> wrap(IBlockRenderer<T> renderer) { return new RotatedBlockRenderer<T>(renderer); } }