InGameMenu



  • Bonjour, je voulais savoir s'il y a un moyen pour faire apparaître un aperçu du joueur sur le menu InGame ! Si oui, comment s'il vous plait ? ^^'



  • C'est a dire ? Quel menu exactement ?

    Donne plus de précisions si possible 🙂



  • Bon voilà en fait, j'aimerais mettre un aperçu du joueur comme ceci :

    Mais je ne trouve pas la solution à part des tutos de Minecraft 1.3 qui ne fonctionnent pas vraiment ^^'

    De même pour pouvoir entrer une commande en jeu comme un /time set 0 sur un bouton avec ce genre de code:

    case 7:
    {
    Desktop desktop = null;
    try
    {
    URI url = new URI("http://lesite.com/");
    if(Desktop.isDesktopSupported())
    {
    desktop = Desktop.getDesktop();
    desktop.browse(url);
    }
    }
    catch(Exception ex)
    {}
    }
    

    Ici, ça n'a rien à voir avec une commande en jeu mais pour un site, mais voilà où je veux en venir pour le bouton de commande en jeu !



  • Tu utilises l'event "RenderGameOverlayEvent"

    Puis tu vas chercher dans GuiInventory la fonction et sa déclaration qui permettent d'afficher le joueur dans l'inventaire,
     tu met toussa' dans ton évent tu fais les appels qu' il faut et TA DA ! Le tour est joué !

    Si t'a pas tout compris c'est normal, je te met sur la piste !



  • @'ZeAmateis':

    Tu utilises l'event "RenderGameOverlayEvent"

    Puis tu vas chercher dans GuiInventory la fonction et sa déclaration qui permettent d'afficher le joueur dans l'inventaire,
     tu met toussa' dans ton évent tu fais les appels qu' il faut et TA DA ! Le tour est joué !

    Si t'a pas tout compris c'est normal, je te met sur la piste !

    Salut! Tout d'abord, merci de ta réponse, et aussi, c'est bien de mettre sur des pistes, ça permet d'apprendre ^^' Bref, j'ai donc ajouter ça :

    @SubscribeEvent
    
    public void renderGameOverlay(RenderGameOverlayEvent event) {
    }
    
    public static void func_147046_a(int p_147046_0_, int p_147046_1_, int p_147046_2_, float p_147046_3_, float p_147046_4_, EntityLivingBase p_147046_5_)
    {
    GL11.glEnable(GL11.GL_COLOR_MATERIAL);
    GL11.glPushMatrix();
    GL11.glTranslatef((float)p_147046_0_, (float)p_147046_1_, 50.0F);
    GL11.glScalef((float)(-p_147046_2_), (float)p_147046_2_, (float)p_147046_2_);
    GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
    float var6 = p_147046_5_.renderYawOffset;
    float var7 = p_147046_5_.rotationYaw;
    float var8 = p_147046_5_.rotationPitch;
    float var9 = p_147046_5_.prevRotationYawHead;
    float var10 = p_147046_5_.rotationYawHead;
    GL11.glRotatef(135.0F, 0.0F, 1.0F, 0.0F);
    RenderHelper.enableStandardItemLighting();
    GL11.glRotatef(-135.0F, 0.0F, 1.0F, 0.0F);
    GL11.glRotatef(-((float)Math.atan((double)(p_147046_4_ / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F);
    p_147046_5_.renderYawOffset = (float)Math.atan((double)(p_147046_3_ / 40.0F)) * 20.0F;
    p_147046_5_.rotationYaw = (float)Math.atan((double)(p_147046_3_ / 40.0F)) * 40.0F;
    p_147046_5_.rotationPitch = -((float)Math.atan((double)(p_147046_4_ / 40.0F))) * 20.0F;
    p_147046_5_.rotationYawHead = p_147046_5_.rotationYaw;
    p_147046_5_.prevRotationYawHead = p_147046_5_.rotationYaw;
    GL11.glTranslatef(0.0F, p_147046_5_.yOffset, 0.0F);
    RenderManager.instance.playerViewY = 180.0F;
    p_147046_5_.renderYawOffset = var6;
    p_147046_5_.rotationYaw = var7;
    p_147046_5_.rotationPitch = var8;
    p_147046_5_.prevRotationYawHead = var9;
    p_147046_5_.rotationYawHead = var10;
    GL11.glPopMatrix();
    RenderHelper.disableStandardItemLighting();
    GL11.glDisable(GL12.GL_RESCALE_NORMAL);
    OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit);
    GL11.glDisable(GL11.GL_TEXTURE_2D);
    OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit);
    }
    
    }
    
    

    Désoler d'être aussi nul là mais je ne vois vraiment pas ^^'



  • Je pense que le initGuiEvent est mieux, à mon avis.


  • Administrateurs

    Non, puisqu'il ne peux pas toucher au classe de mc.
    Pour avoir l'instance du joueur tu peux utiliser Minecraft.getMinecraft().thePlayer comme ce code s'exécute côté client.

    Il te suffit d'appeler la fonction que tu as copié avec les coordonnés et l'instance du joueur et ça devrait être bon, j'ai quand même un doute car je ne suis pas sûr que la fonction que tu as copié et la bonne.



  • @'robin4002':

    Non, puisqu'il ne peux pas toucher au classe de mc.
    Pour avoir l'instance du joueur tu peux utiliser Minecraft.getMinecraft().thePlayer comme ce code s'exécute côté client.

    Il te suffit d'appeler la fonction que tu as copié avec les coordonnés et l'instance du joueur et ça devrait être bon, j'ai quand même un doute car je ne suis pas sûr que la fonction que tu as copié et la bonne.

    Ben en fait, je pense que ça ne peut être que là dedans car avant c'est des boucles pour l'affichage et l'ajout de quelques boutons de base :```
    /**

    • Draws the screen and all the components in it.
      */
      public void drawScreen(int par1, int par2, float par3)
      {
      super.drawScreen(par1, par2, par3);
      this.field_147048_u = (float)par1;
      this.field_147047_v = (float)par2;
      }

    protected void func_146976_a(float p_146976_1_, int p_146976_2_, int p_146976_3_)
    {
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    this.mc.getTextureManager().bindTexture(field_147001_a);
    int var4 = this.field_147003_i;
    int var5 = this.field_147009_r;
    this.drawTexturedModalRect(var4, var5, 0, 0, this.field_146999_f, this.field_147000_g);
    func_147046_a(var4 + 51, var5 + 75, 30, (float)(var4 + 51) - this.field_147048_u, (float)(var5 + 75 - 50) - this.field_147047_v, this.mc.thePlayer);
    }

    public static void func_147046_a(int p_147046_0_, int p_147046_1_, int p_147046_2_, float p_147046_3_, float p_147046_4_, EntityLivingBase p_147046_5_)
    {
    GL11.glEnable(GL11.GL_COLOR_MATERIAL);
    GL11.glPushMatrix();
    GL11.glTranslatef((float)p_147046_0_, (float)p_147046_1_, 50.0F);
    GL11.glScalef((float)(-p_147046_2_), (float)p_147046_2_, (float)p_147046_2_);
    GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
    float var6 = p_147046_5_.renderYawOffset;
    float var7 = p_147046_5_.rotationYaw;
    float var8 = p_147046_5_.rotationPitch;
    float var9 = p_147046_5_.prevRotationYawHead;
    float var10 = p_147046_5_.rotationYawHead;
    GL11.glRotatef(135.0F, 0.0F, 1.0F, 0.0F);
    RenderHelper.enableStandardItemLighting();
    GL11.glRotatef(-135.0F, 0.0F, 1.0F, 0.0F);
    GL11.glRotatef(-((float)Math.atan((double)(p_147046_4_ / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F);
    p_147046_5_.renderYawOffset = (float)Math.atan((double)(p_147046_3_ / 40.0F)) * 20.0F;
    p_147046_5_.rotationYaw = (float)Math.atan((double)(p_147046_3_ / 40.0F)) * 40.0F;
    p_147046_5_.rotationPitch = -((float)Math.atan((double)(p_147046_4_ / 40.0F))) * 20.0F;
    p_147046_5_.rotationYawHead = p_147046_5_.rotationYaw;
    p_147046_5_.prevRotationYawHead = p_147046_5_.rotationYaw;
    GL11.glTranslatef(0.0F, p_147046_5_.yOffset, 0.0F);
    RenderManager.instance.playerViewY = 180.0F;
    RenderManager.instance.func_147940_a(p_147046_5_, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F);
    p_147046_5_.renderYawOffset = var6;
    p_147046_5_.rotationYaw = var7;
    p_147046_5_.rotationPitch = var8;
    p_147046_5_.prevRotationYawHead = var9;
    p_147046_5_.rotationYawHead = var10;
    GL11.glPopMatrix();
    RenderHelper.disableStandardItemLighting();
    GL11.glDisable(GL12.GL_RESCALE_NORMAL);
    OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit);
    GL11.glDisable(GL11.GL_TEXTURE_2D);
    OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit);
    }

    protected void actionPerformed(GuiButton p_146284_1_)
    {
    if (p_146284_1_.id == 0)
    {
    this.mc.displayGuiScreen(new GuiAchievements(this, this.mc.thePlayer.func_146107_m()));
    }

    if (p_146284_1_.id == 1)
    {
    this.mc.displayGuiScreen(new GuiStats(this, this.mc.thePlayer.func_146107_m()));
    }
    }
    }

    
    Et comme je ne trouve pas Minecraft.getMinecraft().thePlayer , je ne sais pas vraiment ou le placer sur mon code de base :/

  • Administrateurs

    Bon je viens de regarder de mon côté, comme la fonction func_14706_a est static tu peux l'utiliser sans la copier/coller :

    ​    @SubscribeEvent
    
        public void renderGameOverlay(RenderGameOverlayEvent.Post event)
        {
            if(event.type != RenderGameOverlayEvent.ElementType.EXPERIENCE)
            {
                return;
            }
            GuiInventory.func_147046_a(20, 60, 25, -40, 5, Minecraft.getMinecraft().thePlayer);
        }
    

    Dans l'ordre :
    20 : translation sur l'axe x
    60 : translation sur l'axe y
    25 : scale du rendu
    -40 : rotation du corps sur l'axe z
    5 : rotation de la tête sur l'axe x

    Avec ces valeurs il s'affiche en haut à gauche.
    Si tu veux le mettre en haut à droite, il faut utiliser event.resolution.getScaledWidth() - 20;



  • @'robin4002':

    Bon je viens de regarder de mon côté, comme la fonction func_14706_a est static tu peux l'utiliser sans la copier/coller :

    ​    @SubscribeEvent
    
        public void renderGameOverlay(RenderGameOverlayEvent.Post event)
        {
            if(event.type != RenderGameOverlayEvent.ElementType.EXPERIENCE)
            {
                return;
            }
            GuiInventory.func_147046_a(20, 60, 25, -40, 5, Minecraft.getMinecraft().thePlayer);
        }
    

    Dans l'ordre :
    20 : translation sur l'axe x
    60 : translation sur l'axe y
    25 : scale du rendu
    -40 : rotation du corps sur l'axe z
    5 : rotation de la tête sur l'axe x

    Avec ces valeurs il s'affiche en haut à gauche.
    Si tu veux le mettre en haut à droite, il faut utiliser event.resolution.getScaledWidth() - 20;

    Alors, j'ai bien fait tout ça mais rien de change, le personnage n'apparait pas sur le menu echap, je ne comprend pas là ^^' J'ai laisser toutes les valeurs par défaut mais rien n'y fait 😕


  • Administrateurs

    Ha, tu veux le mettre sur le menu échappe x)
    Bon normal que ça fonctionne pas alors, avec le code que je t'ai donné il devrait apparaitre directement en jeu. (tu n'as surement pas enregistré ta classe d'event)

    Dans ce cas il faut refaire un classe InGameMenu custom et utiliser le même principe d'ouverture d'un autre gui que celui nécessaire pour faire un menu custom.



  • Bah j'ai déjà recréer une classe car je recode en forge, mais j'ai voulu utiliser le code vanilla sauf que c'est un peu compliquer ^^'