MFF

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

    Structure ou arbre géant :)

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.7.10
    8 Messages 5 Publieurs 1.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.
    • S Hors-ligne
      sventus
      dernière édition par

      Bonjour, c’est à nouveau moi, vous savez, le ninja :D.

      Donc voila, suite à votre aide j’ai donc réussi à faire des spawn des arbres sur mon biome mais j’aimerias que ces arbres soient géants.

      Pour ce faire j’utilise cette fonction :

      public WorldGenerator getRandomWorldGenForTrees(Random par1Random)
         {
            return (WorldGenerator)(par1Random.nextInt(4) == 0 ? new WorldGenTrees(false, 25, 2, 2, false) : (par1Random.nextInt(3) == 0 ? this.worldGeneratorBigTree : new WorldGenTrees(false, 25, 0, 0, false)));
         }
      

      Mais en changeant la valeur “25”  les arbres ne sont quand même pas très grand, même si j’essaye de mettre 80 par exemple.

      donc je sais pas si c’est possible d’avoir de très grands arbres.

      J’ai donc également pensé à faire des structures d’artbres, mais ça serait un peu lourd donc j’ai essayé quand même de faire des tests comme ça :

      if ((world.isAirBlock(x, y + 1, z)))
      {
      
      world.setBlock(x , y, z, Blocks.log);
      world.setBlock(x+1 , y, z, Blocks.log);
      world.setBlock(x+2 , y, z, Blocks.log);
      
      world.setBlock(x , y, z + 1, Blocks.log);
      world.setBlock(x+1 , y, z +1, Blocks.log);
      world.setBlock(x+2 , y, z+1, Blocks.log);
      
      world.setBlock(x , y, z+2, Blocks.log);
      world.setBlock(x+1 , y, z+2, Blocks.log);
      world.setBlock(x+2 , y, z+2, Blocks.log);
      
      }
      
      

      Lors de mes tests, cela fonctionne,ça spawn partout (j’ajusterais les conditions)  mais j’aimerais savoir comment faire pour une boucle qui générerait les différents étages de l’arbre, car la ça ne fait qu’une couche et je me vois pas copier cela pour les 80 blocs de hauteurs ^^

      autre questions concernant la structure, comment en faire plusieurs et avoir un random entre les deux, par exemple faire deux arbres différents et que les deux puissent spawn.

      Voila, merci  je pense avoir été précis, si jamais je le suis pas assez, je vous laisse me poser vos questions 😄

      Et aussi, autre question, comment faire pour qu’une échelle soit posé directement sur un bloc lors de la génération de mon arbre. car pour le moment, elle essaye de se place a la place d’un bloc, donc elle est drop et non posé 😕

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

        Pour ta structure d’arbre géant, Minecraft ne doit pas s’occuper du cas où on change la hauteur de l’arbre géant du coup il faut créer la structure soit-même. Du coup je te conseillerai de te créer une API (que je peux te créer si tu veux ça m’éclatera :P, mais je pense que ça peut être interéssant pour toi de la créer), qui aurait une fonction qui prend en compte world, x, y, z, height (hauteur) et tu fais un algorithme qui génère l’arbre,

        Idée:

        (Mon code doit donner un rendu correct si l’hauteur fournie est supérieur à 10 (sinon il n’y avait qu’à générer un bigTree de base de Minecraft ^^ !))

        public static void createBigTree(World world, int x, int y, int z, short height)
        {
        // Besoin de la Classe Random (aléatoire) pour que l'arbre ne soit pas similaire ;)
        Random random = new Random();
        int rand = 0;
        
        // Boucle qui va créer l'arbre couche horizontal par couche horizontal, je m'inspire de la structure Minecraft pour la "forme" de l'arbre (tronc puis gros feuillage avec bois)
        for(int couche = 0; couche < height; couche++)
        {
        // Si c'est les premiers blocs on ne fait que générer un tronc droit (forme de base de Minecraft)
        if(couche < 5)
        world.setBlock(x, y + couche, z, Blocks.log);
        // Travail et condition exceptionnel pour formé la base de l'énorme feuillage
        else if(couche == 5)
        {
        // On génère une couche 5 qui a environ 7 blocs de large (comme base de l'arbre)
        for(int cX = x - 4; cX < 8; cX++)
        for(int cZ = z - 4; cZ < 8; cZ++)
        {
        rand = random.nextInt(2);
        if(rand == 0)
        world.setBlock(cX, y + couche, cZ, Blocks.log); // Tu peux aussi rajouter une fonction setLog qui pose une bûche dans un sens aléatoire je ne sais plus comment on fait des metadatas déjà :P
        else if(rand == 1)
        world.setBlock(cX, y + couche, cZ, Blocks.leaves);
        // Sinon vide (rand == 2)
        }
        }
        // On se base sur les couches précédentes qui vont donc permettre de former les couches supérieurs et qu'il y est donc une certaine cohérence entre les couches (qu'un tronc ne se coupe pas soudainement…)
        else
        {
        // TODO: J'ai un peu la flemme après avoir pondu tout ça de t'expliquer mais tu check si bûche dans rayon de 2 et alors tu poses avec un random de 3 (donc pas de pose obligatoire, 0 == Bûche, 1 == feuillage, 2 == néant)
        }
        }
        }
        

        La génération pouvant mettre des blocs qui ne vont pas rester (feuillage à plus de deux cubes d’une bûche), je te conseille si tu prends ma technique de faire une fonction vérification ou d’améliorer ma condition else if(couche == 5) comme le else 😉

        • Mon code fonctionne avec l’indentation fait bien attention sinon rajoute les { }

        En espérant ne pas trop t’avoir macher le travail 😛 Ca m’a fait plaisir 🙂

        @‘sventus’:

        autre questions concernant la structure, comment en faire plusieurs et avoir un random entre les deux, par exemple faire deux arbres différents et que les deux puissent spawn.

        Et aussi, autre question, comment faire pour qu’une échelle soit posé directement sur un bloc lors de la génération de mon arbre. car pour le moment, elle essaye de se place a la place d’un bloc, donc elle est drop et non posé 😕

        Précises un peu mieux les deux autres questions et sinon je crois que poser des échelles sur feuillage = impossible donc ne try hard pas x)

        >! Développeur de Altis-Life (Arma III) sur Minecraft !
        >! Site web     : https://lemnoslife.com

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

          Je voulais mettre les échelles sur le tronc car c’est un tronc en cercle (jai fait les setblock).   Et je voulais faire plusieurs structure A et B. Puis que dans le biome ça soit le À et le B qui spawn

          Merci beaucoup en tout cas, je regarde tout ça ce soir

          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

            Si tu places l’échelles après avoir placé le bloc sur laquelle elle repose elle devrait tenir.
            Attention à bien mettre le bon metadata pour qu’elle soit dans la bonne direction.

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

              Je pense que cela devrait t’aider pour trouver les bon metadata ^^

              public int onBlockPlaced(World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata)
              {
              int j1 = metadata;
              
              if((j1 == 0 || side == 2) && world.isSideSolid(x, y, z + 1, ForgeDirection.NORTH))
              {
              j1 = 2;
              }
              
              if((j1 == 0 || side == 3) && world.isSideSolid(x, y, z - 1, ForgeDirection.SOUTH))
              {
              j1 = 3;
              }
              
              if((j1 == 0 || side == 4) && world.isSideSolid(x + 1, y, z, ForgeDirection.WEST))
              {
              j1 = 4;
              }
              
              if((j1 == 0 || side == 5) && world.isSideSolid(x - 1, y, z, ForgeDirection.EAST))
              {
              j1 = 5;
              }
              
              return j1;
              }
              
              1 réponse Dernière réponse Répondre Citer 0
              • S Hors-ligne
                sventus
                dernière édition par

                Bonjour, désolé j’ai été indisponible un petit moment, donc voila, j’ai essayé ta méthode Benjamin Loison mais la variable i, je l’initialise à 0 ? et le random.randInt(2) n’est pas reconnu 😕

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

                  Alors je crois que Benjamin s’est un tout petit peu trompé, remplace i par couche, et c’est random.nextInt(2);

                  Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk

                  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
                  • Benjamin LoisonB Hors-ligne
                    Benjamin Loison
                    dernière édition par

                    Oui, excusez-moi quand j’écris un code comme ça, je ne vérifie pas les fonctions, mais il n’y a qu’à mettre le . et sur Eclipse vous cherchez une fonction assez équivalente 😉

                    EDIT: J’ai edit mon algorithme 😉

                    >! Développeur de Altis-Life (Arma III) sur Minecraft !
                    >! Site web     : https://lemnoslife.com

                    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