Problème Génération



  • Bonjour,

    Je suis en train de mettre mon mod à jour de la 1.8.9 vers la 1.9, la seul vrai difficulté que j'ai est celle de la class qui gère la génération. Je n'arrive pas à trouver l'erreur, malgres un poste sur le forum officiel de Forge une personne a pu me guider mais sans succès.

    Je vous donne les 2 class qui gère la génération:

    package fr.jules552.mod.WorldGeneration;
    
    import java.util.Random;
    
    import fr.jules552.mod.Structures.Structure1;
    import fr.jules552.mod.init.BlocksMod;
    import net.minecraft.block.Block;
    import net.minecraft.block.BlockDirt;
    import net.minecraft.block.BlockStone;
    import net.minecraft.block.state.IBlockState;
    import net.minecraft.init.Blocks;
    import net.minecraft.util.math.BlockPos;
    import net.minecraft.world.World;
    import net.minecraft.world.chunk.IChunkGenerator;
    import net.minecraft.world.chunk.IChunkProvider;
    import net.minecraft.world.gen.feature.WorldGenMinable;
    import net.minecraftforge.fml.common.IWorldGenerator;
    
    public class WorldGenAd implements IWorldGenerator
    {
       public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
       {
           switch(world.provider.getDimension())
           {
               case -1:
                   GenerateNether(world, chunkX * 16, chunkZ * 16, random);
                   break;
    
               case 0:
                   GenerateOverworld(world, chunkX * 16, chunkZ * 16, random);
                   break;
    
               case 1:
                   GenerateEnd(world, chunkX * 16, chunkZ * 16, random);
           }
       }
    
       private void addOre(Block block, Block blockSpawn, Random random, World world, int posX, int posZ, int minY, int maxY, int minV, int maxV, int spawnChance)
       {
           for(int i = 0; i < spawnChance; i++)
           {
               int defaultChunkSize = 16;
               int Xpos = posX + random.nextInt(defaultChunkSize);
               int Ypos = minY + random.nextInt(maxY - minY);
               int Zpos = posZ + random.nextInt(defaultChunkSize);
    
               IBlockState state = block.getDefaultState();
               BlockPos blockPos = new BlockPos(Xpos, Ypos, Zpos);
    
               new WorldGenMinable(state, maxV).generate(world, random, blockPos);
           }
       }
    
       private void GenerateNether(World world, int i, int j, Random random)
       {
    
       }
    
       private void GenerateOverworld(World world, int i, int j, Random random)
       {
           // Minerais
           addOre(BlocksMod.AdamantiumOre, Blocks.stone, random, world, i, j, 4, 16, 1, 3, 10);
           addOre(BlocksMod.SilverOre, Blocks.stone, random, world, i, j, 4, 48, 3, 4, 18);
           addOre(BlocksMod.AluminiumOre, Blocks.stone, random, world, i, j, 4, 48, 3, 6, 18);
    
           // Structures
           int Xpos = i + random.nextInt(16);
           int Ypos = random.nextInt(128);
           int Zpos = j + random.nextInt(16);
    
           for(int x = 0; x < 500; x++)
           {
               new Structure1().genrate(world, random, new BlockPos(Xpos, Ypos, Zpos));
           }
       }
    
       private void GenerateEnd(World world, int i, int j, Random random)
       {
    
       }
    
       @Override
       public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider)
       {
    
       }
    }
    

    et la deuxième

    package fr.jules552.mod.WorldGeneration;
    
    import net.minecraftforge.fml.common.IWorldGenerator;
    import net.minecraftforge.fml.common.registry.GameRegistry;
    
    public class WorldRegisterAd
    {
       public static void MainRegistry()
       {
           regsiterWorldGen(new WorldGenAd(), -1);
           regsiterWorldGen(new WorldGenAd(), 0);
           regsiterWorldGen(new WorldGenAd(), 1);
       }
    
       private static void regsiterWorldGen(IWorldGenerator iGenerator, int weightProbability)
       {
           GameRegistry.registerWorldGenerator(iGenerator, weightProbability);
    
       }
    }
    

    En espérant que vous puissiez m'aider à régler ce problème, je précise que je ne suis qu'un simple amateur, donc une petit indication sur les choses à faire avec une explication serait grandement acceptée ^^
    Merci d'avance



  • 1- Mauvaise section
    2- Mets ton code dans des balises java
    3- Tu as quoi comme erreur dans ton IDE ?



  • Bonsoir, excuse moi pour l'erreur de Topic, ça prouve bien que je ne suis pas très doué ^^,
    je vois le code dans les balises java moi 🙂

    et voici les messages dans mon IDE mit sur un pastebin

    http://pastebin.com/z10CSc57

    Je te remercie de ta réponse très rapide 🙂



  • Effectivement, la coloration syntaxique ne marche pas apparemment, désolé.

    Ce que tu as envoyé ce sont les logs, or il n'y a aucune erreur, en revanche ton ordinateur n'a pas l'air d'arriver à suivre



  • @'SCAREX':

    Effectivement, la coloration syntaxique ne marche pas apparemment, désolé.

    Ce que tu as envoyé ce sont les logs, or il n'y a aucune erreur, en revanche ton ordinateur n'a pas l'air d'arriver à suivre

    Effectivement il possède quelque ralentissement mais ça ne change rien à la génération, il possédait les mêmes quand le mod était en 1.8.9 et la génération allait très bien ^^ (les ralentissements sont dû à des problèmes de drivers graphiques, petite précision inutile 🙂 )



  • Ton IDE n'affiche pas d'erreurs ?



  • @'SCAREX':

    Ton IDE n'affiche pas d'erreurs ?

    Non aucune erreur, c'est ça qui me surprend le plus d'ailleurs



  • Rajoute un System.out.println("quelque chose") quand tu génères un minerai



  • @'SCAREX':

    Rajoute un System.out.println("quelque chose") quand tu génères un minerai

    je le met ou le prinln ? (oui je suis assez doué pour ne pas savoir où se charge le minerai, c'est ça de suivre des tutos ^^ )



  • Après ça : new WorldGenMinable(state, maxV).generate(world, random, blockPos);



  • @'SCAREX':

    Après ça : new WorldGenMinable(state, maxV).generate(world, random, blockPos);

    Bon d'après ce que j'ai pu voir il n'y a aucun message, donc la génération n'est pas pris en compte, tient voilà la log si tu veux jeter un œil

    http://pastebin.com/q04jhwfC


  • Moddeurs confirmés Rédacteurs Administrateurs

    regsiterWorldGen(new WorldGenAd(), -1);
           regsiterWorldGen(new WorldGenAd(), 0);
           regsiterWorldGen(new WorldGenAd(), 1);
    -> inutile.
    Un seul suffit.
    Le dernier nombre n'est pas l'id de génération mais un poids.

    Vérifies que ta fonction MainRegistry est bien appelé.

    (balise java corrigé + discussion déplacé dans la bonne section).



  • @'robin4002':

    regsiterWorldGen(new WorldGenAd(), -1);
           regsiterWorldGen(new WorldGenAd(), 0);
           regsiterWorldGen(new WorldGenAd(), 1);
    -> inutile.
    Un seul suffit.
    Le dernier nombre n'est pas l'id de génération mais un poids.

    Vérifies que ta fonction MainRegistry est bien appelé.

    (balise java corrigé + discussion déplacé dans la bonne section).

    Merci pour le déplacement de topic ^^

    Donc j'ai retiré les 2 regsiter superflus et ma fonction MainRegistry est belle est bien appelée



  • Où ça ? Quelle méthode, quelle classe ?



  • @'Plaigon':

    Où ça ? Quelle méthode, quelle classe ?

    Voilà la classe :

     package fr.jules552.mod;
    
    import fr.jules552.mod.WorldGeneration.WorldRegisterAd;
    import fr.jules552.mod.init.BlocksMod;
    import fr.jules552.mod.init.ItemsMod;
    import fr.jules552.mod.init.Structures.StructureAdamantium;
    import fr.jules552.mod.proxy.CommonProxy;
    import net.minecraftforge.fml.common.Mod;
    import net.minecraftforge.fml.common.Mod.EventHandler;
    import net.minecraftforge.fml.common.SidedProxy;
    import net.minecraftforge.fml.common.event.FMLInitializationEvent;
    import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
    import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
    
    @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.MOD_VERSION)
    
    public class Adamantium 
    {
    
    @SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.SERVER_PROXY_CLASS)
    public static CommonProxy proxy;
    
    @EventHandler
    public void preInit(FMLPreInitializationEvent event)
    {
    ItemsMod.init();
    ItemsMod.register();
    
    BlocksMod.init();
    BlocksMod.register();
    
    WorldRegisterAd.MainRegistry();
    
    StructureAdamantium.init();
    
    }
    @EventHandler
    public void init(FMLInitializationEvent event)
    {
    
    proxy.registerRenders();
    
    }
    
    @EventHandler
    public void postInit(FMLPostInitializationEvent event)
    {
    
    }
    }
    
    


  • Personne n'a d'idée pour résoudre ce problème assez gênant ? 😢



  • Tu as essayé d'augmenter la probabilité ?



  • @'SCAREX':

    Tu as essayé d'augmenter la probabilité ?

    Non toujours pas , j'ai augmenter le spawnchance à 1000 mais ça donne rien


  • Moddeurs confirmés Rédacteurs Administrateurs

    Ajoutes des print un peu partout dans ta classe WorldGenAd, affiches les valeurs des variables, etc …

    C'est pas compliqué de déboguer du code.



  • @'robin4002':

    Ajoutes des print un peu partout dans ta classe WorldGenAd, affiches les valeurs des variables, etc …

    C'est pas compliqué de déboguer du code.

    C'est bon j'ai résolu mon problème, j'ai pris une méthode assez radical c'est à dire refaire toute la classe qui gère la génération des minerais, en changeant un peu la méthode de génération.

    Merci à tous de votre aide quand même 🙂


Log in to reply