/*******************************************************************************************************************
* Authors: SanAndreasP
* Copyright: SanAndreasP
* License: Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
* http://creativecommons.org/licenses/by-nc-sa/4.0/
*******************************************************************************************************************/
package de.sanandrew.core.manpack.mod.client.event;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import de.sanandrew.core.manpack.mod.client.render.RenderSanPlayer;
import de.sanandrew.core.manpack.util.ReflectionNames;
import de.sanandrew.core.manpack.util.SAPReflectionHelper;
import de.sanandrew.core.manpack.util.helpers.SAPUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.entity.RenderPlayer;
import net.minecraft.client.resources.SimpleReloadableResourceManager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.client.event.RenderHandEvent;
import net.minecraftforge.client.event.RenderLivingEvent.Pre;
import net.minecraftforge.client.event.RenderPlayerEvent;
import org.lwjgl.opengl.GL11;
@SideOnly( Side.CLIENT )
public class RenderPlayerEventHandler
{
private static final String[] SANPLAYER_NAMES_UUID = new String[] { "SanAndreasP", "044d980d-5c2a-4030-95cf-cbfde69ea3cb" };
private RenderSanPlayer sanPlayerModel = null;
private float playerPartTicks = 0.0F;
private void lazyLoad() {
if( this.sanPlayerModel == null ) {
this.sanPlayerModel = new RenderSanPlayer();
this.sanPlayerModel.setRenderManager(RenderManager.instance);
if( Minecraft.getMinecraft().getResourceManager() instanceof SimpleReloadableResourceManager ) {
((SimpleReloadableResourceManager) Minecraft.getMinecraft().getResourceManager()).registerReloadListener(this.sanPlayerModel);
}
}
}
@SubscribeEvent
public void onPlayerRender(RenderPlayerEvent.Pre event) {
this.lazyLoad();
if( SAPUtils.isPlayerNameOrUuidEqual(event.entityPlayer, SANPLAYER_NAMES_UUID) ) {
playerPartTicks = event.partialRenderTick;
}
}
@SubscribeEvent
public void onLivingRender(Pre event) {
this.lazyLoad();
if( event.entity instanceof EntityPlayer && event.renderer != this.sanPlayerModel
&& SAPUtils.isPlayerNameOrUuidEqual((EntityPlayer) event.entity, SANPLAYER_NAMES_UUID) )
{
this.sanPlayerModel.doRender(event.entity, event.x, event.y + event.entity.yOffset, event.z, 0.0F, this.playerPartTicks);
event.setCanceled(true);
}
}
@SubscribeEvent
@SuppressWarnings( "unchecked" )
public void onHandRender(RenderHandEvent event) {
this.lazyLoad();
GL11.glPushMatrix();
Minecraft mc = Minecraft.getMinecraft();
if( SAPUtils.isPlayerNameOrUuidEqual(mc.thePlayer, SANPLAYER_NAMES_UUID) ) {
event.setCanceled(true);
GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
RenderPlayer rend = (RenderPlayer) RenderManager.instance.getEntityRenderObject(mc.thePlayer);
RenderManager.instance.entityRenderMap.put(mc.thePlayer.getClass(), this.sanPlayerModel);
SAPReflectionHelper.invokeCachedMethod(EntityRenderer.class, mc.entityRenderer, ReflectionNames.RENDER_HAND.mcpName, ReflectionNames.RENDER_HAND.srgName,
new Class[] { float.class, int.class }, new Object[] { event.partialTicks, event.renderPass } );
RenderManager.instance.entityRenderMap.put(mc.thePlayer.getClass(), rend);
}
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPopMatrix();
}
}