* Sets the noiseparams setting of `name` to the noiseparams table specified in `noiseparams`.
* `set_default` is an optional boolean (default: `true`) that specifies whether the setting
should be applied to the default config or current active config
+* `minetest.generate_ores(vm)`
+ * Generate all registered ores within the VoxelManip specified by `vm`.
+* `minetest.generate_decorations(vm)`
+ * Generate all registered decorations within the VoxelManip specified by `vm`.
* `minetest.clear_objects()`
* clear all objects in the environments
* `minetest.line_of_sight(pos1, pos2, stepsize)`: returns `boolean, pos`
GenerateNotifier::GenerateNotifier()
{
+ m_notify_on = 0;
}
}
-size_t DecorationManager::placeAllDecos(Mapgen *mg, u32 seed, v3s16 nmin, v3s16 nmax)
+size_t DecorationManager::placeAllDecos(Mapgen *mg, u32 blockseed,
+ v3s16 nmin, v3s16 nmax)
{
size_t nplaced = 0;
if (!deco)
continue;
- nplaced += deco->placeDeco(mg, seed, nmin, nmax);
- seed++;
+ nplaced += deco->placeDeco(mg, blockseed, nmin, nmax);
+ blockseed++;
}
return nplaced;
}
v3s16 pos(x, y, z);
- if (generate(mg, &ps, max_y, pos))
+ if (generate(mg->vm, &ps, max_y, pos))
mg->gennotify.addEvent(GENNOTIFY_DECORATION, pos, id);
}
}
}
-size_t DecoSimple::generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p)
+size_t DecoSimple::generate(ManualMapVoxelManipulator *vm, PseudoRandom *pr,
+ s16 max_y, v3s16 p)
{
- ManualMapVoxelManipulator *vm = mg->vm;
-
if (!canPlaceDecoration(vm, p))
return 0;
///////////////////////////////////////////////////////////////////////////////
-size_t DecoSchematic::generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p)
+size_t DecoSchematic::generate(ManualMapVoxelManipulator *vm, PseudoRandom *pr,
+ s16 max_y, v3s16 p)
{
- ManualMapVoxelManipulator *vm = mg->vm;
-
if (flags & DECO_PLACE_CENTER_X)
p.X -= (schematic->size.X + 1) / 2;
if (flags & DECO_PLACE_CENTER_Y)
if (flags & DECO_PLACE_CENTER_Z)
p.Z -= (schematic->size.Z + 1) / 2;
+ if (!vm->m_area.contains(p))
+ return 0;
+
u32 vi = vm->m_area.index(p);
content_t c = vm->m_data[vi].getContent();
if (!CONTAINS(c_place_on, c))
Rotation rot = (rotation == ROTATE_RAND) ?
(Rotation)pr->range(ROTATE_0, ROTATE_270) : rotation;
- schematic->blitToVManip(p, vm, rot, false, mg->ndef);
+ schematic->blitToVManip(p, vm, rot, false, m_ndef);
return 1;
}
virtual void resolveNodeNames(NodeResolveInfo *nri);
size_t placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
- size_t placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
+ //size_t placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
- virtual size_t generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p) = 0;
+ virtual size_t generate(ManualMapVoxelManipulator *vm, PseudoRandom *pr,
+ s16 max_y, v3s16 p) = 0;
virtual int getHeight() = 0;
};
virtual void resolveNodeNames(NodeResolveInfo *nri);
bool canPlaceDecoration(ManualMapVoxelManipulator *vm, v3s16 p);
- virtual size_t generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p);
+ virtual size_t generate(ManualMapVoxelManipulator *vm, PseudoRandom *pr,
+ s16 max_y, v3s16 p);
virtual int getHeight();
};
Schematic *schematic;
std::string filename;
- virtual size_t generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p);
+ virtual size_t generate(ManualMapVoxelManipulator *vm, PseudoRandom *pr,
+ s16 max_y, v3s16 p);
virtual int getHeight();
};
void clear();
- size_t placeAllDecos(Mapgen *mg, u32 seed, v3s16 nmin, v3s16 nmax);
+ size_t placeAllDecos(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
};
#endif
}
-size_t OreManager::placeAllOres(Mapgen *mg, u32 seed, v3s16 nmin, v3s16 nmax)
+size_t OreManager::placeAllOres(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
{
size_t nplaced = 0;
if (!ore)
continue;
- nplaced += ore->placeOre(mg, seed, nmin, nmax);
- seed++;
+ nplaced += ore->placeOre(mg, blockseed, nmin, nmax);
+ blockseed++;
}
return nplaced;
///////////////////////////////////////////////////////////////////////////////
-void OreScatter::generate(ManualMapVoxelManipulator *vm, int seed,
+void OreScatter::generate(ManualMapVoxelManipulator *vm, int mapseed,
u32 blockseed, v3s16 nmin, v3s16 nmax)
{
PseudoRandom pr(blockseed);
int z0 = pr.range(nmin.Z, nmax.Z - csize + 1);
if ((flags & OREFLAG_USE_NOISE) &&
- (NoisePerlin3D(&np, x0, y0, z0, seed) < nthresh))
+ (NoisePerlin3D(&np, x0, y0, z0, mapseed) < nthresh))
continue;
for (int z1 = 0; z1 != csize; z1++)
///////////////////////////////////////////////////////////////////////////////
-void OreSheet::generate(ManualMapVoxelManipulator *vm, int seed,
+void OreSheet::generate(ManualMapVoxelManipulator *vm, int mapseed,
u32 blockseed, v3s16 nmin, v3s16 nmax)
{
PseudoRandom pr(blockseed + 4234);
int sz = nmax.Z - nmin.Z + 1;
noise = new Noise(&np, 0, sx, sz);
}
- noise->seed = seed + y_start;
+ noise->seed = mapseed + y_start;
noise->perlinMap2D(nmin.X, nmin.Z);
size_t index = 0;
///////////////////////////////////////////////////////////////////////////////
-void OreBlob::generate(ManualMapVoxelManipulator *vm, int seed, u32 blockseed,
- v3s16 nmin, v3s16 nmax)
+void OreBlob::generate(ManualMapVoxelManipulator *vm, int mapseed,
+ u32 blockseed, v3s16 nmin, v3s16 nmax)
{
PseudoRandom pr(blockseed + 2404);
MapNode n_ore(c_ore, 0, ore_param2);
int nblobs = volume / clust_scarcity;
if (!noise)
- noise = new Noise(&np, seed, csize, csize, csize);
+ noise = new Noise(&np, mapseed, csize, csize, csize);
for (int i = 0; i != nblobs; i++) {
int x0 = pr.range(nmin.X, nmax.X - csize + 1);
}
-void OreVein::generate(ManualMapVoxelManipulator *vm, int seed, u32 blockseed,
- v3s16 nmin, v3s16 nmax)
+void OreVein::generate(ManualMapVoxelManipulator *vm, int mapseed,
+ u32 blockseed, v3s16 nmin, v3s16 nmax)
{
PseudoRandom pr(blockseed + 520);
MapNode n_ore(c_ore, 0, ore_param2);
int sx = nmax.X - nmin.X + 1;
int sy = nmax.Y - nmin.Y + 1;
int sz = nmax.Z - nmin.Z + 1;
- noise = new Noise(&np, seed, sx, sy, sz);
- noise2 = new Noise(&np, seed + 436, sx, sy, sz);
+ noise = new Noise(&np, mapseed, sx, sy, sz);
+ noise2 = new Noise(&np, mapseed + 436, sx, sy, sz);
}
bool noise_generated = false;
virtual void resolveNodeNames(NodeResolveInfo *nri);
size_t placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
- virtual void generate(ManualMapVoxelManipulator *vm, int seed,
+ virtual void generate(ManualMapVoxelManipulator *vm, int mapseed,
u32 blockseed, v3s16 nmin, v3s16 nmax) = 0;
};
public:
static const bool NEEDS_NOISE = false;
- virtual void generate(ManualMapVoxelManipulator *vm, int seed,
+ virtual void generate(ManualMapVoxelManipulator *vm, int mapseed,
u32 blockseed, v3s16 nmin, v3s16 nmax);
};
public:
static const bool NEEDS_NOISE = true;
- virtual void generate(ManualMapVoxelManipulator *vm, int seed,
+ virtual void generate(ManualMapVoxelManipulator *vm, int mapseed,
u32 blockseed, v3s16 nmin, v3s16 nmax);
};
public:
static const bool NEEDS_NOISE = true;
- virtual void generate(ManualMapVoxelManipulator *vm, int seed,
+ virtual void generate(ManualMapVoxelManipulator *vm, int mapseed,
u32 blockseed, v3s16 nmin, v3s16 nmax);
};
virtual ~OreVein();
- virtual void generate(ManualMapVoxelManipulator *vm, int seed,
+ virtual void generate(ManualMapVoxelManipulator *vm, int mapseed,
u32 blockseed, v3s16 nmin, v3s16 nmax);
};
void clear();
- size_t placeAllOres(Mapgen *mg, u32 seed, v3s16 nmin, v3s16 nmax);
+ size_t placeAllOres(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
};
#endif
return 1;
}
+// generate_ores(vm, [ore_id])
+int ModApiMapgen::l_generate_ores(lua_State *L)
+{
+ EmergeManager *emerge = getServer(L)->getEmergeManager();
+
+ Mapgen mg;
+ mg.seed = emerge->params.seed;
+ mg.vm = LuaVoxelManip::checkobject(L, 1)->vm;
+ mg.ndef = getServer(L)->getNodeDefManager();
+
+ u32 blockseed = Mapgen::getBlockSeed(mg.vm->m_area.MinEdge, mg.seed);
+
+ emerge->oremgr->placeAllOres(&mg, blockseed,
+ mg.vm->m_area.MinEdge, mg.vm->m_area.MaxEdge);
+
+ return 0;
+}
+
+// generate_decorations(vm, [deco_id])
+int ModApiMapgen::l_generate_decorations(lua_State *L)
+{
+ EmergeManager *emerge = getServer(L)->getEmergeManager();
+
+ Mapgen mg;
+ mg.seed = emerge->params.seed;
+ mg.vm = LuaVoxelManip::checkobject(L, 1)->vm;
+ mg.ndef = getServer(L)->getNodeDefManager();
+
+ u32 blockseed = Mapgen::getBlockSeed(mg.vm->m_area.MinEdge, mg.seed);
+
+ emerge->decomgr->placeAllDecos(&mg, blockseed,
+ mg.vm->m_area.MinEdge, mg.vm->m_area.MaxEdge);
+
+ return 0;
+}
+
// place_schematic(p, schematic, rotation, replacement)
int ModApiMapgen::l_place_schematic(lua_State *L)
{
API_FCT(clear_registered_decorations);
API_FCT(clear_registered_ores);
+ API_FCT(generate_ores);
+ API_FCT(generate_decorations);
+
API_FCT(create_schematic);
API_FCT(place_schematic);
}
// clear_registered_decorations()
static int l_clear_registered_decorations(lua_State *L);
+ // generate_ores(vm)
+ static int l_generate_ores(lua_State *L);
+
+ // generate_decorations(vm)
+ static int l_generate_decorations(lua_State *L);
+
// clear_registered_ores
static int l_clear_registered_ores(lua_State *L);
*/
class LuaVoxelManip : public ModApiBase {
private:
- ManualMapVoxelManipulator *vm;
std::map<v3s16, MapBlock *> modified_blocks;
bool is_mapgen_vm;
static int l_get_emerged_area(lua_State *L);
public:
+ ManualMapVoxelManipulator *vm;
+
LuaVoxelManip(ManualMapVoxelManipulator *mmvm, bool is_mapgen_vm);
LuaVoxelManip(Map *map, v3s16 p1, v3s16 p2);
LuaVoxelManip(Map *map);