From d9a6a42d0974a77a48ecd4458879c03641cd4934 Mon Sep 17 00:00:00 2001 From: tterrag1098 Date: Mon, 23 Feb 2015 02:29:10 -0500 Subject: [PATCH] Improve dev special rendering system --- .../chisel/client/player/PlayerSpecials.java | 127 +++++++++++++----- .../chisel/proxy/ClientProxy.java | 4 +- 2 files changed, 95 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/cricketcraft/chisel/client/player/PlayerSpecials.java b/src/main/java/com/cricketcraft/chisel/client/player/PlayerSpecials.java index 1d95fbb0..9176de8f 100644 --- a/src/main/java/com/cricketcraft/chisel/client/player/PlayerSpecials.java +++ b/src/main/java/com/cricketcraft/chisel/client/player/PlayerSpecials.java @@ -1,7 +1,7 @@ package com.cricketcraft.chisel.client.player; -import java.util.ArrayList; -import java.util.List; +import java.util.Collection; +import java.util.UUID; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ItemRenderer; @@ -10,34 +10,40 @@ import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.TextureMap; 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 List names = new ArrayList(); - private boolean resetRender; - - public PlayerSpecials() { - names.add("Cricket"); - names.add("Drullkus"); + + 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; + } - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void renderItem(RenderPlayerEvent.Specials.Post event) { - EntityPlayer player = event.entityPlayer; - - for (int x = 0; x < names.size(); x++) { - if (player.getCommandSenderName().equals(names.get(x))) { + @Override + public void renderExtras(EntityPlayer player, boolean post) { + if (!post) { GL11.glPushMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); if (player.isSneaking()) { @@ -49,36 +55,89 @@ public class PlayerSpecials { 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 = 15728880; - int lightmapX = light % 65536; - int lightmapY = light / 65536; + int light = 0xF000F0; + int lightmapX = light % 0x10000; + int lightmapY = light / 0x10000; OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightmapX, lightmapY); - IIcon icon = ChiselItems.obsidianChisel.getIcon(new ItemStack(ChiselItems.obsidianChisel, 1, 0), 1); + 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) { + } } - - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void renderDev(RenderLivingEvent.Pre event) { - for (int x = 0; x < names.size(); x++) { - if (EnumChatFormatting.getTextWithoutFormattingCodes(event.entity.getCommandSenderName()).equals(names.get(x))) { + + 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(3042); - GL11.glBlendFunc(770, 771); - resetRender = true; + 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 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("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 + + MinecraftForge.EVENT_BUS.register(this); + } + + public static void init() { + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onPlayerRenderPre(RenderPlayerEvent.Pre event) { + Collection renders = renderMap.get(event.entityPlayer.getUniqueID()); + for (IDevRenderer r : renders) { + r.renderPlayer(event.entityPlayer, false); + } + } + @SubscribeEvent - public void entityColorRender(RenderLivingEvent.Post event) { - if (this.resetRender) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GL11.glDisable(3042); - resetRender = false; + public void onPlayerRenderPost(RenderPlayerEvent.Post event) { + Collection renders = renderMap.get(event.entityPlayer.getUniqueID()); + for (IDevRenderer r : renders) { + r.renderPlayer(event.entityPlayer, true); + } + } + + @SubscribeEvent + public void onPlayerRenderSpecialPre(RenderPlayerEvent.Specials.Pre event) { + Collection renders = renderMap.get(event.entityPlayer.getUniqueID()); + for (IDevRenderer r : renders) { + r.renderExtras(event.entityPlayer, false); + } + } + + @SubscribeEvent + public void onPlayerRenderSpecialPost(RenderPlayerEvent.Specials.Post event) { + Collection renders = renderMap.get(event.entityPlayer.getUniqueID()); + for (IDevRenderer r : renders) { + r.renderExtras(event.entityPlayer, false); } } } diff --git a/src/main/java/com/cricketcraft/chisel/proxy/ClientProxy.java b/src/main/java/com/cricketcraft/chisel/proxy/ClientProxy.java index 4ced85b1..a527bf21 100644 --- a/src/main/java/com/cricketcraft/chisel/proxy/ClientProxy.java +++ b/src/main/java/com/cricketcraft/chisel/proxy/ClientProxy.java @@ -62,8 +62,8 @@ public class ClientProxy extends CommonProxy { MinecraftForgeClient.registerItemRenderer(ChiselItems.chisel, renderer); MinecraftForgeClient.registerItemRenderer(ChiselItems.diamondChisel, renderer); - - MinecraftForge.EVENT_BUS.register(new PlayerSpecials()); + + PlayerSpecials.init(); } @Override