package eu.thog92.isbrh.registry; import java.util.List; import java.util.Map; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.BlockPos; import net.minecraft.world.IBlockAccess; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import eu.thog92.isbrh.render.ISimpleBlockRenderingHandler; import eu.thog92.isbrh.render.ITextureHandler; import eu.thog92.isbrh.render.TextureLoader; public class RenderRegistry { private static final RenderRegistry INSTANCE = new RenderRegistry(); private int nextRenderId = 5; private Map<Integer, ISimpleBlockRenderingHandler> renders = Maps .newHashMap(); private List<ITextureHandler> texturesHandlers = Lists.newArrayList(); private TextureLoader loader = new TextureLoader(); public static RenderRegistry instance() { return INSTANCE; } /** * Get the next available renderId from the block render ID list */ public static int getNextAvailableRenderId() { return instance().nextRenderId++; } /** * Register a simple block rendering handler * * @param handler */ public static void registerBlockHandler(ISimpleBlockRenderingHandler handler) { registerBlockHandler(handler.getRenderId(), handler); } public static void registerTextureHandler(ITextureHandler handler) { if(!instance().texturesHandlers.contains(handler)) instance().texturesHandlers.add(handler); } /** * Register the simple block rendering handler This version will not call * getRenderId on the passed in handler, instead using the supplied ID, so * you can easily re-use the same rendering handler for multiple IDs * * @param renderId * @param handler */ public static void registerBlockHandler(int renderId, ISimpleBlockRenderingHandler handler) { instance().renders.put(renderId, handler); registerTextureHandler(handler); } public boolean renderBlock(int renderId, IBlockState state, BlockPos pos, IBlockAccess world, WorldRenderer renderer) { if (renders.containsKey(renderId)) return renders.get(renderId).renderWorldBlock(world, pos, state, renderId, renderer); return false; } public void renderBlockBrightness(int renderId, IBlockState state, float brightness) { if (!renders.containsKey(renderId)) return; renders.get(renderId) .renderBlockBrightness(renderId, state, brightness); } public void renderInventoryBlock(ItemStack stack, TransformType transformType) { int renderId = ((ItemBlock) stack.getItem()).getBlock().getRenderType(); if (!renders.containsKey(renderId)) return; GlStateManager.enableRescaleNormal(); GlStateManager.pushMatrix(); GlStateManager.scale(0.5F, 0.5F, 0.5F); renders.get(renderId).renderInventoryBlock(stack, transformType, renderId); GlStateManager.popMatrix(); GlStateManager.disableRescaleNormal(); } public boolean shouldRender3DInInventory(ItemStack stack) { int renderId = ((ItemBlock) stack.getItem()).getBlock().getRenderType(); if (!renders.containsKey(renderId)) return false; return renders.get(renderId).shouldRender3DInInventory(renderId); } public void injectTexture(TextureMap map) { loader.setTextureMap(map); for (ITextureHandler itextured : texturesHandlers) itextured.loadTextures(loader); } }