MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Créer un stick ayant un effet. Détection de clique droit

    Planifier Épinglé Verrouillé Déplacé Archives
    1.9
    15 Messages 5 Publieurs 3.6k Vues 1 Watching
    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.
    • TituyaT Hors-ligne
      Tituya
      dernière édition par

      Introduction

      Voila, dans ce tutoriel, vous allez apprendre à créer un Item simple ayant lors du clique droit, la possibilité de vous donner un ou plusieurs effet(s), invoquez une entité ou encore faire un choix entre différents effets prevu.

      #Pré-Requis(Pré-Requis)

      Savoir créer un item

      Code

      Classe principale.

      Commencez simplement par déclarer votre Item

      public class ItemsMod 
      {      
          public static Item stick; //Vous déclarez votre Item
      
          public static void init()
          {
              stick = new **Stick**().setUnlocalizedName("LeNomDeVotreitem").setCreativeTab(ModTuto.tabTuto); //Vous l'initiez
          }
      
          public static void register()
          {
              GameRegistry.registerItem(stick, stick.getUnlocalizedName().substring(5)); //Vous l'enregistrez
          }
      
          public static void registerRenders()
          {
              registerRender(stick); //Vous faites le rendu
          }
      
          private static void registerRender(Item item)
          {
              Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(References.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
          }
      }
      

      Ceci est la base de la création des Items
      Vous allez avoir une erreur sur l’initialisation du votre item, ici : new Stick().
      Créons donc alors la classe de l’item dans votre package Items !

      La classe de l’Item

      Voila où tout ce passe ! 
      Ici nous allons voir le B-A-BA de la création de ce genre d’Item, vu que notre Item est normal, nous extendons alors par Item, comme d’habitude, vous ajoutez les constructeurs. Ce qui vous donne donc quelque chose comme cela:

      public class Stick extends Item
      {
          public Stick()
          {
      
          }
      
      }
      

      On va ensuite ajoutez comme constructeur différentes choses (vous pouvez bien sur rajoutez ce que vous voulez)

      public class Stick extends Item
      {
          public Stick()
          {
              this.setMaxDamage(10); //La durabilité de votre Item, ici il pourra être utilisé 10 fois
      
              this.maxStackSize = 1; //Nous déclarons la taille du stack de l'item, ici l'item est instackable
          }
      }
      

      Puis ensuite on ajoute cette fonction, elle détecte le clique droit sur un Item 🙂

      
          @Override
             public ActionResult <itemstack>onItemRightClick(ItemStack itemStack, World world, EntityPlayer player, EnumHand hand)
             {
                 if (!world.isRemote) // très important a ne pas oublié : le code qui se trouve dans cette condition sera executer que coté serveur. CECI EST TRES IMPORTANT 
                 {
                       //Mettez ici ce qu'il va suivre
      
                 }
                 itemStack.damageItem(1, player); //Ici, nous enlevons 1 de durabilité a l'item
                 return new ActionResult(EnumActionResult.PASS, itemStack);
             }
      
      }
      

      Dans ce script, nous déclarons la détection du clique droit de l’Item :-3

      Maintenant, nous allons mettre ce qu’il nous intéresse, cet à dire les effets ! Voila le code principal pour ajouter un effet. Pour rajouter plusieurs effets, allez à la ligne à la fin du premier effet

      player.addPotionEffect(new PotionEffect(Potion.getPotionById(16), 140, 1)); //"16" L'ID de la potion, ici Nyctalopie, "140" le temps en TICK, 20= 1seconde, ici il y a donc 7 secondes, "1" l'amplificateur de votre effet, ici la potion est de level 2
      

      Json**.**
      Ici, rien de bien dur, nous déclarons juste la posture de votre Item en main.

      {
         "parent": "item/handheld",
         "textures": {
             "layer0": "tuto:items/StickOfRandom"
         }
      }
      

      #Résultats(Résultats)

      Ce qui donne alors :

      public class Stick extends Item
      {
          public Stick()
          {
              this.setMaxDamage(10); //La durabilité de votre Item, ici il pourra être utilisé 10 fois
      
              this.maxStackSize = 1; //Nous déclarons la taille du stack de l'item, ici l'item est instackable
          }
          @Override
             public ActionResult <itemstack>onItemRightClick(ItemStack itemStack, World world, EntityPlayer player, EnumHand hand)
             {
                 if (!world.isRemote) // très important a ne pas oublié : le code qui se trouve dans cette condition sera executer que coté serveur. CECI EST TRES IMPORTANT 
                 {
                       player.addPotionEffect(new PotionEffect(Potion.getPotionById(16), 140, 1)); //Nyctalopie
                       player.addPotionEffect(new PotionEffect(Potion.getPotionById(1), 140, 1)); //Vitesse
      
                 }
                 itemStack.damageItem(1, player); //Ici, nous enlevons 1 de durabilité a l'item
                 return new ActionResult(EnumActionResult.PASS, itemStack);
             }
      
      }
      

      Bonus

      Ici, tache un poil plus complexe, créer un Stick faisant des actions aléatoires parmi des actions définies. 🙂

      Comme vu dessus, nous déclarons exactement la même chose SAUF deux choses, nous allons définir notre random avant les constructeurs de notre Item et définir un nouveau int :

      public final Random rand = new Random();
      

      Ce qui donne alors :

      public class Stick extends Item
      {
          public final Random rand = new Random();
      
          public Stick()
          {
          this.setMaxDamage(20);
          this.maxStackSize = 1;
          }
      
          @Override
             public ActionResult <itemstack>onItemRightClick(ItemStack itemStack, World world, EntityPlayer player, EnumHand hand)
             {
                 if (!world.isRemote) // très important a ne pas oublié : le code qui se trouve dans cette condition sera executer que coté serveur. CECI EST TRES IMPORTANT 
                 {
                     int i = rand.nextInt(1); //Le 1 de ce code signifie le nombre de vos différentes actions, l'action numéro 0 est compté comme 1 (une action) exemple, vous avez 5 effets en comptant la 1ere qui défini i==0, vous allez donc déclarez après le nextInt le nombre 6
                 }
                 itemStack.damageItem(1, player);
                 return new ActionResult(EnumActionResult.PASS, itemStack);
             }
      
      }
      

      En dessous de votre int, vous allez déclarez vos actions à base de :

       if(i == 0)
                     {
                         EntityTNTPrimed entityTNT = new EntityTNTPrimed(world); // instance de la class de l'entité
                         entityTNT.setPosition(player.posX, player.posY, player.posZ); // je lui dit la position a la quelle elle doit spawner
                         world.spawnEntityInWorld(entityTNT); // je fais spawn l'entité
                     }
                     else if(i == 1)
                     {
                         EntityItem entityItem =new EntityItem(world, player.posX, player.posY, player.posZ, new ItemStack(ItemsMod.itemTest)); 
                         world.spawnEntityInWorld(entityItem); // je fais spawn l'entité
                     }
                     else if(i == 2)
                     {
                         EntityItem entityItem =new EntityItem(world, player.posX, player.posY, player.posZ, new ItemStack(ItemsMod.itemTest)); 
                         world.spawnEntityInWorld(entityItem); // je fais spawn l'entité
                     }
      

      Pour cet exemple, nous allons donc rajouter à notre int le chiffre “3” car l’int compte à partir de 0 !
      Dans ce code, le premier random fait spawn une TNT allumé, le deuxième et le troisième random, font spawner un Item de mon mod.

      #Résultats(Résultats)

      J’ai coder un Item me mettant Vitesse et me rajoutant de l’xp ayant 10 de durabilité et n’étant pas stackable. (Je n’ai pas fait le Json, l’Item en main est donc étrange) 😕


      Avant appuis


      Après appuis, nous voyons que la durabilité a baissé et que mon xp a monté.

      #Crédit(Crédit)

      Rédacteur : Tituya


      Merci, j’espere que vous avez compris le principal de la création de ce genre d’Item très simple. 
      Si vous avez des questions, des remarques n’hésitez surtout pas, je suis la pour apprendre 😉  !</itemstack></itemstack></itemstack>

      Il y a deux choses qui m'énerve dans la vie : les babouches et les personnes jouant en 1.7.10 !

      1 réponse Dernière réponse Répondre Citer 0
      • TituyaT Hors-ligne
        Tituya
        dernière édition par

        Personne pour juger mon tutoriel ?!

        Il y a deux choses qui m'énerve dans la vie : les babouches et les personnes jouant en 1.7.10 !

        1 réponse Dernière réponse Répondre Citer 0
        • Superloup10S Hors-ligne
          Superloup10 Modérateurs
          dernière édition par

          Navré, je n’ai pas eu l’occasion de venir donner mon avis.
          C’est un bon tutoriel, en revanche, il y a des choses inutiles.
          Tu donnes comme pré-requis de savoir créer un item, mais tu remontres comment le faire.
          D’ailleurs pourquoi la 1.9 ?
          Au passage,

                         player.addPotionEffect(new PotionEffect(Potion.getPotionById(16), 140, 1)); //Nyctalopie
                          player.addPotionEffect(new PotionEffect(Potion.getPotionById(1), 140, 1)); //Vitesse
          

          peut être remplacé par

                         player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 140, 1)); //Nyctalopie
                          player.addPotionEffect(new PotionEffect(MobEffects.SPEED, 140, 1)); //Vitesse
          

          Il y a d’autres choses à dire mais pour ça, il faut que je setup une workspace 1.9
          Autre chose, sauf erreur de ma part ```java
          int i = rand.nextInt(1);

          Du coup, le code que tu mets par la suite ne peut pas fonctionner sauf pour i = 0;

          Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

          Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

          1 réponse Dernière réponse Répondre Citer 0
          • TituyaT Hors-ligne
            Tituya
            dernière édition par

            Le mob effect c’est sur que l’on peu le faire mais personnellement je préfère prendre les id, je rajouterais une option secondaire avec cette fonction. L’int fonctionne parfaitement pour moi, j’ai cree un stick ayant des random et sa fonctionne parfaitement, tu as raison que Cet int compte à partir de 0, c’est pour ça que je demande de prendre l’effet produit plus’ 1

            Il y a deux choses qui m'énerve dans la vie : les babouches et les personnes jouant en 1.7.10 !

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

              rand.nextInt(1); renvoies bien toujours 0, comme l’a dit superloup.
              En fait c’est aussi ce que tu expliques, mais ton explication n’est pas bonne :

              //Le 1 de ce code signifie le nombre d’action de votre random -1, en effet, cet int compte à partir de 0 !

              Le nombre après nextInt n’est pas le nombre d’action, mais le maximum exclut du random. Le minimum étant toujours 0.

              1 réponse Dernière réponse Répondre Citer 0
              • TituyaT Hors-ligne
                Tituya
                dernière édition par

                Donc, que devrais-je mettre ?
                [UPDATE] j’ai modifié, est-ce plus claire ? Et si oui mon tutoriel va t-il etre valide ?

                Il y a deux choses qui m'énerve dans la vie : les babouches et les personnes jouant en 1.7.10 !

                1 réponse Dernière réponse Répondre Citer 0
                • Superloup10S Hors-ligne
                  Superloup10 Modérateurs
                  dernière édition par

                  Ce n’est toujours pas mieux pour avoir un entier aléatoire compris entre 0 inclus et n exclus, il faut que tu fasses:

                  int i = rand.nextInt(n);
                  

                  Donc pour n = 6, tu dois faire :

                  int i = rand.nextInt(6);
                  

                  Ton nombre pourra donc prendre pour valeur 0, 1, 2, 3, 4, 5.

                  Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

                  Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

                  1 réponse Dernière réponse Répondre Citer 0
                  • TituyaT Hors-ligne
                    Tituya
                    dernière édition par

                    Bah c’est ce que j’ai mit non ?

                    Il y a deux choses qui m'énerve dans la vie : les babouches et les personnes jouant en 1.7.10 !

                    1 réponse Dernière réponse Répondre Citer 0
                    • PchomP Hors-ligne
                      Pchom
                      dernière édition par

                      Sincèrement, si ton tutoriel est validé si rapidement, je démissionne x) joke

                      > *Si vous ne pouvez expliquer un concept à un enfant de six ans, c’est que vous ne le comprenez pas c…

                      1 réponse Dernière réponse Répondre Citer 0
                      • TituyaT Hors-ligne
                        Tituya
                        dernière édition par

                        X) en vrai, ça mes vraiment du temps pour être validé ?

                        Il y a deux choses qui m'énerve dans la vie : les babouches et les personnes jouant en 1.7.10 !

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

                          J’ai un tuto du 29 septembre 2016 qui n’y a jamais été alors sois patient xD

                          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
                          • TituyaT Hors-ligne
                            Tituya
                            dernière édition par

                            Ah ouais x) apres peu etre que ton tuto etait mal fait XD

                            Il y a deux choses qui m'énerve dans la vie : les babouches et les personnes jouant en 1.7.10 !

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

                              https://www.minecraftforgefrance.fr/showthread.php?tid=3556 J’ai passé du temps dessus xD

                              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
                              • TituyaT Hors-ligne
                                Tituya
                                dernière édition par

                                ouais pourtant ton tutoriel est très bien fait, enfin bref retournons au sujet de mon tutoriel, y a t-il autre chose que je devrais changer pour améliorer la compréhension ? et au passage, vous voyer sur les screens les Rubik’s cube que j’ai eu du mal à créer ;D

                                Il y a deux choses qui m'énerve dans la vie : les babouches et les personnes jouant en 1.7.10 !

                                1 réponse Dernière réponse Répondre Citer 0
                                • TituyaT Hors-ligne
                                  Tituya
                                  dernière édition par

                                  Pas d’autre remarque sur le sujet ? :issou: :issou: :issou: :issou: :issou:

                                  Il y a deux choses qui m'énerve dans la vie : les babouches et les personnes jouant en 1.7.10 !

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

                                  MINECRAFT FORGE FRANCE © 2024

                                  Powered by NodeBB