forked from Mirrorlandia_minetest/minetest
Schematic: Add force_placement parameter to minetest.place_structure API
This commit is contained in:
parent
3570f3e396
commit
c163859057
@ -1595,11 +1595,13 @@ minetest.create_schematic(p1, p2, probability_list, filename, slice_prob_list)
|
|||||||
^ If slice probability list is nil, no slice probabilities are applied.
|
^ If slice probability list is nil, no slice probabilities are applied.
|
||||||
^ Saves schematic in the Minetest Schematic format to filename.
|
^ Saves schematic in the Minetest Schematic format to filename.
|
||||||
|
|
||||||
minetest.place_schematic(pos, schematic, rotation, replacements)
|
minetest.place_schematic(pos, schematic, rotation, replacements, force_placement)
|
||||||
^ Place the schematic specified by schematic (see: Schematic specifier) at pos.
|
^ Place the schematic specified by schematic (see: Schematic specifier) at pos.
|
||||||
^ Rotation can be "0", "90", "180", "270", or "random".
|
^ Rotation can be "0", "90", "180", "270", or "random".
|
||||||
^ If the rotation parameter is omitted, the schematic is not rotated.
|
^ If the rotation parameter is omitted, the schematic is not rotated.
|
||||||
^ replacements = {{"oldname", "convert_to"}, ...}
|
^ replacements = {{"oldname", "convert_to"}, ...}
|
||||||
|
^ force_placement is a boolean indicating whether nodes other than air and
|
||||||
|
^ ignore are replaced by the schematic
|
||||||
|
|
||||||
Random:
|
Random:
|
||||||
minetest.get_connected_players() -> list of ObjectRefs
|
minetest.get_connected_players() -> list of ObjectRefs
|
||||||
|
@ -652,7 +652,7 @@ void DecoSchematic::blitToVManip(v3s16 p, ManualMapVoxelManipulator *vm,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DecoSchematic::placeStructure(Map *map, v3s16 p) {
|
void DecoSchematic::placeStructure(Map *map, v3s16 p, bool force_placement) {
|
||||||
assert(schematic != NULL);
|
assert(schematic != NULL);
|
||||||
ManualMapVoxelManipulator *vm = new ManualMapVoxelManipulator(map);
|
ManualMapVoxelManipulator *vm = new ManualMapVoxelManipulator(map);
|
||||||
|
|
||||||
@ -673,7 +673,7 @@ void DecoSchematic::placeStructure(Map *map, v3s16 p) {
|
|||||||
v3s16 bp2 = getNodeBlockPos(p + s - v3s16(1,1,1));
|
v3s16 bp2 = getNodeBlockPos(p + s - v3s16(1,1,1));
|
||||||
vm->initialEmerge(bp1, bp2);
|
vm->initialEmerge(bp1, bp2);
|
||||||
|
|
||||||
blitToVManip(p, vm, rot, true);
|
blitToVManip(p, vm, rot, force_placement);
|
||||||
|
|
||||||
std::map<v3s16, MapBlock *> lighting_modified_blocks;
|
std::map<v3s16, MapBlock *> lighting_modified_blocks;
|
||||||
std::map<v3s16, MapBlock *> modified_blocks;
|
std::map<v3s16, MapBlock *> modified_blocks;
|
||||||
|
@ -313,7 +313,7 @@ public:
|
|||||||
void saveSchematicFile(INodeDefManager *ndef);
|
void saveSchematicFile(INodeDefManager *ndef);
|
||||||
|
|
||||||
bool getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2);
|
bool getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2);
|
||||||
void placeStructure(Map *map, v3s16 p);
|
void placeStructure(Map *map, v3s16 p, bool force_placement);
|
||||||
void applyProbabilities(v3s16 p0,
|
void applyProbabilities(v3s16 p0,
|
||||||
std::vector<std::pair<v3s16, u8> > *plist,
|
std::vector<std::pair<v3s16, u8> > *plist,
|
||||||
std::vector<std::pair<s16, u8> > *splist);
|
std::vector<std::pair<s16, u8> > *splist);
|
||||||
|
@ -599,9 +599,8 @@ int ModApiMapgen::l_place_schematic(lua_State *L)
|
|||||||
dschem.rotation = (Rotation)rot;
|
dschem.rotation = (Rotation)rot;
|
||||||
|
|
||||||
if (lua_istable(L, 4)) {
|
if (lua_istable(L, 4)) {
|
||||||
int index = 4;
|
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
while (lua_next(L, index) != 0) {
|
while (lua_next(L, 4) != 0) {
|
||||||
// key at index -2 and value at index -1
|
// key at index -2 and value at index -1
|
||||||
lua_rawgeti(L, -1, 1);
|
lua_rawgeti(L, -1, 1);
|
||||||
std::string replace_from = lua_tostring(L, -1);
|
std::string replace_from = lua_tostring(L, -1);
|
||||||
@ -615,6 +614,10 @@ int ModApiMapgen::l_place_schematic(lua_State *L)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool force_placement = true;
|
||||||
|
if (lua_isboolean(L, 5))
|
||||||
|
force_placement = lua_toboolean(L, 5);
|
||||||
|
|
||||||
if (!dschem.filename.empty()) {
|
if (!dschem.filename.empty()) {
|
||||||
if (!dschem.loadSchematicFile()) {
|
if (!dschem.loadSchematicFile()) {
|
||||||
errorstream << "place_schematic: failed to load schematic file '"
|
errorstream << "place_schematic: failed to load schematic file '"
|
||||||
@ -624,7 +627,7 @@ int ModApiMapgen::l_place_schematic(lua_State *L)
|
|||||||
dschem.resolveNodeNames(ndef);
|
dschem.resolveNodeNames(ndef);
|
||||||
}
|
}
|
||||||
|
|
||||||
dschem.placeStructure(map, p);
|
dschem.placeStructure(map, p, force_placement);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user