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

Статус
В этой теме нельзя размещать новые ответы.
4,045
63
645
Кстати, у тебя в реплейсе написано:
Код:
var14 = biomegenbase.topBlockShort;
var14m = biomegenbase.topBlockMeta;
var14 = biomegenbase.fillerBlockShort;
var14m = biomegenbase.fillerBlockMeta;

А должно быть, скорее всего:
Код:
var14 = biomegenbase.topBlockShort;
var14m = biomegenbase.topBlockMeta;
var15 = biomegenbase.fillerBlockShort;
var15m = biomegenbase.fillerBlockMeta;
[merge_posts_bbcode]Добавлено: 07.06.2016 00:27:32[/merge_posts_bbcode]

Но это вряд ли поможет )))
 
769
1
42
Не, это важный нюанс, который я почему-то упустил...
[merge_posts_bbcode]Добавлено: 06.06.2016 22:37:39[/merge_posts_bbcode]

Вообщем 2 беды
1. Когда я приземляюсь в свое измерение дико лагает
2. Высота мира стала около 260-270
Возможно из-за этого 
Код:
int j2 = i2 + i1 * 4 << 12 | 0 + j1 * 4 << 8 | k1 * 8 + l1;
 
769
1
42
Нет, все также... Но все равно спасибо тебе за помощь)
[merge_posts_bbcode]Добавлено: 06.06.2016 23:05:04[/merge_posts_bbcode]

Вообщем как быть не знаю, знаю только что если использовать стандартные replaceBlocksForBiome и generateTerrain, то все ок будет, а если пытаться присваивать метадату, то не получается.
 
4,045
63
645
Кстати, ты знаешь, что ты меняешь мету не в том блоке,который записываешь в массив?
Код:
idArray[j2 += short1] = (short)PlanetsBlocks.planetBottom.blockID;
metaArray[j2] = (byte) 3;

Может надо так?
Код:
idArray[j2] = (short)PlanetsBlocks.planetBottom.blockID;
metaArray[j2 += short1] = (byte) 3;
[merge_posts_bbcode]Добавлено: 07.06.2016 01:19:29[/merge_posts_bbcode]

И куда ты дел всё остальное?
Код:
} else if (k1 * 8 + l1 < b2) {
   par3ArrayOfByte[j2 += short1] = (byte) Block.waterStill.blockID;
} else {
   par3ArrayOfByte[j2 += short1] = 0;
}
 
769
1
42
А я не хочу, чтобы вода была ниже общего уровня поверхности(ну то есть если ямка будет, то там вода)
[merge_posts_bbcode]Добавлено: 06.06.2016 23:28:49[/merge_posts_bbcode]

Liahim написал(а):
Может надо так?
Код:
idArray[j2] = (short)PlanetsBlocks.planetBottom.blockID;
metaArray[j2 += short1] = (byte) 3;
Когда так делаю, то краш 
Код:
java.lang.ArrayIndexOutOfBoundsException: -128
 
769
1
42
Работает, но полосы, ЭТИ ПОЛОСЫ... Я не знаю как чинить
 
769
1
42
Блин, и все ради того, чтобы я мог регулировать высоту биомов... Вот такая беда
 
769
1
42
Это я знаю, но у меня раньше провайдер был другой, поэтому я заменил на этот
[merge_posts_bbcode]Добавлено: 07.06.2016 09:20:52[/merge_posts_bbcode]

Давай пройдемся еще раз. Ты говорил, что дело точно не в реплейсе, щас я скину на всякий случай, а ты посмотри все ли верно, хорошо?
Код:
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) {
                                j2 += short1;
                                idArray[j2] = (short)PlanetsBlocks.planetBottom.blockID;
                                metaArray[j2] = (byte) 3;
                            }
                         }

                         d10 += d12;
                         d11 += d13;
                      }

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

       }

    public void replaceBlocksForBiome(int par1, int par2, short[] arrayOfIDs, byte[] arrayOfMeta, BiomeGenBase[] par4ArrayOfBiomeGenBase)
    {
        final int var5 = 20;
        final double var6 = 0.03125D;
        this.stoneNoise = this.noiseGen4.generateNoiseOctaves(this.stoneNoise, par1 * 16, par2 * 16, 0, 16, 16, 1, var6 * 2.0D, var6 * 2.0D, var6 * 2.0D);
        for (int var8 = 0; var8 < 16; ++var8)
        {
            for (int var9 = 0; var9 < 16; ++var9)
            {
                PlanetsBiomeGenBase biomegenbase = (PlanetsBiomeGenBase)(par4ArrayOfBiomeGenBase[var8 + var9 * 16]);
                int var12 = (int)(this.stoneNoise[var8 + var9 * 16] / 3.0D + 3.0D + this.rand.nextDouble() * 0.25D);
                int var13 = -1;
                short var14 = biomegenbase.topBlockShort;
                byte var14m = biomegenbase.topBlockMeta;
                short var15 = biomegenbase.fillerBlockShort;
                byte var15m = biomegenbase.fillerBlockMeta;

                for (int var16 = 255; var16 >= 0; --var16)
                {
                    final int index = this.getIndex(var8, var16, var9);

                    if (var16 <= 0 + this.rand.nextInt(5))
                    {
                        arrayOfIDs[index] = (short) Block.bedrock.blockID;
                    }
                    else
                    {
                        final int var18 = arrayOfIDs[index];

                        if (var18 == 0)
                        {
                            var13 = -1;
                        }
                        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;
                                }
                                else if (var16 >= var5 - -16 && var16 <= var5 + 1)
                                {
                                    var14 = biomegenbase.topBlockShort;
                                    var14m = biomegenbase.topBlockMeta;
                                    var15 = biomegenbase.fillerBlockShort;
                                    var15m = biomegenbase.fillerBlockMeta;
                                }

                                if (var16 < var5 && var14 == 0)
                                {
                                    var14 = 0;
                                }

                                var13 = var12;

                                if (var16 >= var5 - 1)
                                {
                                    arrayOfIDs[index] = var14;
                                    arrayOfMeta[index] = var14m;
                                }
                                else
                                {
                                    arrayOfIDs[index] = var15;
                                    arrayOfMeta[index] = var15m;
                                }
                            }
                            else if (var13 > 0)
                            {
                                --var13;
                                arrayOfIDs[index] = var15;
                                arrayOfMeta[index] = var15m;
                            }
                        }
                    }
                }
            }
        }
    }

       
       public Chunk provideChunk(int par1, int par2) {
            this.rand.setSeed(par1 * 341873128712L + par2 * 132897987541L);
            short[] ids = new short[65536];
            byte[] meta = new byte[65536];
            this.generateTerrain(par1, par2, ids, meta);
            this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, par1 * 16, par2 * 16, 16, 16);
            this.replaceBlocksForBiome(par1, par2, ids, meta, this.biomesForGeneration);
            this.caveGenerator.generate(this, this.worldObj, par1, par2, ids, meta);

            final Chunk var4 = new Chunk(this.worldObj, ids, meta, par1, par2);
            final byte[] var5 = var4.getBiomeArray();

            for (int var6 = 0; var6 < var5.length; ++var6) {
                var5[var6] = (byte) this.biomesForGeneration[var6].biomeID;
            }

            var4.generateSkylightMap();
            return var4;
        }
 
4,045
63
645
Сейчас уже нет времени...
Прочеши сам. Я ж говорю... Отрубаешь реплейс вообще...
Вот так:
Код:
//this.replaceBlocksForBiome(par1, par2, ids, meta, this.biomesForGeneration);

И смотришь результат...
И таким образом, постепенно отсекая лишнее, найдёшь место положение ошибки.
 
769
1
42
Проблема в самом generateTerrain (я вот не представляю что там отсекать)
 
769
1
42
Еще я заметил такую вещь, до внедрения short`a в эти три метода в provideChunk было так
Код:
byte[] abyte = new byte[32768];
После того как я добавил short нужно писать это
Код:
 short[] ids = new short[32768 * 2];
            byte[] meta = new byte[32768 * 2];
Вот только почему раньше ему хватало 32768 на весь мир, а сейчас необходимо в 2 раза больше причем с метой и шортом? Кстати, если чисто использовать byte, то все генерируется нормально
 
769
1
42
Понятно. Так что делать-то? Ведь с реплейсом все ок, остается только generate и provideChunk...
 
769
1
42
У кого-нибудь еще была такая фигня? Или быть может кто-то решение знает?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху