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

Générations de minerais

La génération & les dimensions
1.6.x
17
69
26.1k
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.
  • robin4002
    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par robin4002 23 juin 2018, 12:52 6 oct. 2013, 12:37

    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
    • utybo
      utybo dernière édition par 6 oct. 2013, 12:44

      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
      • 0nit
        0nit dernière édition par 6 oct. 2013, 13:03

        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
        • robin4002
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 6 oct. 2013, 13:41

          @‘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
          • Kanar
            Kanar dernière édition par 6 oct. 2013, 20:10

            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
              Skyzio dernière édition par 9 oct. 2013, 20:59

              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
              • robin4002
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 10 oct. 2013, 10:17

                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
                  Skyzio dernière édition par 10 oct. 2013, 17:11

                  @‘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
                    Archerux dernière édition par 16 oct. 2013, 11:59

                    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_68
                      kevin_68 Moddeurs confirmés dernière édition par 16 oct. 2013, 12:25

                      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
                      • robin4002
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 16 oct. 2013, 13:06

                        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
                        • jglrxavpok
                          jglrxavpok Modérateurs dernière édition par 18 oct. 2013, 10:07

                          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
                            Archerux dernière édition par 18 oct. 2013, 10:18

                            @‘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
                            • robin4002
                              robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 18 oct. 2013, 10:31

                              Envoie-nous ta classe principale.

                              1 réponse Dernière réponse Répondre Citer 0
                              • jglrxavpok
                                jglrxavpok Modérateurs dernière édition par 18 oct. 2013, 16:04

                                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_68
                                  kevin_68 Moddeurs confirmés dernière édition par 18 oct. 2013, 16:44

                                  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
                                    Archerux dernière édition par 29 oct. 2013, 12:26

                                    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
                                    • bin4r1s
                                      bin4r1s dernière édition par 1 déc. 2013, 10:07

                                      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
                                      • utybo
                                        utybo dernière édition par 1 déc. 2013, 11:36

                                        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
                                        • bin4r1s
                                          bin4r1s dernière édition par 1 déc. 2013, 16:13

                                          Ok, merci.

                                          Mes mods:

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

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB