- 395
- 34
- 90
Дратути
Декорировал я биом, сделал так чтобы все блоки выше 100y были в снегу все работает но почему-то появляются такие "артефакты"

для дебага сделал так чтобы при вызове
в итоге похоже что
причем такие "артефакты" не очень частые в основном все работает нормально, но они все же есть(
опять магия какаято...
Декорировал я биом, сделал так чтобы все блоки выше 100y были в снегу все работает но почему-то появляются такие "артефакты"

для дебага сделал так чтобы при вызове
decorate в начале чанка генерировался бедроковый столб,в итоге похоже что
decorate вообще не вызывается для этих чанков, несмотря на то что в этом чанке в основном мой биом!
decorate:
@Override
public void decorate(World worldIn, Random rand, BlockPos pos) {
Chunk chunk = worldIn.getChunkFromBlockCoords(pos);
byte[] biomeArray = chunk.getBiomeArray();
byte[] taintBiomeArray = new byte[16 * 16];
for (int i = 0; i != 16; i++) {
for (int j = 0; j != 16; j++) {
byte k = biomeArray[i + j * 16];
Biome biome = Biome.getBiomeForId(k);
if (biome != null) {
if (BiomeDictionary.hasType(biome, InitBiome.TAINT_TYPE_L)) {
taintBiomeArray[i + j * 16] = 1;
} else if (BiomeDictionary.hasType(biome, InitBiome.TAINT_TYPE_EDGE)) {
taintBiomeArray[i + j * 16] = 2;
}
}
}
}
decorateNormal(worldIn, rand, chunk.getPos(), taintBiomeArray);
decorateEdge(worldIn, rand, chunk.getPos(), taintBiomeArray);
}
public void decorateEdge(World worldIn, Random rand, ChunkPos pos, byte[] biomeArray) {
UltraMutableBlockPos blockPos = new UltraMutableBlockPos(pos); // моя обертка для BlockPos, в конструкторе (x, z) от ChunkPos умножаются на 16
for (int y = 0; y != worldIn.getHeight() - 56; y++) { // дебаг
blockPos.setY(y);
worldIn.setBlockState(blockPos, Blocks.BEDROCK.getDefaultState());
}
blockPos.setY(0);
for (int i = 0; i != 16; i++) {
for (int j = 0; j != 16; j++) {
if (biomeArray[i + j * 16] == 2) {
blockPos.pushPos(); // сохранение текущей позиции на стек, типа OpenGL)
blockPos.add(i, 0, j)
blockPos.setY(HandlerR.calculateGenerationHeight(worldIn, blockPos.getX(), blockPos.getZ()));
if (blockPos.getY() >= 100) {
worldIn.setBlockState(blockPos.up(), Blocks.SNOW_LAYER.getDefaultState());
}
blockPos.popPos(); // загрузка позиции со стека
}
}
}
}
причем такие "артефакты" не очень частые в основном все работает нормально, но они все же есть(
опять магия какаято...
Последнее редактирование:
