MFF

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

    Event au chargement/déchargement d'une partie

    Planifier Épinglé Verrouillé Déplacé Résolu 1.11.x
    1.11.x
    9 Messages 4 Publieurs 1.7k 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.
    • Cl00e9mentC Hors-ligne
      Cl00e9ment
      dernière édition par

      Bonjour,

      Voici mon problème :

      • J’ai du code a exécuter côté serveur au chargement d’une partie : DataBase.initInstance().
      • Et du code a exécuter côté serveur au déchargement d’une partie : DataBase.killInstance().

      J’ai cherché du côté des events mais j’en n’en ai trouvé aucun qui me permettrait de faire ce que je veux.
      Il y a bien les events WorldEvent.load et WorldEvent.unload :

      package com.trcgames.dbSynchronizer;
      
      import com.trcgames.dbSynchronizer.dataBase.DataBase;
      import net.minecraftforge.event.world.WorldEvent;
      import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
      
      public class EventHandler{
      
          @SubscribeEvent
          public void onWorldLoad (WorldEvent.Load event){
              if (!event.getWorld().isRemote) DataBase.initInstance();
          }
      
          @SubscribeEvent
          public void onWorldUnload (WorldEvent.Unload event){
              if (!event.getWorld().isRemote) DataBase.killInstance();
          }
      }
      

      Le problème c’est qu’ils sont déclenchés 3 fois au chargement ou au déchargement de la partie. De plus Ils sont aussi déclenchés quand on change de dimension.

      Est-ce que vous avez une idée de comment je pourrais procéder ?
      Merci.

      1 réponse Dernière réponse Répondre Citer 0
      • DiabolicaTrixD Hors-ligne
        DiabolicaTrix Correcteurs Moddeurs confirmés
        dernière édition par

        Si c’est seulement côté serveur, tu peux utiliser FMLServerStarting (ou Started) et FMLServerStopping (ou stopped). Par contre, ce sont des events qui utilisent l’annotation EventHandler, comme le preInit.

        1 réponse Dernière réponse Répondre Citer 1
        • Cl00e9mentC Hors-ligne
          Cl00e9ment
          dernière édition par

          @‘DiabolicaTrix’:

          Si c’est seulement côté serveur, tu peux utiliser FMLServerStarting (ou Started) et FMLServerStopping (ou stopped). Par contre, ce sont des events qui utilisent l’annotation EventHandler, comme le preInit.

          Merci de la réactivité.
          Voici mon nouveau code :

          package com.trcgames.dbSynchronizer;
          
          import com.trcgames.dbSynchronizer.dataBase.DataBase;
          import net.minecraftforge.fml.common.Mod.EventHandler;
          import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
          import net.minecraftforge.fml.common.event.FMLServerStoppingEvent;
          
          public class EventListener{
          
              @EventHandler
              public void onServerStarted (FMLServerStartedEvent event){
                  DataBase.initInstance();
              }
          
              @EventHandler
              public void onServerStopped (FMLServerStoppedEvent event){
                  DataBase.killInstance();
              }
          }
          

          Et voici la méthode init dans la classe principale de mon mod :

              @EventHandler
              public void init (FMLInitializationEvent event){
          
                  // il faut bien passer par MinecraftForge.EVENT_BUS.register en 1.11 même pour un event FML. De toute façon j'ai aussi tester avec FMLCommonHandler.instance.bus.register
                  MinecraftForge.EVENT_BUS.register (new EventListener ());
              }
          

          Le problème c’est que onServerStarted et onServerStopped ne sont jamais appelés. Que je soit en solo ou en multi.

          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

            Ils doivent être mis dans la classe principale.

            1 réponse Dernière réponse Répondre Citer 1
            • Cl00e9mentC Hors-ligne
              Cl00e9ment
              dernière édition par

              @‘robin4002’:

              Ils doivent être mis dans la classe principale.

              Ha merci ça fonctionne ! 😄
              Est ce qu’il y a moyen de dédier une classe pour les events FML et de l’enregistrer. Comme on le fait avec les events Forge.

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

                Vu qu’en 1.11 les events FML et Forge sont sur le même bus, tu n’as pas besoin de le faire.

                Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

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

                  Oui mais il n’y a vraiment pas moyen de faire une classe à part où il y a tous les events et enregister cette classe via la méthode init.
                  Comme ça la classe principale du mod est plus aérée.

                  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

                    Non c’est pas possible, les @EventHandler ne peuvent que être dans la classe principale.

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

                      Ok c’est pas grave.
                      Merci encore de votre aide. 😄

                      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