Add proper logging + some fixes

This commit is contained in:
cora 2022-06-10 04:34:58 +02:00
parent a895292371
commit a0bed1d8bc
3 changed files with 21 additions and 30 deletions

@ -8,7 +8,7 @@ local adjacents = {
}
local function makegeode(pos,pr)
local size = pr:next(2,8)
local size = pr:next(4,7)
local p1 = vector.offset(pos,-size,-size,-size)
local p2 = vector.offset(pos,size,size,size)
local nn = minetest.find_nodes_in_area(p1,p2,{"group:material_stone"})
@ -47,21 +47,20 @@ local function makegeode(pos,pr)
minetest.set_node(vector.offset(v,0,1,0),{name="mcl_amethyst:amethyst_cluster",param2=1})
end
end
return true
end
mcl_structures.register_structure("geode",{
place_on = {"mcl_core:stone"},
spawn_by = {"air"},
num_spawn_by = 2,
fill_ratio = 0.002,
fill_ratio = 0.0001,
flags = "place_center_x, place_center_z, force_placement",
biomes = ocean_biomes,
y_max = mcl_vars.mg_overworld_max,
y_max = -24,
y_min = mcl_vars.mg_overworld_min,
filenames = schems,
y_offset = function(pr) return pr:next(-4,-2) end,
place_func = function(pos,def,pr)
local p = vector.new(pos.x + pr:next(-30,30),pos.y,pos.z + pr:next(-30,30))
makegeode(pos,pr)
end,
return makegeode(pos,pr)
end
})

@ -1,7 +1,9 @@
# mcl_structures
Structure placement API for MCL2.
## mcl_structures.register_structure(name,structure definition)
## mcl_structures.register_structure(name,structure definition,nospawn)
If nospawn is truthy the structure will not be placed by mapgen and the decoration parameters can be omitted. This is intended for secondary structures the placement of which gets triggered by the placement of other structures. It can also be used to register testing structures so they can be used with /spawnstruct.
### structure definition
{
fill_ratio = OR noise = {},
@ -14,9 +16,9 @@ Structure placement API for MCL2.
flags = (default: "place_center_x, place_center_z, force_placement")
(same as decoration def)
y_offset =, --can be a number or a function returning a number
filenames = {} OR place_func = function(pos,filename)
-- filenames can be a list of any schematics accepted by mcl_structures.place_schematic
after_place = function(pos)
filenames = {} OR place_func = function(pos,def,pr)
-- filenames can be a list of any schematics accepted by mcl_structures.place_schematic / minetest.place_schematic
after_place = function(pos,def,pr)
}
## mcl_structures.registered_structures
Table of the registered structure defintions indexed by name.

@ -1,24 +1,8 @@
mcl_structures.registered_structures = {}
--[[] structure def:
{
fill_ratio = OR noise = {}
biomes =
y_min =
y_max =
place_on =
spawn_by =
num_spawn_by =
flags = (default: "place_center_x, place_center_z, force_placement")
(same as decoration def)
y_offset =
filenames = {} OR place_func = function(pos,filename)
after_place = function(pos)
}
]]--
function mcl_structures.place_structure(pos, def, pr)
if not def then return end
local y_offset = 0
if type(def.y_offset) == "function" then
y_offset = def.y_offset(pr)
elseif def.y_offset then
@ -28,9 +12,15 @@ function mcl_structures.place_structure(pos, def, pr)
local file = def.filenames[pr:next(1,#def.filenames)]
local pp = vector.offset(pos,0,y_offset,0)
mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",def.after_place,pr,{pos,def})
minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos))
return true
elseif def.place_func and def.place_func(pos,def,pr) then
def.after_place(pos,def,pr)
if not def.after_place or ( def.after_place and def.after_place(pos,def,pr) ) then
minetest.log("action","[mcl_structures] "..def.name.." placed at "..minetest.pos_to_string(pos))
return true
end
end
minetest.log("warning","[mcl_structures] placing "..def.name.." failed at "..minetest.pos_to_string(pos))
end
function mcl_structures.register_structure(name,def,nospawn) --nospawn means it will be placed by another (non-nospawn) structure that contains it's structblock i.e. it will not be placed by mapgen directly