Création d'un mod avec un backpack



  • Bonjour, tout d'abord je tiens a m'excuser pour les premiers postes que j'ai crée qui n'etait pas bon :D, cela dit commençons.

    Tout d'abord suite a un réflexion de robin4002 sur le fait qu'il fallait que mon GuiHandler ne soit pas enrengistré seulement sur le client.
    je me demandais donc comment enrengistré autre part que sur le client.

    pour plus de facilite voici mes classes (que je teindrais a jour)

    ma classe principale
    https://pastebin.com/p0NeDSWn

    ma classe avec le GuiHandler
    https://pastebin.com/dSxrjxXt

    ma classe ItemBackpack
    https://pastebin.com/Frfc9pvH

    ma classe ItemMod
    https://pastebin.com/aXnkwcEv

    ma classe ContainerBackPack
    https://pastebin.com/VY3iKJDb

    ma classe InventoryBackPack
    https://pastebin.com/hAA7vK2H

    ma classe SlotBackPack
    https://pastebin.com/XQpZJLsn


  • Administrateurs

    Salut,
    NetworkRegistry.INSTANCE.registerGuiHandler(INSTANCE, new EmotionGuiHandler());
    devrait être :
    NetworkRegistry.INSTANCE.registerGuiHandler(instance, new EmotionGuiHandler());

    et doit être directement dans la fonction init, pas à l'intérieur du if(event.getSide().isClient())
    (et donc là ton gui handler sera enregistré correctement).



  • Bonjour, tout d'abord merci à toi robin, je n'avais pas vu que j'etais dans le if.
    et je me demandais coment je peux interdire d'avoir 2backpack à la fois dans l'inventaire.
    je pensais faire:
    public void (ItemStack itemstack, EntityPlayer player, List list, boolean)
    {
    if (ItemStack = null)
    {
    String owner = ItemStack ("interdit")
    list.add(EnumChatFormatting.RED + owner);
    }

    est-il possible de m'aider car je n'arrive pas à completer le code 😕



  • /**
    * Prevents backpack-ception
    */
    @Override
    public boolean isItemValidForSlot(int index, ItemStack stack) {
    return !(stack.getItem() instanceof ItemBackPack);
    }
    

    Faudrait chercher sur le fofo, c'était mis noir sur blanc dans ce tuto : https://www.minecraftforgefrance.fr/showthread.php?tid=2197&highlight=backpack



  • Bonjour, ce n'est pas de cela que je parle (tu le saurais si tu avais lu mon message comme il faut) je parle du fait d'avoir 2 backpack dans ton inventaire (pas un backpack dans un backpack)



  • Alors je ne comprends pas vraiment le sens de la fonction que tu as faite, mais c'est qu'il faut, c'est une boucle for qui parcourt tout l'inventaire du joueur, et si un sac est rencontré ça incrément une variable. Tu peux placer ce for dans la fonction "onUpdate" ou "update" je sais plus de ton item.
    Ensuite si ta variable >= 2 tu fais quelque chose comme looter le sac au sol ou mettre un message adéquat.

    Si tu veux plus d'aide/détails fais d'abord une recherche ce sujet a déjà été traité de nombreuses fois.



  • @'Zoulette':

    Bonjour, ce n'est pas de cela que je parle (tu le saurais si tu avais lu mon message comme il faut) je parle du fait d'avoir 2 backpack dans ton inventaire (pas un backpack dans un backpack)

    En soit quand tu dis l'inventaire, pour moi c'est l'inventaire du backpack. Du coup oui tu dois faire comme Aymeric t'as dis.



  • Bonjou, je n'ai aucun update ou onupdate, j'ai juste OnItemRightClick



  • C'est normal il faut que tu l'implémentes (= ajoute), va dans la classe de l'item, commence à taper "update" et fais ctrl+space eclipse te proposera.



  • ReBonjour, je suis désole mais la depuis tout a lh'eur je cherche comment faire, donc j'ai creer ma boucle for et je cherche sur tous le forum pour check l'inventaire mais je trouve absolument rien Oo



  • Pour parcourir l'inventaire du player ca doit être assez simple, personnellement je fais comme ceci pour l'inventaire de mes propres blockContainer 🙂

    
           for(int i = 0; i < player.inventory.getSizeInventory(); i++) //Boucle ou l'on crée une variable i qui représente les slots de l'inventaire du joueur
            {
             if(player.inventory.getStackInSlot(i) != null) //Si le slot n'est pas null alors on passe au prochain
              {
               if(player.inventory.getStackInSlot(i).getItem() instanceof TonItemBackPack) //Si l'item dans le slot est l'instance de ton item alors tu exécutes quelque chose
               {
                  /* Ce que tu dois éxécuter */
               }
              }
             }
    
    

    C'est une piste il faut améliorer.



  • Merci, j'y vois un peu plus clair, malgré tout quelque chose reste obscurs Oo c'est le player.inventory
    tu as créer une class player?



  • Re ! Donc j'ai demander à Robin (grand merci à lui de m'avoir éclairer :p)

    Mais effectivement comme il me l'as dit il est préférable de passer par l'évent PlayerTickEvent car avec le OnUpdate côté client il pourra être contourné du coup c'est préférable de passer ça côté serveur je te conseille ce tutoriel pour te créer une classe Event (https://www.minecraftforgefrance.fr/showthread.php?tid=4207) et ensuite y ajouter cet event

    
    @SubscribeEvent
    public void tickEvent(PlayerTickEvent event)
    {
    EntityPlayer player = event.player; //Tu récupères le player par l'event
    if(player.inventory.hasItem(TonItem)) //Pour finir BrokenSwing (merci :p) m'a parler d'un fonction qui existe pour vérifier si le joueur à l'item, donc tu remplaces "TonItem" par ton item x)  
        {  
        }
    }
    
    


  • Re ! Donc j'ai demander à Robin (grand merci à lui de m'avoir éclairer :p)

    Mais effectivement comme il me l'as dit il est préférable de passer par l'évent PlayerTickEvent car avec le OnUpdate côté client il pourra être contourné du coup c'est préférable de passer ça côté serveur je te conseille ce tutoriel pour te créer une classe Event (https://www.minecraftforgefrance.fr/showthread.php?tid=4207) et ensuite y ajouter cet event

    
    @SubscribeEvent
    public void tickEvent(PlayerTickEvent event)
    {
    EntityPlayer player = event.player; //Tu récupères le player par l'event
    if(player.inventory.hasItemStack(new ItemStack(TonItem))) //Pour finir BrokenSwing (merci :p) m'a parler d'un fonction qui existe pour vérifier si le joueur à l'item, donc tu remplaces "TonItem" par ton item x)  
        {  
        }
    }
    
    


  • j'ai un petit problème, j'ai utilisé ton code (merci au passage) mais rien ne se passe.
    https://pastebin.com/cqMxBgmi