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

    Résolu Enchant, multi texture & doublon

    1.8.x
    1.8
    3
    17
    3047
    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.
    • J
      Jodge dernière édition par

      Résumer des réponses :

      “Capter” les enchantements d’un Item
      Pour récupéré les enchantements d’un ItemStack :

      itemStack.isItemEnchanted();
      itemStack.getEnchantmentTagList();
      

      Pour récupéré les information sur l’enchantement

      EnchantmentHelper.getEnchantmentLevel(ItemStack)
      EnchantmentHelper.getEnchantments(ItemStack)
      

      Utilisé plusieurs texture sur un objet (avec “getModel”, et non pas superposition)
      Ajouter dans le constructeur ceci :

             ModelBakery.addVariantName(this, new String[] {modid + ":" + json1, modid + ":" + json2, …});
      

      avec chacun des variantes de texture utilisé.

      N’effectuer une action qu’une fois :
      coté serveur :

      if(!world.isRemote)
      

      coté client:

      if(world.isRemote)
      
      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

        itemStack.isItemEnchanted()
        itemStack.getEnchantmentTagList()
        Tu cherches ces fonctions ?

        Il y a aussi la classe EnchantmentHelper, avec les fonctions getEnchantmentLevel(stack) et getEnchantments(stack)

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

          Merci, j’ai enfin réussis a régler le 2eme problème grâce a toi 😄 En faite, j’avais juste pas penser à regarder au niveau de ItemStack ^^’
          J’avais vue la fonction sur EnchantmentHelper, mais j’ai aucune idée de ce a quoi correspond le type Map

          Finalement, je suis partie sur la fonction “attackTargetEntityWithCurrentItem” de EntityPlayer, que j’ai copier puis adapter afin d’avoir une base plus saine et complètes dans ma classe Weapons.
          Je laisse encore un peu ouvert le sujet si quelqu’un peu me dépatouiller pour le premier problème, mais ont peu consideré comme résolus le cas échéant.

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

            Je ne crois pas qu’on puisse gérer ça. Les achievements sont hardcodé, donc ce n’est pas évidant de faire en sorte qu’un item soit restreint en achievement.

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

              Il est toujours possible de modifier les enums avec l’EnumHelper

              Site web contenant mes scripts : http://SCAREXgaming.github.io

              Pas de demandes de support par MP ni par skype SVP.
              Je n'accepte sur skype que l…

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

                @‘SCAREX’:

                Il est toujours possible de modifier les enums avec l’EnumHelper

                c’est une piste a explorer, mais j’ai peur que ce soit plus compliquer puisqu’il faut aussi modifier la méthode “canEnchantItem” de l’Enum… Je vais m’y pencher demain moi.

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

                  J’up le sujet, car j’ai changé mon problème (plutôt que de créer des nouveau sujet a chaque petit problème ^^')

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

                    Il vaut mieux créer un nouveau sujet à chaque fois, comme çà si quelqu’un a le même problème, ce sera plus simple de trouver le sujet.

                    Pour les models : regarde dans les logs si le fichier est trouvé.

                    Site web contenant mes scripts : http://SCAREXgaming.github.io

                    Pas de demandes de support par MP ni par skype SVP.
                    Je n'accepte sur skype que l…

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

                      Les JSON ajoutés avec la fonction getModel doivent être enregistré, je ne connais plus par coeur la fonction, je ne pourrai que te la donner demain soir. (Je suis pas chez moi, je suis sur mon téléphone).

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

                        Alors, sur les log en cours d’exécution, je n’ai pas de message d’erreur indiquant que le fichier est manquant (comme c’étais le cas pour certain autre item).

                        concernant l’enregistrement des fichier .JSON, je l’avais déjà compris. Si j’ai bien compris, il suffit d’enregistrer comme s’il s’agissait d’une autre métadata de l’item

                        
                               Main.proxy.registerItemTexture(this, 0, getUnlocalizedNameAlone(), modid);
                               Main.proxy.registerItemTexture(this, 1, getUnlocalizedNameAlone() + "Using", modid);
                        
                        

                        Le problème est que dans cette ordre, cela fonctionne sans problème pour le modèle par défaut (0), mais pas du tout pour le modèle avec “getModel” (1)

                        En revanche, si j’échange les deux, alors le résultat est inversé. Celui par défaut (0) ne fonctionne pas, en revanche, celui avec “getModel” (1) lui fonctionne ( en utilisant le le modèle enregistrer sur la métadata 1 évidemment ).

                        
                               Main.proxy.registerItemTexture(this, 0, getUnlocalizedNameAlone() + "Using", modid);
                               Main.proxy.registerItemTexture(this, 1, getUnlocalizedNameAlone(), modid);
                        
                        

                        Evidemment, je rappel que les fichier .json sont STRICTEMENT identique, a l’exception du nom

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

                          , getUnlocalizedNameAlone() + “Using” tu disais pas que c’était “_using” ?

                          Site web contenant mes scripts : http://SCAREXgaming.github.io

                          Pas de demandes de support par MP ni par skype SVP.
                          Je n'accepte sur skype que l…

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

                            C’est cette fonction qu’il te manque
                            :
                            ModelBakery.addVariantName(NHGItems.backStabberKnife, new String[] {NanotechHungerGames.MODID + “:item_back_stabber_normal”, NanotechHungerGames.MODID + “:item_back_stabber_ready”});
                            Premier argument : l’item
                            Deuxième argument : tableau de string avec le nom des JSON.
                            À mettre côté client seulement.

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

                              Il faut mettre cette fonction ou précisément ? J’ai tenter dans clientProxy, mais elle ne semble pas fonctionner, et j’ai tenter dans la classe de mon item comme cela (que j’appelle dans mon constructeur au passage) :

                              @SideOnly(Side.CLIENT)
                              public JScythe multiTexture(String modid)
                              {
                              ModelBakery.addVariantName(this, new String[] {modid + ":" + getUnlocalizedNameAlone(), modid + ":" + getUnlocalizedNameAlone() + "Using"});
                              return this;
                              }
                              

                              Mais cela ne semble pas fonctionné aussi (aucun message d’erreur)

                              EDIT : Autant pour moi, j’avais mal appeler la fonction, j’avais utilisé multiTextue(modid + “:”) mais les “:” étais déjà intégrer ^^"

                              Merci pour la résolution ! 😄

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

                                N’oublie pas la balise résolu.

                                Site web contenant mes scripts : http://SCAREXgaming.github.io

                                Pas de demandes de support par MP ni par skype SVP.
                                Je n'accepte sur skype que l…

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

                                  J’ai hésité a fermer les sujets, puis en ré-ouvrir un, mais au final, j’ai tellement de question en suspense, de chose qui m’échappe sur Forge, qu’au final, j’ai décider d’essayer de faire de se sujet, une sort de FAQ de toute mes questions. Si l’idée ne vous plait pas, n’hésiter pas a le dire, si vraiment, cela s’avères nul, je fermerai le sujet, et en ré-ouvrirai à coté.

                                  Maintenant, voila la question actuel :

                                  :::
                                  Et c’est re partie pour des questions ^^’ Bien dormis au moins ? X)

                                  public void onPlayerStoppedUsing(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn, int timeLeft)
                                  {
                                  AxisAlignedBB hitArea;
                                  int x = itemStackIn.getMaxItemUseDuration() - timeLeft;
                                  if (x > 50)
                                  {
                                  x = 50;
                                  }
                                  
                                  Double bonus = 1.0D + (x / 25); // 1 + (limite max - temps restant) / tickParSeconde
                                  Float damageMultiplier = 0.75F ;
                                  
                                  rightCombo++;
                                  
                                  if(playerIn.isSneaking())
                                  {
                                  hitArea = new AxisAlignedBB(playerIn.posX, playerIn.posY, playerIn.posZ, playerIn.posX + 1.0D, playerIn.posY + 1.0D, playerIn.posZ + 1.0D).expand(bonus, 0.0D, bonus);
                                  }
                                  else
                                  {
                                  hitArea = new AxisAlignedBB(playerIn.posX, playerIn.posY + 1.0D, playerIn.posZ, playerIn.posX + 1.0D, playerIn.posY + 2.0D, playerIn.posZ + 1.0D).expand(bonus, 0.0D, bonus);
                                  damageMultiplier += 0.5F;
                                  }
                                  damageMultiplier *= (0.25F + (float) (bonus / 4.0D))*(3.0F/2.0F) * (0.5F/rightCombo + 0.5F);
                                  
                                  List entityList = playerIn.worldObj.getEntitiesWithinAABBExcludingEntity(playerIn, hitArea);
                                  
                                  for (int i = 0; i < entityList.size(); i++)
                                  {
                                  if(entityList.get(i) instanceof EntityLivingBase)
                                  {
                                  JFunction.dealDamage(playerIn, (EntityLivingBase) entityList.get(i), damageMultiplier, false);
                                  }
                                  }
                                  }
                                  
                                  

                                  Voici ma fonction permettant de gérer mon attaque sur le clic droit.
                                  Le problème étant que pour une raison qui m’échappe, la fonction est appeler deux fois à la suite, à chaque fois que je lâche le clic.
                                  Les dégâts ne sont bien infliger qu’une fois, le problème étant plus sur la variable combo, qui se retrouve implémenter deux fois trop vite, réduisant les dégât du spam clic bien trop rapidement.

                                  Ma question du jour étant : Est ce normal que la fonction s’active deux fois, ou est ce que cela est dus à autre chose (sachant que je n’appelle cette fonction nul part ailleurs)
                                  :::

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

                                    C’est une question de client / serveur. La plupart des méthodes sont appelés une fois en client et une fois en serveur à chaque fois. Donc deux fois au total.
                                    Il faut utiliser la condition if(!world.isRemote) pour faire les actions que côté serveur.

                                    Petite remarque, dans ton code tu devrais utiliser double et float et non Double et Float. C’est juste un majuscule qui change en apparence, mais float et double sont des primitives alors que Float et Double sont des objets. Et il ne s’exécute pas du tout à la même vitesse.

                                    Et oui il est mieux de créer plusieurs discussions de tel sorte que une discussion = un problème.
                                    Pour une simple raison, actuellement ta discussion s’appelle “Les petits problèmes à Jodge”. Si quelqu’un a le même problème, jamais il ne viendra voir cette discussion. Et sur google il a aucune chance que cette discussion soit trouvé en tapant “fonction pour obtenir les enchantements d’un item”.
                                    À l’inverse avec un titre clair et une discussion par problème on peut trouver beaucoup mieux sur google / avec une recherche sur le fofo.

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

                                      Ha ouai, je connaissais pas ^^ Merci pour l’astuce ^^

                                      Pour Float ou float, je connais pas la différence de temps d’exécution, donc je te fait confiance ^^

                                      Pour la discussion, okay, je clos, le sujet et j’en réouvrirai d’autre ^^

                                      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