ForgePatch/src/main/java/net/minecraftforge/client/MinecraftForgeClient.java

92 lines
2.4 KiB
Java
Raw Normal View History

2011-07-15 23:13:09 +00:00
/**
* This software is provided under the terms of the Minecraft Forge Public
2011-07-15 23:13:09 +00:00
* License v1.0.
*/
package net.minecraftforge.client;
import java.util.BitSet;
import java.util.IdentityHashMap;
import com.google.common.collect.Maps;
2012-12-13 05:58:35 +00:00
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumWorldBlockLayer;
import net.minecraftforge.client.IItemRenderer.ItemRenderType;
public class MinecraftForgeClient
{
private static IdentityHashMap<Item, IItemRenderer> customItemRenderers = Maps.newIdentityHashMap();
2012-09-09 14:02:21 +00:00
/**
* Register a custom renderer for a specific item. This can be used to
* render the item in-world as an EntityItem, when the item is equipped, or
* when the item is in an inventory slot.
* @param itemID The item ID (shifted index) to handle rendering.
* @param renderer The IItemRenderer interface that handles rendering for
* this item.
*/
public static void registerItemRenderer(Item item, IItemRenderer renderer)
{
customItemRenderers.put(item, renderer);
}
public static IItemRenderer getItemRenderer(ItemStack item, ItemRenderType type)
{
IItemRenderer renderer = customItemRenderers.get(item.getItem());
2012-09-09 14:02:21 +00:00
if (renderer != null && renderer.handleRenderType(item, type))
{
return renderer;
}
return null;
}
public static int getRenderPass()
{
return ForgeHooksClient.renderPass;
}
public static EnumWorldBlockLayer getRenderLayer()
{
return ForgeHooksClient.renderLayer;
}
private static BitSet stencilBits = new BitSet(8);
static
{
stencilBits.set(0,8);
}
/**
* Reserve a stencil bit for use in rendering
*
* Note: you must check the Framebuffer you are working with to
* determine if stencil bits are enabled on it before use.
*
* @return A bit or -1 if no further stencil bits are available
*/
public static int reserveStencilBit()
{
int bit = stencilBits.nextSetBit(0);
if (bit >= 0)
{
stencilBits.clear(bit);
}
return bit;
}
/**
* Release the stencil bit for other use
*
* @param bit The bit from {@link #reserveStencilBit()}
*/
public static void releaseStencilBit(int bit)
{
if (bit >= 0 && bit < stencilBits.length())
{
stencilBits.set(bit);
}
}
}