Impossible trouver biome et structure en même temps



  • Bonjour à tous,

    donc voila, j'ai enfin réussi à avoir un biome et j'ai une structure se générant sur toute la map, le seul problème et que je n'arrive pas à avoir les deux en même temps.

    Je m'explique, quand le monde se génère, j'ai les structures mais impossible de trouver mon biome. A ce moment je fais la génération d'un monde avec le worldtype correspondant à mon biome, auquel cas je trouve mon biome mais, a ce moment, les structures ne spawn plus …..

    (depuis eclipse, j'ai les deux en même temps)  Si vous avez des idées, je suis preneur  :).

    Cordialement,
    Votre humble Sventus.


  • Administrateurs

    Salut,
    Envoies tout ton code en rapport avec la structure.



  • la class WorldGen

    package fr.craftesys.craftesys.generation;
    
    import static net.minecraftforge.common.util.ForgeDirection.EAST;
    import static net.minecraftforge.common.util.ForgeDirection.NORTH;
    import static net.minecraftforge.common.util.ForgeDirection.SOUTH;
    import static net.minecraftforge.common.util.ForgeDirection.WEST;
    
    import java.util.Random;
    
    import net.minecraft.init.Blocks;
    import net.minecraft.world.World;
    import net.minecraft.world.chunk.IChunkProvider;
    import net.minecraft.world.gen.feature.WorldGenerator;
    import net.minecraftforge.common.util.ForgeDirection;
    import cpw.mods.fml.common.IWorldGenerator;
    import fr.craftesys.craftesys.common.Mods;
    
    public class WorldGen extends WorldGenerator
    {
    
    public boolean generate(World world, Random rand, int x, int y, int z)
    {
    if ((world.getBlock(x, y - 1, z) == Blocks.grass))
    {
    
    world.setBlock(x , y, z, Blocks.log);
    world.setBlock(x+1 ,y, z, Blocks.log);
    world.setBlock(x+2 ,y, z+1, Blocks.log);
    world.setBlock(x+3 ,y, z+2, Blocks.log);
    world.setBlock(x+3 ,y, z+3, Blocks.log);
    world.setBlock(x+2 ,y, z + 4, Blocks.log);
    world.setBlock(x+1 ,y, z +5, Blocks.log);
    world.setBlock(x , y, z+5, Blocks.log);
    world.setBlock(x-1 ,y, z+1, Blocks.log);
    world.setBlock(x-2 ,y, z+2, Blocks.log);
    world.setBlock(x-2 ,y, z+3, Blocks.log);
    world.setBlock(x-1 ,y, z+4, Blocks.log);
    
    ….........
    ...........
    ........
    
    world.setBlock(x , y+48, z-4, Blocks.glowstone);
    world.setBlock(x+1 ,y+48, z-4, Blocks.glowstone);
    world.setBlock(x-1 ,y+49, z-4, Blocks.glowstone);
    world.setBlock(x+2 ,y+49, z-4, Blocks.glowstone);
    world.setBlock(x+7 ,y+48, z+3, Blocks.glowstone);
    world.setBlock(x+7 ,y+48, z + 2, Blocks.glowstone);
    world.setBlock(x+7 ,y+49, z +1, Blocks.glowstone);
    world.setBlock(x+7 , y+49, z+4, Blocks.glowstone);
    
    world.setBlock(x-1 ,y+49, z+9, Blocks.glowstone);
    world.setBlock(x ,y+48, z+9, Blocks.glowstone);
    world.setBlock(x+1 ,y+48, z+9, Blocks.glowstone);
    world.setBlock(x+2 ,y+49, z+9, Blocks.glowstone);
    
    world.setBlock(x-6 ,y+48, z+2, Blocks.glowstone);
    world.setBlock(x-6 ,y+48, z+3, Blocks.glowstone);
    world.setBlock(x-6 ,y+49, z+4, Blocks.glowstone);
    world.setBlock(x-6 ,y+49, z+1, Blocks.glowstone);
    
    return true;
    
    }
    return false;
    }
    
    }
    
    

    (les petits points, c'est juste que ça fait 1600 lignes ^^)

    class StructureGenerator :

    
    package fr.craftesys.craftesys.generation;
    
    import java.util.Random;
    
    import cpw.mods.fml.common.IWorldGenerator;
    import net.minecraft.init.Blocks;
    import net.minecraft.world.World;
    import net.minecraft.world.chunk.IChunkProvider;
    
    public class StructureGenerator implements IWorldGenerator {
    
    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator,
    IChunkProvider chunkProvider) {
    
    switch (world.provider.dimensionId)
    {
    
    case 0:
    generateSurface(world, random, chunkX * 16, chunkZ * 16);
    break;
    }
    
    }
    
    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 < 900; i++) // Il vaut mieux mettre une valeur élevée
    {
    
    (new WorldGen()).generate(world, random, x1, y1, z1);
    
    }
    }
    
    }
    
    

    voili voilou, cher robin


  • Administrateurs

    A-t-il de l'herbe dans ton biome ?



  • non c'est un autre bloc, mais la structure spawn lorsqu'en dessous il y a mon nouveau bloc     (j'ai élargi la condition, il faut juste qu'il y ai ce bloc OU de la grass). et mon bloc à la particularité de la grass car des arbres spawn dessus.


  • Administrateurs

    Mets un System.out.println("message de debug"); dans la boucle : for (int i = 0; i < 900; i++) // Il vaut mieux mettre une valeur élevée



  • @'robin4002':

    Mets un System.out.println("message de debug"); dans la boucle : for (int i = 0; i < 900; i++) // Il vaut mieux mettre une valeur élevée

    Ok je test ca demain car je suis avec le téléphone.  Donc je test ca. Et je lance avec éclipse voir si ca spam ou pas ?  Puis si ca spam je le met sur le serveur. Puis je regarde via les logs si ca spam.  R pareil au moment où je fai un monde avec le worldtype ? (Et d'après les soucis ca ne spawnera dans ce monde ci ).  En gros c'est ca ?  En tout cas merci 🙂


  • Administrateurs

    test juste avec ton world type vu que c'est lui cause souci.



  • Ok très bien j'essaye le plus tôt possible. Merci pour tout. Tu es l'einstein du Java et de l'api entière de MC ^^___salut,

    Donc j'ai essayé et comme tu t'en doutes, le message spam lors de la création du world de base, mais quand je fais le monde propre au biome avec la worldtype, la j'ai que le message spammant pour le biome et non pas pour la structure, donc il n'entre pas dans la boucle 😕


  • Administrateurs

    Donc le générateur ne s'applique pas à ton biome, c'est bien ce que je pensais.
    à mon avis il faut le déclarer directement dans le constructeur du biome.



  • et faire ça comment ? 😄 car je dois faire référence à la class de la génération de la structure dans le biome ?


  • Administrateurs

    Les arbres des biomes sont gérés dans la fonction     protected void genDecorations(BiomeGenBase p_150513_1_)

      int i, j, k;
       for (i = 0; doGen && i < this.sandPerChunk; ++i)
       {
           j = this.chunk_X + this.randomGenerator.nextInt(16) + 8;
           k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8;
           this.tonGenerator.generate(this.currentWorld, this.randomGenerator, j, this.randomGenerator.nextInt(128) ,k);
       }
    

    tonGenerator = instance de WorldGen



  • les arbres spawn dans mon biome, en l'occurence c'est la structure ayant la forme d'un arbre qui ne spawn pas


  • Administrateurs

    Je disais les arbres sont généré dans cette fonction pour que tu en prennes exemple.

    Tu as juste a reprendre le code que je t'ai donné et à le mettre dans genDecorations



  • la fonction genDecorations je ne trouve pas en faisant ctrl + espace



  • C'est que tu dois déjà l'avoir dans ta classe, ou alors elle n'a pas le même nom (selon la version).


  • Administrateurs

    J'ai lancé eclipse en 1.7.10 pour regarder ça, donc je suis sûr du nom.



  • Mhhhhh étrange alors ^^. Je dois être un peu ****



  • Après vous êtes peut-être tous les deux en 1.7.10 mais la versions des mappings (qui permettent de faire func_61556_4 vers fonctionCompréhenssible) changent tout.



  • La fonction genDecoration est égale a func_150513_a

    D'après ce document : https://github.com/ntzrmtthihu777/CreepyPastaCraft/blob/master/gradle/methods.csv