MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    TickHandler, effet en portant une armure complète ou avec un bloc en main

    Planifier Épinglé Verrouillé Déplacé Résolu Anciennes versions
    1.6.4
    5 Messages 2 Publieurs 1.9k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • F Hors-ligne
      fireblade51
      dernière édition par

      Bonjours j’aimerai savoir comment faire pour que quand on porte (ex.: une armure complète, juste les bottes, etc…) on est un effet style potion. Aussi, quand on tien un bloc en main on est aussi un effet style potion.

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002R Hors-ligne
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
        dernière édition par

        Dans la fonction init de ta classe principale :
        TickRegistry.registerTickHandler(new TonTickHandler(), Side.SERVER);
        Créé la classe ajoute implémentations de la classe ITickHandler (public TaClasse implements ITickHandler), passe la souris sur l’erreur de ta classe, add unimplemented method.
        Dans la fonction getLabel tu mets ce que tu veux (par exemple “modid - ce que le tick handler fait”)
        Dans la fonction public EnumSet <ticktype>ticks() tu mets : return EnumSet.of(TickType.PLAYER);

        Et dans la fonction tickEnd tu ajoutes :
        EntityPlayer player = (EntityPlayer)tickData[0];
        pour avoir l’instance du joueur.
        À partir de ça tu peux faire des conditions du genre if(player.getCurrentItem() != null && player.getCurrentItem().itemID == ClassePrincipale.item.itemID) alors je fais ….
        pense à toujours vérifier en premier que l’itemStack n’est pas null, sinon tu vas avoir un joli crash avec un NPE (NullPointerException)
        Exemple de tick handler ici :
        https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/main/utils/NanotechServerTickHandler.java
        Il y a même l’exemple avec l’armure, la seul différence c’est que l’effet est fait si le joueur n’a pas l’armure (donc l’inverse de ce que tu cherches à faire).</ticktype>

        1 réponse Dernière réponse Répondre Citer 0
        • F Hors-ligne
          fireblade51
          dernière édition par

          Merci robin4002 sa marche super bien pour les items en main. Mais j’essaye avec les armures mais sa ne marche pas, je ne comprend pas pourquoi. Voici ma classe TickHandler:

          
          package tuto;
          
          import java.util.EnumSet;
          import java.util.Random;
          
          import net.minecraft.entity.player.EntityPlayer;
          import net.minecraft.item.Item;
          import net.minecraft.item.ItemStack;
          import net.minecraft.potion.Potion;
          import net.minecraft.potion.PotionEffect;
          import net.minecraft.util.MathHelper;
          import net.minecraft.world.WorldServer;
          import cpw.mods.fml.common.FMLCommonHandler;
          import cpw.mods.fml.common.ITickHandler;
          import cpw.mods.fml.common.Loader;
          import cpw.mods.fml.common.TickType;
          
          public class TickHandlerTuto implements ITickHandler {
          
          @Override
          public void tickStart(EnumSet <ticktype>type, Object… tickData) {
          
          }
          
          @Override
          public void tickEnd(EnumSet <ticktype>type, Object... tickData) {
          EntityPlayer player = (EntityPlayer)tickData[0];
          for(int i = 0; i < player.inventory.getSizeInventory(); i++)
          {
          if(player.inventory.getStackInSlot(i) != null)
          {
          if(player.inventory.getStackInSlot(i).itemID == tutomain.block1.blockID)
          {
          player.setFire(1);
          }
          if(player.getCurrentItemOrArmor(0) != null){
          ItemStack hand = player.getCurrentItemOrArmor(0);
          
          if(hand.getItem() == Item.appleRed){
          player.setFire(1);
          }
          if (player.getCurrentArmor(4) != null){
          ItemStack helmet = player.getCurrentArmor(4);
          if (helmet.getItem() == Item.helmetDiamond){
          player.addPotionEffect(new PotionEffect(Potion.blindness.getId(), 500, 10));
          }
          }
          }
          }
          }
          }
          @Override
          public EnumSet <ticktype>ticks() {
          return EnumSet.of(TickType.PLAYER);
          }
          
          @Override
          public String getLabel() {
          return "tuto - bad english";
          }
          
          }
          
          

          Si quelqu’un pourrai me trouvez mon erreur ou une solution se serai parfait. Merci :)</ticktype></ticktype></ticktype>

          1 réponse Dernière réponse Répondre Citer 0
          • robin4002R Hors-ligne
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs
            dernière édition par

            Utilise player.getCurrentItemOrArmor(4) avec player.getCurrentArmor(int) c’est pas 4, je crois que c’est 0 ou 3.

            1 réponse Dernière réponse Répondre Citer 0
            • F Hors-ligne
              fireblade51
              dernière édition par

              Super sa marche, il fallait simplement mettre le “TickRegistry.registerTickHandler(new TonTickHandler(), Side.SERVER);” dans le CommonProxy et mettre “proxy.registerServerTickHandler();” dans la classe principal et tout marche maintenant. Merci pour ton aide robin4002 🙂

              1 réponse Dernière réponse Répondre Citer 0
              • 1 / 1
              • Premier message
                Dernier message
              Design by Woryk
              ContactMentions Légales

              MINECRAFT FORGE FRANCE © 2024

              Powered by NodeBB