• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

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

    Archives
    1.9
    5
    15
    2925
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Tituya
      Tituya last edited by

      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 Reply Last reply Reply Quote 0
      • Tituya
        Tituya last edited by

        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 Reply Last reply Reply Quote 0
        • Superloup10
          Superloup10 Modérateurs last edited by

          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 Reply Last reply Reply Quote 0
          • Tituya
            Tituya last edited by

            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 Reply Last reply Reply Quote 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

              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 Reply Last reply Reply Quote 0
              • Tituya
                Tituya last edited by

                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 Reply Last reply Reply Quote 0
                • Superloup10
                  Superloup10 Modérateurs last edited by

                  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 Reply Last reply Reply Quote 0
                  • Tituya
                    Tituya last edited by

                    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 Reply Last reply Reply Quote 0
                    • Pchom
                      Pchom last edited by

                      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 Reply Last reply Reply Quote 0
                      • Tituya
                        Tituya last edited by

                        😵 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 Reply Last reply Reply Quote 0
                        • AymericRed
                          AymericRed last edited by

                          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 Reply Last reply Reply Quote 0
                          • Tituya
                            Tituya last edited by

                            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 Reply Last reply Reply Quote 0
                            • AymericRed
                              AymericRed last edited by

                              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 Reply Last reply Reply Quote 0
                              • Tituya
                                Tituya last edited by

                                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 😉

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

                                1 Reply Last reply Reply Quote 0
                                • Tituya
                                  Tituya last edited by

                                  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 Reply Last reply Reply Quote 0
                                  • 1 / 1
                                  • First post
                                    Last post
                                  Design by Woryk
                                  Contact / Mentions Légales

                                  MINECRAFT FORGE FRANCE © 2018

                                  Powered by NodeBB