7.4 KiB
mcl_mapgen
Helps to avoid problems caused by 'chunk-in-shell' feature of mapgen.cpp.
It also queues your generators to run them in proper order:
mcl_mapgen.register_on_generated(lvm_callback_function, order_number)
Replacement of engine API function minetest.register_on_generated(function(vm_context))
It is still unsafe. Cavegen part can and will overwrite outer 1-block layer of the chunk which is expected to be generated.
Nodes marked as is_ground_content
could be overwritten. Air and water are usually 'ground content' too.
For Minetest 5.4 it doesn't recommended to place blocks within lvm callback function.
See https://git.minetest.land/MineClone2/MineClone2/issues/1395
lvm_callback_function
: chunk callback LVM function definition:function(vm_context)
:vm_context
will pass into next lvm callback function from the queue!vm_context
: a table which already contains some LVM data as the fields, and some of them can be added in your lvm callback function:vm
: curent voxel manipulator object itself;chunkseed
: seed of this mapchunk;minp
&maxp
: minimum and maximum chunk position;emin
&emax
: minimum and maximum chunk position WITH SHELL AROUND IT;area
: voxel area, can be helpful to access data;data
: LVM buffer data array, data loads into it before the callbacks;write
: set it to true in your lvm callback functionm, if you changeddata
and want to write it;param2_data
: LVM buffer data array ofparam2
, NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS - you load it yourself:vm_context.param2_data = vm_context.param2_data or vm_context.vm:get_param2_data(vm_context.lvm_param2_buffer)
write_param2
: set it to true in your lvm callback function, if you usedparam2_data
and want to write it;light
: LVM buffer data array of light, NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS - you load it yourself:vm_context.light = vm_context.light or vm_context.vm.get_light_data(vm_context.lvm_light_buffer)
write_light
: set it to true in your lvm callback function, if you usedlight
and want to write it;lvm_param2_buffer
: staticparam2
buffer pointer, used to loadparam2_data
array;shadow
: set it to false to disable shadow propagation;heightmap
: mapgen object contanting y coordinates of ground level,- NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS - load it yourself:
vm_context.heightmap = vm_context.heightmap or minetest.get_mapgen_object('heightmap')
biomemap
: mapgen object contanting biome IDs of nodes,- NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS - load it yourself:
vm_context.biomemap = vm_context.biomemap or minetest.get_mapgen_object('biomemap')
heatmap
: mapgen object contanting temperature values of nodes,- NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS - load it yourself:
vm_context.heatmap = vm_context.heatmap or minetest.get_mapgen_object('heatmap')
humiditymap
: mapgen object contanting humidity values of nodes,- NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS - load it yourself:
vm_context.humiditymap = vm_context.humiditymap or minetest.get_mapgen_object('humiditymap')
gennotify
: mapgen object contanting mapping table of structures, see Minetest Lua API for explanation,- NO ANY DATA LOADS INTO IT BEFORE THE CALLBACKS - load it yourself:
vm_context.gennotify = vm_context.gennotify or minetest.get_mapgen_object('gennotify')
order_number
(optional): the less, the earlier,- e.g.
mcl_mapgen.order.BUILDINGS
ormcl_mapgen.order.LARGE_BUILDINGS
- e.g.
mcl_mapgen.register_mapgen_block_lvm(lvm_callback_function, order_number)
Registers lvm callback function to be called when current block (usually 16x16x16 nodes) generation is REALLY 100% finished.
vm_context
passes into lvm callback function.
lvm_callback_function
: the block callback LVM function definition - same as for chunks - see definition example above;order_number
(optional): the less, the earlier,- e.g.
mcl_mapgen.order.BUILDINGS
ormcl_mapgen.order.LARGE_BUILDINGS
- e.g.
mcl_mapgen.register_mapgen_block(node_callback_function, order_number)
Registers node_callback function to be called when current block (usually 16x16x16 nodes) generation is REALLY 100% finished.
node_callback_function
: node callback function definition:function(minp, maxp, seed)
:minp
&maxp
: minimum and maximum block position;seed
: seed of this mapblock;
order_number
(optional): the less, the earlier,- e.g.
mcl_mapgen.order.BUILDINGS
ormcl_mapgen.order.LARGE_BUILDINGS
- e.g.
mcl_mapgen.register_mapgen(callback_function, order_number)
Registers callback function to be called when current chunk generation is REALLY 100% finished.
For LVM it's the most frustrating function from this mod.
It can't provide you access to mapgen objects. They are probably gone long ago.
Don't use it for accessing mapgen objects please.
To use VM you have to run vm_context.vm = mcl_mapgen.get_voxel_manip(vm_context.emin, vm_context.emax)
.
callback_function
: callback function definition:function(minp, maxp, seed, vm_context)
:minp
&maxp
: minimum and maximum block position;seed
: seed of this mapblock;vm_context
: a table - see description above.
order_number
(optional): the less, the earlier.
mcl_mapgen.register_mapgen_lvm(lvm_callback_function, order_number)
Registers lvm callback function to be called when current chunk generation is REALLY 100% finished.
It's the most frustrating function from this mod. It can't provide you access to mapgen objects. They are probably gone long ago.
Don't use it for accessing mapgen objects please.
vm_context
passes into lvm callback function.
lvm_callback_function
: the block callback LVM function definition - same as above;order_number
(optional): the less, the earlier.
mcl_mapgen.get_far_node(pos)
Returns node if it is generated, otherwise returns {name = "ignore"}
.
mcl_mapgen.clamp_to_chunk(x, size)
Returns new x
, slighty tuned to make structure of size size
be within single chunk side of 80 nodes.
function mcl_mapgen.get_chunk_beginning(x)
Returns chunk beginning of x
. It is the same as minp.axis
for per-chunk callbacks, but we don't always have minp
.
Constants:
mcl_mapgen.EDGE_MIN
,mcl_mapgen.EDGE_MAX
- world edges, min & max.mcl_mapgen.seed
,mcl_mapgen.name
- mapgen seed & name.mcl_mapgen.v6
,mcl_mapgen.superflat
,mcl_mapgen.singlenode
- is mapgen v6, superflat, singlenode.mcl_mapgen.normal
is mapgen normal (not superflat or singlenode).