Rendu des arcs en multijoueur



  • Salut,
    J'ai ajouté quelque arcs dans mon mod.
    Tout fonctionne très bien, il tire bien des flèches est bien texturé et tout et tout.
    Seul problème, en multijoueur, l'arc n’apparaît pas dans les mains du joueur, et à la place un gros beug ou l'on voit des mobs tenu par le joueur avec son pseudo qui part n'importe où !
    Voici le fichier de mon mod :

    package fr.orange.theogiraudet.client.common;
    
    import net.minecraft.client.renderer.texture.IIconRegister;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.ItemBow;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.IIcon;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    public class CelestineBow extends ItemBow {
    public static final String[] bowPullIconNameArray = new String[] {"bowcelestine_pulling_0", "bowcelestine_pulling_1", "bowcelestine_pulling_2"};
       @SideOnly(Side.CLIENT)
       private IIcon[] iconArray;
    
      public CelestineBow()
      {
         setUnlocalizedName("minelost:bowcelestine_standby");
      }
    
      @Override
      @SideOnly(Side.CLIENT)
       public void registerIcons(IIconRegister p_94581_1_)
       {
           this.itemIcon = p_94581_1_.registerIcon("minelost:bowcelestine_standby");
           this.iconArray = new IIcon[bowPullIconNameArray.length];
    
           for (int i = 0; i < this.iconArray.length; ++i)
           {
               this.iconArray* = p_94581_1_.registerIcon("minelost:" + bowPullIconNameArray*);
           }
       }
      @Override
      @SideOnly(Side.CLIENT)
      public IIcon getIcon (ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining)
      {
          if (usingItem != null)
          {
              int time = 72000 - useRemaining;
              if (time < 8)
                  return iconArray[0];
              if (time < 14)
                  return iconArray[1];
              return iconArray[2];
          }
          return getIcon(stack, renderPass);
      }
    
      @Override
      public IIcon getItemIconForUseDuration(int par1)
      {
          return this.iconArray[par1];
      }
    }
    

    Il y aurait-il du code à mettre dans le common proxy ? Ou alors mon fichier qui est faut.

    Merci de votre aide !


  • Administrateurs

    Retires la fonction getItemIconForUseDuration. Elle n'est pas sensé être utilisé avec Forge.



  • Merci de ta réponse !
    Le résultat est mieux mais n'est pas encore totalement ça :

    L'arc apparaît sous forme d'item.


  • Administrateurs

    Ajoutes setFull3D(); dans le constructeur.



  • Merci, l'arc est bien en 3D, petit détail, il n'est pas centré :



  • Je crois que le seul moyen est de le changer sur la texture


  • Administrateurs

    Si tu es vraiment pointilleux sur les détails tu vas d'avoir t'amuser. Le petit ajustement pour l'arc de Minecraft est hardcodé dans le rendu. Le seul moyen d'avoir la même chose avec forge est de passer par un IItemRenderer pour faire un petit GL11.glTranslate.
    http://www.minecraftforgefrance.fr/showthread.php?tid=556&pid=6186#pid6186
    Faut juste retirer le GL11.glScalef(2F, 2F, 2F); sinon l'item est géant (c'était le but de cette demande d'aide).



  • Bizarres, car la texture est là même que celui de l'arc de base avec la couleur qui change 😕
    En tout cas merci de ton aide 😉

    Edit : Je viens de voir ton message Robin, merci pour ton aide !
    Je verrais plus tard du coup pour le render (je vais laisser comme ça pour l'instant).

    Dernière question : Comment change-t-on la puissance de l'arc ?



  • ré-écris la méthode onItemUseFinish