Aller au contenu
Demyx

[1.7.x] ArmorHUD (feat Chaos90)

Recommended Posts

Merci à chaos90 pour son aide par rapport à ce tutoriel!

ArmorHUD en Vanilla


88x31.png
Cette uvre est mise à disposition selon les termes de laLicence Creative Commons Attribution - Pas dUtilisation Commerciale - Pas de Modification 3.0 non transposé. Tout partage implique que vous citiez l'auteur original.

-[iNTRODUCTION]-

Nous sommes partis pour un tutoriel pour afficher un ArmorHUD en Vanilla ( code by dermenslof puis modifié par chaos90 )

-[TUTORIEL]-


On va commencer par insérer un petit bout de code juste au dessus du ce code ci:

public void renderGameOverlay(float par1, boolean par2, int par3, int par4)

Nous allons donc ajouter ceci:

    private void drawItemInToScreen(ItemStack is, int x, int y, float par3, boolean overlay) // On demande au jeu d'afficher l'item sur l'écran
    {
    	if (is != null)
    	{
    	    float an = (float)is.animationsToGo - par3; //On lui dit d'effectuer toute animation par rapport à l'item
            if (an > 0.0F)
            {
            	GL11.glPushMatrix();
                float dec = 1.0F + an / 5.0F;
                GL11.glTranslatef((float)(x + 8), (float)(y + 12), 0.0F);
                GL11.glScalef(1.0F / dec, (dec + 1.0F) / 2.0F, 1.0F);
                GL11.glTranslatef((float)(-(x + 8)), (float)(-(y + 12)), 0.0F);
            }
            itemRenderer.renderItemAndEffectIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, x, y); //On lui dit de prendre la texture de l'item et de l'afficher sur l'écran
            if (an > 0.0F)
                GL11.glPopMatrix();
            if (overlay)
            	itemRenderer.renderItemOverlayIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, 16, y); // Même chose qu'au dessus!
    	}
    }

Nous allons ensuite modifier quelques éléments:

if (!this.mc.playerController.enableEverythingIsScrewedUpMode()) // <------- ATTENTION CETTE FONCTION EXISTE DEJA JUSTE A REMPLACER
        {
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
            this.mc.getTextureManager().bindTexture(widgetsTexPath);
            InventoryPlayer var31 = this.mc.thePlayer.inventory;
            this.zLevel = -90.0F;
            this.drawTexturedModalRect(var6 / 2 - 91, var7 - 22, 0, 0, 182, 22);
            this.drawTexturedModalRect(var6 / 2 - 91 - 1 + var31.currentItem * 20, var7 - 22 - 1, 0, 22, 24, 22);
            this.mc.getTextureManager().bindTexture(icons); 
            GL11.glEnable(GL11.GL_BLEND);
            OpenGlHelper.glBlendFunc(775, 769, 1, 0);
            this.drawTexturedModalRect(var6 / 2 - 7, var7 / 2 - 7, 0, 0, 16, 16);
            OpenGlHelper.glBlendFunc(770, 771, 1, 0);
            this.mc.mcProfiler.startSection("bossHealth");
            this.renderBossHealth();
            this.mc.mcProfiler.endSection();

            if (this.mc.playerController.shouldDrawHUD())
            {
                this.func_110327_a(var6, var7);
            }

            this.mc.mcProfiler.startSection("actionBar");
            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
            RenderHelper.enableGUIStandardItemLighting();

            for (var11 = 0; var11 < 9; ++var11)
            {
                var12 = var6 / 2 - 90 + var11 * 20 + 2;
                var13 = var7 - 16 - 3;
                this.renderInventorySlot(var11, var12, var13, par1);
            }

Puis, juste en dessous de ces nouveaux éléments, rajouter ceci, qui va faire afficher au jeu le HUD:

ItemStack is;
//render itemArmor
for (int i = 0; i < 4; ++i)
{
    is = this.mc.thePlayer.inventory.armorItemInSlot(4 - i - 1);
if (is == null)
continue;
    drawItemInToScreen(is, 0, i * 17, par1, true);
    this.mc.fontRenderer.drawString("§f§l" + (is.getMaxDamage() - is.getItemDamageForDisplay()), 18, i * 17 + 5, 0);
}
//render itemInHand
is = this.mc.thePlayer.inventory.getCurrentItem();
if (is != null)
{
    Item i = is.getItem();
    boolean outils = i instanceof Item;
    if (!i.isItemTool(is) || outils && !(i instanceof ItemArmor))
    {
     drawItemInToScreen(is, 40, 1 * 5, par1, false);
GL11.glDisable(GL11.GL_BLEND);
     this.mc.fontRenderer.drawString("" + "§n§lDurabilité :§r§c§l " + (is.getMaxDamage() - is.getItemDamageForDisplay()) + " §r§n§lQuantité :§r§c§l " + is.stackSize, 60, 1 * 5 + 5, 553648127);
    }

}
            RenderHelper.disableStandardItemLighting();
            GL11.glDisable(GL12.GL_RESCALE_NORMAL);
            this.mc.mcProfiler.endSection();
            GL11.glDisable(GL11.GL_BLEND);
        }
     

-[CONCLUSION]-

Voilà, votre HUD s'affiche désormais! Je ne me suis pas amuser à tout décoder, mais si l'envie vous en viens, n'hésitez pas!

/!\ Je me répète, mais le code est de dermenslof , puis modifié par chaos90, pas de moi! Sur ce, bon jeu avec votre ArmorHUD

EDIT de Dermenslof: j'assume rien du tout, à la base c'est mon code mais pas les modifs apportées totalement aberrantes (genre: boolean outils = i instanceof Item; et j'en passe)

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Je viens d'edit pour l'entête.

Sinon c'est bien de faire ce tutoriel, mais je pense que tu devrais essayer d'expliquer un peu, car là tu te contente de demander de copier coller un code.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Comment faire pour modifier la place de l'ArmorHUD car j'ai trouvé comment modifier celle de la durabilité et tout pas pas celle de l'armure...

Ps: Sa serait cool aussi, si on pouvait remplacer la quantité par le nombre de dégât que procure l'objet...

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjours

drawItemInToScreen(is, 0, i * 17, par1, true);
privatevoiddrawItemInToScreen(ItemStackis,intx,inty,floatpar3,boolean overlay)

Ici on affiche l'item is avec pour cordonné x=0 et y=i*17 ( i étant le slot de l'armure), le par1 on y touche pas et le true non plus.Donc si tu veut déplacer par exemple de 50 pixel vers la droite et 20 vert le bas tu fait comme ça:

drawItemInToScreen(is, 0+50, (i * 17)+20, par1, true);

Voila je pense que c'est tout, bye et bonne continuation.

Partager ce message


Lien à poster
Partager sur d’autres sites

Comment faire pour modifier la place de l'ArmorHUD car j'ai trouvé comment modifier celle de la durabilité et tout pas pas celle de l'armure...

Ps: Sa serait cool aussi, si on pouvait remplacer la quantité par le nombre de dégât que procure l'objet...

Il faudrait voir ca avec chaos90, j'ai juste réalisé le tutoriel, ce genre de code n'est pas mon fort...


Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjours

drawItemInToScreen(is, 0, i * 17, par1, true);
privatevoiddrawItemInToScreen(ItemStackis,intx,inty,floatpar3,boolean overlay)

Ici on affiche l'item is avec pour cordonné x=0 et y=i*17 ( i étant le slot de l'armure), le par1 on y touche pas et le true non plus.Donc si tu veut déplacer par exemple de 50 pixel vers la droite et 20 vert le bas tu fait comme ça:

drawItemInToScreen(is, 0+50, (i * 17)+20, par1, true);

Voila je pense que c'est tout, bye et bonne continuation

Merci de ta réponse si rapide ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Edit: Ceci sert a déplacer la barre d'inventaire.

C'est encor moi ;p

Alors tu vien deja dans cette fonction:

if (!this.mc.playerController.enableEverythingIsScrewedUpMode()) // <------- ATTENTION CETTE FONCTION EXISTE DEJA JUSTE A REMPLACER
        {
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
            this.mc.getTextureManager().bindTexture(widgetsTexPath);
            InventoryPlayer var31 = this.mc.thePlayer.inventory;
            this.zLevel = -90.0F;
            this.drawTexturedModalRect(var6 / 2 - 91, var7 - 22, 0, 0, 182, 22);
            this.drawTexturedModalRect(var6 / 2 - 91 - 1 + var31.currentItem * 20, var7 - 22 - 1, 0, 22, 24, 22);
            this.mc.getTextureManager().bindTexture(icons); 
            GL11.glEnable(GL11.GL_BLEND);
            OpenGlHelper.glBlendFunc(775, 769, 1, 0);
            this.drawTexturedModalRect(var6 / 2 - 7, var7 / 2 - 7, 0, 0, 16, 16);
            OpenGlHelper.glBlendFunc(770, 771, 1, 0);
            this.mc.mcProfiler.startSection("bossHealth");
            this.renderBossHealth();
            this.mc.mcProfiler.endSection();

            if (this.mc.playerController.shouldDrawHUD())
            {
                this.func_110327_a(var6, var7);
            }

            this.mc.mcProfiler.startSection("actionBar");
            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
            RenderHelper.enableGUIStandardItemLighting();

            for (var11 = 0; var11 < 9; ++var11)
            {
                var12 = var6 / 2 - 90 + var11 * 20 + 2;
                var13 = var7 - 16 - 3;
                this.renderInventorySlot(var11, var12, var13, par1);
            }

Ensuite on sintéresse a ces deux lignes:

   this.drawTexturedModalRect(var6 / 2 - 91, var7 - 22, 0, 0, 182, 22);
   this.drawTexturedModalRect(var6 / 2 - 91 - 1 + var31.currentItem * 20, var7 - 22 - 1, 0, 22, 24, 22);

Cest donc la fonction:

    public void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6)

qui nous intéresse donc le par1 est la position en x de ta barre ,le par2 est la position en y , le par3 est la position en x sur l'image gui.png pareil pour le par4 qui est la position en y sur le gui.png, et le par5 est la longueur en x de ce que t'affiche et par6 est la largeur en y.

Donc pour déplacer ton gui vers la droite de 10 et 20 en hauteur change juste le par1 et le par2 comme ca :

 this.drawTexturedModalRect(var6 / 2 - 91+10, var7 - 22 + 20, 0, 0, 182, 22);
 this.drawTexturedModalRect(var6 / 2 - 91 - 1 +10+ var31.currentItem * 20, var7 - 22 - 1+20, 0, 22, 24, 22);

A préciser que la première ligne représente la barre noire et la deuxième ligne la barre vert(celle qui change en fonction de la durabilité).

Voilou :P

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est encor moi ;p

Alors tu vien dejav dans cette fonction:

if (!this.mc.playerController.enableEverythingIsScrewedUpMode()) // <------- ATTENTION CETTE FONCTION EXISTE DEJA JUSTE A REMPLACER
        {
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
            this.mc.getTextureManager().bindTexture(widgetsTexPath);
            InventoryPlayer var31 = this.mc.thePlayer.inventory;
            this.zLevel = -90.0F;
            this.drawTexturedModalRect(var6 / 2 - 91, var7 - 22, 0, 0, 182, 22);
            this.drawTexturedModalRect(var6 / 2 - 91 - 1 + var31.currentItem * 20, var7 - 22 - 1, 0, 22, 24, 22);
            this.mc.getTextureManager().bindTexture(icons); 
            GL11.glEnable(GL11.GL_BLEND);
            OpenGlHelper.glBlendFunc(775, 769, 1, 0);
            this.drawTexturedModalRect(var6 / 2 - 7, var7 / 2 - 7, 0, 0, 16, 16);
            OpenGlHelper.glBlendFunc(770, 771, 1, 0);
            this.mc.mcProfiler.startSection("bossHealth");
            this.renderBossHealth();
            this.mc.mcProfiler.endSection();

            if (this.mc.playerController.shouldDrawHUD())
            {
                this.func_110327_a(var6, var7);
            }

            this.mc.mcProfiler.startSection("actionBar");
            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
            RenderHelper.enableGUIStandardItemLighting();

            for (var11 = 0; var11 < 9; ++var11)
            {
                var12 = var6 / 2 - 90 + var11 * 20 + 2;
                var13 = var7 - 16 - 3;
                this.renderInventorySlot(var11, var12, var13, par1);
            }

Ensuite on sintéresse a ces deux lignes:

   this.drawTexturedModalRect(var6 / 2 - 91, var7 - 22, 0, 0, 182, 22);
   this.drawTexturedModalRect(var6 / 2 - 91 - 1 + var31.currentItem * 20, var7 - 22 - 1, 0, 22, 24, 22);

Cest donc la fonction:

    public void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6)

qui nous intéresse donc le par1 est la position en x de ta barre ,le par2 est la position en y , le par3 est la position en x sur l'image gui.png pareil pour le par4 qui est la position en y sur le gui.png, et le par5 est la longueur en x de ce que t'affiche et par6 est la largeur en y.

Donc pour déplacer ton gui vers la droite de 10 et 20 en hauteur change juste le par1 et le par2 comme ca :

 this.drawTexturedModalRect(var6 / 2 - 91+10, var7 - 22 + 20, 0, 0, 182, 22);
 this.drawTexturedModalRect(var6 / 2 - 91 - 1 +10+ var31.currentItem * 20, var7 - 22 - 1+20, 0, 22, 24, 22);

A préciser que la première ligne représente la barre noire et la deuxième ligne la barre vert(celle qui change en fonction de la durabilité).

Voilou :P

Merci, t'es vraiment trop fort ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci, t'es vraiment trop fort ;)

Je ne rabaisse en rien son travail, mais en décodant un petit peu, on peut facilement savoir quoi correspond à quoi, et modifier les coordonnées ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne rabaisse en rien son travail, mais en décodant un petit peu, on peut facilement savoir quoi correspond à quoi, et modifier les coordonnées ;)

Oui, je suis d'accord, mais faut il encore décoder ... ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, je suis d'accord, mais faut il encore décoder ... ^^

Facile, un peu de logique ^^'

                    this.drawTexturedModalRect(var6 / 2 - 91, var7 - 22, 0, 0, 182, 22); // L'armure sur le joueur
                    this.drawTexturedModalRect(var6 / 2 - 91 - 1 + var31.currentItem * 20, var7 - 22 - 1, 0, 22, 24, 22); //L'item en main

Partager ce message


Lien à poster
Partager sur d’autres sites

Apres vérification il n'y a pas laffichage des barres de durabilité dans ce tuto . Dans 20 minutes je serais sur le ts pour t'aider si besoin .D'ici la essaye de trouver sur quel tuto tu a pris les barres de durabilité .

Celui -ci ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

Apres vérification il n'y a pas laffichage des barres de durabilité dans ce tuto . Dans 20 minutes je serais sur le ts pour t'aider si besoin .D'ici la essaye de trouver sur quel tuto tu a pris les barres de durabilité .

Si, il y'en a une, met des dégâts à ton armure...

Partager ce message


Lien à poster
Partager sur d’autres sites

En cherchant un peu, j'ai trouvé, il suffit juste de modifier cette ligne

itemRenderer.renderItemOverlayIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, 250, y);

On modifie le chiffre 250 qui déplace plus ou moins vers la droite car de haut en bas, sa ce fait automatiquement quand on déplace l'image de l'armure ;)

Ps: Si vous voulez que ces jauge d'armure ce place toute seul, modifier le chiffre (la c'est 250) par "x" (sans les guillemet bien sure) ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est bon j'ai trouver d'ou ca vien :P

Vien ici:

	private void drawItemInToScreen(ItemStack is, int x, int y, float par3, boolean overlay) // On demande au jeu d'afficher l'item sur l'écran
    {
    	if (is != null)
    	{
    	    float an = (float)is.animationsToGo - par3; //On lui dit d'effectuer toute animation par rapport à l'item
            if (an > 0.0F)
            {
            	GL11.glPushMatrix();
                float dec = 1.0F + an / 5.0F;
                GL11.glTranslatef((float)(x + 8), (float)(y + 12), 0.0F);
                GL11.glScalef(1.0F / dec, (dec + 1.0F) / 2.0F, 1.0F);
                GL11.glTranslatef((float)(-(x + 8)), (float)(-(y + 12)), 0.0F);
            }
            itemRenderer.renderItemAndEffectIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, x, y); //On lui dit de prendre la texture de l'item et de l'afficher sur l'écran
            if (an > 0.0F)
                GL11.glPopMatrix();
            if (overlay)
            	itemRenderer.renderItemOverlayIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, 16, y); // Même chose qu'au dessus!
    	}

et renplace

           	itemRenderer.renderItemOverlayIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, 16, y); // Même chose qu'au dessus!

par

            	itemRenderer.renderItemOverlayIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, x + 16, y); // Même chose qu'au dessus!

16 étant le décalage a droite par rapport a la positon x de l'armure.

Edit: Le temps de rédiger ta déjà répondu :P

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est bon j'ai trouver d'ou ca vien :P

Vien ici:

	private void drawItemInToScreen(ItemStack is, int x, int y, float par3, boolean overlay) // On demande au jeu d'afficher l'item sur l'écran
    {
    	if (is != null)
    	{
    	    float an = (float)is.animationsToGo - par3; //On lui dit d'effectuer toute animation par rapport à l'item
            if (an > 0.0F)
            {
            	GL11.glPushMatrix();
                float dec = 1.0F + an / 5.0F;
                GL11.glTranslatef((float)(x + 8), (float)(y + 12), 0.0F);
                GL11.glScalef(1.0F / dec, (dec + 1.0F) / 2.0F, 1.0F);
                GL11.glTranslatef((float)(-(x + 8)), (float)(-(y + 12)), 0.0F);
            }
            itemRenderer.renderItemAndEffectIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, x, y); //On lui dit de prendre la texture de l'item et de l'afficher sur l'écran
            if (an > 0.0F)
                GL11.glPopMatrix();
            if (overlay)
            	itemRenderer.renderItemOverlayIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, 16, y); // Même chose qu'au dessus!
    	}

et renplace

           	itemRenderer.renderItemOverlayIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, 16, y); // Même chose qu'au dessus!

par

            	itemRenderer.renderItemOverlayIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), is, x + 16, y); // Même chose qu'au dessus!

16 étant le décalage a droite par rapport a la positon x de l'armure.

Edit: Le temps de rédiger ta déjà répondu :P

Merci quand même d'avoir cherché ^^ ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×