- 4,167
- 68
- 693
Всем привет!
Отмечу переход в высшую лигу вопросом
Можете подсказать где ошибка?
Пытаюсь удалить озёра, соприкасающиеся с определённым биомом.
Делаю это через IWorldGenerator. Проверяю все соседние блоки, и соседние блоки соседних блоков ))) И так, пока вся вода не исчезнет... По логике должно работать, но по факту убирается только ближайший к биому блок воды...
Что не так?
Код:
P.S. На счёт зависания данной системы не волнуюсь, океанов в мире нет.
Отмечу переход в высшую лигу вопросом
Можете подсказать где ошибка?
Пытаюсь удалить озёра, соприкасающиеся с определённым биомом.
Делаю это через IWorldGenerator. Проверяю все соседние блоки, и соседние блоки соседних блоков ))) И так, пока вся вода не исчезнет... По логике должно работать, но по факту убирается только ближайший к биому блок воды...
Что не так?
Код:
Код:
public class RemoveWaterGenerator implements IWorldGenerator {
private IBlockState waterUp = Blocks.WATER.getDefaultState();
@Override
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
if (world.provider.getDimension() == 69) removeLakes(world, chunkX*16, chunkZ*16);
}
public void removeLakes(World world, int chunkX, int chunkZ) {
for (int x = 0; x < 16; ++x) {
for (int z = 0; z < 16; ++z) {
BlockPos pos = new BlockPos(chunkX + x, 63, chunkZ + z);
Biome biome = world.getBiomeGenForCoords(pos);
if (biome instanceof BiomeMistBorder) {
if (world.getBlockState(pos.east()) == waterUp) removeWater(world, pos.east());
if (world.getBlockState(pos.north()) == waterUp) removeWater(world, pos.north());
if (world.getBlockState(pos.south()) == waterUp) removeWater(world, pos.south());
if (world.getBlockState(pos.west()) == waterUp) removeWater(world, pos.west());
}
}
}
}
private void removeWater(World world, BlockPos pos) {
world.setBlockToAir(pos);
if (world.getBlockState(pos.down()) == waterUp) removeWater(world, pos.down());
if (world.getBlockState(pos.east()) == waterUp) removeWater(world, pos.east());
if (world.getBlockState(pos.north()) == waterUp) removeWater(world, pos.north());
if (world.getBlockState(pos.south()) == waterUp) removeWater(world, pos.south());
if (world.getBlockState(pos.west()) == waterUp) removeWater(world, pos.west());
}
}
P.S. На счёт зависания данной системы не волнуюсь, океанов в мире нет.