Allow both main thread & mapgen env execution
parent
14cc75a48d
commit
b6055c76fb
19
API.md
19
API.md
|
@ -3,10 +3,27 @@
|
|||
This mod is built in a way to be easy to change the underground world.
|
||||
The API is written in a way to be very similar to the Minetest API.
|
||||
|
||||
## Main thread vs. separate thread
|
||||
|
||||
This mod can both run on the main thread or on the mapgen thread. Generally,
|
||||
the mapgen thread is recommended, but it isn't supported for Minetest versions
|
||||
5.8 and under. The main thread works for everyone but it is slower.
|
||||
|
||||
This mod automatically determines whether a Minetest user is able to use the
|
||||
faster mapgen thread. As a result, you should use the function
|
||||
`ns_cavegen_init.register_cavegen_script`, with the input pointing to a file
|
||||
containing the script for the cave generator. This mod will ensure that your
|
||||
script is run on the appropriate thread.
|
||||
|
||||
If you wish to decide for yourself which thread to run the cave generator on,
|
||||
you can use the `ns_cavegen_mapgen_environment` option in your settings file
|
||||
(usually `minetest.conf`) to tell the cave generator whether to run the cave
|
||||
generator in the separate thread or not.
|
||||
|
||||
## Shapes
|
||||
|
||||
Underground caves have varying shapes, and the variable
|
||||
`noordstar.registered_shapes` contains all those definitions.
|
||||
`ns_cavegen.registered_shapes` contains all those definitions.
|
||||
|
||||
For shapes, the following functions are available:
|
||||
|
||||
|
|
22
README.md
22
README.md
|
@ -1,26 +1,14 @@
|
|||
# Noordstar caves
|
||||
# Noordstar cave generator
|
||||
|
||||
The Noordstar caves mod helps add more caves to MineClone2 and Mineclonia.
|
||||
The Noordstar caves mod helps add more caves to Minetest games.
|
||||
|
||||
For reference, see the [API documentation](API.md).
|
||||
|
||||
This mod offers no new features to the player, but it allows programmers to add
|
||||
custom caves into the world and to lower the world depth.
|
||||
|
||||
## Tested & supported on
|
||||
## Examples
|
||||
|
||||
The mod has been tested on the following games:
|
||||
The following mods are known to use this cave generator mod:
|
||||
|
||||
- [x] VoxeLibre
|
||||
- [ ] Mineclonia
|
||||
- [ ] MTG
|
||||
|
||||
The mod has been tested on the following mapgens:
|
||||
|
||||
- [x] v7
|
||||
- [ ] valleys
|
||||
- [ ] carpathian
|
||||
- [ ] v5
|
||||
- [ ] flat
|
||||
- [ ] fractal
|
||||
- [ ] singlenode
|
||||
- [ns_vl_caves](https://content.minetest.net/packages/Noordstar/ns_vl_caves/) for VoxeLibre & Mineclonia
|
||||
|
|
25
init.lua
25
init.lua
|
@ -1,3 +1,28 @@
|
|||
ns_cavegen_init = {}
|
||||
|
||||
-- Depending on the Minetest version, mapgen can be executed on the main thread
|
||||
-- or on the separate thread.
|
||||
|
||||
-- Optionally, you can override this value.
|
||||
local execute_in_mapgen_environment = false
|
||||
|
||||
function ns_cavegen_init.register_cavegen_script(file_name)
|
||||
-- As of Minetest 5.9.0, a Minetest server can crash without notice when
|
||||
-- a script is executed in the mapgen environment. This is likely related
|
||||
-- to a memory leak error:
|
||||
--
|
||||
-- If you would like to override this setting, you can adjust the
|
||||
-- "ns_cavegen_mapgen_environment" variable in your `minetest.conf` settings
|
||||
-- file.
|
||||
local use_mapgen_env = minetest.settings:get_bool("ns_cavegen_mapgen_environment", false)
|
||||
|
||||
if execute_in_mapgen_environment or use_mapgen_env then
|
||||
minetest.register_mapgen_script(file_name)
|
||||
else
|
||||
dofile(file_name)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_mapgen_script(
|
||||
minetest.get_modpath(minetest.get_current_modname()) .. "/script.lua"
|
||||
)
|
21
script.lua
21
script.lua
|
@ -33,6 +33,20 @@ local WORLD_DEPTH = -60
|
|||
|
||||
local internal = {}
|
||||
|
||||
function internal.init()
|
||||
local uses_mapgen_env = minetest.save_gen_notify
|
||||
|
||||
if uses_mapgen_env then
|
||||
minetest.register_on_generated(internal.mapgen)
|
||||
else
|
||||
minetest.register_on_generated(function(minp, maxp, blockseed)
|
||||
local vm = minetest.get_mapgen_object("voxelmanip")
|
||||
internal.mapgen(vm, minp, maxp, blockseed)
|
||||
vm:write_to_map()
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-------------------------------------------------------------------------------
|
||||
-------------------------------- INTERNAL API ---------------------------------
|
||||
|
@ -653,8 +667,13 @@ function internal.write_classified_node(vm_data, va, used_biomes, classified_nod
|
|||
|
||||
if ground_content_nodes[vm_node] == nil then
|
||||
local name = minetest.get_name_from_content_id(content_id)
|
||||
|
||||
if minetest.registered_nodes[name] == nil then
|
||||
ground_content_nodes[vm_node] = true
|
||||
else
|
||||
ground_content_nodes[vm_node] = minetest.registered_nodes[name].is_ground_content or true
|
||||
end
|
||||
end
|
||||
|
||||
if ground_content_nodes[vm_node] then
|
||||
vm_data[vi] = content_id
|
||||
|
@ -887,7 +906,6 @@ end
|
|||
-------------------------------------------------------------------------------
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
minetest.register_on_generated(internal.mapgen)
|
||||
|
||||
ns_cavegen = {
|
||||
cave_vastness = function(pos)
|
||||
|
@ -923,4 +941,5 @@ ns_cavegen = {
|
|||
unregister_shape = internal.unregister_shape,
|
||||
}
|
||||
|
||||
internal.init()
|
||||
-- dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/lua/register.lua")
|
Loading…
Reference in New Issue