MFF

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

    Générations de minerais

    Planifier Épinglé Verrouillé Déplacé La génération & les dimensions
    1.6.x
    69 Messages 17 Publieurs 28.6k Vues 2 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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par robin4002

      Dans ce tutoriels nous allons voir comment générer des blocs dans un monde, de la même façon qu’un minerai.

      Pre-requis

      • La classe principale et les proxys
      • Un bloc basique

      Dans la classe principale

      Dans la méthode init(FMLInitializationEvent) enregistrer votre WorldGenerator à l’aide de la fonction suivante :

      GameRegistry.registerWorldGenerator(new WorldGeneratorTutoriel());
      

      Ensuite créez la classe WorldGeneratorTutoriel.

      La classe du générateur

      Votre classe devrait ressembler à ça :

      package tutoriel.common;
      
      import cpw.mods.fml.common.IWorldGenerator;
      
      public class WorldGeneratorTutoriel implements IWorldGenerator
      {
          @Override
          public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
          {
          }
      }
      

      Nous allons ajouter un switch par rapport à l’id de la dimension du monde, et faire 3 fonction différentes :

      switch(world.provider.dimensionId)
      {
          case -1:
          this.generateNether(world, chunkX * 16, chunkZ * 16, random);
          break;
          case 0:
          this.generateSurface(world, chunkX * 16, chunkZ * 16, random);
          break;
          case 1:
          this.generateEnd(world, chunkX * 16, chunkZ * 16, random);
          break;
      }
      

      Vous n’êtes pas obligés de mettre les trois fonction, si vous souhaitez juste générer quelque chose dans le monde normal, mettez juste la case 0. Si vous avez des dimensions customs, ajoutez les cases supplémentaires.

      Une fois les fonctions créées, vous devrez avoir ceci :

      @Override
      public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
      {
          switch(world.provider.dimensionId)
          {
              case -1:
              this.generateNether(world, chunkX * 16, chunkZ * 16, random);
              break;
              case 0:
              this.generateSurface(world, chunkX * 16, chunkZ * 16, random);
              break;
              case 1:
              this.generateEnd(world, chunkX * 16, chunkZ * 16, random);
              break;
          }
      }
      
      private void generateSurface(World world, int x, int z, Random rand)
      {
      }
      
      private void generateEnd(World world, int x, int z, Random rand)
      {
      }
      
      private void generateNether(World world, int x, int z, Random rand)
      {
      }
      

      Pour générer un minerai, ajoutez les lignes suivantes dans la fonction du monde correspondant :

      for(int i = 0; i < probabilité; i++)
      {
          (new WorldGenMinable(id du bloc à générer, metadata du bloc à générer, taille maximum d un filon, id du bloc qui va être remplacé)).generate(world, rand, x + rand.nextInt(16), rand.nextInt(hauteur maximum), z + rand.nextInt(16));
      }
      
      • probabilité : un int, pour donner un ordre de grandeur, le diamant est à 1 (enlever la boucle for revient au même que mettre 1), l’or est à 2, la redstone à 8, le gravier à 10, et le charbon, le fer et la terre à 20.
      • id du bloc à générer : classePrincipale.monBloc.blockID par exemple.
      • metadata du bloc à générer : je pense pas qu’il y est besoin d’explication
      • taille maximum d’un filon : par combien votre minerai va se générer au maximum.
      • id du bloc qui va être remplacé : sur quoi le bloc peu se générer. Par exemple Block.stone.blockID. Pour la génération dans le nether, il faut utiliser Block.netherrack.blockID ou Block.slowSand.blockID pour générer sur la soulsand. Pour l’end, Block.whiteStone.blockID pour l’end.
      • hauteur maximum : la hauteur maximum où votre minerai peu se générer (diamant = 16, or = 32, fer = 64, charbon, terre et gravier = 128

      Pour ceux qui se poseraient la question “Pourquoi rand.nextInt(16) et pas autres choses”
      -> Car un chuck contient 16x16 blocs, avec des valeurs plus petites les minerais ne pourraient que se générer sur une parti du chunk, et avec des valeurs plus grande, ils pourraient se générer sur les chunks qui sont à côté. C’est d’ailleurs pour ça que cette valeur peut aussi jouer sur la probabilité de la génération du minerai.
      Petit rappel, la fonction nextInt(int) dans Random donne au hasard un nombre entre 0 et la valeur donnée. Vous pouvez par exemple mettre “16 + rand.nextInt(16)” pour générer votre minerai entre le niveau 16 et 32.

      Vous pouvez également utiliser des conditions pour faire apparaitre vos minerais uniquement dans certains biomes.

      if(world.getBiomeGenForCoords(x, z).equals(BiomeGenBase.field_du_biome))
      {
          //Code de génération
      }
      

      La génération de votre minerai devrait fonctionner.

      Quelques exemples

      private void generateSurface(World world, int x, int z, Random rand)
      {
          for(int i = 0; i < 2; i++)
          {
              (new WorldGenMinable(ModTutoriel.TutorialMetadata.blockID, 0, 4, Block.stone.blockID)).generate(world, rand, x + rand.nextInt(16), rand.nextInt(32), z + rand.nextInt(16));
          }
      
          if(world.getBiomeGenForCoords(x, z).equals(BiomeGenBase.extremeHills))
          {
              for(int i = 0; i < 8; i++)
              {
                  (new WorldGenMinable(ModTutoriel.TutorialMetadata.blockID, 5, 12, Block.stone.blockID)).generate(world, rand, x + rand.nextInt(16), 16 + rand.nextInt(32), z + rand.nextInt(16));
              }
          }
      }
      

      Ici, mon bloc métadata tutoriel de metadata 0 se génère dans le monde normal, par filon de 4 au maximum sur la pierre entre le niveau (coordonnée y) 0 et 32 et se probabilité est aussi faible de l’or. Mon bloc métadata tutoriel de metadata 5 se génère dans le monde normal et uniquement dans les extreme hills (et pas dans les extreme hills edge, par filon de 12 au maximum sur la pierre entre le niveau (coordonnée y) 16 et 48 et il est aussi fréquent que la redstone.

      Voir sur github

      Questions / Réponses

      Q: Le tuto est pour la 1.6.2 ou la 1.6.4 ?
      R: Les deux, le changement dans la génération ne concerne que les StructureComponent, pas les WorldGenerator.

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

        Le tuto est pour la 1.6.2 ou la 1.6.4?

        Moddeur à la retraite et développeur de trucs en Java.

        J'aide les gens comme je peux, alors si mon message v…

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

          y a des changement que pour la génération de structure en 1.6.4, conclusion se tuto est compatible avec les deux version 😪

          PS: C’est écrit dans le gros carré jaune tout en haut de la page 😉

          Mes tutoriels:

          >! \[1.6.x\] - Le kit d'outils
          >! \[1.6.x\] - Les recettes du four

          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

            @‘utybo’:

            Le tuto est pour la 1.6.2 ou la 1.6.4?

            @‘0nit’:

            y a des changement que pour la génération de structure en 1.6.4, conclusion se tuto est compatible avec les deux version 😪

            PS: C’est écrit dans le gros carré jaune tout en haut de la page 😉

            En effet, 1.6.2 & 4.
            Le changement entre la 1.6.2 et la 1.6.4 concerne les StructureComponent, pas les WorldGenerator.

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

              Sympa la condition pour générer un minerai dans un biome donné ! Merci. 😉

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

                Impec ce tuto, je viens d’arriver, merci 🙂
                Par contre, il y aurais moyen de faire qu’une seule fonction generate() pour tout minerai en passant par des paramètres lors de la déclaration du bloc ?

                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, le WorldGenMinable ne permet pas de générer plusieurs minerai, il faudrait que tu créer ton propre WorldGenMianble.

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

                    @‘robin4002’:

                    Non, le WorldGenMinable ne permet pas de générer plusieurs minerai, il faudrait que tu créer ton propre WorldGenMianble.

                    Non, je parlais, dans le register du WorldGenerator dans la class du mod. Mais après, c’est que du plus, rien de vraiment nécéssaire.

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

                      Quand je lance le monde, sa me ferme minecraft et dans le crash-report sa me met:

                      –-- Minecraft Crash Report ----
                      // On the bright side, I bought you a teddy bear!

                      Time: 16.10.13 13:49
                      Description: Exception in server tick loop

                      java.lang.NullPointerException
                      at archerux.WorldGeneratorTutoriel.generateSurface(WorldGeneratorTutoriel.java:32)
                      at archerux.WorldGeneratorTutoriel.generate(WorldGeneratorTutoriel.java:22)
                      at cpw.mods.fml.common.registry.GameRegistry.generateWorld(GameRegistry.java:102)
                      at net.minecraft.world.gen.ChunkProviderServer.populate(ChunkProviderServer.java:259)
                      at net.minecraft.world.chunk.Chunk.populateChunk(Chunk.java:1253)
                      at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:153)
                      at net.minecraft.server.MinecraftServer.initialWorldChunkLoad(MinecraftServer.java:294)
                      at net.minecraft.server.integrated.IntegratedServer.loadAllWorlds(IntegratedServer.java:90)
                      at net.minecraft.server.integrated.IntegratedServer.startServer(IntegratedServer.java:107)
                      at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:445)
                      at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)

                      si quelqu’un peut trouver d’ou vient le problème se serait sympa.(je suis en 1.6.4)

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

                        Je pourrais vois ta classe “WorldGeneratorTutoriel.java”


                        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
                        • robin4002R Hors-ligne
                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                          dernière édition par

                          Ligne 34 de WorldGeneratorTutoriel.java, quelque chose est null, il me faut les codes de ta classe.

                          1 réponse Dernière réponse Répondre Citer 0
                          • jglrxavpokJ Hors-ligne
                            jglrxavpok Modérateurs
                            dernière édition par

                            D’après ce que je vois, je pense que c’est:

                            modarcherux.AdamantiteOre
                            

                            qui pose problème. Es-tu sûr que cette variable a une valeur à ce moment du jeu ?

                            Modérateur sur MFF. 
                            Mon Github: http://github.com/jglrxavpok
                            Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

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

                              @‘jglrxavpok’:

                              D’après ce que je vois, je pense que c’est:

                              modarcherux.AdamantiteOre
                              

                              qui pose problème. Es-tu sûr que cette variable a une valeur à ce moment du jeu ?

                              Comment sa une valeur?

                              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

                                Envoie-nous ta classe principale.

                                1 réponse Dernière réponse Répondre Citer 0
                                • jglrxavpokJ Hors-ligne
                                  jglrxavpok Modérateurs
                                  dernière édition par

                                  Je vois pourquoi x)

                                  A chaque fois, tu recrées une variable ‘interne’ dans ta méthode Init au lieu d’affecter une valeur aux variables ^^’

                                  Modérateur sur MFF. 
                                  Mon Github: http://github.com/jglrxavpok
                                  Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

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

                                    Autrement dit:

                                    Block AdamantiteOre
                                    

                                    devient

                                    AdamantiteOre
                                    

                                    Dans la méthode init(…)


                                    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
                                    • A Hors-ligne
                                      Archerux
                                      dernière édition par

                                      Merci beaucoup, cette fois-ci sa marche et sa m’a évité aussi un autre problème.

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

                                        Bonjour,
                                        J’aimerai savoir si il est possible de remplacer le WorldGenMinable par autre chose pour les Structures (Par exemple je crée une classe de donjon “NetherDragonDungeon” je pourrais remplacer WorldGenMinable par NetherDragonDungeon (bien sûr ce qu’il y a entre les parenthèses changera(désolé je ne me souvient plus du nom ><')) ?)

                                        Mes mods:

                                        • New Ores
                                        • More Dragons
                                        1 réponse Dernière réponse Répondre Citer 0
                                        • utyboU Hors-ligne
                                          utybo
                                          dernière édition par

                                          Il existe un générateur pour les structures, StructureComponent je crois

                                          Attention aux versions, les structures changent en 1.6.4

                                          Moddeur à la retraite et développeur de trucs en Java.

                                          J'aide les gens comme je peux, alors si mon message v…

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

                                            Ok, merci.

                                            Mes mods:

                                            • New Ores
                                            • More Dragons
                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 4 / 4
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB