MFF

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

    Modifier boutons

    Planifier Épinglé Verrouillé Déplacé Résolu Anciennes versions
    1.6.4
    24 Messages 6 Publieurs 8.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.
    • kevin_68K Hors-ligne
      kevin_68 Moddeurs confirmés
      dernière édition par

      C’est juste qu’une modification du minecraft.jar fait crash le jeu avec forge, il “scan” le jar pour vérifier qu’il est clean.
      Donc on ne peut pas modifier le jar.
      Sinon, salut kévin, moi c’est kévin et c’est étrange d’écrire ça.

      Mais tu peux faire un mod qui met un gui par dessus le gui existant, pour cela utilise un tickHandler.


      Mettez à jours vers la dernière version stable (1.8.9 voir même…

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

        OK ok

        j’ai essayé aussi de convertir mes fichiers .class pour faire un mod mais ca n’a pas marché donc je pense que je fais mal un truc…
        comment je fais pour utiliser un tickhandler ?

        Ps: salut Kévin (c’est vrai que ca fait bizarre lol)

        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

          package fr.minecraftforgefrance.custommenu;
          
          import java.util.Arrays;
          
          import cpw.mods.fml.common.Mod;
          import cpw.mods.fml.common.Mod.EventHandler;
          import cpw.mods.fml.common.event.FMLInitializationEvent;
          import cpw.mods.fml.common.event.FMLPreInitializationEvent;
          import cpw.mods.fml.common.registry.TickRegistry;
          import cpw.mods.fml.relauncher.Side;
          
          @Mod(modid = "CustomMenu", name = "Custom Menu", version = "1.0.0")
          
          public class ModCustomMenu
          {
          @EventHandler
          public void init(FMLInitializationEvent event)
          {
          if(event.getSide().isClient())
          TickRegistry.registerTickHandler(new TickHandlerClient(), Side.CLIENT);
          }
          }
          
          package fr.minecraftforgefrance.custommenu;
          
          import java.util.EnumSet;
          
          import net.minecraft.client.Minecraft;
          import net.minecraft.client.gui.GuiMainMenu;
          import net.minecraft.client.gui.GuiScreen;
          import cpw.mods.fml.common.ITickHandler;
          import cpw.mods.fml.common.TickType;
          
          public class TickHandlerClient implements ITickHandler
          {
          @Override
          public void tickStart(EnumSet <ticktype>type, Object… tickData)
          {
          
          }
          
          @Override
          public void tickEnd(EnumSet <ticktype>type, Object... tickData)
          {
          if(type.equals(EnumSet.of(TickType.CLIENT)))
          {
          Minecraft mc = Minecraft.getMinecraft();
          GuiScreen currentScreen = mc.currentScreen;
          GuiCustomMainMenu customMenu = new GuiCustomMainMenu();
          
          if(currentScreen instanceof GuiMainMenu && !currentScreen.equals(customMenu))
          {
          mc.displayGuiScreen(customMenu);
          }
          }
          }
          
          @Override
          public EnumSet <ticktype>ticks()
          {
          return EnumSet.of(TickType.CLIENT);
          }
          
          @Override
          public String getLabel()
          {
          return "Client Menu Tick Handler";
          }
          }
          

          Ensuite tu créé ta classe GuiCustomMainMenu, tu copie colle GuiMainMenu dedans en changeant tout les GuiMainMenu par GuiCustomMainMenu, et tu adapte la classe comme tu le souhaite.

          Pour finir, tu compile le mod comme un mod normal, et tu en fais un .zip que tu mets dans le dossier mods.</ticktype></ticktype></ticktype>

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

            Merci merci !

            par contre, j’ai un souci, j’ai une erreur dans cette fonction :

            private void func_130022_h()
            {
            this.minecraftRealmsButton.drawButton = true;
            fmlModButton.width = 98;
            fmlModButton.xPosition = this.width / 2 + 2;
            }
            

            Il me met l’erreur au niveau du .width en me disant qu’elle n’est pas public mais elle fait référence à une classe que je touche pas…

            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

              Supprime cette ligne, elle ne sert qu’à activer le bouton “Minecraft realms”, qui est completement inutile sur un launcher personnel.
              (il faut aussi que tu supprime la ligne ou la méthode est appelé).

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

                Impecc, j’ai plus d’erreurs, mais par contre, mon menu n’apparait pas… (je vois juste le menu d’origine apparaitre un quart de seconde et tout s’efface, il ne me reste plus que les boutons option et quit game…

                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

                  Il y a des erreurs dans la console ?

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

                    Je n’en vois pas…

                    nov. 13, 2013 9:23:03 PM net.minecraft.launchwrapper.LogWrapper log
                    INFO: Loading tweak class name cpw.mods.fml.common.launcher.FMLTweaker
                    nov. 13, 2013 9:23:03 PM net.minecraft.launchwrapper.LogWrapper log
                    INFO: Using primary tweak class name cpw.mods.fml.common.launcher.FMLTweaker
                    nov. 13, 2013 9:23:03 PM net.minecraft.launchwrapper.LogWrapper log
                    INFO: Calling tweak class cpw.mods.fml.common.launcher.FMLTweaker
                    2013-11-13 21:23:03 [INFO] [ForgeModLoader] Forge Mod Loader version 6.4.3.883 for Minecraft 1.6.4 loading
                    2013-11-13 21:23:03 [INFO] [ForgeModLoader] Java is Java HotSpot(TM) 64-Bit Server VM, version 1.7.0_25, running on Windows 7:amd64:6.1, installed at C:\Program Files\Java\jre7
                    2013-11-13 21:23:03 [INFO] [ForgeModLoader] Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation
                    2013-11-13 21:23:04 [INFO] [STDOUT] Loaded 40 rules from AccessTransformer config file fml_at.cfg
                    2013-11-13 21:23:04 [INFO] [STDOUT] Loaded 109 rules from AccessTransformer config file forge_at.cfg
                    2013-11-13 21:23:04 [SEVERE] [ForgeModLoader] The binary patch set is missing. Either you are in a development environment, or things are not going to work!
                    2013-11-13 21:23:05 [INFO] [ForgeModLoader] Launching wrapped minecraft {net.minecraft.client.main.Main}
                    2013-11-13 21:23:06 [INFO] [Minecraft-Client] Setting user: Player606
                    2013-11-13 21:23:06 [INFO] [Minecraft-Client] (Session ID is null)
                    2013-11-13 21:23:07 [INFO] [Minecraft-Client] LWJGL Version: 2.9.0
                    2013-11-13 21:23:07 [INFO] [Minecraft-Client] Reloading ResourceManager: Default
                    2013-11-13 21:23:08 [INFO] [STDOUT]
                    2013-11-13 21:23:08 [INFO] [STDOUT] Starting up SoundSystem…
                    2013-11-13 21:23:08 [INFO] [MinecraftForge] Attempting early MinecraftForge initialization
                    2013-11-13 21:23:08 [INFO] [STDOUT] MinecraftForge v9.11.0.883 Initialized
                    2013-11-13 21:23:08 [INFO] [ForgeModLoader] MinecraftForge v9.11.0.883 Initialized
                    2013-11-13 21:23:08 [INFO] [STDOUT] Initializing LWJGL OpenAL
                    2013-11-13 21:23:08 [INFO] [STDOUT] (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org)
                    2013-11-13 21:23:08 [INFO] [STDOUT] OpenAL initialized.
                    2013-11-13 21:23:08 [INFO] [STDOUT] Replaced 101 ore recipies
                    2013-11-13 21:23:08 [INFO] [MinecraftForge] Completed early MinecraftForge initialization
                    2013-11-13 21:23:08 [INFO] [ForgeModLoader] Reading custom logging properties from C:\Users\Kévin\Desktop\forge1\mcp\jars\config\logging.properties
                    2013-11-13 21:23:08 [OFF] [ForgeModLoader] Logging level for ForgeModLoader logging is set to ALL
                    2013-11-13 21:23:08 [INFO] [ForgeModLoader] Searching C:\Users\Kévin\Desktop\forge1\mcp\jars\mods for mods
                    2013-11-13 21:23:08 [INFO] [STDOUT]
                    2013-11-13 21:23:10 [INFO] [ForgeModLoader] Forge Mod Loader has identified 4 mods to load
                    2013-11-13 21:23:10 [INFO] [mcp] Activating mod mcp
                    2013-11-13 21:23:10 [INFO] [FML] Activating mod FML
                    2013-11-13 21:23:10 [INFO] [Forge] Activating mod Forge
                    2013-11-13 21:23:10 [INFO] [CustomMenu] Activating mod CustomMenu
                    2013-11-13 21:23:10 [WARNING] [Forge Mod Loader] Mod Forge Mod Loader is missing a pack.mcmeta file, things may not work well
                    2013-11-13 21:23:10 [WARNING] [Minecraft Forge] Mod Minecraft Forge is missing a pack.mcmeta file, things may not work well
                    2013-11-13 21:23:10 [WARNING] [Custom Menu] Mod Custom Menu is missing a pack.mcmeta file, things may not work well
                    2013-11-13 21:23:10 [INFO] [Minecraft-Client] Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Custom Menu
                    2013-11-13 21:23:10 [INFO] [STDOUT]
                    2013-11-13 21:23:10 [INFO] [STDOUT] SoundSystem shutting down…
                    2013-11-13 21:23:10 [INFO] [STDOUT] Author: Paul Lamb, www.paulscode.com
                    2013-11-13 21:23:10 [INFO] [STDOUT]
                    2013-11-13 21:23:10 [INFO] [STDOUT]
                    2013-11-13 21:23:10 [INFO] [STDOUT] Starting up SoundSystem…
                    2013-11-13 21:23:11 [INFO] [ForgeModLoader] Registering Forge Packet Handler
                    2013-11-13 21:23:11 [INFO] [ForgeModLoader] Succeeded registering Forge Packet Handler
                    2013-11-13 21:23:11 [INFO] [ForgeModLoader] Configured a dormant chunk cache size of 0
                    2013-11-13 21:23:11 [INFO] [STDOUT] Initializing LWJGL OpenAL
                    2013-11-13 21:23:11 [INFO] [STDOUT] (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org)
                    2013-11-13 21:23:11 [INFO] [STDOUT] OpenAL initialized.
                    2013-11-13 21:23:11 [INFO] [STDOUT]
                    2013-11-13 21:23:12 [INFO] [ForgeModLoader] Forge Mod Loader has successfully loaded 4 mods
                    2013-11-13 21:23:12 [WARNING] [Forge Mod Loader] Mod Forge Mod Loader is missing a pack.mcmeta file, things may not work well
                    2013-11-13 21:23:12 [WARNING] [Minecraft Forge] Mod Minecraft Forge is missing a pack.mcmeta file, things may not work well
                    2013-11-13 21:23:12 [WARNING] [Custom Menu] Mod Custom Menu is missing a pack.mcmeta file, things may not work well
                    2013-11-13 21:23:12 [INFO] [Minecraft-Client] Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Custom Menu
                    2013-11-13 21:23:12 [INFO] [STDOUT]
                    2013-11-13 21:23:12 [INFO] [STDOUT] SoundSystem shutting down…
                    2013-11-13 21:23:12 [INFO] [STDOUT] Author: Paul Lamb, www.paulscode.com
                    2013-11-13 21:23:12 [INFO] [STDOUT]
                    2013-11-13 21:23:12 [INFO] [STDOUT]
                    2013-11-13 21:23:12 [INFO] [STDOUT] Starting up SoundSystem…
                    2013-11-13 21:23:13 [INFO] [STDOUT] Initializing LWJGL OpenAL
                    2013-11-13 21:23:13 [INFO] [STDOUT] (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org)
                    2013-11-13 21:23:13 [INFO] [STDOUT] OpenAL initialized.
                    2013-11-13 21:23:13 [INFO] [STDOUT]
                    2013-11-13 21:23:14 [SEVERE] [Minecraft-Client] Realms: Invalid session id
                    2013-11-13 21:23:14 [SEVERE] [Minecraft-Client] Realms: Invalid session id
                    
                    

                    Edit :

                    Autant pour moi, j’avais viré un paragraphe qu’il ne fallait pas virer >< !

                    par contre, pour modifier le menu en jeux et le menu d’option, je ne peux pas les ajouter comme ca, mais il faut que je les ajoute dans le tickhandlerclient ou bien il faut que j’en refasse un de la meme manière ?

                    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

                      Base toi sur ça :
                      http://dl.mcnanotech.fr/robin4002/mods/Sources/CustomMenu-src.zip

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

                        C’est bon pour le menu principal et pour le menu en jeu, par contre pour la page des options, c’est un peu particulier il me semble, non ?

                        ca crash dès que je vais sur la page… 😕

                        j’ai mit ca comme code dans la classe tickHandlerClient :

                        			GuiCustomOptions customOptions = new GuiCustomOptions(currentScreen, null);
                        
                        			if(currentScreen instanceof GuiOptions && !currentScreen.equals(customOptions))
                        			{
                        				mc.displayGuiScreen(customOptions);
                        			}
                        

                        Et je voudrai aussi savoir si quand le serveur devient down, il est possible de retourner à l’écran principal plutôt que de tomber sur la page de sélection du serveur multijoueur ?

                        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

                          @‘roideseaux’:

                          C’est bon pour le menu principal et pour le menu en jeu, par contre pour la page des options, c’est un peu particulier il me semble, non ?

                          ca crash dès que je vais sur la page… 😕

                          j’ai mit ca comme code dans la classe tickHandlerClient :

                          			GuiCustomOptions customOptions = new GuiCustomOptions(currentScreen, null);
                          			
                          			if(currentScreen instanceof GuiOptions && !currentScreen.equals(customOptions))
                          			{
                          				mc.displayGuiScreen(customOptions);
                          			}
                          

                          Et je voudrai aussi savoir si quand le serveur devient down, il est possible de retourner à l’écran principal plutôt que de tomber sur la page de sélection du serveur multijoueur ?

                          GuiCustomOptions customOptions = new GuiCustomOptions(currentScreen, mc.gameSettings);
                          
                          if(currentScreen instanceof GuiOptions && !currentScreen.equals(customOptions))
                          {
                          mc.displayGuiScreen(customOptions);
                          }
                          

                          Tu ne peux pas déclare ta gui avec un paramètre null dans le constructeur, sinon c’est normal que ça crash avec un NPE 😉

                          Pour le retour sur le menu, tu as utilisé cette fonction pour la connexion ? :

                          this.mc.displayGuiScreen(new GuiConnecting(this, this.mc, "ip", port));
                          

                          Le premier this dans le constructeur correspond au gui actuelle (donc ton menu custom), GuiConnecting ouvre se gui si la connexion échoue.
                          Si c’est pas bon comme ça, c’est que l’action après avoir perdu la connexion n’ouvre pas se gui, donc dans se cas je sais pas comment faire pour changer mettre ton menu lors de la déco du serveur.
                          Ça doit être quand même faisable avec quelques conditions, il faudrait que je prenne le temps de regarder plus en détail.

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

                            Oui effectivement, ça fonctionne mieux, je me doutait bien que le constructeur ne pouvais pas être null mais je ne savais pas le quel mettre !

                            par contre, j’ai un bug, quand je clic sur done, ca ne revient pas à l’écran précédent 😕
                            pourtant dans la class tickHandlerClient, j’ai bien appelé ma gui avec currentScreen en constructeur 😕

                            Et pour l’autre question, j’ai déjà définit ainsi mon bouton de connexion donc effectivement, si la connexion échoue, je suis renvoyé au menu principal, mais par contre quand le serveur crash pour une raison ou pour une autre, je ratterris à la page de sélection de serveur 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

                              Étrange, regarde ce que fais le bouton done.
                              Pour le retour sur le menu, je crains que ça va pas être possible, au pire si tu as supprimé le bouton multiplayer sur ton menu, tu peux faire que si le menu multiplayer est ouvert, ça ouvre le menu principale modifié.

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

                                le bouton done fait ça :

                                if (par1GuiButton.id == 200)
                                {
                                this.mc.gameSettings.saveOptions();
                                this.mc.displayGuiScreen(this.parentScreen);
                                }
                                

                                plus haut, il y a :

                                
                                public GuiCustomOptions(GuiScreen par1GuiScreen, GameSettings par2GameSettings)
                                {
                                this.parentScreen = par1GuiScreen;
                                this.options = par2GameSettings;
                                }
                                
                                

                                et j’appelle la classe avec :

                                
                                GuiCustomOptions customOptions = new GuiCustomOptions(currentScreen, mc.gameSettings);
                                
                                if(currentScreen instanceof GuiOptions && !currentScreen.equals(customOptions))
                                {
                                mc.displayGuiScreen(customOptions);
                                }
                                
                                

                                pour moi, il n’y a rien qui cloche !

                                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

                                  Je vois le problème, quand tu clic sur le GuiOptions, il ouvre GuiCustomOptions, mais le currentScreen correspond à GuiOptions. Donc quand tu clic sur done, ça ouvre GuiOptions, et le tickhandler ouvre à nouveau GuiCustomOptions, ce qui fait une boucle infini.
                                  Plutôt que passer par le TickHandler, il faudrait modifier dans le menu Custom le gui ouvert lorsqu’on clic sur option, même chose pour GuiInGame (Forge permet de changer GuiInGame facilement).

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

                                    Ok, merci beaucoup !

                                    je pense que je n’ai plus de souci 🙂

                                    impec pour le menu multijoueur, dès que la page est chargée, ca me swich direct sur mon menu principal 🙂

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

                                      Petite question, c’est le même principe pour la modification de l’inventaire ?

                                      J’ai voulu essayer mais malheureusement dans le constructeur de ma class GuiCustomInventory il me demande EntityPlayer par1EntityPlayer.

                                      
                                      public GuiCustomInventory(EntityPlayer par1EntityPlayer)
                                      {
                                      super(par1EntityPlayer.inventoryContainer);
                                      this.allowUserInput = true;
                                      par1EntityPlayer.addStat(AchievementList.openInventory, 1);
                                      }
                                      

                                      du coups dans mon TickHandlerInventory il me le réclame:

                                      @Override
                                      public void tickEnd(EnumSet <ticktype>type, Object… tickData){
                                      if(type.equals(EnumSet.of(TickType.CLIENT))){
                                      Minecraft mc = Minecraft.getMinecraft();
                                      GuiScreen currentScreen = mc.currentScreen;
                                      List players = mc.theWorld.playerEntities;
                                      GuiCustomInventory customInventory = new GuiCustomInventory(..); //ici
                                      
                                      if(currentScreen instanceof GuiInventory && !currentScreen.equals(customInventory))
                                      mc.displayGuiScreen(customInventory);
                                      }
                                      }
                                      

                                      J’ai essayer de plusieurs façon différente d’aller le rechercher mais malheureusement à chaque fois il me retourne null…

                                      Merci d’avance :P</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

                                        Il te faut le joueur en paramètre, je partirais plutôt sur un tickhandler de type player.

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

                                          C’est pas con, j’ai pas spécialement pensé à regarder la documentation (Dans les commentaires du code c’est marqué que pour serveur le type PLAYER…).

                                          Maintenant il veut bien compiler mais par contre il rentre pas dans le if

                                          if(type.equals(EnumSet.of(TickType.PLAYER))) { }
                                          
                                          @Override
                                          public void tickEnd(EnumSet <ticktype>type, Object… tickData){
                                          if(type.equals(EnumSet.of(TickType.PLAYER))){
                                          Minecraft mc = Minecraft.getMinecraft();
                                          GuiScreen currentScreen = mc.currentScreen;
                                          GuiCustomInventory customInventory = new GuiCustomInventory((EntityPlayer) tickData[0]);
                                          System.out.println("TESTTTTTTTTTTTTT");
                                          if(currentScreen instanceof GuiInventory && !currentScreen.equals(customInventory))
                                          mc.displayGuiScreen(customInventory);
                                          }
                                          else
                                          System.out.println("FAILLLLLLLLLLLLLLLLLLLLLLL");
                                          }
                                          

                                          Petite info sur la documentation :

                                          PLAYER
                                          public static final TickType PLAYER
                                          client and server side. Fired whenever the players update loop runs. arg 0 : the player arg 1 : the world the player is in
                                          ```</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

                                            Oui, car mc.currentScreen retourne GuiForgeInGame
                                            Cette fonction donne le Screen ouvert, le menu de minecraft qui tourne. Elle ne renvoie pas les gui de bloc, entity, etc …
                                            Il faudrait plutot utiliser GuiOpenEvent pour ça, mais tu n’as pas player en argument. Donc je pense pas que ce soit faisable.

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB