mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Add core.find_nodes_with_meta() script API
This commit is contained in:
parent
b45df9d6a7
commit
b785577f03
7 changed files with 89 additions and 20 deletions
34
src/map.cpp
34
src/map.cpp
|
@ -1890,6 +1890,40 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
|
|||
}
|
||||
}
|
||||
|
||||
std::vector<v3s16> Map::findNodesWithMetadata(v3s16 p1, v3s16 p2)
|
||||
{
|
||||
std::vector<v3s16> positions_with_meta;
|
||||
|
||||
sortBoxVerticies(p1, p2);
|
||||
v3s16 bpmin = getNodeBlockPos(p1);
|
||||
v3s16 bpmax = getNodeBlockPos(p2);
|
||||
|
||||
for (s16 z = bpmin.Z; z <= bpmax.Z; z++)
|
||||
for (s16 y = bpmin.Y; y <= bpmax.Y; y++)
|
||||
for (s16 x = bpmin.X; x <= bpmax.X; x++) {
|
||||
v3s16 blockpos(x, y, z);
|
||||
|
||||
MapBlock *block = getBlockNoCreateNoEx(blockpos);
|
||||
if (!block) {
|
||||
verbosestream << "Map::getNodeMetadata(): Need to emerge "
|
||||
<< PP(blockpos) << std::endl;
|
||||
block = emergeBlock(blockpos, false);
|
||||
}
|
||||
if (!block) {
|
||||
infostream << "WARNING: Map::getNodeMetadata(): Block not found"
|
||||
<< std::endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
v3s16 p_base = blockpos * MAP_BLOCKSIZE;
|
||||
std::vector<v3s16> keys = block->m_node_metadata.getAllKeys();
|
||||
for (size_t i = 0; i != keys.size(); i++)
|
||||
positions_with_meta.push_back(keys[i] + p_base);
|
||||
}
|
||||
|
||||
return positions_with_meta;
|
||||
}
|
||||
|
||||
NodeMetadata *Map::getNodeMetadata(v3s16 p)
|
||||
{
|
||||
v3s16 blockpos = getNodeBlockPos(p);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue