package crazypants.util;
import java.lang.reflect.Field;
import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.MinecraftForgeClient;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.Log;
@SideOnly(Side.CLIENT)
public class RenderPassHelper {
private static Field worldRenderPass = null;
private static int savedWorldRenderPass = -1;
private static int savedEntityRenderPass = -1;
static {
try {
worldRenderPass = ForgeHooksClient.class.getDeclaredField("worldRenderPass");
worldRenderPass.setAccessible(true);
} catch (Exception e) {
Log.warn("Failed to access ForgeHooksClient.worldRenderPass because of: " + e);
e.printStackTrace();
}
}
private RenderPassHelper() {
}
public static void setBlockRenderPass(int pass) {
savedWorldRenderPass = ForgeHooksClient.getWorldRenderPass();
savedEntityRenderPass = MinecraftForgeClient.getRenderPass();
setBlockRenderPassImpl(pass);
setEntityRenderPass(pass);
}
private static void setBlockRenderPassImpl(int pass) {
if (worldRenderPass != null) {
try {
worldRenderPass.setInt(null, pass);
} catch (Exception e) {
Log.warn("Failed to access ForgeHooksClient.worldRenderPass because of: " + e);
e.printStackTrace();
worldRenderPass = null;
}
}
}
public static void clearBlockRenderPass() {
setBlockRenderPassImpl(savedWorldRenderPass);
setEntityRenderPass(savedEntityRenderPass);
}
public static int getBlockRenderPass() {
int pass = ForgeHooksClient.getWorldRenderPass();
if (pass < 0) {
// We are outside Minecraft's block rendering, so most probably we are
// being rendered by some mod. But it forgot to set the current block
// render pass. Maybe it set the entity render pass instead?
pass = MinecraftForgeClient.getRenderPass();
if (pass < 0) {
// No, it didn't. That's not good. Let's assume pass 0, that one renders
// more stuff.
pass = 0;
}
}
return pass;
}
public static void setEntityRenderPass(int pass) {
ForgeHooksClient.setRenderPass(pass);
}
public static void clearEntityRenderPass() {
ForgeHooksClient.setRenderPass(-1);
}
public static int getEntityRenderPass() {
return MinecraftForgeClient.getRenderPass();
}
}