private IBlockGenerator GetBlockGenerator(IBlockGenerator[] generators, byte seed)
{
var totalweight = generators.Sum(w => w.Weight);
var f = ((double)totalweight / 256);
//Determine which generator to use
var r = seed * f; //Determine "random" number from hash from 0 .. totalweight
int g = -1;
while (r >= 0)
r -= generators[++g].Weight;
return generators[g];
}