• 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érer une structure

La génération & les dimensions
1.7.x
21
67
29.3k
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.
  • Überfap
    Überfap dernière édition par robin4002 29 nov. 2021, 00:39 10 juil. 2014, 11:51

    Sommaire

    • Introduction
    • Pré-requis
    • Code
      • La classe principale
      • La classe de génération
      • La classe de la structure
    • Bonus
    • Résultat
    • En vidéo
    • Crédits

    Introduction

    Dans ce tutoriel, nous allons apprendre comment générer une structure. Une structure est un ensemble de blocs générés automatiquement dans le monde qui peuvent avoir plusieurs utilités (Décoration, coffre, etc…). On peut par exemple prendre l’exemple du village PNJ ou encore des mineshafts, donjons, etc…

    Pré-requis

    • Créer la base de votre mod.
    • Savoir générer des minerais (car nous partirons sur les mêmes principes).

    Code

    La classe principale :

    Tout d’abord, rendez-vous dans votre classe principale.
    à la suite de vos variables de blocs, d’items, etc… ajoutez ceci :

    StructureGenerator structureGenerator = new StructureGenerator();
    

    Vous aurez une erreur sur la déclaration, c’est normal, vous n’avez pas encore créé cette classe !
    Puis, dans la méthode preInit(), ajoutez ceci :

    GameRegistry.registerWorldGenerator(structureGenerator, 0);
    

    Vous aurez encore une erreur sur registerWorldGenerator(), ne vous en faites pas nous allons régler ça !

    Ce sera tout pour la classe principale !

    La classe de génération :

    Créez tout d’abord la classe StructureGenerator dans un nouveau package que j’appellerais gen pour génération.
    Vous devriez avoir ceci :

    public class StructureGenerator
    {
    }

    Pour pouvoir générer des choses dans notre monde (et plus précisément des structures), il suffit d’ajouter une interface à cette classe : l’interface IWorldGenerator !
    Faites le donc, vous devriez obtenir ceci:

    import cpw.mods.fml.common.IWorldGenerator;
    public class StructureGenerator implements IWorldGenerator
    {
    }

    Vous aurez une erreur sur le nom de la classe, c’est tout à fait normal, passez le curseur dessus et cliquez sur “Add Unimplemented Methods”.
    Vous aurez une nouvelle méthode nommée generate() qui va nous permettre de… générer 😛

    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
    {
    }

    Explication des paramètres:

    • Random: pour trouver une valeur de génération au hasard.
    • chunkX, chunkY, chunkZ: les coordonnées du chunk.
    • chunkGenerator, chunkProvider: des classes liées aux chunks que nous n’allons pas utiliser dans ce tutoriel.
      Comme nous voulons que notre classe soit polyvalente et puisse générer des structures dans n’importe quelle dimension, nous allons faire un petit switch sur l’id de la dimension en question:
    switch (world.provider.dimensionId)
    {
    case -1:
    generateNether(world, random, chunkX * 16, chunkZ * 16);
    break;
    case 0:
    generateSurface(world, random, chunkX * 16, chunkZ * 16);
    break;
    case 1:
    generateEnd(world, random, chunkX * 16, chunkZ * 16);
    break;
    }

    Votre classe finale devrait ressembler à ceci:

    import java.util.Random;
    import net.minecraft.world.World;
    import net.minecraft.world.chunk.IChunkProvider;
    import cpw.mods.fml.common.IWorldGenerator;
    public class StructureGenerator implements IWorldGenerator
    {
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
    {
    switch (world.provider.dimensionId)
    {
    case -1:
    generateNether(world, random, chunkX * 16, chunkZ * 16);
    break;
    case 0:
    generateSurface(world, random, chunkX * 16, chunkZ * 16);
    break;
    case 1:
    generateEnd(world, random, chunkX * 16, chunkZ * 16);
    break;
    }
    }
    private void generateSurface(World world, Random random, int i, int j)
    {
    }
    private void generateNether(World world, Random random, int i, int j)
    {
    }
    private void generateEnd(World world, Random random, int i, int j)
    {
    }
    }

    (Merci à agabou pour la structure du switch et les méthodes de générations).

    Ce sera tout pour l’instant, maintenant vous pouvez quitter cette classe.

    La classe de la structure :

    Pour créer notre structure, nous allons créer une nouvelle classe et nous allons faire hériter cette même classe de la classe WorldGenerator, comme ceci :

    import java.util.Random;
    import net.minecraft.world.World;
    import net.minecraft.world.chunk.IChunkProvider;
    import net.minecraft.world.gen.feature.WorldGenerator;
    import cpw.mods.fml.common.IWorldGenerator;
    public class WorldGenTotem extends WorldGenerator
    {
    public boolean generate(World world, Random rand, int x, int y, int z)
    {
    return false;
    }
    }

    Maintenant, tâchons de créer notre première structure ! Elle devrait ressembler à ça :

    0_1529759620143_1404996275-2014-07-10-14-42-21.png

    (Comme vous les voyez, c’est assez inratable).

    Maintenant, pour générer ça, rien de plus simple, ajoutez simplement ceci:

    world.setBlock(x, y, z, Blocks.cobblestone);
    world.setBlock(x, y + 1, z, Blocks.cobblestone);
    world.setBlock(x, y + 2, z, Blocks.sponge);

    (N’oubliez pas de changer le return false en return true, sinon votre génération ne marchera pas).

    Et c’est tout pour cette classe ! Pour finaliser le tout, rendez vous dans la classe StructureGeneration précédemment créée, et ajoutez dans la méthode generateSurface():

    int x1 = x + random.nextInt(16);
    int y1 = random.nextInt(128);
    int z1 = z + random.nextInt(16);
    (new WorldGenTotem()).generate(world, random, x1, y1, z1);

    Et voila !

    Bonus

    Générer au dessus d’un bloc défini :

    Imaginons que vous vouliez que votre structure se génère uniquement au dessus d’un bloc de sable, comment faire ?
    Eh bien c’est assez simple, il suffit de vérifier le bloc en dessous avant de générer !

    public boolean generate(World world, Random rand, int x, int y, int z)
    {
    if (world.getBlock(x, y - 1, z) == Blocks.sand)
    {
    world.setBlock(x, y, z, Blocks.cobblestone);
    world.setBlock(x, y + 1, z, Blocks.cobblestone);
    world.setBlock(x, y + 2, z, Blocks.sponge);
    return true;
    }
    return false;
    }

    Simple, mais pas tellement…
    En effet, ce code est fonctionnel, mais il ne convient pas du tout à notre objectif, qui est de générer une structure en surface, puisque les structures peuvent aussi générer sous terre! De plus, si on laissait ce bout de code tel qu’il est, le taux de génération baissera énormément !

    Nous allons donc pallier à ces deux problèmes!

    Pour faire en sorte que les structures génèrent uniquement à l’air libre, il suffit de vérifier que le bloc au dessus est de l’air, et ainsi de suite!

    public boolean generate(World world, Random rand, int x, int y, int z)
    {
    if (world.getBlock(x, y - 1, z) == Blocks.sand && world.isAirBlock(x, y + 1, z)
    {
    world.setBlock(x, y, z, Blocks.cobblestone);
    world.setBlock(x, y + 1, z, Blocks.cobblestone);
    world.setBlock(x, y + 2, z, Blocks.sponge);
    return true;
    }
    return false;
    }

    Ceci règle notre premier problème, quand au deuxième, il suffit d’ajouter un boucle for avant de générer la structure dans le StructureGenerator 😉

    private void generateSurface(World world, Random random, int x, int z)
    {
    int x1 = x + random.nextInt(16);
    int y1 = random.nextInt(128);
    int z1 = z + random.nextInt(16);
    for (int i = 0; i < 500; i++) // Il vaut mieux mettre une valeur élevée
    {
    (new WorldGenTotem()).generate(world, random, x1, y1, z1);
    }
    }

    Et voilà ! Vous savez maintenant comment générer une structure au dessus d’un bloc défini!

    Générer dans un biome défini :

    Nous allons apprendre dans cette partie comment générer la structure dans un biome en particulier !

    Il suffit de vérifier le biome et de mettre la boucle for!

    private void generateSurface(World world, Random random, int x, int z)
    {
    int x1 = x + random.nextInt(16);
    int y1 = random.nextInt(128);
    int z1 = z + random.nextInt(16);
    for (int i = 0; i < 500; i++)
    {
    if (world.getBiomeGenForCoords(x1, z1) == BiomeGenBase.desert)
    {
    (new WorldGenTotem()).generate(world, random, x1, y1, z1);
    }
    }
    }

    Tadam ! Vous pouvez maintenant générer votre structure dans le biome de votre choix !

    Faire spawner un monstre dans votre structure :

    Pour cet exemple je vais spawner un creeper au dessus du bloc d’éponge.

    Dans la classe WorldGenTotem:

    @Override
    public boolean generate(World world, Random random, int x, int y, int z)
    {
    if (!world.isRemote)
    {
    world.setBlock(x, y, z, Blocks.cobblestone);
    world.setBlock(x, y + 1, z, Blocks.cobblestone);
    world.setBlock(x, y + 2, z, Blocks.sponge);
    EntityCreeper creeper = new EntityCreeper(world);
    creeper.setPosition(x, y + 3, z);
    world.spawnEntityInWorld(creeper);
    return true;
    }
    return false;
    }

    Et voila 🙂

    Résultat

    0_1529759545767_1407533222-2014-08-08-23-21-13.png

    Crédits

    Rédaction :

    • AlphaSwittleTeam

    Correction :

    • Fine33

    Creative Commons
    Ce tutoriel de Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

    retourRetour vers le sommaire des tutoriels

    Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
    Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

    1 réponse Dernière réponse Répondre Citer 0
    • Fine33
      Fine33 dernière édition par 8 août 2014, 09:17

      Excellent tuto ! Mais est-il possible de faire en sorte qu’un certain mob spawn dans la structure ?

      Mes mods :

      Agriculcraft

      #L'âge ne fait pas le mod.(L'âge ne fait pas le mod.)

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 8 août 2014, 09:43

        Par contre, si il n’y a pas de vidéo, il faudrait retiré la partie vidéo.

        1 réponse Dernière réponse Répondre Citer 0
        • Überfap
          Überfap dernière édition par 8 août 2014, 11:24

          @Fine: Je pense que c’est possible, je vais essayer 😉
          @Robin: Je vais filmer la vidéo bientôt 🙂

          Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
          Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

          1 réponse Dernière réponse Répondre Citer 0
          • robin4002
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 8 août 2014, 14:58

            D’accord, tu veux les accès à la chaine youtube ? Si oui, il me faudrait ton email.

            1 réponse Dernière réponse Répondre Citer 0
            • Überfap
              Überfap dernière édition par 8 août 2014, 15:22

              MP 🙂

              Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
              Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

              1 réponse Dernière réponse Répondre Citer 0
              • Fine33
                Fine33 dernière édition par 9 août 2014, 10:54

                Ah, un dernier truc ^^ Comment faire spawner un coffre avec certains items en randomisation dedans ?

                Mes mods :

                Agriculcraft

                #L'âge ne fait pas le mod.(L'âge ne fait pas le mod.)

                1 réponse Dernière réponse Répondre Citer 0
                • isador
                  isador Moddeurs confirmés Modérateurs dernière édition par 9 août 2014, 11:24

                  regarde le code de génération des coffre dans les mineshaft

                  1 réponse Dernière réponse Répondre Citer 0
                  • Diangle
                    Diangle dernière édition par 9 août 2014, 11:43

                    @‘isador34’:

                    regarde le code de génération des coffre dans les mineshaft

                    Il passe par une classe annexe, il te faut créer une classe hériter de ChestGenHooks et de recréer se qui faut après regarde dans le donjons (moins complexe que le mineshaft).

                    1 réponse Dernière réponse Répondre Citer 0
                    • robin4002
                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 11 août 2014, 17:32

                      world.isAirBlock(x, y, z) n’est pas la pour rien. (tutoriel modifié).

                      1 réponse Dernière réponse Répondre Citer 0
                      • M
                        MrAzErTy31 dernière édition par 13 août 2014, 15:35

                        Excellent tutoriel :D, donc si je comprends bien, on peu générer par exemple des plantes sur la grass ? (Ce n’est pas que pour les grosses structures)

                        Mes mods :

                        >! GGButtonMod : http://minecraftforgefrance.fr/showthread.php?tid=1280
                        CraftYourMenu : http://minecraftforgefrance.fr/showth…

                        1 réponse Dernière réponse Répondre Citer 0
                        • Überfap
                          Überfap dernière édition par 13 août 2014, 16:05

                          Merci 😄 Oui en effet, on peux générer de l’herbe avec ça 😉

                          Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
                          Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

                          1 réponse Dernière réponse Répondre Citer 0
                          • M
                            MrAzErTy31 dernière édition par 14 août 2014, 19:37

                            Ah vraiment bien 😄

                            Mes mods :

                            >! GGButtonMod : http://minecraftforgefrance.fr/showthread.php?tid=1280
                            CraftYourMenu : http://minecraftforgefrance.fr/showth…

                            1 réponse Dernière réponse Répondre Citer 0
                            • Flow
                              Flow dernière édition par 15 août 2014, 19:45

                              Super tuto et très utile ! Maintenant pour ce qui est de très grande structure existe t-il des logiciels permettant de créer son “donjon” et ensuite de l’exporter en JAVA ?

                              Oui ce gif est drôle.

                              1 réponse Dernière réponse Répondre Citer 0
                              • M
                                MrAzErTy31 dernière édition par 15 août 2014, 20:18

                                Il me semble avoir vu un logiciel pour convertir ses .schematic en Java, je crois que c’était sur les Minecraft Forums.

                                Mes mods :

                                >! GGButtonMod : http://minecraftforgefrance.fr/showthread.php?tid=1280
                                CraftYourMenu : http://minecraftforgefrance.fr/showth…

                                1 réponse Dernière réponse Répondre Citer 0
                                • Flow
                                  Flow dernière édition par 15 août 2014, 20:31

                                  Merci j’ai trouver je pense voici pour ceux que cela intéresse 😄

                                  http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-tools/1263960-1-3-2-updated-metadata-support-simple-schematic

                                  Oui ce gif est drôle.

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • Überfap
                                    Überfap dernière édition par 16 août 2014, 11:01

                                    ça ne marcheras pas, ce logiciel était prévu dans la partie bonus avant de me rendre compte qu’il ne marche pas en 1.7 😞

                                    Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
                                    Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • Superloup10
                                      Superloup10 Modérateurs dernière édition par 16 août 2014, 11:40

                                      Le logiciel fonctionne, il donne juste du code erroné car il n’a pas été mis à jour depuis longtemps.

                                      Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

                                      Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • M
                                        MrAzErTy31 dernière édition par 16 août 2014, 12:56

                                        Le code est vraiment érroné où il suffit juste de changer la fonction (les coordonnées et les blocs y sont) ?

                                        Mes mods :

                                        >! GGButtonMod : http://minecraftforgefrance.fr/showthread.php?tid=1280
                                        CraftYourMenu : http://minecraftforgefrance.fr/showth…

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • robin4002
                                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 16 août 2014, 12:58

                                          Changer la fonction + ajouter ,3

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

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB