• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Event Forge : DrawBlockHighlightEvent

    1.7.x
    1.7.10
    4
    6
    1624
    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.
    • BrokenSwing
      BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par

      Bonsoir, j’aimerai déclencher un achievement via l’évènement “DrawBlockHighlightEvent”, je sais que c’est un event qui se déclenche côté client mais je ne sais pas trop comment faire.

      #Ma classe qui gère les events côté client(Ma classe qui gère les events côté client)

      package fr.andemar.common;
      
      import net.minecraftforge.client.event.DrawBlockHighlightEvent;
      import cpw.mods.fml.common.eventhandler.SubscribeEvent;
      
      public class EventSolo {
      
      @SubscribeEvent
      public void onWatchingBlock (DrawBlockHighlightEvent event)
      {
      if((event.player.getEntityWorld().getBlock(event.target.blockX, event.target.blockY, event.target.blockZ) == Andemar.adamantiumOre)  )
      {
      if(event.player != null)
      event.player.triggerAchievement(Andemar.seeAdamantiumOre);
      }
      }
      
      }
      

      Je test si le bloc pointé correspond à mon bloc adamantiumOre, si oui alors je déclenche mon achievement.

      Voici aussi ma méthode init()

      #Méthode init()(Méthode init())

      @EventHandler
      public void init(FMLInitializationEvent event)
      {
      proxy.registerRender();
      proxy.registerTileEntityRender();
      
      if(event.getSide().isClient())
      {
      MinecraftForge.EVENT_BUS.register(new EventSolo());
      }
      MinecraftForge.EVENT_BUS.register(new Event());
      FMLCommonHandler.instance().bus().register(new Event());
      
      }
      

      Le jeu se lance sans erreur et ma fonction onWatchingBlock est bien appelée (test par message affichant le nom du bloc pointé -> test concluant) cependant lorsque je pointe mon bloc adamantiumOre, mon achievement ne se déclenche pas. Je soupçonne le fait que l’erreur vienne de ma méthode init().

      J’espère que vous pourrez m’aider. Merci d’avance.

      1 réponse Dernière réponse Répondre Citer 0
      • Deleted
        Deleted dernière édition par

        @‘bodri’:

        Bonsoir, j’aimerai déclencher un achievement via l’évènement “DrawBlockHighlightEvent”, je sais que c’est un event qui se déclenche côté client mais je ne sais pas trop comment faire.

        #Ma classe qui gère les events côté client(Ma classe qui gère les events côté client)

        package fr.andemar.common;
        
        import net.minecraftforge.client.event.DrawBlockHighlightEvent;
        import cpw.mods.fml.common.eventhandler.SubscribeEvent;
        
        public class EventSolo {
        
        @SubscribeEvent
        public void onWatchingBlock (DrawBlockHighlightEvent event)
        {
        if((event.player.getEntityWorld().getBlock(event.target.blockX, event.target.blockY, event.target.blockZ) == Andemar.adamantiumOre)  )
        {
        if(event.player != null)
        event.player.triggerAchievement(Andemar.seeAdamantiumOre);
        }
        }
        
        }
        

        Je test si le bloc pointé correspond à mon bloc adamantiumOre, si oui alors je déclenche mon achievement.

        Voici aussi ma méthode init()

        #Méthode init()(Méthode init())

        @EventHandler
        public void init(FMLInitializationEvent event)
        {
        proxy.registerRender();
        proxy.registerTileEntityRender();
        
        if(event.getSide().isClient())
        {
        MinecraftForge.EVENT_BUS.register(new EventSolo());
        }
        MinecraftForge.EVENT_BUS.register(new Event());
        FMLCommonHandler.instance().bus().register(new Event());
        
        }
        

        Le jeu se lance sans erreur et ma fonction onWatchingBlock est bien appelée (test par message affichant le nom du bloc pointé -> test concluant) cependant lorsque je pointe mon bloc adamantiumOre, mon achievement ne se déclenche pas. Je soupçonne le fait que l’erreur vienne de ma méthode init().

        J’espère que vous pourrez m’aider. Merci d’avance.

        Nan ta méthode init est correct cependant ajoute un
        @SideOnly(Side.CLIENT)
        Au dessus de ta méthode event comme ça ton jeu sera sûr de déclencher cet event que en client
        Et de 2 je pense que c’est parce que la méthode pour les achievements est du côté du serveur. Essaie donc de remonter cette méthode pour voir et si c’est le cas il faudra envoyer un packet.
        J’espère t’avoir aidé si tu as du mal avec les packets je peux peut-être aidé et en plus il y a une vidéo sur la chaine youtube de mff qui explique très bien ^^

        1 réponse Dernière réponse Répondre Citer 0
        • SCAREX
          SCAREX dernière édition par

          
          if(event.player != null)
          
          

          Cette condition ne sert à rien puisque si ton event.player est null, tu auras un NPE dans la ligne avant.

          
          event.player.triggerAchievement(Andemar.seeAdamantiumOre);
          
          

          Je ne connais pas très bien la méthode triggerAchievement mais je doute qu’elle ai en seul paramètre un block. (Je n’ai pas accès aux sources de Minecraft en ce moment donc quel paramètre est attendu dans cette méthode ?)

          Site web contenant mes scripts : http://SCAREXgaming.github.io

          Pas de demandes de support par MP ni par skype SVP.
          Je n'accepte sur skype que l…

          1 réponse Dernière réponse Répondre Citer 0
          • Deleted
            Deleted dernière édition par

            @‘SCAREX’:

            
            if(event.player != null)
            

            Cette condition ne sert à rien puisque si ton event.player est null, tu auras un NPE dans la ligne avant.

            
            event.player.triggerAchievement(Andemar.seeAdamantiumOre);
            

            Je ne connais pas très bien la méthode triggerAchievement mais je doute qu’elle ai en seul paramètre un block. (Je n’ai pas accès aux sources de Minecraft en ce moment donc quel paramètre est attendu dans cette méthode ?)

            Ce n’est pas un block ce qu’il y a en paramètre c’est un achievement, sinon il n’aurait pas mis see devant AdmantiumOre, du moins je pense.

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

              Le problème c’est que la fonction triggerAchievement n’a que effet côté serveur.
              Il faut donc passer par un paquet.

              1 réponse Dernière réponse Répondre Citer 0
              • BrokenSwing
                BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par

                Merci à tous pour vos réponses, je me mettrai à code les packets dès que j’en aurai le temps. Et effectivement Andemar.seeAdamantiumOre est un achievement et non pas un bloc.

                Encore merci !

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

                MINECRAFT FORGE FRANCE © 2018

                Powered by NodeBB