Clé à molette (Wrench)



  • Bonjour à tous.
    Ceci est mon premier topic donc je ne sais pas vraiment comment le rédiger, mais passons. 😄  (Je débute en modding)

    Alors voilà ce que je souhaite faire :
    Je souhaite faire une clé à molette (wrench) permettant de détruire les câbles et autres machines.

    J'ai fait pas mal de recherche sur MinecraftForgeFrance mais sans succés.
    Si quelqu'un pourrait m'aider s'il vous plâit ? 😄



  • Bonjour ,
    Il faut que tu crée ta wrench comme un outil et que tu suives ce tuto : ici en suivant la partie "Multiple Tool types in a single tool" et en modifiant un peu le code au niveau de "private static Set effectiveAgainst" pour custom les blocks que la wrench peut casser.

    Si tu comprends pas assez l'anglais , je suis en train de chercher un tuto francais ! EDIT : j'ai pas trouvé 😕



  • Merci beaucoup je vais aller voir 🙂
    Sinon je pensais passer par le onBlockActived dans la classe des blocks dont je veut affecter, tu en penses quoi ? (je fais des tests)

    EDIT : J'ai fait ce code mais ça ne marche pas, quand je clique sur mon block ça ne fais rien…

    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ){
       if(player.getHeldItem().getItem() == EnergyzedItems.wrench) {
        Block b = world.getBlock(x, y, z);
        b.breakBlock(world, y, z, x, EnergyzedBlocks.guiTest, z);
       }else if (player.getHeldItem().getItem() == null){
        return true;
       }
     }
    

    Enfaite j'ai fait ce code dans la classe de mon block :

    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ){
    
      if(player.getHeldItem().getItem() == EnergyzedItems.wrench) {
        Block b = world.getBlock(x, y, z);
        b.breakBlock(world, y, z, x, EnergyzedBlocks.guiTest, z);
        player.addChatMessage(new ChatComponentTranslation("Bien joué"));
       }else{
    
        if(world.isRemote) {
         return true;
        }
        else {
         player.openGui(Main.instance, 0, world, x, y, z);
         return true;
        }
    
       }
      if(player.getHeldItem().getItem().equals(null)) {
       player.openGui(Main.instance, 0, world, x, y, z);
       return true;
      }
       return false;
    
     }
    

    Ca envois bien un message au joueur quand on clique avec la wrench
    Ca ouvre bien le gui quand on clique avec un item random
    Mais quand on à rien le jeu crash ...

    Merci d"avance 🙂


  • Administrateurs

    player.getHeldItem() est null si le joueur n'a pas d'item, donc player.getHeldItem().getItem() cause un npe.



  • Le prolème est que tu ne regardes pas si l'item en main du joueur existe bien :

     if(player.getHeldItem().getItem() == EnergyzedItems.wrench)
    

    Devient :

     if(player.getHeldItem() != null && player.getHeldItem().getItem() == EnergyzedItems.wrench)
    

    Et ce code sert à quoi ?

      if(player.getHeldItem().getItem().equals(null)) {
      player.openGui(Main.instance, 0, world, x, y, z);
      return true;
     }
      return false;
    

    Car de 1 le if() est faux, et de 2 c'est normal que ce code ne soit appelé excusivement quand le bloc est cassé ?

    PS : Utilises des balises java c'est plus lisible ^^



  • @'AymericRed':

    Le prolème est que tu ne regardes pas si l'item en main du joueur existe bien :

     if(player.getHeldItem().getItem() == EnergyzedItems.wrench)
    

    Devient :

     if(player.getHeldItem() != null && player.getHeldItem().getItem() == EnergyzedItems.wrench)
    

    Et ce code sert à quoi ?

      if(player.getHeldItem().getItem().equals(null)) {
      player.openGui(Main.instance, 0, world, x, y, z);
      return true;
     }
      return false;
    

    Car de 1 le if() est faux, et de 2 c'est normal que ce code ne soit appelé excusivement quand le bloc est cassé ?

    PS : Utilises des balises java c'est plus lisible ^^

    D'accord je vais tester pour le code 😉
    Le code permet de faire que mon gui s'ouvre (c'est un bloc coffre)
    Merci beaucoup ^^


    Merci beaucoup à tous les gars ça fonctionne nikel 🙂