[1.6.4]Генерация мира {ChunkProvider} (Решено)

Статус
В этой теме нельзя размещать новые ответы.
769
1
42
Ты имеешь ввиду эту проверку?
Код:
else if (var16 >= var5 - -16 && var16 <= var5 + 1)
                                {
                                    var14 = biomegenbase.topBlockShort;
                                    var14m = biomegenbase.topBlockMeta;
                                    var15 = biomegenbase.fillerBlockShort;
                                    var15m = biomegenbase.fillerBlockMeta;
                                }
 
769
1
42
Поставил эту проверку в код
Код:
if (this.getStoneReplacementBlock() != 0) {                            
arrayOfIDs[index] = this.getStoneReplacementBlock();                            
arrayOfMeta[index] = this.getStoneReplacementMeta();                        
}
И добавил это
Код:
public short getStoneReplacementBlock() {        
return 0;    
} 

public byte getStoneReplacementMeta() {        
return 0;    
}
Вообщем теперь появляется чисто ровная поверхность(без полос) и высота мира увеличилась в 2 раза.
Как правильно эту проверку сюда вставить?
Код:
else if (var18 == (short)PlanetsBlocks.planetBottom.blockID)
                        {
                            arrayOfMeta[index] = biomegenbase.lowerBlockMeta = 3;

                            if (var13 == -1)
                            {
                                if (var12 <= 0)
                                {
                                    var14 = 0;
                                    var14m = 0;
                                    var15 = (short)PlanetsBlocks.planetBottom.blockID;
                                    var15m = biomegenbase.lowerBlockMeta = 3;
                                }
 
769
1
42
На что менять это понятно(потом поменяю), как правильно в реплейсе эту проверку добавить?
 
769
1
42
Я еще сначала описывал цель. Моя задача сделать простую генерацию мира, как положено, и избавиться от этих полос.
 
769
1
42
Ну я же спросил что делать, ты сказал менять мету, я спросил как это сделать, ты сказал, что можно убрать все внутри цикла... Как-то вот так
 
4,045
63
645
Ты ж сам написал:
RonyC написал(а):
Спасибо, но не работает. Делал по туториалу вот здесь, четко переписал, как там и мир сгенерировался, однако он был без моих блоков указанных в биоме, поэтому в replaceBlocksForBiome, generateTerrain и provideChunk мне нужно было указать блок (short) и метадату для него (byte), а также указать в provideChunk meta и short, после эти изменений у меня такая беда.
Я и подумал, что тебе нужен блок с метой.
Если нет, вставляй все стандартные методы и радуйся жизни.
Кто вообще мир пишет, ты или я? :)
Тебе виднее, что тебе надо.
 
769
1
42
Ааа, ну это с тем реплейсом, и это вообще было, если я его оставлял чисто ванильным(даже шорты не добавлял), а после того, как я добавил шорты вот такая беда
[merge_posts_bbcode]Добавлено: 08.06.2016 20:58:53[/merge_posts_bbcode]

И если я сотру все внутри цикла, то установки блоков из биома не будет, т. к. она в цикле и пишется. Я уже серьезно запутался...
 
4,045
63
645
Доверься силе и распутаешься ты...

yoda-0-1024x682.jpg
 
769
1
42
Вооообщем. Объясню еще раз. В реплейсе, генерейте и провайде у меня УЖЕ указаны меты и шорты(ну как положено). Вся беда в том, что если я использую их такими, то появляются эти полосы. Я ИЗНАЧАЛЬНО записал МЕТЫ и ШОРТЫ, после чего у меня генерируется мир с полосами(большие буквы для внятности). Итак вопрос. Что мне делать с такой генерацией мира, как исправить и сделать ее нормальной(все, все, все меты и шорты сейчас у меня указаны)?
[merge_posts_bbcode]Добавлено: 08.06.2016 21:26:36[/merge_posts_bbcode]

В прошлый раз я использовал туториаловский ChunkProvider, где нет метадат(поэтому я писал, что у меня заработало)
 
4,045
63
645
Читай мои сообщения внимательнее...
Повторяю ещё раз:
В provideChunk ты указываешь нужные тебе методы в нужной тебе последовательности.
Сперва идёт generateTerrain, потом replaceBlocksForBiome, потом генератор пещер и т.д.
generateTerrain собирает чанк из массива боков (и массива метадат), на основе сгенерированного в методе initializeNoiseField ландшафта... И собирает он этот чанк только из камней, воды и нулевых блоков.
Далее все красивости прописываются в replaceBlocksForBiome, где происходит замена блоков камня на нужные тебе в зависимости от высоты и т.д.

generateTerrain я бы не советовал тебе меня вообще, так как сам в нём не до конца разбираюсь... На выходе ты получишь нормальный каменный мир без полос (надеюсь).

Далее, всю фишку пиши в реплейсе... Считай блоки и меняй их как хочешь... Хошь блок, хошь мету...
Тут уже дело техники, которую я описывать не буду...

...

Прибыль
 
769
1
42
Я пытался делать, менять реплейс по нескольку раз, прописывать меты, но мир также генерируется... Вообщем спасибо тебе большое, может быть исправляю, хотя вряд ли
 
769
1
42
Нашел такой генерейт, но он ужас какой лагучий. И кстати этот почти работает, у этого блоки могут выстраиваться в высоту, но между блоками есть разрез шириной в 1 блок и длиной до бесконечности(может)
Код:
 public void generateTerrain(int chunkX, int chunkZ, short[] idArray, byte[] metaArray) {
Код:
          byte b0 = 4;
          byte b1 = 16;
          byte b2 = 63;
          int k = b0 + 1;
          byte b3 = 17;
          int l = b0 + 1;
          this.biomesForGeneration = this.worldObj.getWorldChunkManager().getBiomesForGeneration(this.biomesForGeneration, chunkX * 4 - 2, chunkZ * 4 - 2, k + 5, l + 5);
          this.noiseArray = this.initializeNoiseField(this.noiseArray, chunkX * b0, 0, chunkZ * b0, k, b3, l);

          for(int i1 = 0; i1 < b0; ++i1) {
             for(int j1 = 0; j1 < b0; ++j1) {
                for(int k1 = 0; k1 < b1; ++k1) {
                   double d0 = 0.125D;
                   double d1 = this.noiseArray[((i1 + 0) * l + j1 + 0) * b3 + k1 + 0];
                   double d2 = this.noiseArray[((i1 + 0) * l + j1 + 1) * b3 + k1 + 0];
                   double d3 = this.noiseArray[((i1 + 1) * l + j1 + 0) * b3 + k1 + 0];
                   double d4 = this.noiseArray[((i1 + 1) * l + j1 + 1) * b3 + k1 + 0];
                   double d5 = (this.noiseArray[((i1 + 0) * l + j1 + 0) * b3 + k1 + 1] - d1) * d0;
                   double d6 = (this.noiseArray[((i1 + 0) * l + j1 + 1) * b3 + k1 + 1] - d2) * d0;
                   double d7 = (this.noiseArray[((i1 + 1) * l + j1 + 0) * b3 + k1 + 1] - d3) * d0;
                   double d8 = (this.noiseArray[((i1 + 1) * l + j1 + 1) * b3 + k1 + 1] - d4) * d0;

                   for(int l1 = 0; l1 < 8; ++l1) {
                      double d9 = 0.25D;
                      double d10 = d1;
                      double d11 = d2;
                      double d12 = (d3 - d1) * d9;
                      double d13 = (d4 - d2) * d9;

                      for(int i2 = 0; i2 < 4; ++i2) {
                         int j2 = i2 + i1 * 4 << 11 | 0 + j1 * 4 << 7 | k1 * 8 + l1;
                         short short1 = 128;
                         j2 -= short1;
                         double d14 = 0.25D;
                         double d15 = (d11 - d10) * d14;
                         double d16 = d10 - d15;

                         for(int k2 = 0; k2 < 4; ++k2) {
                            if((d16 += d15) > 0.0D) {
                                idArray[j2 += short1] = (short)PlanetsBlocks.planetBottom.blockID;
                                metaArray[j2] = (byte) 3;
                            }
                         }

                         d10 += d12;
                         d11 += d13;
                      }

                      d1 += d5;
                      d2 += d6;
                      d3 += d7;
                      d4 += d8;
                   }
                }
             }
          }

       }
[font=monospace, sans-serif][/font]

[font=monospace, sans-serif][/font]
 
769
1
42
Не факт, что получится, один раз хотел взять, но потом передумал
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху