Générer une structure
-
world.setBlockState(new BlockPos(x, y, z), Blocks.cobbleStone.getDefaultBlockState());
-
Merci sa marche voilà ce que j’ai mis
public boolean generate(World worldIn, Random random, int x, int y, int z) { if (!worldIn.isRemote) { worldIn.setBlockState(new BlockPos(x, y, z), Blocks.cobblestone.getDefaultState()); return true; } return false; }
-
J’avais oublié de préciser que c’était une fonction.
-
J’ai un autre truc c’est que quand je mais 1 sa m’en mais partout quand meme je voudrai en avoir 10 max dans un monds mais sa marche pas
-
? J’ai rien compris
-
C’est bon j’ai trouver,
int x1 = x + random.nextInt(16);
int y1 = 75;
int z1 = z + random.nextInt(16);
for (int i = 0; i < 1; i++)if (random.nextInt(900) == 0)
WorldGenZombie.generate(world, random, x1, y1, z1); }Mais je voudrai ajouter dans un biome spécial mais le code ne marche pas
-
bonjour j’aimerais créer une structure “complexe” c’est a dire composé de plusieurs structure qui puisse s’ajouter indépendamment à la manière d’un village de pnj comment faire
-
@‘Asmath’:
bonjour j’aimerais créer une structure “complexe” c’est a dire composé de plusieurs structure qui puisse s’ajouter indépendamment à la manière d’un village de pnj comment faire
Regarde dans les classes du jeu
-
Désolé du UP
Comment on pourrait faire en sorte de ne générer qu’une seule fois la structure, ou alors de baisser énormément sa fréquence, car même avec une boucle for int i = 1, sa ne fait pas grand chose. -
c’est vrai qu’une boucle for int i = 1 c’est très utile…. La fonction generate est appelée une fois par chunk il me semble donc il faut rajouter une condition avec un random, après pour ce qui est de le générer qu’une seule fois, regarde la génération des strongholds, ça devrait aider car ceux-ci ne sont générés qu’un certain nombre de fois
-
il faut étendrr ta classe de MapGenStructure et sauvegarder sa génération dans les nbt tags aussi il me semble
-
J’aimerais savoir comment créer un Item qui permet de générer une structure, est-ce possible et si oui, pouvez-vous me donner quelques pistes ou un tutoriel ?
-
Tu as juste à créer un item et ré-écrire la fonction onItemUse (je suis plus trop sûr du nom) ou onItemRightClick et générer ta structure dans cette fonction
-
Bonsoir, je crois qu’il m’arrive les problèmes les + improbables, je ne vois aucune autres solutions.
Je viens de créer un WorldGenerator, mais désormais impossible de générer une nouvelle map, car j’obtiens 1% par minutes, et rien dans la console. Du coup, je viens de relier mon code, sûrement une erreur que je n’ai pas vu, une boucle trop gourmande ou autre chose d’insensé, je ne sais pas.
Mon IWorldGenerator :public class CustomWorldGenerator implements IWorldGenerator { public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { if(world.provider.getDimension() == 0) { this.generateSurface(world, random, chunkX * 16, chunkZ * 16); } } private void generateSurface(World world, Random random, int i, int j) { int x1 = i + random.nextInt(16); int y1 = random.nextInt(128); int z1 = j + random.nextInt(16); for (int i0 = 0; i < 10; i++) // Il vaut mieux mettre une valeur élevée { (new WorldGenTotem()).generate(world, random, new BlockPos(x1, y1, z1)); } } }
Et ma classe WorldGenerator :
public class WorldGenTotem extends WorldGenerator { @Override public boolean generate(World world, Random random, BlockPos pos) { if (!world.isRemote) { world.setBlockState(pos, Blocks.COBBLESTONE.getDefaultState()); world.setBlockState(pos.up(), Blocks.COBBLESTONE.getDefaultState()); world.setBlockState(pos.up(2), Blocks.SPONGE.getDefaultState()); EntityCreeper creeper = new EntityCreeper(world); creeper.setPosition(pos.getX(), pos.getY() + 3, pos.getZ()); world.spawnEntityInWorld(creeper); return true; } return false; } }
Et mon IWorldGenerator est enregistré dans ma méthode init, à la fin. Je suis loin d’avoir fini ma pyramide…
Merci d’avance !PS = Si je retire l’enregistrement de mon IWorldGenerator, le problème disparaît, et la génération de carte redevient fluide !
-
Salut, dans ton IWorldGenerator , tu as une boucle mais tu t’est trompé entre i et i0. Donc si i est négatif, ça prends beaucoup de temps à parcourir la boucle.
-
Merci beaucoup, problème résolu, comme quoi la moindre petite erreur dans une boucle peut fausser toute la génération.
-
Rebonjour, une idée pourquoi ce code me génère plusieurs fois ma structure, alors que ça ne devrait pas être le cas ?
private void generateSurface(World world, Random random, int i, int j) { if(world.isRemote) return; int x1 = i + random.nextInt(16); int y1 = 70; int z1 = j + random.nextInt(16); if(world.getBiome(new BlockPos(x1, y1, z1)) == Biomes.DESERT && counter == 0) { if((new CREEPSWorldGenPyramid()).generate(world, random, new BlockPos(x1, y1, z1))); { System.out.println("xCoord = " + x1); System.out.println("zCoord = " + z1); counter = 1; System.out.println("counter : " + counter); } } }
J’ai pas essayé avec un boolean, mais à mon avis ce serait le même résultat.
La variable counter est initialisée + haut dans ma classe IWorldGenerator.
Voici les logs de la console :[16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:36]: yCoord = 70 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:42]: minYCoord = 63 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:42]: minYCoord = 62 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:42]: minYCoord = 61 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:36]: yCoord = 70 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:42]: minYCoord = 69 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:42]: minYCoord = 68 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:42]: minYCoord = 67 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:42]: minYCoord = 66 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:36]: yCoord = 70 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:42]: minYCoord = 70 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:36]: yCoord = 70 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:42]: minYCoord = 69 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:36]: yCoord = 70 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.CREEPSWorldGenPyramid:generate:42]: minYCoord = 70 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:38]: xCoord = -233 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:40]: zCoord = -149 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:43]: counter : 1 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:38]: xCoord = -235 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:40]: zCoord = -132 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:43]: counter : 1 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:38]: xCoord = -242 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:40]: zCoord = -141 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:43]: counter : 1 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:38]: xCoord = -254 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:40]: zCoord = -121 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:43]: counter : 1 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:38]: xCoord = -245 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:40]: zCoord = -100 [16:33:38] [Server thread/INFO] [STDOUT/]: [fr.plaigon.morecreepsandweirdos.common.worldgen.MCAWGenerator:generateSurface:43]: counter : 1
Merci d’avance !
-
Tu n’appelles pas cette méthode dans une boucle de taille 5 ?
-
Non, voici ma classe entière ?
public class MCAWGenerator implements IWorldGenerator { private byte counter = 0; public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { if(world.provider.getDimension() == 0) { this.generateSurface(world, random, chunkX * 16, chunkZ * 16); } } private void generateSurface(World world, Random random, int i, int j) { if(world.isRemote) return; int x1 = i + random.nextInt(16); int y1 = 70; int z1 = j + random.nextInt(16); if(world.getBiome(new BlockPos(x1, y1, z1)) == Biomes.DESERT && counter == 0) { if((new CREEPSWorldGenPyramid()).generate(world, random, new BlockPos(x1, y1, z1))); { System.out.println("xCoord = " + x1); System.out.println("zCoord = " + z1); counter = 1; } } } }
-
Il y a peut-être un truc que je ne vois pas, mais pour moi il a deux chose qui peuvent causer ça :
- MCAWGenerator est instancier plusieurs fois et à chaque fois la méthode generate est appelée, si c’est le cas et que ça viens de toi, c’est facile à corriger sinon c’est que ça viens de Forge.
- MCAWGenerator est instancier une fois mais la génération du monde est multi threadé et la méthode generate est appelé plusieurs fois, auquel cas, t’as variable counter n’est pas partagé et il faut la synchroniser.