package com.cricketcraft.chisel.client.player; import java.util.Collection; import java.util.UUID; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraftforge.client.event.RenderLivingEvent; import net.minecraftforge.client.event.RenderPlayerEvent; import net.minecraftforge.common.MinecraftForge; import org.lwjgl.opengl.GL11; import com.cricketcraft.chisel.init.ChiselItems; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; public class PlayerSpecials { private interface IDevRenderer { void renderPlayer(EntityPlayer player, boolean post); void renderExtras(EntityPlayer player, boolean post); } private class RenderHolstered implements IDevRenderer { private ItemStack toRender; private RenderHolstered(ItemStack toRender) { this.toRender = toRender; } @Override public void renderExtras(EntityPlayer player, boolean post) { if (!post) { GL11.glPushMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); if (player.isSneaking()) { GL11.glRotatef(28.64789F, 1.0F, 0.0F, 0.0F); } boolean armor = player.getCurrentArmor(1) != null; GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); GL11.glTranslatef(-0.25F, -0.85F, armor ? 0.2F : 0.28F); GL11.glScalef(0.5F, 0.5F, 0.5F); GL11.glColor3f(1.0F, 1.0F, 1.0F); int light = 0xF000F0; int lightmapX = light % 0x10000; int lightmapY = light / 0x10000; OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightmapX, lightmapY); IIcon icon = toRender.getIconIndex(); ItemRenderer.renderItemIn2D(Tessellator.instance, icon.getMaxU(), icon.getMinV(), icon.getMinU(), icon.getMaxV(), icon.getIconWidth(), icon.getIconHeight(), 1.0F / 16.0F); GL11.glPopMatrix(); } } @Override public void renderPlayer(EntityPlayer player, boolean post) { } } private class RenderTranslucent implements IDevRenderer { @Override public void renderExtras(EntityPlayer player, boolean post) { } @Override public void renderPlayer(EntityPlayer player, boolean post) { if (!post) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.75F); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); } else { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_BLEND); } } } public static final PlayerSpecials INSTANCE = new PlayerSpecials(); private Multimap<UUID, IDevRenderer> renderMap = ArrayListMultimap.create(); private PlayerSpecials() { RenderHolstered backChisel = new RenderHolstered(new ItemStack(ChiselItems.obsidianChisel)); RenderTranslucent translucent = new RenderTranslucent(); renderMap.putAll(UUID.fromString("a7529984-8cb2-4fb9-b799-97980f770101"), Lists.newArrayList(backChisel, translucent)); // Cricket renderMap.putAll(UUID.fromString("a1d2532b-ee11-4ca3-b4c5-76e168d4c98e"), Lists.newArrayList(backChisel, translucent)); // TheCricket26 renderMap.putAll(UUID.fromString("5399b615-3440-4c66-939d-ab1375952ac3"), Lists.newArrayList(backChisel, translucent)); // Drullkus renderMap.put(UUID.fromString("671516b1-4fb3-4c03-aa7c-9c88cfab3ae8"), new RenderHolstered(new ItemStack(ChiselItems.diamondChisel))); // tterrag renderMap.put(UUID.fromString("ad18f501-08fa-4e7e-b324-86750009106e"), new RenderHolstered(new ItemStack(ChiselItems.chisel)));//minecreatr MinecraftForge.EVENT_BUS.register(this); } public static void init() { } @SubscribeEvent(priority = EventPriority.HIGHEST) public void onPlayerRenderPre(RenderLivingEvent.Pre event) { if(nameIsGood(event.entity)){ GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.75F); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); } } @SubscribeEvent public void onPlayerRenderPost(RenderLivingEvent.Post event) { if(nameIsGood(event.entity)){ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_BLEND); } } @SubscribeEvent public void onPlayerRenderSpecialPre(RenderPlayerEvent.Specials.Pre event) { Collection<IDevRenderer> renders = renderMap.get(event.entityPlayer.getUniqueID()); for (IDevRenderer r : renders) { r.renderExtras(event.entityPlayer, false); } } @SubscribeEvent public void onPlayerRenderSpecialPost(RenderPlayerEvent.Specials.Post event) { Collection<IDevRenderer> renders = renderMap.get(event.entityPlayer.getUniqueID()); for (IDevRenderer r : renders) { r.renderExtras(event.entityPlayer, true); } } private boolean nameIsGood(Entity entity){ if(EnumChatFormatting.getTextWithoutFormattingCodes(entity.getCommandSenderName()).equals("Cricket") || EnumChatFormatting.getTextWithoutFormattingCodes(entity.getCommandSenderName()).equals("Drullkus") || EnumChatFormatting.getTextWithoutFormattingCodes(entity.getCommandSenderName()).equals("minecreatr")) return true; return false; } }