Codage d'un item dés



  • Bonjour,
    J'ai commencé a coder mon mod il y a une semaine, c'est mon premier alors je comprend ce que je fais mais dès que je m'aventure en terre inconnue c'est toujours un peu fastidieux, je dois dire .. ^^

    Dans l'idée je voulais faire un item Dés qui lancerait une commande issue d'un plugin de mon serveur (/dndroll 2d6)

    Voici la classe Dés que j'ai crée :

    package init;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.ChatComponentText;
    import net.minecraft.util.IChatComponent;
    import net.minecraft.world.World;
    
    public class Des extends Item
    {
    
    public static ItemStack itemdes;
    
       public ItemStack useItemRightClick(World world, EntityPlayer player)
       {
        IChatComponent jet = new ChatComponentText("/dndroll 2d6");
        player.addChatComponentMessage(jet);
    
        return player;
       }
    }
    
    

    Je n'ai aucune erreur mais quand je fait clic droit avec mon item il ne se passe rien.
    J'ai également lié la classe Dés dans ma classe principale :

    itemdes = new Des().setUnlocalizedName("des").setCreativeTab(Heimnor.HeimnorCreativeTabs).setTextureName(Heimnor.MODID + ":des");
    

    Si vous voyez l'erreur et si vous savez la corriger je suis a l'écoute !

    Merci d'avance.


  • Administrateurs

    Salut,
    Toutes les demandes d'aide concernant la programmation vont dans support pour les moddeurs (c'est d'ailleurs clairement indiqué).
    Il y a déjà eu plusieurs demande d'aide concernant cette question (comment envoyer une commande).

    De plus, tu n'as pas indiqué ta version, merci donc de mettre la balise appropriée.



  • Excusez moi alors je suis tout nouveau, je corrige ça 😉



  • player.addChatComponentMassage(jet); peremet d'ajouter un message dans le tchat.
    Or toi, tu veux exécuter une commande.

    Utilises :

    • MinecraftServer.getServer pour obtenir l'instance du server
    • MinecraftServer#getCommandManager pour obtenir le CommandManager du server
    • ICommandManager#executeCommand pour executer une commande


  • Merci ça m'aide beaucoup, je connais pas encore toute les classes donc merci.
    Je sens que j'avance je vais bidouiller un peu mais je sens que je suis sur la bonne voie 😉

    public EntityPlayer onItemRightClick(World world, EntityPlayer player)
      {
    
          MinecraftServer server = MinecraftServer.getServer();
          ICommandManager command = server.getCommandManager();
          command.executeCommand(player, "/dndroll 2d6");
    
          return world;
      }
    
    


  • Normalement ton code est bon  🙂



  • Pas tout a fait il semble manquer quelque chose, puisque quand je fais un clic droit il ne se passe rien, je sens que ça se joue encore a un détail, comme toujours ^^
    Pense tu qu'un event est nécessaire dans mon cas ?



  • Son code n'est pas correct, car la fonction onItemRightClick a mal été override, il devrait y avoir un paramètre ItemStack.



  • Effectivement, j'avais pas vu 😕



  • Niquel j'ai réussi,je vous remercie (1 jour que je suis dessus quand même …) , comme je l'avais dis ça se jouait a un détail. Pour ceux que ça peut aider :

    public class Des <itemstack>extends Item
    {
    ItemStack itemdes = new ItemStack (Heimnor.itemdes);
    
    public ItemStack onItemRightClick(ItemStack itemdes, World world, EntityPlayer player)
      {
          MinecraftServer server = MinecraftServer.getServer();
          ICommandManager command = server.getCommandManager();
          command.executeCommand(player, "/dndroll 2d6");
    
          return itemdes;
      }
    }
    

    Dernière question si c'est pas trop demander :S

    J'aimerais pouvoir limiter le nombre de commande que j'envois via cet item dans un espace temps donné, c'est possible ?</itemstack>



  • Avec un peu de réflection ça doit être possible.
    Il faudrait que a chaque fois que que tu executes une commande, il y ait un timer et que ça bloque l'exécution des commandes de l'utilisateur en envoyant un message du genre : "Merci d'attendre <valeur du timer="">secondes/minutes/heures/anées/décénnies/siècles/millénaires avant d'exécuter une commande."

    PS: tout est possible en modding  :D</valeur>



  • Ca marche je me penche dessus alors ^^ Je passe le sujet en résolu, merci de votre aide ! 😉



  • Derien  😄 !



  • Timer que tu décrémenterais depuis la fonction Item#onUpdate au cas où tu hésiterais 😃



  • Merci j'avoue que cela ne m'avais pas traversé l'esprit je suis encore qu'un novice 😉