Lua method to get Minetest master directory
-
- New member
- Posts: 9
- Joined: Sat Nov 10, 2012 05:43
- Location: Seattle, WA
Lua method to get Minetest master directory
I am having some issues with mod programming where this would be very helpful. On the Dev Wiki, I see minetest.get_modpath() for individual mod folders, but I need something that can get the "mods" folder itself. While at it, something like minetest.get_masterpath() might be useful to some modders as well.
Last edited by Leifanator on Mon Jul 22, 2013 00:59, edited 1 time in total.
- webdesigner97
- Member
- Posts: 1328
- Joined: Mon Jul 30, 2012 19:16
- GitHub: webD97
- IRC: webdesigner97
- In-game: webdesigner97
- Location: Cologne, Germany
- Contact:
You could extract the minetest path out of minetest.get_worldpath()
Visit me: webD97.de | @GitHub | @DeviantArt
Mods: StreetsMod | Vehicles
Featured from my blog: Dockerize the Minetest server
On my own behalf: Chameleon - A PHP image manipulation library built around GD
Mods: StreetsMod | Vehicles
Featured from my blog: Dockerize the Minetest server
On my own behalf: Chameleon - A PHP image manipulation library built around GD
- webdesigner97
- Member
- Posts: 1328
- Joined: Mon Jul 30, 2012 19:16
- GitHub: webD97
- IRC: webdesigner97
- In-game: webdesigner97
- Location: Cologne, Germany
- Contact:
See this function (ported from PHP to Lua):
It splits a string (str) at every occurence of <div> and returns it as a list:
This should work, but I didn't test it
Code: Select all
function explode(div,str)
if (div == '') then
return nil
else
local pos,arr = 0,{}
for st,sp in function() return string.find(str,div,pos,true) end do
table.insert(arr,string.sub(str,pos,st-1))
pos = sp + 1
end
table.insert(arr,string.sub(str,pos))
return arr
end
end
Code: Select all
local minetestpath = minetest.get_worldpath()
--> C:\Users\Christian\Desktop\Minetest\bin\..\worlds\Singleplayer
minetestpath = explode("\\",minetestpath)
--> {"C:","Users","Christian","Desktop","Minetest","bin","..","worlds","Singleplayer"}
-- Now we remove the last four strings in the list and we have the minetest dir
minetestpath[table.getn(minetestpath) - 0] = nil
minetestpath[table.getn(minetestpath) - 1] = nil
minetestpath[table.getn(minetestpath) - 2] = nil
minetestpath[table.getn(minetestpath) - 3] = nil
--> {"C:","Users","Christian","Desktop","Minetest"}
-- Convert it to a string
minetestpath = table.concat(minetestpath,"\\")
Visit me: webD97.de | @GitHub | @DeviantArt
Mods: StreetsMod | Vehicles
Featured from my blog: Dockerize the Minetest server
On my own behalf: Chameleon - A PHP image manipulation library built around GD
Mods: StreetsMod | Vehicles
Featured from my blog: Dockerize the Minetest server
On my own behalf: Chameleon - A PHP image manipulation library built around GD
- PilzAdam
- Member
- Posts: 4026
- Joined: Fri Jul 20, 2012 16:19
- GitHub: PilzAdam
- IRC: PilzAdam
- Location: Germany
And why dont you use string:split()? https://github.com/minetest/minetest/bl ... .txt#L1046webdesigner97 wrote:See this function (ported from PHP to Lua):
It splits a string (str) at every occurence of <div> and returns it as a list:Code: Select all
function explode(div,str) if (div == '') then return nil else local pos,arr = 0,{} for st,sp in function() return string.find(str,div,pos,true) end do table.insert(arr,string.sub(str,pos,st-1)) pos = sp + 1 end table.insert(arr,string.sub(str,pos)) return arr end end
This should work, but I didn't test itCode: Select all
local minetestpath = minetest.get_worldpath() --> C:\Users\Christian\Desktop\Minetest\bin\..\worlds\Singleplayer minetestpath = explode("",minetestpath) --> {"C:","Users","Christian","Desktop","Minetest","bin","..","worlds","Singleplayer"} -- Now we remove the last four strings in the list and we have the minetest dir minetestpath[table.getn(minetestpath) - 0] = nil minetestpath[table.getn(minetestpath) - 1] = nil minetestpath[table.getn(minetestpath) - 2] = nil minetestpath[table.getn(minetestpath) - 3] = nil --> {"C:","Users","Christian","Desktop","Minetest"} -- Convert it to a string minetestpath = table.concat(minetestpath,"")
- webdesigner97
- Member
- Posts: 1328
- Joined: Mon Jul 30, 2012 19:16
- GitHub: webD97
- IRC: webdesigner97
- In-game: webdesigner97
- Location: Cologne, Germany
- Contact:
Cause I'm not that good at lua and don't know all functions (same for the API) But thx for the linkPilzAdam wrote:And why dont you use string:split()? https://github.com/minetest/minetest/bl ... .txt#L1046webdesigner97 wrote:See this function (ported from PHP to Lua):
It splits a string (str) at every occurence of <div> and returns it as a list:Code: Select all
function explode(div,str) if (div == '') then return nil else local pos,arr = 0,{} for st,sp in function() return string.find(str,div,pos,true) end do table.insert(arr,string.sub(str,pos,st-1)) pos = sp + 1 end table.insert(arr,string.sub(str,pos)) return arr end end
This should work, but I didn't test itCode: Select all
local minetestpath = minetest.get_worldpath() --> C:\Users\Christian\Desktop\Minetest\bin\..\worlds\Singleplayer minetestpath = explode("",minetestpath) --> {"C:","Users","Christian","Desktop","Minetest","bin","..","worlds","Singleplayer"} -- Now we remove the last four strings in the list and we have the minetest dir minetestpath[table.getn(minetestpath) - 0] = nil minetestpath[table.getn(minetestpath) - 1] = nil minetestpath[table.getn(minetestpath) - 2] = nil minetestpath[table.getn(minetestpath) - 3] = nil --> {"C:","Users","Christian","Desktop","Minetest"} -- Convert it to a string minetestpath = table.concat(minetestpath,"")
Visit me: webD97.de | @GitHub | @DeviantArt
Mods: StreetsMod | Vehicles
Featured from my blog: Dockerize the Minetest server
On my own behalf: Chameleon - A PHP image manipulation library built around GD
Mods: StreetsMod | Vehicles
Featured from my blog: Dockerize the Minetest server
On my own behalf: Chameleon - A PHP image manipulation library built around GD
-
- New member
- Posts: 9
- Joined: Sat Nov 10, 2012 05:43
- Location: Seattle, WA
Thanks, that worked.webdesigner97 wrote:See this function (ported from PHP to Lua):
It splits a string (str) at every occurence of <div> and returns it as a list:Code: Select all
function explode(div,str) if (div == '') then return nil else local pos,arr = 0,{} for st,sp in function() return string.find(str,div,pos,true) end do table.insert(arr,string.sub(str,pos,st-1)) pos = sp + 1 end table.insert(arr,string.sub(str,pos)) return arr end end
This should work, but I didn't test itCode: Select all
local minetestpath = minetest.get_worldpath() --> C:\Users\Christian\Desktop\Minetest\bin\..\worlds\Singleplayer minetestpath = explode("",minetestpath) --> {"C:","Users","Christian","Desktop","Minetest","bin","..","worlds","Singleplayer"} -- Now we remove the last four strings in the list and we have the minetest dir minetestpath[table.getn(minetestpath) - 0] = nil minetestpath[table.getn(minetestpath) - 1] = nil minetestpath[table.getn(minetestpath) - 2] = nil minetestpath[table.getn(minetestpath) - 3] = nil --> {"C:","Users","Christian","Desktop","Minetest"} -- Convert it to a string minetestpath = table.concat(minetestpath,"")
- webdesigner97
- Member
- Posts: 1328
- Joined: Mon Jul 30, 2012 19:16
- GitHub: webD97
- IRC: webdesigner97
- In-game: webdesigner97
- Location: Cologne, Germany
- Contact:
Yes, this might happen. But this function is more like a workaround, people can customize it if they think they need it or if it doesn't work correctly.kahrl wrote:Note that get_worldpath may at any point in the future collapse the "bin" and ".." parts, without warning. I think it already does if the world path was passed to minetest via the command line.
Visit me: webD97.de | @GitHub | @DeviantArt
Mods: StreetsMod | Vehicles
Featured from my blog: Dockerize the Minetest server
On my own behalf: Chameleon - A PHP image manipulation library built around GD
Mods: StreetsMod | Vehicles
Featured from my blog: Dockerize the Minetest server
On my own behalf: Chameleon - A PHP image manipulation library built around GD
Who is online
Users browsing this forum: No registered users and 4 guests