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

    Rendu d'item dans les deux mains

    Sans suite
    1.8.9
    3
    9
    3004
    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.
    • LeBossMax2
      LeBossMax2 dernière édition par

      Bonjour tout le monde !
      J’ai créé un nouvel item : c’est comme deux objets en un item ( marteau et une pointe pour faire de la sculpture ). Donc pour que se soit un peut logique, je voudrais que un objet soit rendu dans une main et l’autre dans l’autre. Mais je ne sais pas comment faire ( notamment pour que chaque item suive la bonne main en troisième personne.)

      Après, j’aurais une autre question : comment changer l’animation des mains quand on casse un block avec mon item ?

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

        1. Je ne sais pas.
        2. Pour l’action, il y a une fonction dans l’item qui la donne, getAction ou un truc comme ça (regarde dans l’arc/la nourriture).

        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

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

          @‘AymericRed’:

          1. Je ne sais pas.
          2. Pour l’action, il y a une fonction dans l’item qui la donne, getAction ou un truc comme ça (regarde dans l’arc/la nourriture).

          Je sait qu’il y a getItemUseAction pour l’arc et la nourriture ( pour quand un fait clic droit) mais je ne pence pas pouvoir utiliser ça pour le clic gauche ( pour casser un block ).

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

            Ah oui autant pour moi, je n’ai pas fait attention au “casse”, et j’ai pensé au clic droit. Je ne sais pas, je regarderais tout à l’heure si personne ne trouve 🙂

            Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

            AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

            Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
            Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

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

              J’ai un peut avancé sur le premier problème :
              Pour l’instant, je m’occupe juste d’afficher l’item en double (un item par main et je m’occuperais plus tard d’afficher seulement un objet par mains) en utilisant l’event RenderPlayerEvent.Post pour afficher l’item à la 3° personne. Je me suis inspiré du code de BattleGear2 et de minecraft pour afficher l’item et cela donne… ça  😕 :

              0_1537627795532_2016-07-11_19.01.32.png
              0_1537627821169_2016-07-11_19.01.23.png
              Là, l’item ne bouge pas quand on tourne sur soit-même.
              0_1537628014773_2016-07-11_19.01.40.png
              Et là on voit (en tout cas, moi je le vois) que le centre de rotation de l’item n’est pas le bon (mauvais en rouge et bon en vert)

              Voici mon code :

              @SubscribeEvent
                  public void onRenderHandj(RenderPlayerEvent.Post event)
                  {
                      if (event.entityPlayer.getHeldItem() != null && event.entityPlayer.getHeldItem().getItem() instanceof ChiselHammerItem)
                      {
                          this.renderIn3rdPerson(event.entityPlayer, event.renderer, event.entityPlayer.getHeldItem(), event.partialRenderTick);
                      }
                  }
              
                  private void renderIn3rdPerson(EntityPlayer entityPlayer, RenderPlayer render, ItemStack itemStack, float frame)
                  {
                      ModelPlayer playerModel = render.getMainModel();
                      ModelRenderer armModel = playerModel.bipedLeftArm;
                      GlStateManager.pushMatrix();
              
                      if (render.getMainModel().isChild)
                      {
                          GlStateManager.translate(0, 10F/16F, 0);
                          GlStateManager.rotate(-20, -1, 0, 0);
                          GlStateManager.scale(0.5F, 0.5F, 0.5F);
                      }
                      armModel.postRender(1F/16F);
              
                      GlStateManager.translate(1 /16F, 7 /16F, 1 /16F);
              
                      if (entityPlayer.isSneaking())
                      {
                          GlStateManager.translate(0.0F, 0.203125F, 0.0F);
                      }
                      Minecraft.getMinecraft().getItemRenderer().renderItem(entityPlayer, itemStack, TransformType.THIRD_PERSON);
                      GlStateManager.popMatrix();
              
                  }
              
              1 réponse Dernière réponse Répondre Citer 0
              • LeBossMax2
                LeBossMax2 dernière édition par

                OUI ! ENFIN ! J’ai trouvé !!! Merci minecraftforum.net !
                Ce qu’il fallait faire c’est passer par les “LayerRenderer” plutôt que par l’event “RenderPlayerEvent”.
                Ça donne donc quelque chose comme :

                public class LayerOffhandItem implements LayerRenderer <entityplayer>{
                
                    protected final RenderPlayer renderer;
                
                    public LayerOffhandItem(RenderPlayer playerRenderer)
                    {
                        this.renderer = playerRenderer;
                    }
                
                    @Override
                    public void doRenderLayer(EntityPlayer player, float p_177141_2_, float p_177141_3_,
                            float partialTicks, float p_177141_5_, float p_177141_6_, float p_177141_7_, float scale)
                    {
                        if (player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ChiselHammerItem)
                        {
                            BlockBreakingHandler.renderIn3rdPerson((EntityPlayer) player, renderer, player.getHeldItem(), partialTicks);
                        }
                    }
                
                    @Override
                    public boolean shouldCombineTextures()
                    {
                        return false;
                    }
                
                }
                

                Et il faut ensuite ajouter ce layer au joueur dans l’event “FMLInitializationEvent” coté client:

                RenderPlayer steveRender = Minecraft.getMinecraft().getRenderManager().getSkinMap().get("default");
                RenderPlayer alexRender = Minecraft.getMinecraft().getRenderManager().getSkinMap().get("slim");
                steveRender.addLayer(new LayerOffhandItem(steveRender));
                alexRender.addLayer(new LayerOffhandItem(alexRender));
                

                Mais il me reste encore la deuxième partie : comment changer l’animation des mains quand on casse un block avec mon item ?</entityplayer>

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

                  Pour mon premier problème, j’ai résolu le principale mais il me reste un petit souci : je voudrais savoir ci c’est possible de mettre un model différent à mon item selon si il est dans l’inventaire, dans la main ou au sol. (Je sais qu’en 1.9+ c’est possible via les “IItemPropertyGetter” mais en 1.8, ça doit être plus complexe ).

                  Et pour mon deuxième problème, j’ai trouvé un moyen de  modifier légèrement l’animation mais je ne peux pas modifier directement l’animation. Si il y as moyen avec “getItemUseAction”, ça m’intéresse.

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

                    Pour IItemPropertyGetter regarde comment fait la canne à pêche pour le cast

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

                      @‘BrokenSwing’:

                      Pour IItemPropertyGetter regarde comment fait la canne à pêche pour le cast

                      Pour la canne à pêche, c’est comme pour l’arc, c’est directement dans la fonction “renderItemModelForEntity” de la class “RenderItem”.

                      Donc je pence que je suis obligé de passer par un “IPerspectiveAwareModel”.

                      EDIT : C’est bon, je suis passé par un IPerspectiveAwareModel. Mais il me reste (en plus de l’animation) à faire l’affichage de l’item en première personne. J’ai cherché dans les events et j’ai trouvé “RenderHandEvent” donc je me demandais si c’était seulement l’affichage de la main (donc fonctionne pas si on à un item en main) ou si c’était justement l’affichage de l’item en main et dans ce cas, c’est ce qu’il me faut.

                      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