Génération minerais



  • Bonjour, j'ai suivi ce tuto mais il semble que cela ne fonctionne pas pour moi :
    https://www.minecraftforgefrance.fr/topic/618/générer-des-minerais/11

    Pourtant je n'ai pas d'erreurs indiquées :

    package com.hypala.hypalacore.common;
    
    import java.util.Random;
    
    import cpw.mods.fml.common.IWorldGenerator;
    import net.minecraft.block.Block;
    import net.minecraft.item.Item;
    import net.minecraft.world.World;
    import net.minecraft.world.chunk.IChunkProvider;
    import net.minecraft.world.gen.feature.WorldGenMinable;
     
    public class WorldGeneration implements IWorldGenerator 
    {
    
        private int x;
        private int z;
        @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 i, int j)
        {
            this.addOreSpawn(HypalaCore.aithiaOre, 0, 0001, world, random, x, z, 16, 16, 6, 50, 3, 20);
        }
        private void addOreSpawn(Block aithiaOre, int metadata, int i, World world, Random random, int x2, int z2, int maxX, int maxZ, int maxVeinSize, int chancesToSpawn, int minY, int maxY)
        
        {
            assert maxY > minY : "La position Y maximum doit être supérieure à la position Y minimum.";
            assert maxX > 0 && maxX <= 16 : "X doit se trouver entre 0 et 16.";
            assert minY > 0 : "La position Y minimum doit être supérieure à 0.";
            assert maxY < 256 && maxY > 0 : "La position Y maximum doit se trouver entre 0 et 256.";
            assert maxZ > 0 && maxZ <= 16 : "Z doit se trouver entre 0 et 16.";
         
            for(int i1 = 0; i1 < chancesToSpawn; i1++)
            {
                int posY = random.nextInt(128);
         
                if((posY <= maxY) && (posY >= minY))
                {
         
                }
            }   
        }
    
        
    
    
    
    }
    

    Merci pour votre aide et votre temps je vient de débuter et je ne suis pas familier avec le java



  • yo, ton code est incomplet tu as grillé des etapes x) deplus tes 2 variables x et y en private au dessus sont inutile

        private void addOreSpawn(Block aithiaOre, int metadata, int i, World world, Random random, int x2, int z2, int maxX, int maxZ, int maxVeinSize, int chancesToSpawn, int minY, int maxY)
        {
            assert maxY > minY : "La position Y maximum doit être supérieure à la position Y minimum.";
            assert maxX > 0 && maxX <= 16 : "X doit se trouver entre 0 et 16.";
            assert minY > 0 : "La position Y minimum doit être supérieure à 0.";
            assert maxY < 256 && maxY > 0 : "La position Y maximum doit se trouver entre 0 et 256.";
            assert maxZ > 0 && maxZ <= 16 : "Z doit se trouver entre 0 et 16.";
    
        
            for(int i1 = 0; i1 < chancesToSpawn; i1++)
            {
                int posY = random.nextInt(128);
    
                if((posY <= maxY) && (posY >= minY))
                {
                    // I think something is missing here x)
                }
            }   
        }
    

    en voyant ce code tu ne crois pas que il manque quelque chose pour dire a minecraft de posé tel block a tel endroit ?



  • Tien pour t'aider voici ce tutoriel



  • @SpyMan Oui effectivement, c'est bien ce code à mettre ?

    (new WorldGenMinable(block, metadata, maxVeinSize, target)).generate(world, random, blockXPos + random.nextInt(16), posY, blockZPos + random.nextInt(16)); 
    

    Le problème c'est que lorsque je met ce code et que je retire les variables x et y j'ai des erreurs :

    4b81187b-0e5a-42b8-b593-8422acd8a62b-image.png

    Edit: J'ai également des erreurs avec ce code où il me demande de remplacer le i en i1 :

    for(int i = 0; i < chancesToSpawn; i++)
    


  • @Askipie Le tutoriel que tu me donne je l'ai déjà vu mais ce n'est pas la même technique que dans le tutoriel que j'ai utilisé


  • Administrateurs

    Et surtout la qualité des tutoriels de checconio est vraiment ... très moyenne.
    Tous les problèmes que tu as sont juste des soucis de nommage de paramètre.

    Dans la définition de la fonction generateSurface i et j devrait être x et z.

    Dans la fonction addOreSpawn, aithiaOre devrait être Block.
    Et le reste c'est le même genre de problème.



  • J'ai réussi à régler quelques erreurs mais il en reste deux :

    59a2be97-5321-41a6-9436-8c34c052b43f-image.png

    Une où la variable i qui définit le taux de spawn n'est pas acceptée car il me dit que cette variable existe déjà mais si je remplace i par une autre lettre j'ai toujours l'erreur

    Et une ou cette ligne de code pose problème :

    (new WorldGenMinable(aithiaOre, metadata, maxVeinSize, target)).generate(world, random, blockXPos + random.nextInt(16), posY, blockZPos + random.nextInt(16));
    

    Ce sont : target , blockXPos et posYblockZPos qui causent problèmes, je ne sais pas quoi mettre au deux derniers mais au target lorsque je met stone comme le reste du code l'erreur persiste


  • Administrateurs

    Tu as au moins suivis correctement le tutoriel ?

    Ta déclaration de ta fonction addOreSpawn devrait être comme ça :
    public void addOreSpawn(Block block, int metadata, Block target, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, int chancesToSpawn, int minY, int maxY)

    Et la ligne où tu l'appel devrait être :
    this.addOreSpawn(HypalaCore.aithiaOre, 0, Blocks.stone, world, random, x, z, 16, 16, 6, 50, 3, 20);



  • J'avais fait comme ça avant et j'avais une erreur lorsque je fesait comme ça, je viens de le refaire et j'ai toujours une erreur :

    cfbacbfd-a1ae-4116-a887-5cd62f7f1e04-image.png


  • Administrateurs

    Vires ce 0001 qui n'a aucun sens et mets Blocks.stone comme je l'ai indiqué.



  • This post is deleted!


  • C'est bon j'ai mis le code, j'ai du relancer eclipse car ça ne voulait pas s'actualiser et ça marche, saurais tu ou mettre le code pour rajouter des blocs à générer ?


  • Administrateurs

    Toujours dans la fonction generateSurface, il suffit de mettre un nouvel appel à la fonction addOreSpawn.



  • @robin4002 Ok je vais tester ça merci de ton aide



  • @robin4002 J'aurais juste une dernière question : peut on mettre des pourcentages dans le taux de spawn car j'essaye mais ça ne semble pas fonctionner


  • Administrateurs

    Non, tu ne peux pas mettre un pourcentage comme argument de fonction.

    Si tu veux descendre plus bas que un, il faut ajouter un random.



  • C'est à dire ?


  • Administrateurs

    if(random.nextInt(2) == 0) -> génère un nombre entre 0 et 2 (exclut) donc soit 1 soit 0. Un if comme cela donne une chance sur deux (ou encore 50% de chance).
    if(random.nextInt(3) == 0) -> génère un nombre entre 0 et 3 (exclut) donc soit 2, soit 1 soit 0. Un if comme cela donne une chance sur trois (ou encore 33,33333 % de chance).

    etc.

    C'est de la simple logique.



  • Ok merci


Log in to reply