Mêttre des effets sur un Kit



  • Salut MMF, 
    Voilà j'ai vu un Tuto pour mêttre des effets sur une Armure

           public void onArmorTick(EntityPlayer player, ItemStack stack)
           {
    
           if(stack.getItem() == ModTutoriel.helmetTuto
           {
            player.addPotionEffect(new PotionEffect(Potion.nightVision.id, 210, 1));
           }
           player.addPotionEffect(new PotionEffect(Potion.resistance.id, 20, 1));
           player.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 20, 1));
    
           }
    

    Comment je pourrai faire pour que par exemple : le joueur met un kit spécial par exemple une armure en fer entière , une pioche en fer , et une épée en fer après ça lui donne des effets ?

    Car dans se code c'est que pour l'armure



  • bha tu fait:

    ​%(#555555)[[size=x-small]if(stack.getItem() == Minecraft.ironHelmet && stack.getItem() == Minecraft.ironLeggings && etc…)]
    


  • Tu regarde l'item que le player tiens a chaque tick, et si il tiens l'épée ou la pioche, tu vérifie son inventaire pour voir si il a le reste des items correspondants.


  • Administrateurs

    @'règlement de la section':

    Avant d'exposer son problème :

    Sachez que le support est fait durant notre temps libre, et donc comme nous sommes aussi des moddeurs, nous avons aussi nous propre mods à faire, et notre vie privé à côté, nous ne pouvons donc pas faire du support 24/24h, 7/7 jours. En conséquence, avant de crier "à l'aide" nous vous demandons de faire un minimum de recherche, au minimum dans les tutoriels du site et dans les demandes d'aide déjà existantes, si possible sur le forum officiel de forge et au mieux, passer sur les deux premières pages de la recherche google.

    Le pire c'est que c'est expliqué dans le tutoriel que tu as cité, juste un peu plus bas dans la partie sur les event.

    http://www.minecraftforgefrance.fr/showthread.php?tid=674#bonus2

    ItemStack boots = event.entityLiving.getEquipmentInSlot(1);
    ItemStack leggings = event.entityLiving.getEquipmentInSlot(2);
    ItemStack chestPlate = event.entityLiving.getEquipmentInSlot(3);
    ItemStack helmet = event.entityLiving.getEquipmentInSlot(4);
    
    if(boots != null && boots.getItem() == ModTutoriel.bootsTuto && leggings != null && leggings.getItem() == ModTutoriel.leggingsTuto && chestPlate != null && chestPlate.getItem() == ModTutoriel.chestPlateTuto && helmet != null && helmet.getItem() == ModTutoriel.helmetTuto)
    {
    // La suite ici
    }
    

    Sachant que tu peux très bien utiliser ce code dans la fonction onArmorTick de l'armure, il faut juste remplace event.entityLiving par player.



  • http://www.minecraftforgefrance.fr/showthread.php?tid=183&page=2

    Sa devrait t'aider si tu veux enchanter n'importe quel item comme dans le pvp swap d'épicube ou d'autres mini jeux sur d'autres serveurs



  • @'robin4002':

    @'règlement de la section':

    Avant d'exposer son problème :

    Sachez que le support est fait durant notre temps libre, et donc comme nous sommes aussi des moddeurs, nous avons aussi nous propre mods à faire, et notre vie privé à côté, nous ne pouvons donc pas faire du support 24/24h, 7/7 jours. En conséquence, avant de crier "à l'aide" nous vous demandons de faire un minimum de recherche, au minimum dans les tutoriels du site et dans les demandes d'aide déjà existantes, si possible sur le forum officiel de forge et au mieux, passer sur les deux premières pages de la recherche google.

    Le pire c'est que c'est expliqué dans le tutoriel que tu as cité, juste un peu plus bas dans la partie sur les event.

    http://www.minecraftforgefrance.fr/showthread.php?tid=674#bonus2

    ItemStack boots = event.entityLiving.getEquipmentInSlot(1);
    ItemStack leggings = event.entityLiving.getEquipmentInSlot(2);
    ItemStack chestPlate = event.entityLiving.getEquipmentInSlot(3);
    ItemStack helmet = event.entityLiving.getEquipmentInSlot(4);
    
    if(boots != null && boots.getItem() == ModTutoriel.bootsTuto && leggings != null && leggings.getItem() == ModTutoriel.leggingsTuto && chestPlate != null && chestPlate.getItem() == ModTutoriel.chestPlateTuto && helmet != null && helmet.getItem() == ModTutoriel.helmetTuto)
    {
    // La suite ici
    }
    

    Sachant que tu peux très bien utiliser ce code dans la fonction onArmorTick de l'armure, il faut juste remplace event.entityLiving par player.

    Désolé robin mais j'ai vu la vidéo sur youtube sur la chaine MFF , et je n'ai pas vu ce sujet

    Oui ça marche niquel ! mais comment je pourrai faire pour qu'il détecte l'item dans l'inventaire ?

    ItemStack apple = player.?????;
    

  • Administrateurs

    Il n'y a pas de fonction pré faite pour ça, il faut que tu la fasse toi-même.

    exemple :

    ​public boolean playerAsItem(EntityPlayer player, Item item, int metadata)
    {
        for (int i = 0; i < player.inventory.mainInventory.length; ++i)
        {
            if (player.inventory.mainInventory* != null && player.inventory.mainInventory*.getItem() == item && player.inventory.mainInventory[j].getItemDamage() == metadata)
            {
                return true;
            }
        }
    return false;
    }
    


  • Merci ,Une fois que j'ai créer la fonction dans ma class comment je fais pour ici ?

    ItemStack apple = this.playerAsItem(?????);
    


  • @'H33nok':

    Merci ,Une fois que j'ai créer la fonction dans ma class comment je fais pour ici ?

    ItemStack apple = this.playerAsItem(?????);
    

    Perso je dirai cimmz ceci mais je ne suis pas sûr pour le metadata : si c est pas 0 mets 1

    ItemStack apple = this.playerAsItem(Minecraft.getMinecraft.thePlayer,Items.apple, 0);

    Tiens moi au courant stp 😉



  • ça me fait une erreur enfaite… ça me fait :

    Type mismatch: cannot convert from boolean to ItemStack
    
    2 quick fixes available :
    
    Change type of 'apple' to 'boolean'
    
    Change return type of 'playerAsItem(..)' to 'ItemStack
    

    ItemStack apple = this.playerAsItem(Minecraft.getMinecraft().thePlayer,Items.apple, 0); Je met ça pourtant


  • Administrateurs

    La fonction que je t'ai donné permet directement de savoir si ou ou non le joueur à l'item, et on n'utilise JAMAIS Minecraft.getMinecraft().thePlayer sur une classe serveur, ça détruit la compatibilité serveur.

    ​boolean asApple = playerAsItem(player, Items.apples, 0);
    

    ou alors tu peux directement faire :

    ​if(playerAsItem(player, Items.apples, 0))
    


  •        ItemStack boots = player.getEquipmentInSlot(1);
    ItemStack leggings = player.getEquipmentInSlot(2);
    ItemStack chestPlate = player.getEquipmentInSlot(3);
    ItemStack helmet = player.getEquipmentInSlot(4);
    boolean asApple = playerAsItem(player, Items.apple, 0);
    
    if(boots != null && boots.getItem() == ModTutoriel.bootsTuto && leggings != null && leggings.getItem() == ModTutoriel.leggingsTuto && chestPlate != null && chestPlate.getItem() == ModTutoriel.chestPlateTuto && helmet != null && helmet.getItem() == ModTutoriel.helmetTuto)
    {
    player.addPotionEffect(new PotionEffect(Potion.moveSpeed.getId(), 10, 10));
    }
    

    Comment j'ajoute l'item Apple ?.. 😕



  • @'H33nok':

           ItemStack boots = player.getEquipmentInSlot(1);
    ItemStack leggings = player.getEquipmentInSlot(2);
    ItemStack chestPlate = player.getEquipmentInSlot(3);
    ItemStack helmet = player.getEquipmentInSlot(4);
           boolean asApple = playerAsItem(player, Items.apple, 0);
           
    
    if(boots != null && boots.getItem() == ModTutoriel.bootsTuto && leggings != null && leggings.getItem() == ModTutoriel.leggingsTuto && chestPlate != null && chestPlate.getItem() == ModTutoriel.chestPlateTuto && helmet != null && helmet.getItem() == ModTutoriel.helmetTuto)
    {
    player.addPotionEffect(new PotionEffect(Potion.moveSpeed.getId(), 10, 10));
    }
    

    Comment j'ajoute l'item Apple ?.. 😕

    Tout simplement en ajoutant le boolean dans tes conditions
     && asApple….



  • Je l'ai déjà fait ça , sa marche pas car c'est un Boolean



  • Bah oui merde ^^ J'avais oublié de rajouter ça

    Par contre comment je pourrai faire une fois mi le kit sa envoie un message dans le chat genre 'Vous avez un kit de speed' ?



  • bah tu as déjà ta condition qui t'ajoute un effet de potion donc tu as juste à rajouter ce code là en dessous :

    ​ player.addChatComponentMessage(new ChatComponentTranslation("tile.testTonMessage.kitVitesseDetectee", new Object[0]));
    

    et ensuite dans tes dossiers lang tu ajoutes la traduction en mettant

    tile.testTonMessage.kitVitesseDetectee = traduction que tu veux



  • Le message il me le met à l'infini , y'aurai t-il une méthode pour en afficher qu'un ?



  • Je te propose ce code ou tu fais une boucle for qui affiche le message autant de fois que = i

    (Desole du manque de balise, sur mon tel elles ne marchent pas…)

    [font=Monaco, Consolas, Courier, monospace    ItemStack boots = player.getEquipmentInSlot(1);
    ]
    [size=x-small    ItemStack leggings = player.getEquipmentInSlot(2);]

    [size=x-small    ItemStack chestPlate = player.getEquipmentInSlot(3);]

    [size=x-small    ItemStack helmet = player.getEquipmentInSlot(4);]

    [size=x-small       boolean asApple = playerAsItem(player, Items.apple, 0);]

    [size=x-small       ]

    [font=Monaco, Consolas, Courier, monospace    if(boots != null && boots.getItem() == ModTutoriel.bootsTuto && leggings != null && leggings.getItem() == ModTutoriel.leggingsTuto && chestPlate != null && chestPlate.getItem() == ModTutoriel.chestPlateTuto && helmet != null && helmet.getItem() == ModTutoriel.helmetTuto] [size=xx-small && asApple)]

    [font=Monaco, Consolas, Courier, monospace    {]
    [font=Monaco, Consolas, Courier, monospace        player.addPotionEffect(new PotionEffect(Potion.moveSpeed.getId(), 10, 10));]
    [font=Monaco, Consolas, Courier, monospace for (int i = 0; i < 1;  i++)]
    [font=Monaco, Consolas, Courier, monospace{]

    [size=x-largeplayer][size=x-large.][size=x-largeaddChatComponentMessage][size=x-large(][size=x-largenew] [size=x-largeChatComponentTranslation][size=x-large(][size=x-large"tile.testTonMessage.kitVitesseDetectee"][size=x-large,] [size=x-largenew] [size=x-largeObject][size=x-large[[/font]][size=x-large0][size=x-large]));]
    [font=Monaco, Consolas, Courier, monospace}]
    [font=Monaco, Consolas, Courier, monospace}]



  • Fonctionne pas 😕 sa me l'affiche illimité



  • @'H33nok':

    Fonctionne pas 😕 sa me l'affiche illimité

    remplace la boucle for par

    ​if (i < 1) { i++; %(#000000)[[size=xx-small]player]%(#666600)[[size=xx-small].]%(#000000)[[size=xx-small]addChatComponentMessage]%(#666600)[[size=xx-small](]%(#7f0055)[[size=xx-small]**new**]%(#000000)[[size=xx-small]ChatComponentTranslation]%(#666600)[[size=xx-small](]%(#2a00ff)[[size=xx-small]"tile.testTonMessage.kitVitesseDetectee"]%(#666600)[[size=xx-small],]%(#555555)[[size=xx-small] ]%(#7f0055)[[size=xx-small]**new**]%(#555555)[[size=xx-small] ]%(#000000)[[size=xx-small]Object]%(#666600)[[size=xx-small][[/font]]%(#646464)[[size=xx-small]0]%(#666600)[[size=xx-small]]));] }
    

    et crées une variable de type int égal à 0

    Sinon je ne sais pas  :huh: :huh: