diff --git a/src/main/java/vazkii/botania/client/core/handler/BaubleRenderHandler.java b/src/main/java/vazkii/botania/client/core/handler/BaubleRenderHandler.java index 40e093317..72a1fe492 100644 --- a/src/main/java/vazkii/botania/client/core/handler/BaubleRenderHandler.java +++ b/src/main/java/vazkii/botania/client/core/handler/BaubleRenderHandler.java @@ -11,15 +11,26 @@ */ package vazkii.botania.client.core.handler; +import java.awt.Color; + +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.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; import net.minecraftforge.client.event.RenderPlayerEvent; import org.lwjgl.opengl.GL11; import vazkii.botania.api.item.IBaubleRender; +import vazkii.botania.api.item.IBaubleRender.Helper; import vazkii.botania.api.item.IBaubleRender.RenderType; import vazkii.botania.common.core.handler.ConfigHandler; +import vazkii.botania.common.item.ModItems; import baubles.common.container.InventoryBaubles; import baubles.common.lib.PlayerHandler; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -35,7 +46,9 @@ public final class BaubleRenderHandler { InventoryBaubles inv = PlayerHandler.getPlayerBaubles(player); dispatchRenders(inv, event, RenderType.BODY); - + if(inv.getStackInSlot(3) != null) + renderManaTablet(event); + float yaw = player.prevRotationYawHead + (player.rotationYawHead - player.prevRotationYawHead) * event.partialRenderTick; float yawOffset = player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * event.partialRenderTick; float pitch = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * event.partialRenderTick; @@ -59,5 +72,46 @@ public final class BaubleRenderHandler { } } } + + private void renderManaTablet(RenderPlayerEvent event) { + EntityPlayer player = event.entityPlayer; + boolean renderedOne = false; + for(int i = 0; i < player.inventory.getSizeInventory(); i++) { + ItemStack stack = player.inventory.getStackInSlot(i); + if(stack != null && stack.getItem() == ModItems.manaTablet) { + Item item = stack.getItem(); + GL11.glPushMatrix(); + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + Helper.rotateIfSneaking(event.entityPlayer); + boolean armor = event.entityPlayer.getCurrentArmor(1) != null; + GL11.glRotatef(180F, 1F, 0F, 0F); + GL11.glRotatef(90F, 0F, 1F, 0F); + GL11.glTranslatef(-0.25F, -0.85F, renderedOne ? (armor ? 0.2F : 0.28F) : (armor ? -0.3F : -0.25F)); + GL11.glScalef(0.5F, 0.5F, 0.5F); + + GL11.glColor3f(1F, 1F, 1F); + int light = 15728880; + int lightmapX = light % 65536; + int lightmapY = light / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightmapX, lightmapY); + for(int j = 0; j < 2; j++) { + IIcon icon = item.getIcon(stack, j); + float f = icon.getMinU(); + float f1 = icon.getMaxU(); + float f2 = icon.getMinV(); + float f3 = icon.getMaxV(); + ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 1F / 16F); + + Color color = new Color(item.getColorFromItemStack(stack, 1)); + GL11.glColor3ub((byte) color.getRed(), (byte) color.getGreen(), (byte) color.getBlue()); + } + GL11.glPopMatrix(); + + if(renderedOne) + return; + renderedOne = true; + } + } + } }