Génération de minerai dans le Nether



  • Alors voilà j'ai essayé de générer un minerai dans le nether, mais rien à faire il ne veut pas apparaître.

    [font=Source Code Propackage ]fr.zeiyo.zeiyocraft.world%(#cc7832)[;
    ]
    import java.util.Random%(#cc7832)[;
    ]
    import fr.zeiyo.zeiyocraft.block.ZeiyoBlocks%(#cc7832)[;
    ]import net.minecraft.block.state.pattern.BlockHelper%(#cc7832)[;
    ]import net.minecraft.init.Blocks%(#cc7832)[;
    ]import net.minecraft.util.BlockPos%(#cc7832)[;
    ]import net.minecraft.world.World%(#cc7832)[;
    ]import net.minecraft.world.chunk.IChunkProvider%(#cc7832)[;
    ]import net.minecraft.world.gen.feature.WorldGenMinable%(#cc7832)[;
    ]import net.minecraft.world.gen.feature.WorldGenerator%(#cc7832)[;
    ]import net.minecraftforge.fml.common.IWorldGenerator%(#cc7832)[;
    ]
    public class ZeiyoWorldGen implements IWorldGenerator
    {
    
        private WorldGenerator gen_onyx%(#cc7832)[;
    ]
        public ZeiyoWorldGen()
      {
            this.gen_onyx = new WorldGenMinable(ZeiyoBlocks.*onyxOre*.getDefaultState(), 9, BlockHelper.*forBlock*(Blocks.*netherrack*));
      } 
    
      %(#bbb529)[@Override
    ]   public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
         switch (world.provider.getDimensionId()) {
    
         case 0: // Overworld
    %(#cc7832)[         break;
    
    ]      case -1: %(#808080)[// Nether
    ]            this.runGenerator(this.gen_onyx, world, random, chunkX, chunkZ, 25, 0, 80)%(#cc7832)[;
    ]
    %(#cc7832)[            break;
    
    ]      case 1: %(#808080)[// End
    ]         %(#cc7832)[break;
    ]        
         }
      }
    
      private void runGenerator(WorldGenerator generator, World world, Random rand, int chunk_X, int chunk_Z, int chancesToSpawn, int minHeight, int maxHeight)
      {
          if (minHeight < 0 || maxHeight > 256 || minHeight > maxHeight)
              throw new IllegalArgumentException("Illegal Height Arguments for WorldGenerator")%(#cc7832)[;
    ]
           int heightDiff = maxHeight - minHeight + 1%(#cc7832)[;
    ]       for (int i = 0; i < chancesToSpawn; i ++)
          {
              int x = chunk_X * 16 + rand.nextInt(16)%(#cc7832)[;
    ]           int y = minHeight + rand.nextInt(heightDiff)%(#cc7832)[;
    ]           int z = chunk_Z * 16 + rand.nextInt(16)%(#cc7832)[;
    ]           generator.generate(world, rand, new BlockPos(x, y, z))%(#cc7832)[;
    ]       }
      }
    
    }
    
    

    J'ai déjà réussi de créer des minerais normaux, ils fonctionnent bien mais pour le Nether, je n'arrive vraiment pas à le faire marcher.

    Merci d'avance pour votre aide,
    Cordialement


  • Administrateurs

    this.gen_onyx = new WorldGenMinable(ZeiyoBlocks.onyxOre.getDefaultState(), 9, BlockHelper.forBlock(Blocks.netherrack));
    ???
    Pourquoi BlockHelper.forBlock(Blocks.netherrack) et pas directement Blocks.netherrack ou Blocks.netherrack.getDefaultBlockState() ?



  • Parce que dans la classe WorldGenMinable ils utilisent ça :

    
    [font=Source Code Propublic ]WorldGenMinable(IBlockState p_i45630_1_, int p_i45630_2_)
    {
       this(p_i45630_1_, p_i45630_2_, BlockHelper.*forBlock*(Blocks.*stone*))%(#cc7832)[;
    ]}
    
    public WorldGenMinable(IBlockState p_i45631_1_, int p_i45631_2_, Predicate p_i45631_3_)
    {
       this.oreBlock = p_i45631_1_%(#cc7832)[;
    ]    this.numberOfBlocks = p_i45631_2_%(#cc7832)[;
    ]    this.field_175919_c = p_i45631_3_%(#cc7832)[;
    ]}
    
    

  • Administrateurs

    Ah oui. Je n'ai encore jamais fait de génération en 1.8 x)
    Personnellement je ne vois pas d'erreur.
    As-tu bien enregistré ton générateur ?



  • Beh ouai etant donné que les autres minerais marchent bien 😕

    
    [font=Source Code Propublic void ]init(FMLInitializationEvent e)      
    {
    
       GameRegistry.*registerWorldGenerator*(new ZeiyoWorldGen(), 0)%(#cc7832)[;
    ]   ZeiyoCrafting.*createCrafts*()%(#cc7832)[;
    ]  
    
    }
    
    

  • Administrateurs

    Autre minerai ? Je ne vois qu'un minerai dans ta classe.



  • Je les ai masqués pour que que ce soit plus lisible ^^


  • Administrateurs

    Ce qui n'est pas une bonne idée. Bon ici ça ne gène pas trop, mais quand il y a des rapports de crash avec la ligne indiqué dedans c'est bien embêtant.
    Ajoutes du debug pour vérifier que ton code est bien appelé.



  • Je viens de réessayer, ça marche toujours pas dans le Nether en revanche le générer dans l'Ender et dans l'Overworld marche bien alors je trouve ça vraiment bizarre …



  • Rajoute des logs dans ta fonction pour voir si la génération est appelée



  • Etant donné que la console est flood de mon println lors de la génération, je peux te dire qu'elle est bien appellée ^


  • Administrateurs


    Avec les mêmes valeurs.
     ```java
    package fr.minecraftforgefrance.test;

    import java.util.Random;

    import net.minecraft.block.state.pattern.BlockHelper;
    import net.minecraft.init.Blocks;
    import net.minecraft.util.BlockPos;
    import net.minecraft.world.World;
    import net.minecraft.world.chunk.IChunkProvider;
    import net.minecraft.world.gen.feature.WorldGenMinable;
    import net.minecraft.world.gen.feature.WorldGenerator;
    import net.minecraftforge.fml.common.IWorldGenerator;
    import net.minecraftforge.fml.common.Mod;
    import net.minecraftforge.fml.common.Mod.EventHandler;
    import net.minecraftforge.fml.common.event.FMLInitializationEvent;
    import net.minecraftforge.fml.common.registry.GameRegistry;

    @Mod(modid = "test", name = "Test", version = "0.0.0")
    public class ModTest
    {
        @EventHandler
        public void init(FMLInitializationEvent event)
        {
            GameRegistry.registerWorldGenerator(new TestGenerator(), 0);
        }

    public static class TestGenerator implements IWorldGenerator
        {
            private WorldGenerator genDiam = new WorldGenMinable(Blocks.diamond_block.getDefaultState(), 9, BlockHelper.forBlock(Blocks.netherrack));
            @Override
            public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
            {
                if(world.provider.getDimensionId() == -1)
                {
                    this.runGenerator(this.genDiam, world, random, chunkX, chunkZ, 25, 0, 80);
                }
            }

    private void runGenerator(WorldGenerator generator, World world, Random rand, int chunk_X, int chunk_Z, int chancesToSpawn, int minHeight, int maxHeight)
            {
                if(minHeight < 0 || maxHeight > 256 || minHeight > maxHeight)
                    throw new IllegalArgumentException("Illegal Height Arguments for WorldGenerator");

    int heightDiff = maxHeight - minHeight + 1;
                for(int i = 0; i < chancesToSpawn; i++)
                {
                    int x = chunk_X * 16 + rand.nextInt(16);
                    int y = minHeight + rand.nextInt(heightDiff);
                    int z = chunk_Z * 16 + rand.nextInt(16);
                    generator.generate(world, rand, new BlockPos(x, y, z));
                }
            }
        }
    }



  • Après plusieurs essais ça a finalement marché, bizarre …