package noppes.npcs.client.renderer; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import noppes.npcs.client.Client; import noppes.npcs.constants.EnumPacketServer; import noppes.npcs.controllers.data.SkinOverlayData; import org.lwjgl.opengl.GL11; public class RenderCNPCPlayer extends RenderPlayer { public RenderCNPCPlayer() { } private boolean preRenderOverlay(boolean firstPerson, EntityPlayer player, ResourceLocation overlayLocation, boolean glow, float alpha, float size, float speedX, float speedY, float scaleX, float scaleY) { try { this.bindTexture(overlayLocation); } catch (Exception exception) { return false; } float renderTicks; if (firstPerson) { renderTicks = Client.fpSkinOverlayTicks.get(player.getUniqueID()); } else { renderTicks = Client.entitySkinOverlayTicks.get(player.getUniqueID());; } // Overlay & Glow if (glow) { GL11.glDepthFunc(GL11.GL_LEQUAL); GL11.glEnable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_LIGHTING); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_DST_ALPHA); Minecraft.getMinecraft().entityRenderer.disableLightmap((double)0); } GL11.glColor4f(1.0F, 1.0F, 1.0F, alpha); GL11.glDepthMask(!player.isInvisible()); GL11.glPushMatrix(); GL11.glMatrixMode(GL11.GL_TEXTURE); GL11.glLoadIdentity(); GL11.glTranslatef(renderTicks * 0.001F * speedX, renderTicks * 0.001F * speedY, 0.0F); GL11.glScalef(scaleX, scaleY, 1.0F); GL11.glMatrixMode(GL11.GL_MODELVIEW); float scale = 1.005f * size; GL11.glScalef(scale, scale, scale); return true; } public void postRenderOverlay(EntityPlayer player) { GL11.glPopMatrix(); GL11.glMatrixMode(GL11.GL_TEXTURE); GL11.glLoadIdentity(); GL11.glMatrixMode(GL11.GL_MODELVIEW); GL11.glEnable(GL11.GL_LIGHTING); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDepthFunc(GL11.GL_LEQUAL); GL11.glDisable(GL11.GL_BLEND); Minecraft.getMinecraft().entityRenderer.enableLightmap((double)0); } @Override protected void renderModel(EntityLivingBase p_77036_1_, float p_77036_2_, float p_77036_3_, float p_77036_4_, float p_77036_5_, float p_77036_6_, float p_77036_7_) { EntityPlayer player = (EntityPlayer) p_77036_1_; this.bindEntityTexture(p_77036_1_); if (!p_77036_1_.isInvisible()) { this.mainModel.render(p_77036_1_, p_77036_2_, p_77036_3_, p_77036_4_, p_77036_5_, p_77036_6_, p_77036_7_); if (Client.skinOverlays.containsKey(player.getUniqueID())) { if (!Client.entitySkinOverlayTicks.containsKey(player.getUniqueID())) { Client.entitySkinOverlayTicks.put(player.getUniqueID(), 1L); } else { long ticks = Client.entitySkinOverlayTicks.get(player.getUniqueID()); Client.entitySkinOverlayTicks.put(player.getUniqueID(), ticks + 1); } for (SkinOverlayData overlayData : Client.skinOverlays.get(player.getUniqueID()).values()) { if (!preRenderOverlay(false, player, overlayData.location, overlayData.glow, overlayData.alpha, overlayData.size, overlayData.speedX, overlayData.speedY, overlayData.scaleX, overlayData.scaleY)) return; this.mainModel.render(p_77036_1_, p_77036_2_, p_77036_3_, p_77036_4_, p_77036_5_, p_77036_6_, p_77036_7_); postRenderOverlay(player); } } else if(player.getEntityData().hasKey("SkinOverlayData")) { Client.sendData(EnumPacketServer.SERVER_UPDATE_SKIN_OVERLAYS, new Object[0]); } } else if (!p_77036_1_.isInvisibleToPlayer(Minecraft.getMinecraft().thePlayer)) { GL11.glPushMatrix(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.15F); GL11.glDepthMask(false); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glAlphaFunc(GL11.GL_GREATER, 0.003921569F); this.mainModel.render(p_77036_1_, p_77036_2_, p_77036_3_, p_77036_4_, p_77036_5_, p_77036_6_, p_77036_7_); GL11.glDisable(GL11.GL_BLEND); GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); GL11.glPopMatrix(); GL11.glDepthMask(true); } else { this.mainModel.setRotationAngles(p_77036_2_, p_77036_3_, p_77036_4_, p_77036_5_, p_77036_6_, p_77036_7_, p_77036_1_); } } public void renderFirstPersonArm(EntityPlayer player) { float f = 1.0F; GL11.glColor3f(f, f, f); this.modelBipedMain.onGround = 0.0F; this.modelBipedMain.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, player); this.modelBipedMain.bipedRightArm.render(0.0625F); if (Client.skinOverlays.containsKey(player.getUniqueID())) { if (!Client.fpSkinOverlayTicks.containsKey(player.getUniqueID())) { Client.fpSkinOverlayTicks.put(player.getUniqueID(), 1L); } else { long ticks = Client.fpSkinOverlayTicks.get(player.getUniqueID()); Client.fpSkinOverlayTicks.put(player.getUniqueID(), ticks + 1); } for (SkinOverlayData overlayData : Client.skinOverlays.get(player.getUniqueID()).values()) { if (!preRenderOverlay(true, player, overlayData.location, overlayData.glow, overlayData.alpha, overlayData.size, overlayData.speedX, overlayData.speedY, overlayData.scaleX, overlayData.scaleY)) return; this.modelBipedMain.onGround = 0.0F; this.modelBipedMain.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, player); this.modelBipedMain.bipedRightArm.render(0.0625F); postRenderOverlay(player); } } else if(player.getEntityData().hasKey("SkinOverlayData")) { Client.sendData(EnumPacketServer.SERVER_UPDATE_SKIN_OVERLAYS, new Object[0]); } } }