Générations de minerais
-
Tu fait une condition pour vérifier si il y a un bloc d’air au-dessus du bloc de pierre de l’end.
-
for(int i = 0; i < probabilité; i++) { int targetX = x + rand.nextInt(16); int targetY = rand.nextInt(192); int targetZ = z + rand.nextInt(16); if(world.isAirBlock(targetZ, targetY, targetZ) { (new WorldGenMinable(id du bloc à générer, metadata du bloc à générer, taille maximum d un filon, Block.whiteStone.blockID)).generate(world, rand, targetX, targetY, targetZ); } }Parcontre monte bien la prob, sinon il se généra que très rarement.
-
Merci beaucoup à vous deux !

-
A croire que je ne suis pas très intelligent j’ai une question à chaque fois que je veut génerger un minerai je dois refaire un classe ou je l’ajoute simplement dans la case correspondant ? Car le minerai de néphrite ne se génère pas dans l’end ! Sad
-
Il faut mettre dans la même classe. Envoie ton code.
-
Voici mon code : j’ai un deuxième soucis mon generateNether se souligne en rouge comme si il avais été supprimer normal ?
package chinesemod; 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 WorldGeneratorTutoriel implements IWorldGenerator { @Override public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { switch(world.provider.dimensionId) { case -1: this.generateEnd(world, chunkX * 16, chunkZ * 16, random); case 0: this.generateSurface(world, chunkX * 16, chunkZ * 16, random); case 1: //*this.generateNether(world, chunkX * 16, chunkZ * 16, random);*// } } private void generateSurface(World world, int x, int z, Random rand) { for(int i = 0; i < 14; i++) { (new WorldGenMinable(chinesemodmain.oretopaze.blockID, 0, 6, Block.stone.blockID)).generate(world, rand, x + rand.nextInt(16), rand.nextInt(16), z + rand.nextInt(16)); } } private void generateEnd(World world, int x, int z, Random rand) { for(int i = 0; i < 100; i++) { int targetX = x + rand.nextInt(16); int targetY = rand.nextInt(192); int targetZ = z + rand.nextInt(16); if(world.isAirBlock(targetZ, targetY, targetZ)) { (new WorldGenMinable(chinesemodmain.orenephrite.blockID, 0, 6, Block.whiteStone.blockID)).generate(world, rand, targetX, targetY, targetZ); } } } } -
Faut pas @Override ?
Vérifie tes params aussi
-
Le @Override y est , mes paramètres sont bon normalement . . .

-
Screen l’erreur eclipse et envoie le
-
Voici -
Il créer une méthode generateNether comme pour l’end et l’overworld :
private void generateNether(World world, int x, int z, Random rand) { } -
Super sa à régler le problème mais mon minerai dans l’end n’est toujours pas génerer !

-
Je suis vraiment désolé

Je suis parti faire des tests sur eclipse, et je viens de me rendre compte qu’il y a une grosse faute dans le tutoriel.
-1 = Nether et 1 = end, et non l’inverse :/. Je viens d’éditer le tutoriel.On a donc :
switch(world.provider.dimensionId) { case -1: this.generateNether(world, chunkX * 16, chunkZ * 16, random); case 0: this.generateSurface(world, chunkX * 16, chunkZ * 16, random); case 1: this.generateEnd(world, chunkX * 16, chunkZ * 16, random); }Ensuite pour la génération seulement en surface, le problème du code que je t’ai donné, c’est qu’il va que générer si le random tombe sur un cas où le bloc juste au dessus est de l’air, ce qui est très rare.
Donc je te propose une meilleur solution, si le bloc au dessus du minerai n’est pas de l’air, il monte de 1 la coordonné y où il doit se générer. Ainsi les minerais ne se génèrent que en surface.
private void generateEnd(World world, int x, int z, Random rand) { for(int i = 0; i < 4; i++) { (new WorldGenSurfaceMinable(ModTutoriel.BlockTutorial.blockID, 0, 12, Block.whiteStone.blockID)).generate(world, rand, x + rand.nextInt(16), rand.nextInt(128), z + rand.nextInt(16)); } }Et la classe WorldGenSurfaceMinable :
package tutoriel.common; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenerator; public class WorldGenSurfaceMinable extends WorldGenerator { private int minableBlockId; private int minableBlockMeta = 0; private int numberOfBlocks; private int blockToReplace; public WorldGenSurfaceMinable(int id, int number) { this(id, number, Block.whiteStone.blockID); } public WorldGenSurfaceMinable(int id, int number, int target) { this.minableBlockId = id; this.numberOfBlocks = number; this.blockToReplace = target; } public WorldGenSurfaceMinable(int id, int meta, int number, int target) { this(id, number, target); this.minableBlockMeta = meta; } public boolean generate(World world, Random rand, int x, int y, int z) { float f = rand.nextFloat() * (float)Math.PI; double d0 = (double)((float)(x + 8) + MathHelper.sin(f) * (float)this.numberOfBlocks / 8.0F); double d1 = (double)((float)(x + 8) - MathHelper.sin(f) * (float)this.numberOfBlocks / 8.0F); double d2 = (double)((float)(z + 8) + MathHelper.cos(f) * (float)this.numberOfBlocks / 8.0F); double d3 = (double)((float)(z + 8) - MathHelper.cos(f) * (float)this.numberOfBlocks / 8.0F); double d4 = (double)(y + rand.nextInt(3) - 2); double d5 = (double)(y + rand.nextInt(3) - 2); for (int l = 0; l <= this.numberOfBlocks; ++l) { double d6 = d0 + (d1 - d0) * (double)l / (double)this.numberOfBlocks; double d7 = d4 + (d5 - d4) * (double)l / (double)this.numberOfBlocks; double d8 = d2 + (d3 - d2) * (double)l / (double)this.numberOfBlocks; double d9 = rand.nextDouble() * (double)this.numberOfBlocks / 16.0D; double d10 = (double)(MathHelper.sin((float)l * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * d9 + 1.0D; double d11 = (double)(MathHelper.sin((float)l * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * d9 + 1.0D; int i1 = MathHelper.floor_double(d6 - d10 / 2.0D); int j1 = MathHelper.floor_double(d7 - d11 / 2.0D); int k1 = MathHelper.floor_double(d8 - d10 / 2.0D); int l1 = MathHelper.floor_double(d6 + d10 / 2.0D); int i2 = MathHelper.floor_double(d7 + d11 / 2.0D); int j2 = MathHelper.floor_double(d8 + d10 / 2.0D); while(!world.isAirBlock(i1, j1 + 2, k1)) { j1++; } for (int k2 = i1; k2 <= l1; ++k2) { double d12 = ((double)k2 + 0.5D - d6) / (d10 / 2.0D); if (d12 * d12 < 1.0D) { for (int l2 = j1; l2 <= i2; ++l2) { double d13 = ((double)l2 + 0.5D - d7) / (d11 / 2.0D); if (d12 * d12 + d13 * d13 < 1.0D) { for (int i3 = k1; i3 <= j2; ++i3) { double d14 = ((double)i3 + 0.5D - d8) / (d10 / 2.0D); Block block = Block.blocksList[world.getBlockId(k2, l2, i3)]; if (d12 * d12 + d13 * d13 + d14 * d14 < 1.0D && (block != null && block.isGenMineableReplaceable(world, k2, l2, i3, this.blockToReplace))) { world.setBlock(k2, l2, i3, this.minableBlockId, minableBlockMeta, 2); } } } } } } } return true; } } -
Merci sa marche !! J’ai un soucis hors-sujet , j’ai parfois mes images de blocs et d’item qui disparaisse

-
Créer un nouveau poste ici : http://www.minecraftforgefrance.fr/forumdisplay.php?fid=34
Et soit plus précis, les images qui disparaît c’est trop vague :s -
Bonjours, je ne sais pas si cela a été écrit dans les questions, mais je n’arrive pas a faire générer des minerais dans le nether j’ai essayer beaucoup de chose en changeant le “WorldGenMinable” en “WorldGenMinableNether” en modifiant des ligne, mais je n’y arrive pas, si quelqu’un peut m’aider je lui en serai extrêmement reconnaissant. Si vous pouvez m’aidez à en faire générer aussi dans l’End se serai génial merci encore
-
for(int i = 0; i < probabilité; i++) { (new WorldGenMinable(id du bloc à générer, metadata du bloc à générer, taille maximum d un filon, id du bloc qui va être remplacé)).generate(world, rand, x + rand.nextInt(16), rand.nextInt(hauteur maximum), z + rand.nextInt(16)); }id du bloc qui va être remplacé
Il faut que tu mettes la nether rack ici ou la soul sand, et pour l’end l’endstone. -
on peut faire en sorte que cette génération s’applique a un bloc? car je veux faire en sorte que mon bloc GeneratingMineral soit a trois bloc au dessus de mon bloc de minerais (tile entity), et qu’il teste si il y a le bloc sous lui, sinon il attend x minutes puis en genere un autre (le même bloc)
-
@‘isador34’:
on peut faire en sorte que cette génération s’applique a un bloc? car je veux faire en sorte que mon bloc GeneratingMineral soit a trois bloc au dessus de mon bloc de minerais (tile entity), et qu’il teste si il y a le bloc sous lui, sinon il attend x minutes puis en genere un autre (le même bloc)
Il faut faire un WorldGenMinable custom, reprend le même que celui de minecraft et en dessous de :
world.setBlock(k2, l2, i3, this.minableBlockId, minableBlockMeta, 2);
Il te suffit d’ajouter :
world.setBlock(k2, l2 + 3, i3, ClassePrincipale.GeneratingMineral.blockID, minableBlockMeta, 2); -
oki merci
problème:
package Mineralherb; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.util.MathHelper; 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 abstract class WorldGeneratorMineral implements IWorldGenerator { private int minableBlockId; private int minableBlockMeta; private double numberOfBlocks; public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5) { float f = par2Random.nextFloat() * (float)Math.PI; double d0 = (double)((float)(par3 + 8) + MathHelper.sin(f) * (float)this.numberOfBlocks / 8.0F); double d1 = (double)((float)(par3 + 8) - MathHelper.sin(f) * (float)this.numberOfBlocks / 8.0F); double d2 = (double)((float)(par5 + 8) + MathHelper.cos(f) * (float)this.numberOfBlocks / 8.0F); double d3 = (double)((float)(par5 + 8) - MathHelper.cos(f) * (float)this.numberOfBlocks / 8.0F); double d4 = (double)(par4 + par2Random.nextInt(3) - 2); double d5 = (double)(par4 + par2Random.nextInt(3) - 2); for (int l = 0; l <= this.numberOfBlocks; ++l) { double d6 = d0 + (d1 - d0) * (double)l / (double)this.numberOfBlocks; double d7 = d4 + (d5 - d4) * (double)l / (double)this.numberOfBlocks; double d8 = d2 + (d3 - d2) * (double)l / (double)this.numberOfBlocks; double d9 = par2Random.nextDouble() * (double)this.numberOfBlocks / 16.0D; double d10 = (double)(MathHelper.sin((float)l * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * d9 + 1.0D; double d11 = (double)(MathHelper.sin((float)l * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * d9 + 1.0D; int i1 = MathHelper.floor_double(d6 - d10 / 2.0D); int j1 = MathHelper.floor_double(d7 - d11 / 2.0D); int k1 = MathHelper.floor_double(d8 - d10 / 2.0D); int l1 = MathHelper.floor_double(d6 + d10 / 2.0D); int i2 = MathHelper.floor_double(d7 + d11 / 2.0D); int j2 = MathHelper.floor_double(d8 + d10 / 2.0D); for (int k2 = i1; k2 <= l1; ++k2) { double d12 = ((double)k2 + 0.5D - d6) / (d10 / 2.0D); if (d12 * d12 < 1.0D) { for (int l2 = j1; l2 <= i2; ++l2) { double d13 = ((double)l2 + 0.5D - d7) / (d11 / 2.0D); if (d12 * d12 + d13 * d13 < 1.0D) { for (int i3 = k1; i3 <= j2; ++i3) { double d14 = ((double)i3 + 0.5D - d8) / (d10 / 2.0D); Block block = Block.blocksList[par1World.getBlockId(k2, l2, i3)]; if (d12 * d12 + d13 * d13 + d14 * d14 < 1.0D && (block != null && block.isGenMineableReplaceable(par1World, k2, l2, i3, this.blockToReplace))) { par1World.setBlock(k2, l2, i3, this.minableBlockId, minableBlockMeta, 2); World.setBlock(k2, l2 + 3, i3, 3005, minableBlockMeta, 2); } } } } } } } return true; } }World.setBlock(k2, l2 + 3, i3, 3005, minableBlockMeta, 2); erreur: Cannot make a static reference to the non-static method setBlock(int, int, int, int, int, int) from the type World
