Résolu Génération Nether
-
Bonjour et désoler de encore susciter votre aide.
Je voudrai générer un minerai dans le nether j’ai suivi le tuto de agaboue pour générer dans le monde normal ça marche très bien mais pas dans le nether ça génère pas (je vous passe le codepackage Craftaclysm.livehost.fr.server; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.world.World; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.feature.WorldGenMinable; import cpw.mods.fml.common.IWorldGenerator; public class WorldGeneration implements 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); case 0: generateSurface(world, random, chunkX * 16, chunkZ * 16); case 1: generateEnd(world, random, chunkX * 16, chunkZ * 16); } } private void generateEnd(World world, Random random, int x, int z) { } private void generateSurface(World world, Random random, int x, int z) { this.addOreSpawn(Craftamod.Rubisore, world, random, x, z, 16, 16, 1 + random.nextInt(4), 0.5, 3, 10); this.addOreSpawn(Craftamod.Crystalore, world, random, x, z, 16, 16, 1 + random.nextInt(5), 0.75, 3, 15); } private void generateNether(World world, Random random, int x, int z) { this.addOreSpawn(Craftamod.Ambreore, world, random, x, z, 16, 16, 2 + random.nextInt(5), 200, 1, 256); } public void addOreSpawn(Block block, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, double d, 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."; int diffBtwnMinMaxY = maxY - minY; for (int x = 0; x < d; x++) { int posX = blockXPos + random.nextInt(maxX); int posY = minY + random.nextInt(diffBtwnMinMaxY); int posZ = blockZPos + random.nextInt(maxZ); (new WorldGenMinable(block, maxVeinSize)).generate(world, random, posX, posY, posZ); } } }
Le fichier WorldGeneration
-
Salut,
Utilise cette fonction :public void addOreSpawn(Block block, int metadata, Block target, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, double d, 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."; int diffBtwnMinMaxY = maxY - minY; for (int x = 0; x < d; x++) { int posX = blockXPos + random.nextInt(maxX); int posY = minY + random.nextInt(diffBtwnMinMaxY); int posZ = blockZPos + random.nextInt(maxZ); (new WorldGenMinable(block, maxVeinSize, metadata, target)).generate(world, random, posX, posY, posZ); } } }
Du-coup :
this.addOreSpawn(Craftamod.Rubisore, world, random, x, z, 16, 16, 1 + random.nextInt(4), 0.5, 3, 10);
Devient :
this.addOreSpawn(Craftamod.Rubisore, 0, Blocks.stone world, random, x, z, 16, 16, 1 + random.nextInt(4), 0.5, 3, 10);
Et donc pour le nether même chose, sauf qu’il faut mettre la nether rock ou la soul sand à la place de la stone. -
Robin j’ai remplacer et ça ne génère toujour pas
package Craftaclysm.livehost.fr.server; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.world.World; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.feature.WorldGenMinable; import cpw.mods.fml.common.IWorldGenerator; public class WorldGeneration implements 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); case 0: generateSurface(world, random, chunkX * 16, chunkZ * 16); case 1: generateEnd(world, random, chunkX * 16, chunkZ * 16); } } private void generateEnd(World world, Random random, int x, int z) { } private void generateSurface(World world, Random random, int x, int z) { this.addOreSpawn(Craftamod.Rubisore, 0, Blocks.stone, world, random, x, z, 16, 16, 1 + random.nextInt(4), 0.5, 3, 10); this.addOreSpawn(Craftamod.Crystalore, 0, Blocks.stone, world, random, x, z, 16, 16, 1 + random.nextInt(4), 0.5, 3, 10); } private void generateNether(World world, Random random, int x, int z) { this.addOreSpawn(Craftamod.Ambreore, 0, Blocks.netherrack, world, random, x, z, 16, 16, 1 + random.nextInt(4), 200, 3, 10); } public void addOreSpawn(Block block, int metadata, Block target, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, double d, 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."; int diffBtwnMinMaxY = maxY - minY; for (int x = 0; x < d; x++) { int posX = blockXPos + random.nextInt(maxX); int posY = minY + random.nextInt(diffBtwnMinMaxY); int posZ = blockZPos + random.nextInt(maxZ); (new WorldGenMinable(block, maxVeinSize, metadata, target)).generate(world, random, posX, posY, posZ); } } }
-
Ton maxY (le dernier int de la méthode, donc le 10) est beaucoup trop faible, ton minerai se génère tout en bas du nether.
-
meme en modifiant en mettant de 1 a 256 ça ne marche pas
-
Tu as bien ouvert un nouveau monde hein ^^’ ou aller dans des chunks qui n’étaient pas généré
-
avec la methode de robin les minerai de génère plus dans le monde normal
-
Étrange ça.
Sinon fait comme ça :private void generateNether(World world, Random random, int x, int z) { for(int i = 0; i < 200; i++) { (new WorldGenMinable(Craftamod.Ambreore, 0, 1 + random.nextInt(4), Blocks.netherrack)).generate(world, rand, x + rand.nextInt(16), rand.nextInt(128), z + rand.nextInt(16)); } }
-
au passage oubli pas de mettre des break sinon tu aura des problèmes plus tard :
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; }
-
MERCI et juste un truc comment on edite la rareté avec ta méthode robin ? et merci a toi phenix aussi
-
d’une part la boucle for, plus le nombre est grand plus il y a de minerais; d’autre part ça : “1 + random.nextInt(4)” c’est le nombre de minerais par filon donc à toi de trouver le juste équilibre.
Après un autre paramètre qui peut jouer c’est le bloc dans lequel tu fais spawner le minerais, plus il est rare moins le minerais sera présent
-
Par contre MrDiaboloz, tu pourrai réduire ta signature ? 11 lignes c’est beaucoup trop grand à mon goût.