+ virtual ~MapgenFactory() {}
+};
+
+enum MapgenObject {
+ MGOBJ_VMANIP,
+ MGOBJ_HEIGHTMAP,
+ MGOBJ_BIOMEMAP,
+ MGOBJ_HEATMAP,
+ MGOBJ_HUMIDMAP
+};
+
+enum OreType {
+ ORE_SCATTER,
+ ORE_SHEET,
+ ORE_CLAYLIKE
+};
+
+#define ORE_RANGE_ACTUAL 1
+#define ORE_RANGE_MIRROR 2
+
+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;
+};
+
+class OreScatter : public Ore {
+ ~OreScatter() {}
+ virtual void generate(ManualMapVoxelManipulator *vm, int seed,
+ u32 blockseed, v3s16 nmin, v3s16 nmax);
+};
+
+class OreSheet : public Ore {
+ ~OreSheet() {}
+ virtual void generate(ManualMapVoxelManipulator *vm, int seed,
+ u32 blockseed, v3s16 nmin, v3s16 nmax);
+};
+
+Ore *createOre(OreType type);
+
+
+enum DecorationType {
+ DECO_SIMPLE,
+ DECO_SCHEMATIC,
+ DECO_LSYSTEM