package openmods.renderer;
import com.google.common.collect.Maps;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.world.IBlockAccess;
public class BlockRenderingHandler implements ISimpleBlockRenderingHandler {
private final boolean itemsIn3d;
private final int renderId;
private final IBlockRenderer<Block> defaultRenderer;
public BlockRenderingHandler(int renderId) {
this(renderId, true);
}
public BlockRenderingHandler(int renderId, boolean itemsIn3d) {
this(renderId, itemsIn3d, new DefaultBlockRenderer());
}
public BlockRenderingHandler(int renderId, boolean itemsIn3d, IBlockRenderer<Block> defaultRenderer) {
this.renderId = renderId;
this.itemsIn3d = itemsIn3d;
this.defaultRenderer = defaultRenderer;
}
protected final Map<Block, IBlockRenderer<?>> blockRenderers = Maps.newIdentityHashMap();
public <B extends Block> void addRenderer(B block, IBlockRenderer<? super B> renderer) {
if (block != null) blockRenderers.put(block, renderer);
}
@SuppressWarnings("unchecked")
protected <B extends Block> IBlockRenderer<B> getRenderer(B block) {
IBlockRenderer<?> renderer = blockRenderers.get(block);
return (IBlockRenderer<B>)(renderer != null? renderer : defaultRenderer);
}
@Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) {
getRenderer(block).renderInventoryBlock(block, metadata, modelID, renderer);
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
return getRenderer(block).renderWorldBlock(world, x, y, z, block, modelId, renderer);
}
@Override
public boolean shouldRender3DInInventory(int modelId) {
return itemsIn3d;
}
@Override
public int getRenderId() {
return renderId;
}
}