public virtual int GenerateLayer(int x, int z, int heightSoFar, float strength, bool justGetHeight = false) { if (layerType == LayerType.Structure) return heightSoFar; if (customTerrainLayer) { //Not the best place for this but it ensures that custom layers are always initialized before use if (customLayer == null) { var customLayerType = Type.GetType(terrainLayerClassName + ", " + typeof(LayerOverride).Assembly); customLayer = (LayerOverride)Activator.CreateInstance(customLayerType); customLayer.world = world; customLayer.noiseGen = noiseGen; customLayer.baseHeight = baseHeight; customLayer.frequency = frequency; customLayer.amplitude = amplitude; customLayer.exponent = exponent; customLayer.chanceToSpawnBlock = chanceToSpawnBlock; customLayer.blockName = blockName; if (layerType == LayerType.Structure) customLayer.structure = structure; } int newHeight = customLayer.GenerateLayer(x, z, heightSoFar, strength, justGetHeight); return newHeight; } Block blockToPlace = blockName; blockToPlace.modified = false; if (layerType == LayerType.Chance) { if (GetNoise(x, -10555, z, 1, 100, 1) < chanceToSpawnBlock) { if(!justGetHeight) world.SetBlock(new BlockPos(x, heightSoFar, z), blockToPlace, false); return heightSoFar + 1; } else { return heightSoFar; } } int height = GetNoise(x, 0, z, frequency, amplitude, exponent); height += baseHeight; height = (int)(height * strength); if (!justGetHeight) { if (layerType == LayerType.Absolute) { for (int y = heightSoFar; y < height + Config.Env.WorldMinY; y++) { world.SetBlock(new BlockPos(x, y, z), blockToPlace, false); } } else //additive or surface { for (int y = heightSoFar; y < height + heightSoFar; y++) { world.SetBlock(new BlockPos(x, y, z), blockToPlace, false); } } } if (layerType == LayerType.Additive || layerType == LayerType.Surface) { return heightSoFar + height; } else //absolute { if (Config.Env.WorldMinY + height > heightSoFar) return Config.Env.WorldMinY + height; } return heightSoFar; }
public virtual int GenerateLayer(int x, int z, int heightSoFar, float strength, bool justGetHeight = false) { if (layerType == LayerType.Structure) { return(heightSoFar); } if (customTerrainLayer) { //Not the best place for this but it ensures that custom layers are always initialized before use if (customLayer == null) { var customLayerType = Type.GetType(terrainLayerClassName + ", " + typeof(LayerOverride).Assembly); customLayer = (LayerOverride)Activator.CreateInstance(customLayerType); customLayer.world = world; customLayer.noiseGen = noiseGen; customLayer.baseHeight = baseHeight; customLayer.frequency = frequency; customLayer.amplitude = amplitude; customLayer.exponent = exponent; customLayer.chanceToSpawnBlock = chanceToSpawnBlock; customLayer.blockName = blockName; if (layerType == LayerType.Structure) { customLayer.structure = structure; } } int newHeight = customLayer.GenerateLayer(x, z, heightSoFar, strength, justGetHeight); return(newHeight); } Block blockToPlace = blockName; blockToPlace.modified = false; if (layerType == LayerType.Chance) { if (GetNoise(x, -10555, z, 1, 100, 1) < chanceToSpawnBlock) { if (!justGetHeight) { world.SetBlock(new BlockPos(x, heightSoFar, z), blockToPlace, false); } return(heightSoFar + 1); } else { return(heightSoFar); } } int height = GetNoise(x, 0, z, frequency, amplitude, exponent); height += baseHeight; height = (int)(height * strength); if (!justGetHeight) { if (layerType == LayerType.Absolute) { for (int y = heightSoFar; y < height + Config.Env.WorldMinY; y++) { world.SetBlock(new BlockPos(x, y, z), blockToPlace, false); } } else //additive or surface { for (int y = heightSoFar; y < height + heightSoFar; y++) { world.SetBlock(new BlockPos(x, y, z), blockToPlace, false); } } } if (layerType == LayerType.Additive || layerType == LayerType.Surface) { return(heightSoFar + height); } else //absolute { if (Config.Env.WorldMinY + height > heightSoFar) { return(Config.Env.WorldMinY + height); } } return(heightSoFar); }