[1.6.4.] Генерация растений или "что тут происходит?

68
0
Всем привет. Давно не занимался моддингом и давно не оставлял тут своих тупых вопросов
Очередной вопрос. Я создал несколько видов растений и теперь хочу генерировать их в мире. Собственно с генерацией мне уже помогли, но появилась одна проблема, которая меня очень смущает: когда я генерирую растения в мире появляются далеко не все растения. Я испробовал все, выносил все в один огромный класс-генератор, разделял их на множество классов-генераторов - все равно не работает, хоть ты лопни. 
Собственно, сами растения генерирую так (приведу лишь один класс-генератор, сами генерации отличаются только по типам биомов и, что очевидно, генерируюемыми блоками):
Код:
public class LilyPandaGen implements IWorldGenerator {


@Override
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);break;
case 0:generateSurface(world, random, chunkX * 16, chunkZ * 16);break;
case 1:generateEnd(world, random, chunkX * 16, chunkZ * 16);break;
}
}


private void generateEnd(World world, Random random, int i, int j) {


}


private void generateSurface(World world, Random random, int i, int j) {
i += random.nextInt(16);
j += random.nextInt(16);


[color=#333333]if (world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.extremeHills.biomeID || world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.extremeHillsEdge.biomeID) {
[color=#333333]for (int k = 1; k < world.getHeight(); ++k) {[/color]
[color=#333333]if (world.getBlockId(i, k - 1, j) == Block.grass.blockID && world.isAirBlock(i, k, j)) {
[color=#333333]world.setBlock(i, k, j, BendingMod.lilyPanda.blockID);[/color]
[color=#333333]}[/color]
}
[color=#333333]}[/color]


[color=#333333]}[/color]


[color=#333333]private void generateNether(World world, Random random, int i, int j) {[/color]


[color=#333333]}[/color]



[color=#333333]}[/color]
[color=#333333]
Регистрация в init главного класса:
Код:
[color=#333333]     GameRegistry.registerWorldGenerator(new LilyPandaGen());[/color]
[color=#333333]
Кстати, когда манипуляции с классами-генераторами ничего не дали попробовал пошвырять регистрации из одного места в другое: после регистрацией блока, в начала init'a, в конце init'a - тоже ничего не дало.
Ткните носом, пожалуйста, понимаю, что ошибка идиотская. Заранее благодарю за помощь :3
 
Наверное, ты не пытался испробовать, что-то новое.
Код:
i += random.nextInt(16);
j += random.nextInt(16);
... поставь перед:
Код:
world.setBlock(i, k, j, BendingMod.lilyPanda.blockID);
[merge_posts_bbcode]Добавлено: 19.12.2014 19:38:12[/merge_posts_bbcode]

Делай генерацию частой, а спаван твоих растений радомной.
 
timaxa007 написал(а):
Наверное, ты не пытался испробовать, что-то новое.
Код:
i += random.nextInt(16);
j += random.nextInt(16);
... поставь перед:
Код:
world.setBlock(i, k, j, BendingMod.lilyPanda.blockID);
[merge_posts_bbcode]Добавлено: 19.12.2014 19:38:12[/merge_posts_bbcode]

Делай генерацию частой, а спаван твоих растений радомной.
Спасибо за совет, но ничего не изменилось, к сожалению. Теперь мои цветы к тому же стали генерироваться в воздухе. :/
 
Ну скорее всего тебе нужен пример. На счёт генерации в воздухе, это я просто не правильно сказал где именно поставить.
[merge_posts_bbcode]Добавлено: 19.12.2014 20:53:08[/merge_posts_bbcode]

Код:
private void generateSurface(World world, Random random, int x, int z) {

Block[] block_random = new Block[] {
BendingMod.lilyPanda,
//Главный_файл.блок2,
//И т.д.
};

if (world.getBiomeGenForCoords(x, z).biomeID == BiomeGenBase.extremeHills.biomeID || world.getBiomeGenForCoords(x, z).biomeID == BiomeGenBase.extremeHillsEdge.biomeID) {
for (int y = 0; y < world.provider.getHeight(); y++) {
int x1 = 8 + (x + random.nextInt(8));
int z1 = 8 + (z + random.nextInt(8));
if (world.getBlockID(x1, y - 1, z1) == Block.grass.blockID && world.isAirBlock(x1, y, z1)) {
for (int j = 0; j < 16; j++) {
world.setBlock(x1, y, z1, block_random[random.nextInt(block_random.length - 1)].blockID, random.nextInt(15), 3);
}
}
}
}
}
Если твои растения без метадаты, то вместо "random.nextInt(15)" укажи "0"
И примерно так будет выглядеть (я сделал без указания биома, по этому на таких биомах и спавнило):
54303e6c83ab59bfe51b23198d5ec199.png

Ссылка на скриншот
Будет ещё пример...
[merge_posts_bbcode]Добавлено: 19.12.2014 21:13:03[/merge_posts_bbcode]

Тут спаван кучками, еси можно так сказать (написать):
Код:
private void generateSurface(World world, Random random, int x, int z) {

Block[] block_random = new Block[] {
BendingMod.lilyPanda,
//Главный_файл.блок2,
//И т.д.
};

if (world.getBiomeGenForCoords(x, z).biomeID == BiomeGenBase.extremeHills.biomeID || world.getBiomeGenForCoords(x, z).biomeID == BiomeGenBase.extremeHillsEdge.biomeID) {
for (int y = 0; y < world.provider.getHeight(); y++) {
int x1 = 8 + (x + random.nextInt(8));
int z1 = 8 + (z + random.nextInt(8));
for (int j = 0; j < 16; j++) {
for (int x2 = -2; x2 <= 2; ++x2) {
for (int z2 = -2; z2 <= 2; ++z2) {
if (world.getBlockID(x1 + x2, y - 1, z1 + z2) == Block.grass.blockID && world.isAirBlock(x1 + x2, y, z1 + z2)) {
if (random.nextInt(25) == 5) {
world.setBlock(x1 + x2, y, z1 + z2, block_random[random.nextInt(block_random.length - 1)].blockID, random.nextInt(15), 3);
}
}
}
}
}
}
}
}
7600da86762394ada38e708f109daa62.png

Ссылка на скриншот.
 
Назад
Сверху