• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Swap texture d'une entité et calcul

    1.8.x
    1.8
    3
    7
    1359
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • EmotionFox
      EmotionFox dernière édition par

      - Le problème -

      Bonjour tout le monde,

      Aujourd’hui comme souvent j’ai voulue tester des trucs, malheureusement ça ne marche pas toujours… Je voulais qu’il y est plusieurs textures disponibles pour certain de mes mobs (le scarabée et le papillon), j’ai donc fais un petit tour coté lapin de Minecraft et j’ai vaguement compris qu’il y avait un dataWatcher dans la classe de l’entité (je sais pas du tout ce que sait) et plusieurs fonctions qui l’utilise dont une utilisé à sont tour dans “IEntityLiving” ou un truc dans le genre, ensuite coté rendu j’ai vue un simple switch pour les différentes textures (donc ça j’ai compris).

      Alors voilà je voulais savoir si quelqu’un a une méthode simple (celle-ci ou une autre), ou pourrais me rediriger vers un tuto pour avoir plusieurs textures disponible au spawn d’un mob. Personnellement j’avais hésité à recréer carrément une nouvelle classe entité (avec le même rendu) mais c’est pas très optimal je doit l’avouer et je suis pas vraiment sûr du bon fonctionnement de cette méthode.

      Ps: Vue que je suis là autant en profiter si il y a des matheux qui passent par ici, en gros je voudrais afficher une barre de vie des mobs de 79 pixels de longueur sur l’overlay à l’instar de la barre d’expérience. Pour simuler la barre de vie du joueur (étant donné qu’il a 20 de vie) j’ai fais 20 * 4 pour arriver à 80 et donc pouvoir faire :

      int playerLife = (int)mc.thePlayer.getHealth() * 4;
      int width = playerLife;
      
      mc.ingameGUI.drawTexturedModalRect(posX + 1, posY + 1, 0, 9, width, 7);
      

      Mais sachant que les monstres ont plus ou moins de vie je ne pourrais pas toujours utiliser ce calcul donc si quelqu’un a un éclair de génie que de toute évidence, je n’ai pas eu, pour réduire la taille de la barre (soit 79 pixels) en fonction de la vie du mob, merci d’avance 😄

      - Mes classes -

      Le rendu pour le scarabée :

      package mods.emotion.entity;
      
      import mods.emotion.lib.Infos;
      import net.minecraft.client.model.ModelBase;
      import net.minecraft.client.renderer.entity.RenderLiving;
      import net.minecraft.client.renderer.entity.RenderManager;
      import net.minecraft.entity.Entity;
      import net.minecraft.util.ResourceLocation;
      
      public class RenderBeetle extends RenderLiving
      {
         public ResourceLocation texture = new ResourceLocation(Infos.MODID, "textures/entity/beetle/beetle.png");
      
         public RenderBeetle(RenderManager render, ModelBase model, float shadow)
         {
             super(render, model, shadow);
         }
      
         @Override
         protected ResourceLocation getEntityTexture(Entity entity)
         {
             return getBeetleTexture((EntityBeetle)entity);
         }
      
         private ResourceLocation getBeetleTexture(EntityBeetle beetle)
         {
             return texture;
         }
      }
      

      La classe de l’entité :

      package mods.emotion.entity;
      
      import net.minecraft.entity.EntityAgeable;
      import net.minecraft.entity.SharedMonsterAttributes;
      import net.minecraft.entity.ai.EntityAIPanic;
      import net.minecraft.entity.ai.EntityAIWander;
      import net.minecraft.entity.passive.EntityAnimal;
      import net.minecraft.world.World;
      
      public class EntityBeetle extends EntityAnimal
      {
         public EntityBeetle(World world)
         {
             super(world);
             this.setSize(0.4F, 0.3F);
             this.tasks.addTask(0, new EntityAIWander(this, 0.3D));
             this.tasks.addTask(1, new EntityAIPanic(this, 0.6D));
         }
      
         public boolean isAIEnabled()
         {
             return true;
         }
      
         @Override
         public void applyEntityAttributes()
         {
             super.applyEntityAttributes();
             this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(5.0D);
             this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.5D);
         }
      
         @Override
         public EntityAgeable createChild(EntityAgeable ageable)
         {
             return null;
         }
      }
      

      La classe de l’event :

      package mods.emotion.main;
      
      import mods.emotion.lib.Infos;
      import net.minecraft.client.Minecraft;
      import net.minecraft.util.ResourceLocation;
      import net.minecraftforge.client.event.RenderGameOverlayEvent;
      import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
      import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
      import net.minecraftforge.fml.relauncher.Side;
      import net.minecraftforge.fml.relauncher.SideOnly;
      
      public class EmotionOverlayEvent
      {
         private int width;
      
         @SideOnly(Side.CLIENT)
         @SubscribeEvent
         public void onRenderOverlay(RenderGameOverlayEvent e)
         {
             if(!e.isCancelable() && e.type == ElementType.EXPERIENCE)
             {
                 Minecraft mc = Minecraft.getMinecraft();
                 int playerLife = (int)mc.thePlayer.getHealth() * 4;
                 width = playerLife;
      
                 if(!mc.thePlayer.capabilities.isCreativeMode)
                 {
                     int posX = e.resolution.getScaledWidth() / 2 + 10;
                     int posY = e.resolution.getScaledHeight() - 49;
      
                     mc.renderEngine.bindTexture(new ResourceLocation(Infos.MODID + ":textures/gui/icons.png"));
      
                     mc.ingameGUI.drawTexturedModalRect(posX, posY, 0, 0, 81, 9);
                     mc.ingameGUI.drawTexturedModalRect(posX + 1, posY + 1, 0, 9, width , 7);
                 }
             }
         }
      }
      

      1 réponse Dernière réponse Répondre Citer 0
      • jglrxavpok
        jglrxavpok Modérateurs dernière édition par

        Pour la barre de vie, tu peux utiliser cette formule:

        ​int width = health/maxHealth * largeurVoulue;
        

        Ainsi, tu auras une barre de vie dont la taille ne dépend plus de la vie maximale du mob 😉

        Modérateur sur MFF. 
        Mon Github: http://github.com/jglrxavpok
        Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

        1 réponse Dernière réponse Répondre Citer 0
        • robin4002
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

          Et pour la texture qui change je suis persuadé d’avoir déjà répondu a une question identique. Faut chercher un peu sur le fofo.

          1 réponse Dernière réponse Répondre Citer 0
          • EmotionFox
            EmotionFox dernière édition par

            Un génie, merci beaucoup 🙂 Pour les personnes qui souhaitent la même chose il ne faut surtout pas cast health et maxHealth à int sinon la barre de vie seras toujours égale à 0 quand elle n’est pas égale à 79 étant donné que 19 / 20 = 0.95 soit 0 en int.

            Il faudra donc cast le float width directement ici :

            mc.ingameGUI.drawTexturedModalRect(posX + 1, posY + 1, 0, 9, (int)width, 7);
            

            Ps: Justement j’ai cherché comme d’habitude, google et forum puis n’importe où sans rien trouver. En même temps quel mot clé utiliser ? Différente texture mob, swap texture mob, multi texture mob ? Déjà fais.

            1 réponse Dernière réponse Répondre Citer 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

              http://www.minecraftforgefrance.fr/showthread.php?tid=1851&highlight=texture
              Avec le mot clé texture, sur la 5ème page. J’ai juste lu les titres et ouvert 2-3 discussions, ça m’a prit environ 3 min. Mais je suis d’accord avec toi, trouver les bons mots clés ce n’est pas toujours facile (surtout parce que certains mettent n’importe quoi en titre).

              @‘EmotionFox’:

              Un génie, merci beaucoup 🙂

              Ce que Xavpok t’as donné n’est qu’un simple produit en croix, n’importe qui est sensé savoir faire ça non ?
              Oui Xavpok est bien en génie, mais pour d’autres raisons que celle-ci x)

              1 réponse Dernière réponse Répondre Citer 0
              • EmotionFox
                EmotionFox dernière édition par

                Crois-moi pour quelqu’un comme moi ça relève bien du génie. Rien que quand tu a dis produit en croix j’ai commencé à serrer les dents x)

                Bref merci beaucoup et j’aurais sûrement due fouiller un peu plus c’est sûr, navré.

                1 réponse Dernière réponse Répondre Citer 0
                • robin4002
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                  http://fr.wikipedia.org/wiki/Règle_de_trois
                  C’est une multiplication et une division, il n’y a même pas de dérivé ni d’intégrale ni de primitive ni de loi a densité, ni de cosinus ou de sinus x)

                  1 réponse Dernière réponse Répondre Citer 0
                  • 1 / 1
                  • Premier message
                    Dernier message
                  Design by Woryk
                  Contact / Mentions Légales

                  MINECRAFT FORGE FRANCE © 2018

                  Powered by NodeBB