/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.client.render; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import java.util.HashMap; import java.util.Map; import net.minecraft.block.Block; import net.minecraft.world.IBlockAccess; import net.minecraft.item.ItemStack; import net.minecraft.client.renderer.RenderBlocks; import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.IItemRenderer.ItemRenderType; /** * * @author CovertJaguar <http://www.railcraft.info> */ public class BlockRenderer implements ISimpleBlockRenderingHandler, IInvRenderer { private final Map<Integer, IBlockRenderer> blockRenderers = new HashMap<Integer, IBlockRenderer>(); private final Map<Integer, IInvRenderer> itemRenderers = new HashMap<Integer, IInvRenderer>(); private ICombinedRenderer defaultRenderer = new DefaultRenderer(); private final ItemRenderer itemRenderer; private final Block block; public BlockRenderer(Block block) { this.block = block; itemRenderer = new ItemRenderer(this); } public void addCombinedRenderer(int meta, ICombinedRenderer renderer) { blockRenderers.put(meta, renderer); itemRenderers.put(meta, renderer); } public void addBlockRenderer(int meta, IBlockRenderer renderer) { blockRenderers.put(meta, renderer); } public void addItemRenderer(int meta, IInvRenderer renderer) { itemRenderers.put(meta, renderer); } public void setDefaultRenderer(ICombinedRenderer renderer) { defaultRenderer = renderer; } public IItemRenderer getItemRenderer() { return itemRenderer; } @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderblocks) { if (!blockRenderers.isEmpty()) { int meta = world.getBlockMetadata(x, y, z); IBlockRenderer renderer = blockRenderers.get(meta); if (renderer != null) { renderer.renderBlock(renderblocks, world, x, y, z, block); return true; } } defaultRenderer.renderBlock(renderblocks, world, x, y, z, block); return true; } @Override public void renderItem(RenderBlocks renderBlocks, ItemStack item, ItemRenderType renderType) { IInvRenderer renderer = itemRenderers.get(item.getItemDamage()); if (renderer != null) { renderer.renderItem(renderBlocks, item, renderType); return; } defaultRenderer.renderItem(renderBlocks, item, renderType); } @Override public boolean shouldRender3DInInventory(int modelId) { return false; } @Override public int getRenderId() { return block.getRenderType(); } public Block getBlock() { return block; } protected class DoNothingRenderer implements IBlockRenderer { @Override public void renderBlock(RenderBlocks renderblocks, IBlockAccess world, int i, int j, int k, Block block) { } } public class DefaultRenderer implements ICombinedRenderer { @Override public void renderItem(RenderBlocks renderblocks, ItemStack item, ItemRenderType renderType) { int meta = item.getItemDamage(); block.setBlockBounds(0, 0, 0, 1, 1, 1); RenderTools.renderBlockOnInventory(renderblocks, block, meta, 1); } @Override public void renderBlock(RenderBlocks renderblocks, IBlockAccess world, int x, int y, int z, Block block) { block.setBlockBounds(0, 0, 0, 1, 1, 1); RenderTools.renderStandardBlock(renderblocks, block, x, y, z); } } }