+ virtual void makeChunk(BlockMakeData *data) {}
+ virtual int getGroundLevelAtPoint(v2s16 p) { return 0; }
+};
+
+struct MapgenFactory {
+ virtual Mapgen *createMapgen(int mgid, MapgenParams *params,
+ EmergeManager *emerge) = 0;
+ virtual MapgenSpecificParams *createMapgenParams() = 0;
+ virtual ~MapgenFactory() {}
+};
+
+class Ore {
+public:
+ std::string ore_name;
+ std::vector<std::string> wherein_names;
+ content_t ore;
+ std::vector<content_t> wherein; // the node to be replaced
+ u32 clust_scarcity; // ore cluster has a 1-in-clust_scarcity chance of appearing at a node
+ s16 clust_num_ores; // how many ore nodes are in a chunk
+ s16 clust_size; // how large (in nodes) a chunk of ore is
+ s16 height_min;
+ s16 height_max;
+ u8 ore_param2; // to set node-specific attributes
+ u32 flags; // attributes for this ore
+ float nthresh; // threshhold for noise at which an ore is placed
+ NoiseParams *np; // noise for distribution of clusters (NULL for uniform scattering)
+ Noise *noise;
+
+ Ore() {
+ ore = CONTENT_IGNORE;
+ np = NULL;
+ noise = NULL;
+ }
+
+ virtual ~Ore();
+
+ void resolveNodeNames(INodeDefManager *ndef);
+ void placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
+ virtual void generate(ManualMapVoxelManipulator *vm, int seed,
+ u32 blockseed, v3s16 nmin, v3s16 nmax) = 0;
+};