Génération



  • Bonjour tous le monde j'ai trois erreurs dans mon code plusieurs personnes mon déjà aider a régler cela mais sa ne marche toujours pas je vous laisse mon code est mes trois erreurs.

    package fr.topycraft.ModPackTopyCraft.worldgeneration;
    
    import net.minecraft.block.Block;
    import net.minecraft.init.Blocks;
    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 java.util.Random;
    import fr.topycraft.ModPackTopyCraft.blocks.ModPackTopyCraftBlocks;
    
    public class WorldGeneration implements net.minecraftforge.fml.common.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 generateEnd(World world, Random random, int x, int z) {
    
    }
    
    private void generateSurface(World world, Random random, int x, int z) {
    
    }
    
    private void generateNether(World world, Random random, int x, int z) {
    
    this.addOreSpawn(ModPackTopyCraftBlocks.TOPYDUIM_MINERAIS, 0, Blocks.STONE, world, random, x, z, 16, 16, 8, 1, 6, 12); }
    
    public void addOreSpawn(Block block, int metadata, Block target, World world1, Random random1, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, int chancesToSpawn, int minY, int maxY)
    
    {
    
           assert maxY > minY ;
           assert maxX > 0 && maxX <= 16 ;
           assert minY > 0 ;
           assert maxY < 256 && maxY > 0 ;
           assert maxZ > 0 && maxZ <= 16 ;
    
          for(int i1 = 0; i1 < chancesToSpawn; i1++)
    {
    
    int posY = random1.nextInt(128);
    
    if((posY <= maxY) && (posY >= minY))
    {
    
    (new WorldGenMinable(block, metadata, maxVeinSize. target)).generate(world1, random1, blockXPos + random1.nextInt(16), posY, blockZPos + random1.nextInt(16));
    
    }
    
    }
    
       }
    
    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator,
    IChunkProvider chunkProvider) {
    
    }
    }
    

    Mes trois erreurs sont écrite juste ci-dessous.
    Je vous remercie d’avance de m'avoir aider bonne soirée.


  • Administrateurs

    Salut,
    Tu as une fonction en double dont une avec les mauvais arguments, il y a une variable qui doit être remplacé par un getter et tu as un point là où tu devrais avoir une virgule. Code corrigé :

    package fr.topycraft.ModPackTopyCraft.worldgeneration;
    
    import net.minecraft.block.Block;
    import net.minecraft.init.Blocks;
    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 java.util.Random;
    import fr.topycraft.ModPackTopyCraft.blocks.ModPackTopyCraftBlocks;
    
    public class WorldGeneration implements net.minecraftforge.fml.common.IWorldGenerator
    {
    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider)
    {
    switch(world.provider.getDimensionId())
    {
    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 generateEnd(World world, Random random, int x, int z) {
    
    }
    
    private void generateSurface(World world, Random random, int x, int z) {
    
    }
    
    private void generateNether(World world, Random random, int x, int z) {
    
    this.addOreSpawn(ModPackTopyCraftBlocks.TOPYDUIM_MINERAIS, 0, Blocks.STONE, world, random, x, z, 16, 16, 8, 1, 6, 12);
    }
    
    public void addOreSpawn(Block block, int metadata, Block target, World world1, Random random1, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, int chancesToSpawn, int minY, int maxY)
    {
    assert maxY > minY ;
    assert maxX > 0 && maxX <= 16 ;
    assert minY > 0 ;
    assert maxY < 256 && maxY > 0 ;
    assert maxZ > 0 && maxZ <= 16 ;
    
    for(int i1 = 0; i1 < chancesToSpawn; i1++)
    {
    int posY = random1.nextInt(128);
    
    if((posY <= maxY) && (posY >= minY))
    {
    (new WorldGenMinable(block, metadata, maxVeinSize, target)).generate(world1, random1, blockXPos + random1.nextInt(16), posY, blockZPos + random1.nextInt(16));
    }
    }
    }
    }
    


  • Salut, les deux premières erreur : c'est écrit en anglais, donc bon c'est pas compliqué : tu peux pas accéder à dimensionID donc utilise plutôt getDimensionID(). Et le generate à besoin d'un BlockPosdonc tu dois faire new BlockPos(calculdex, calculdey, calculdez).
    Pour le dernier problème, il faut utiliser BlockMatcher.

    EDIT: Robin, il me semble que GenWorldMinable a maintenant besoin d'un predicate à la place du block, donc c'est pas target qu'il faut mettre mais BlockMatcher (une class qui fait un predicate à partir d'un block).



  • Bonsoir tous le monde je viens de reussir grâce à vous a supprimer tous les bugs mais né s'en moins j'ai un problème lors de la génération le bloc n'apparait à aucun endroit dans le monde.

    package fr.topycraft.ModPackTopyCraft.worldgeneration;
    
    import net.minecraft.block.Block;
    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 java.util.Random;
    import fr.topycraft.ModPackTopyCraft.blocks.ModPackTopyCraftBlocks;
    import joptsimple.internal.Classes;
    
    public class WorldGeneration implements net.minecraftforge.fml.common.IWorldGenerator
    {
       @Override
       public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider)
       {
           switch(world.provider.getDimension())
           {
           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 generateEnd(World world, Random random, int x, int z) {
    
       }
    
       private void generateSurface(World world, Random random, int x, int z) {
    
       }
    
       private void generateNether(World world, Random random, int x, int z) {
    
           this.addOreSpawn(ModPackTopyCraftBlocks.TOPYDUIM_MINERAIS, 0, Blocks.STONE, world, random, x, z, 16, 16, 8, 20, 6, 12);
       }
    
       public void addOreSpawn(Block block, int metadata, Block target, World world1, Random random1, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, int chancesToSpawn, int minY, int maxY)
       {
            assert maxY > minY ;
            assert maxX > 0 && maxX <= 16 ;
            assert minY > 0 ;
            assert maxY < 256 && maxY > 0 ;
            assert maxZ > 0 && maxZ <= 16 ;
    
           for(int i1 = 0; i1 < chancesToSpawn; i1++)
           {
               int posY = random1.nextInt(128);
    
               if((posY <= maxY) && (posY >= minY))
               {
                new WorldGenMinable(ModPackTopyCraftBlocks.TOPYDUIM_MINERAIS.getDefaultState() ,maxVeinSize);
                   generate(world1, random1, blockXPos + random1.nextInt(16), posY, blockZPos + random1.nextInt(16));
               }
           }
      }
    
    private void generate(World world1, Random random1, int x, int posY, int z) {
    
    }
    }
    

    Voici le code ci-dessus bonne soirée à tous


  • Administrateurs

    Sachant que tu essaies de générer le bloc dans la dimension -1 (nether), le résultat n'est pas étonnant.



  • Il me suffit de changer les world1 par world0 pour faire générer dans le monde normal ?


  • Administrateurs

    Non, il faut mettre la ligne :
    this.addOreSpawn(ModPackTopyCraftBlocks.TOPYDUIM_MINERAIS, 0, Blocks.STONE, world, random, x, z, 16, 16, 8, 20, 6, 12);
    Dans generateSurface au lieu de generateNether.

    Et d'ailleurs dans ta fonction addOreSpawn faudrait mettre block.getDefaultState() au lieu de ModPackTopyCraftBlocks.TOPYDUIM_MINERAIS.getDefaultState()



  • Après avoir réaliser tous sa les blocks n'apparaisse pas quand meme .



  • Tu peux m'expliquer pourquoi, après avoir fait new WorldGenMinable tu appelles une fonction generate vide au lieu d'appeler la fonction du WorldGenMinable ? En tous cas c'est ça le dernier problème.


  • Administrateurs

    Ho, je n'avais même pas remarqué x)



  • En faite cette ligne de code me demande de crée la méthode generate

                new WorldGenMinable(block.getDefaultState() ,maxVeinSize);
                   generate(world1, random1, blockXPos + random1.nextInt(16), posY, blockZPos + random1.nextInt(16));
    

    Donc je crée sa méthode et sa me donne cela

    private void generate(World world1, Random random1, int i, int posY, int j)
    

  • Administrateurs

    new WorldGenMinable(block.getDefaultState() ,maxVeinSize).generate(world1, random1, blockXPos + random1.nextInt(16), posY, blockZPos + random1.nextInt(16));
    Il faut un . et non un ;



  • Voila si je met un point le problème. 


  • Administrateurs

    On ne voit pas tout le message d'erreur.




  • Administrateurs

    Replaces par :
    generate(world1, random1, new BlockPos(blockXPos + random1.nextInt(16), posY, blockZPos + random1.nextInt(16)));