MFF

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

    Crée une structure massif

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.7.10
    23 Messages 5 Publieurs 4.3k 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.
    • AymericRedA Hors-ligne
      AymericRed
      dernière édition par

      “Si je fait un appel trop élevez de la fonction de génération ce la ne peut t’il pas surchargez le programme de génération des chunk de minecrafte.
      Dans ce cas je voudrais savoir comment pour séparée efficacement mes différent génération et en produire qu’une par chunk sa alléger énormément le programme.”
      (la citation charge à l’infini donc ait pas pu l’utiliser)

      J’ai pas trop compris, mais ce que je vois, c’est que ta structure va être générée un trèèèèsssss grand nombre de fois à la suite, vu que tu n’as mis aucun if(random.nextInt(chance de génération)).

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

        Bonsoir 
        (R.I.P la langue Français)  :s

        J’ai fait quel que test utiliser les fonction de génération comme je le fais est comme d’écrit dans les tutoriel de minecraftforgefrance pour des structure massif et une grave erreur!

        J’ai compris les bug que mon programme provoque et ce n’est pas très simple .
        Dans la première Class “MainWorldGenerator” implémenter de la Class  IWorldGenerator
        Voici la méthode qui permet la génération de mas structure

        @Override
        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;
        }
        }
        

        Ce qui est le code exacte du tutoriel ils faut bien observez les variables suivante :
         chunkX ,chunkZ ,chunkProvider ,chunkGenerator
        Se sont toute des valeur qui nous indique que notre génération vas se faire par chunk
        Or les structure que je tente de générée sont de taille 5050 et un chunk 1616

        En chargent mas structure je force minecraft a chargez plusieurs chunck en même temps 
        Avec le code génération que j’utilisais sa forçais minecraft a chargez d’autre chunck qui cherchais à générée la structure !

        La conséquence c’est que minecraft cherche à générée tous les zone du jeux ce qui est impossible !
        D’Où la nécessiter des chunk.

        J’ai imposer une condition spéciale pour la génération de ma structure pour évitez le chargement infinie des chunck .
        Mais si on prend en compte que la simple génération de mas structure fais charger 4164 chunck ,
        est que mon PC peine a le faire cette solution ne me parais pas viable.

        J’ai besoin d’une meilleur option de génération car ce n’est sans doute pas comme ça que minecraft procédé !

        Ouille quelle post ! 😢

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

          Ce la fait plusieurs semaine que j’ai posez sur ce forum mon problème de génération de structure.

          J’ai attendue que des réponse pertinente survienne pris le temps de réévaluée mon problème et je me suis rendus compte après avoir fouillez le code qu’il existais des fonction don je ne comprenais pas l’utilité. 
          Minecraft utilise ces fonction pour des génération de structure comme les forteresses du Nether ou encore les mines abandonnée qui pour moi son des structures massif !

          Voici la méthode au quelle je fait référence :

          package net.minecraft.world.gen;
          public class ChunkProviderGenerate implements IChunkProvider
          
          // Traduction de la Java doc :
          // Remplit le chunk avec des minerais etc etc
          public void populate(IChunkProvider p_73153_1_, int p_73153_2_, int p_73153_3_)
          
          

          Puis qu’il s’agit de fonction fessant partie du code fournie par Forge ,je me contente de d’indiquez le package la class et la fonction avec une traduction
          tezzfze 
          Je souhaite m’intéressée à l’objet retournez sous l’ interface IChunkProvider.

          Que l’on retrouve dans ma class MainWorldGenerator.
          Qui et aux centre de mon programme de génération !

          Durand le tutoriel l’or de la séparation de génération les objet de cette interface sont ignorée par le tutoriel et ne sont pas reconduit par les nouvelle méthode de génération !

             @Override
             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;
                 }
             }
          

          Il y a deux objet je souhaite les comprendre et voir si il y a une solution !

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

            Pour ceux qui souhaite voir la méthode aux quelle je fait référence sur le site la voici mais elle fais une centaine de ligne !

            /**
                * Populates chunk with ores etc etc
                */
               public void populate(IChunkProvider p_73153_1_, int p_73153_2_, int p_73153_3_)
               {
                   BlockFalling.fallInstantly = true;
                   int k = p_73153_2_ * 16;
                   int l = p_73153_3_ * 16;
                   BiomeGenBase biomegenbase = this.worldObj.getBiomeGenForCoords(k + 16, l + 16);
                   this.rand.setSeed(this.worldObj.getSeed());
                   long i1 = this.rand.nextLong() / 2L * 2L + 1L;
                   long j1 = this.rand.nextLong() / 2L * 2L + 1L;
                   this.rand.setSeed((long)p_73153_2_ * i1 + (long)p_73153_3_ * j1 ^ this.worldObj.getSeed());
                   boolean flag = false;
            
                   MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag));
            
                   if (this.mapFeaturesEnabled)
                   {
                       this.mineshaftGenerator.generateStructuresInChunk(this.worldObj, this.rand, p_73153_2_, p_73153_3_);
                       flag = this.villageGenerator.generateStructuresInChunk(this.worldObj, this.rand, p_73153_2_, p_73153_3_);
                       this.strongholdGenerator.generateStructuresInChunk(this.worldObj, this.rand, p_73153_2_, p_73153_3_);
                       this.scatteredFeatureGenerator.generateStructuresInChunk(this.worldObj, this.rand, p_73153_2_, p_73153_3_);
                   }
            
                   int k1;
                   int l1;
                   int i2;
            
                   if (biomegenbase != BiomeGenBase.desert && biomegenbase != BiomeGenBase.desertHills && !flag && this.rand.nextInt(4) == 0
                       && TerrainGen.populate(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag, LAKE))
                   {
                       k1 = k + this.rand.nextInt(16) + 8;
                       l1 = this.rand.nextInt(256);
                       i2 = l + this.rand.nextInt(16) + 8;
                       (new WorldGenLakes(Blocks.water)).generate(this.worldObj, this.rand, k1, l1, i2);
                   }
            
                   if (TerrainGen.populate(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag, LAVA) && !flag && this.rand.nextInt(8) == 0)
                   {
                       k1 = k + this.rand.nextInt(16) + 8;
                       l1 = this.rand.nextInt(this.rand.nextInt(248) + 8);
                       i2 = l + this.rand.nextInt(16) + 8;
            
                       if (l1 < 63 || this.rand.nextInt(10) == 0)
                       {
                           (new WorldGenLakes(Blocks.lava)).generate(this.worldObj, this.rand, k1, l1, i2);
                       }
                   }
            
                   boolean doGen = TerrainGen.populate(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag, DUNGEON);
                   for (k1 = 0; doGen && k1 < 8; ++k1)
                   {
                       l1 = k + this.rand.nextInt(16) + 8;
                       i2 = this.rand.nextInt(256);
                       int j2 = l + this.rand.nextInt(16) + 8;
                       (new WorldGenDungeons()).generate(this.worldObj, this.rand, l1, i2, j2);
                   }
            
                   biomegenbase.decorate(this.worldObj, this.rand, k, l);
                   if (TerrainGen.populate(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag, ANIMALS))
                   {
                   SpawnerAnimals.performWorldGenSpawning(this.worldObj, biomegenbase, k + 8, l + 8, 16, 16, this.rand);
                   }
                   k += 8;
                   l += 8;
            
                   doGen = TerrainGen.populate(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag, ICE);
                   for (k1 = 0; doGen && k1 < 16; ++k1)
                   {
                       for (l1 = 0; l1 < 16; ++l1)
                       {
                           i2 = this.worldObj.getPrecipitationHeight(k + k1, l + l1);
            
                           if (this.worldObj.isBlockFreezable(k1 + k, i2 - 1, l1 + l))
                           {
                               this.worldObj.setBlock(k1 + k, i2 - 1, l1 + l, Blocks.ice, 0, 2);
                           }
            
                           if (this.worldObj.func_147478_e(k1 + k, i2, l1 + l, true))
                           {
                               this.worldObj.setBlock(k1 + k, i2, l1 + l, Blocks.snow_layer, 0, 2);
                           }
                       }
                   }
            
                   MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Post(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag));
            
                   BlockFalling.fallInstantly = false;
               }
            
            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

              Logiquement avec l’event PopulateChunkEvent.Pre ou PopulateChunkEvent.Post tu devrais pouvoir faire la même chose que les générateurs pour les villages, les mines, etc …

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

                Oui mais si j’utilise un simple copiez coller des algorithme en plus de faire n’importe-quoi !
                En plus je ne comprendrais pas la Logic du code !

                Surtout qui en plus par rapport à la méthode vanille il y a 1 objet IChunkProvider en plus.
                Donc la même logic ne peut donc pas forcément fonctionner puisque l’implémentation de mas génération n’est pas du même type que celle de la vanille

                P.S Des fois je voudrais postez une image mais il faux l’importez d’un autre site.
                Vous avez des référence à me conseiller .

                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

                  imgur, sinon tu as les pièces jointes du forum.

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

                    perso j’ai testé ta class structurgenerator et ça marche chez moi (enfin ça se met sur plusieurs chunck)

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

                      @‘sventus’:

                      perso j’ai testé ta class structurgenerator et ça marche chez moi  (enfin ça se met sur plusieurs chunck)

                      Bon Comme je l’ai déjà expliquez le code fonction mais difficilement.
                      Chez moi on se retrouve à attendre à la bordure des chunck que minecraft génère les chunck!
                      Lors de la génération il y a des bug de MAJ de lumière sur les block! On peut voir que ces bugs sont en rapport avec le chargement des chunck!

                      Je fournie les image en pièce jointe!  WizardIceTeaMcFCSM.zip

                      WizardIceTeaMcFCSM01

                      Vous y voyez le dessous de mas structure!

                      WizardIceTeaMcFCSM02

                      L’ombre de ma structure!

                      WizardIceTeaMcFCSM03

                      La on vois ma structure de cotée Je rappel se sont que des test pour le moment génération!
                      Pour rappelle il y a des bug d’éclairage ou on vois carrément que c’est le jour et la nuit c’est bug ci se règle avec une MAJ des block .
                      Je ne parle jamais de ces bug ci mais des lumières qui rance perce ma structure et déforme sont ombre

                      WizardIceTeaMcFCSM04

                      Sur l’image citez ci dessus et dessous je mesure l’écart entre certaine anomalie et on vois qu’il font bien la taille des chunck

                      WizardIceTeaMcFCSM05

                      L’explication et simple les zone éclairez on été générée avent ma structure quand ma structure c’est générée par dessus il n’a MAJ la luminosité que dans les chunck ou sa génération à étée lancée et ceux qui ce sont générée en même temps.

                      Voilà ce que je voulais dire par fonctionne MAL . :@

                      Je ne veut plus m’expliquez encore sur les que je rencontre !Surtout que ce n’est n’y intéressent n’y constructif de le répétez !!

                      Alors pitez plus de "ça marche chez moi "

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

                        et tu penses pas que ça peut venir tout simplement d’éclipse qui à trop de mal à générer la structure et du génère les bugs, sur un serveur, il n’y aura pas forcément ces bugs

                        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

                          Eclipse ne fait rien tourner du tout …
                          C’est ton processeur qui fait tourner minecraft. Donc si sur un serveur ça fonctionne mieux, c’est parce que le cpu du serveur est plus performant.

                          Et corriger un problème d’optimisation en utilisant une machine plus perf, ce n’est pas un vrai correctif.

                          Ce qu’il faudrait faire c’est diviser la structure en plusieurs morceaux de 16x16 et générer morceau par morceau sur chaque chunk.

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

                            Tu as aussi moyen de demander manuellement une update de la luminosité dans chaque chunk (voire plus d’une si il le faut) après avoir généré toute la structure via la fonction de la classe World (je sais plus son nom par contre).

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

                              Diviser la structure en plusieurs morceaux de 16x16 et générer morceau par morceau sur chaque chunk.

                              Est la chose la plus sensé à faire mais je n’ai pas trouvez comment.

                              Ils fraudais crée une zone mémoire qui contiendrais le plans de ma structure, mais je ne vois pas comment créée cette zone car il faudrait la sauvegardez dans un fichez 
                              Problème je ne sait pas si minecraft peut proposer de fonction de sauvegarde de donner supplémentaire.

                              A défaut de trouvez des formas de donnée propre à minecraft. Je devrais donc constituez les miens !
                              Si quel qu’un peut m’indiquez la zone de minecraft ou les fonction de sauvegarde ? Que je puise reprendre la même logic .

                              Si vous trouvez une autre solution que de crée une zone tampon avent génération cela m’intéresse !

                              Pour finir je pence qu’après ce serra la fin de ce sujet .
                              Car basiquement sur ce point c’est de la programmation classic.
                              Je serais plongez dans mon livre de code pour trouvez comment sauvegardez des donnez .
                              Et je serais sur openclassroom pour trouvez des solution de bibliothèque java.

                              D’avance je remercie tous ceux qui mon aidez sur ce projet qui et plus dure que je ne le pensais !
                                                   Mais je n’abondons rien ! Je verrais si je peut vous tenir de l’agencement de mon projet .

                              Une MAJ de la lumière sa parais difficile puisque c’est la lumière du jour qui passa aux travers de mes bock !

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

                                C’est AnvilSaveHandler qui gère la sauvegarde je crois.
                                Mais après si tu force Minecraft à recalculer toute la lumière (blocks+ciel), ça devrait être bon.

                                Ou alors j’avais déjà fait un système de sauvegarde de structure dans des fichiers (parce que le la flemme des world.setBlock/des boucles par dizaines ^^), donc sinon on peut voir en mp.

                                PS: je précise que tout est généré d’un coup sans découpage ^^ mais après j’ai jamais fait de structure aussi grosse avec mon système.

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

                                  @‘AymericRed’:

                                  C’est AnvilSaveHandler qui gère la sauvegarde je crois.
                                  Mais après si tu force Minecraft à recalculer toute la lumière (blocks+ciel), ça devrait être bon.

                                  Ou alors j’avais déjà fait un système de sauvegarde de structure dans des fichiers (parce que le la flemme des world.setBlock/des boucles par dizaines ^^), donc sinon on peut voir en mp.

                                  PS: je précise que tout est généré d’un coup sans découpage ^^ mais après j’ai jamais fait de structure aussi grosse avec mon système.

                                  ça peut m’intéresser ça aussi 🙂

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

                                    Go en mp alors 🙂

                                    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
                                    • 1
                                    • 2
                                    • 1 / 2
                                    • Premier message
                                      Dernier message
                                    Design by Woryk
                                    ContactMentions Légales

                                    MINECRAFT FORGE FRANCE © 2024

                                    Powered by NodeBB