+ 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;
+};
+
+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 = 1,
+ DECO_SCHEMATIC,
+ DECO_LSYSTEM
+};
+
+#if 0
+struct CutoffData {
+ VoxelArea a;
+ Decoration *deco;
+ //v3s16 p;
+ //v3s16 size;
+ //s16 height;
+
+ CutoffData(s16 x, s16 y, s16 z, s16 h) {
+ p = v3s16(x, y, z);
+ height = h;
+ }
+};
+#endif
+
+class Decoration {
+public:
+ INodeDefManager *ndef;
+
+ int mapseed;
+ std::string place_on_name;
+ content_t c_place_on;
+ s16 sidelen;
+ float fill_ratio;
+ NoiseParams *np;
+
+ std::set<u8> biomes;
+ //std::list<CutoffData> cutoffs;
+ //JMutex cutoff_mutex;
+
+ Decoration();
+ virtual ~Decoration();
+
+ virtual void resolveNodeNames(INodeDefManager *ndef);
+ void placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
+ void placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
+
+ virtual void generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p) = 0;
+ virtual int getHeight() = 0;
+ virtual std::string getName() = 0;