start to rewrite api: register nodes

master
ademant 2019-07-18 22:59:52 +02:00
parent 4ad92ab151
commit f4289fe51c
2 changed files with 276 additions and 176 deletions

View File

@ -120,184 +120,258 @@ end
minerdream.register_ore=function(i,tdef)
minerdream.items[i]={}
minerdream.itemdef[i]=tdef
tdef.ore_modname=minerdream.modname
if tdef.orig_modname then
tdef.ore_modname=tdef.orig_modname
end
local needs_mapgen=false
local mapgen_name=""
tdef.tier_string=""
tdef.tierd={}
if tdef.tier then
tdef.tierd=tier_definition[tostring(tdef.tier)]
tdef.tier_string=core.colorize("#A0A0A0", "tier: "..tdef.tier.." ("..tdef.tierd.desc..")")
minerdream.items[i].tierdef=table.copy(tier_definition[tostring(tdef.tier)])
end
-- local tierd=tier_definition[tostring(tdef.tier)]
-- register ores within stone
if tdef.ore ~= nil and tdef.lump ~= nil then
if tdef.ore.crack ~= nil then
minerdream.register_ore_lump(i,tdef)
if minerdream.items[i] == nil then
local ore_name=tdef.name or i
tdef.ore_name=ore_name
tdef.ore_modname=minerdream.modname
tdef.tier_string=""
tdef.tierd={}
if tdef.tier then
tdef.tierd=tier_definition[tostring(tdef.tier)]
tdef.tier_string=core.colorize("#A0A0A0", "tier: "..tdef.tier.." ("..tdef.tierd.desc..")")
tdef.tierdef=table.copy(tier_definition[tostring(tdef.tier)])
end
end
if tdef.ore ~= nil then
if tdef.ore.crack ~= nil then
minerdream.register_ore_lump(i,tdef)
else
-- if not already defined, then add mapgen parameter
if tdef.ore.scarcity ~= nil then
needs_mapgen = true
mapgen_name=minerdream.modname..":"..i
end
end
end
-- define mapgeneration for ores
if needs_mapgen then
minerdream.register_mapgen(i,tdef,mapgen_name,tdef.ore)
if tdef.nugget ~= nil then
minerdream.register_mapgen(i,tdef,mapgen_name.."_poor",tdef.nugget)
end
end
-- define ore dust
-- only makes sense if it can be grinded
if tdef.dust~= nil and minetest.get_modpath("technic") then
minerdream.register_dust(i,tdef)
end
-- register ingots
if tdef.ingot ~= nil then
minerdream.register_ingot(i,tdef)
end
if tdef.block ~= nil then
minerdream.register_block(i,tdef)
end
-- define armor and weapons
if minerdream.items[i].ingot_def ~= nil then
minerdream.register_weapons(i,tdef)
end
if tdef.tools~=nil then
local adef=tdef.tools
local ingot_name=minerdream.items[i].ingot_def.name
for _,tool in pairs({"pick","axe","sword","shovel","spear"}) do
if tdef.tools[tool] ~= nil then
local ttv=tdef.tools[tool]
for _,it in pairs({"range","maxlevel","tool_stick","fleshy","level","cracky","crumbly","choppy","snappy","use"}) do
if ttv[it] == nil and adef[it] ~= nil then
ttv[it] = adef[it]
end
end
local fleshy=ttv.fleshy or tdef.tools.fleshy or 4
local uses=ttv.use or tdef.tools.use
local tdesc=core.colorize("#"..tdef.tierd.color, S(i:gsub("^%l", string.upper)).." "..S(tool:gsub("^%l", string.upper)).."\n")..
core.colorize("#A0A0A0", "tier: "..tdef.tierd.name.." ("..tdef.tierd.desc..")")
-- check special attributes of tool definition and use fallback definitions
if uses then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Uses")..": "..uses)
end
if ttv.maxlevel then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Max. Level")..": "..ttv.maxlevel)
end
if ttv.fleshy then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Damage")..": "..fleshy)
end
tt_def={description=tdesc,uses=uses,
inventory_image=ttv.inventory_image or minerdream.modname.."_"..tool.."_"..i..".png",
range=ttv.range or tdef.tools.range or 2,
groups={weapon=1},
tool_capabilities={max_drop_level = 1,groupcaps={},
damage_groups = {fleshy = fleshy},},
}
-- check if values for capabitlites exist
for _,gc in pairs({"cracky","crumbly","choppy","snappy"}) do
if ttv[gc] ~= nil then
local ml = ttv.maxlevel or tdef.tools.maxlevel or 1
tt_def.tool_capabilities.groupcaps[gc]={times=table.copy(ttv[gc]),
uses=tdef.uses,maxlevel=ml}
end
end
toolname=minerdream.modname..":"..tool.."_"..i
minetest.register_tool(toolname,tt_def)
local stick = ttv.tool_stick or "group:stick"
minetest.register_craft({
output=toolname,
recipe=local_get_recipe(tool,ingot_name,stick)
})
minerdream.items[ore_name]=tdef
-- register ore
if tdef.ore ~= nil then
tdef.ore.ore_name=ore_name
tdef.ore.lump_name=ore_name
if tdef.lump ~= nil then
tdef.ore.lump_name=tdef.lump.lump_name or ore.."_lump"
tdef.lump.lump_name=tdef.ore.lump_name
end
minerdream.register_node_ore(tdef,tdef.ore)
minerdream.register_node_mapgen(tdef,tdef.ore)
end
-- register ore
if tdef.poorore ~= nil then
tdef.poorore.ore_name=ore_name.."_poor"
tdef.poorore.lump_name=ore_name.."_poor"
if tdef.nugget ~= nil then
tdef.poorore.lump_name=tdef.nugget.lump_name or ore.."_nugget"
tdef.nugget.lump_name=tdef.poorore.lump_name
end
minerdream.register_node_ore(tdef,tdef.poorore)
minerdream.register_node_mapgen(tdef,tdef.poorore)
end
print(dump(tdef))
if tdef.ore.lump_name ~= tdef.ore.ore_name then
end
end
if tdef["3d_armor"] ~= nil then
local ingot_name=minerdream.items[i].ingot_def.name
local adef=tdef["3d_armor"]
for _,tool in pairs({"helmet","chestplate","boots","leggings","shield"}) do
if tdef["3d_armor"][tool] ~= nil then
local ttv=tdef["3d_armor"][tool]
for _,it in pairs({"fleshy","heal","speed","gravity","jump","level","cracky","crumbly","choppy","snappy","use"}) do
if ttv[it] == nil and adef[it] ~= nil then
ttv[it] = adef[it]
end
local commentfunction=function(i)
if true then
-- local tierd=tier_definition[tostring(tdef.tier)]
-- register ores within stone
if tdef.ore ~= nil and tdef.lump ~= nil then
if tdef.ore.crack ~= nil then
minerdream.register_ore_lump(i,tdef)
end
end
if tdef.ore ~= nil then
if tdef.ore.crack ~= nil then
minerdream.register_ore_lump(i,tdef)
else
-- if not already defined, then add mapgen parameter
if tdef.ore.scarcity ~= nil then
needs_mapgen = true
mapgen_name=minerdream.modname..":"..i
end
end
end
-- define mapgeneration for ores
if needs_mapgen then
minerdream.register_mapgen(i,tdef,mapgen_name,tdef.ore)
if tdef.nugget ~= nil then
minerdream.register_mapgen(i,tdef,mapgen_name.."_poor",tdef.nugget)
end
end
-- define ore dust
-- only makes sense if it can be grinded
if tdef.dust~= nil and minetest.get_modpath("technic") then
minerdream.register_dust(i,tdef)
end
-- register ingots
if tdef.ingot ~= nil then
minerdream.register_ingot(i,tdef)
end
if tdef.block ~= nil then
minerdream.register_block(i,tdef)
end
-- define armor and weapons
if minerdream.items[i].ingot_def ~= nil then
minerdream.register_weapons(i,tdef)
end
if tdef.tools~=nil then
local adef=tdef.tools
local ingot_name=minerdream.items[i].ingot_def.name
for _,tool in pairs({"pick","axe","sword","shovel","spear"}) do
if tdef.tools[tool] ~= nil then
local ttv=tdef.tools[tool]
for _,it in pairs({"range","maxlevel","tool_stick","fleshy","level","cracky","crumbly","choppy","snappy","use"}) do
if ttv[it] == nil and adef[it] ~= nil then
ttv[it] = adef[it]
end
end
end
local tdesc=core.colorize("#"..tdef.tierd.color, S(i:gsub("^%l", string.upper)).." "..S(tool:gsub("^%l", string.upper)).."\n")..
core.colorize("#A0A0A0", "tier: "..tdef.tierd.name.." ("..tdef.tierd.desc..")")
if ttv.fleshy then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Defense")..": "..ttv.fleshy)
end
if ttv.heal then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Heal")..": "..ttv.heal)
end
if ttv.speed then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Walking speed")..": "..(ttv.speed*100).."%")
end
if ttv.gravity then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Gravity")..": "..(ttv.gravity*100).."%")
end
if ttv.jump then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Jump force")..": "..(ttv.jump*100).."%")
end
tt_def={description=tdesc,
inventory_image=ttv.inventory_image or minerdream.modname.."_inv_"..tool.."_"..i..".png",
damage_groups = {level = ttv.level or 2},
armor_groups={fleshy=ttv.fleshy or 10},
groups={armor_heal=ttv.heal,armor_use=ttv.use,
physics_jump=ttv.jump,physics_speed=ttv.speed,physics_gravity=ttv.gravity}
}
for _,gc in pairs({"cracky","crumbly","choppy","snappy"}) do
tt_def.damage_groups[gc]=ttv[gc]
end
if tool == "helmet" then
tt_def.groups.armor_head=1
elseif tool == "chestplate" then
tt_def.groups.armor_torso=1
elseif tool == "leggings" then
tt_def.groups.armor_legs=1
elseif tool == "boots" then
tt_def.groups.armor_feet=1
elseif tool == "shield" then
tt_def.groups.armor_shield=1
end
toolname=minerdream.modname..":"..tool.."_"..i
armor:register_armor(toolname,tt_def)
local fleshy=ttv.fleshy or tdef.tools.fleshy or 4
local uses=ttv.use or tdef.tools.use
local tdesc=core.colorize("#"..tdef.tierd.color, S(i:gsub("^%l", string.upper)).." "..S(tool:gsub("^%l", string.upper)).."\n")..
core.colorize("#A0A0A0", "tier: "..tdef.tierd.name.." ("..tdef.tierd.desc..")")
-- check special attributes of tool definition and use fallback definitions
if uses then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Uses")..": "..uses)
end
if ttv.maxlevel then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Max. Level")..": "..ttv.maxlevel)
end
if ttv.fleshy then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Damage")..": "..fleshy)
end
tt_def={description=tdesc,uses=uses,
inventory_image=ttv.inventory_image or minerdream.modname.."_"..tool.."_"..i..".png",
range=ttv.range or tdef.tools.range or 2,
groups={weapon=1},
tool_capabilities={max_drop_level = 1,groupcaps={},
damage_groups = {fleshy = fleshy},},
}
-- check if values for capabitlites exist
for _,gc in pairs({"cracky","crumbly","choppy","snappy"}) do
if ttv[gc] ~= nil then
local ml = ttv.maxlevel or tdef.tools.maxlevel or 1
tt_def.tool_capabilities.groupcaps[gc]={times=table.copy(ttv[gc]),
uses=tdef.uses,maxlevel=ml}
end
end
toolname=minerdream.modname..":"..tool.."_"..i
minetest.register_tool(toolname,tt_def)
local stick = ttv.tool_stick or "group:stick"
minetest.register_craft({
output=toolname,
recipe=local_get_recipe(tool,ingot_name,stick)
})
local stick = ttv.tool_stick or "group:stick"
minetest.register_craft({
output=toolname,
recipe=local_get_recipe(tool,ingot_name,stick)
})
end
end
end
if tdef["3d_armor"] ~= nil then
local ingot_name=minerdream.items[i].ingot_def.name
local adef=tdef["3d_armor"]
for _,tool in pairs({"helmet","chestplate","boots","leggings","shield"}) do
if tdef["3d_armor"][tool] ~= nil then
local ttv=tdef["3d_armor"][tool]
for _,it in pairs({"fleshy","heal","speed","gravity","jump","level","cracky","crumbly","choppy","snappy","use"}) do
if ttv[it] == nil and adef[it] ~= nil then
ttv[it] = adef[it]
end
end
local tdesc=core.colorize("#"..tdef.tierd.color, S(i:gsub("^%l", string.upper)).." "..S(tool:gsub("^%l", string.upper)).."\n")..
core.colorize("#A0A0A0", "tier: "..tdef.tierd.name.." ("..tdef.tierd.desc..")")
if ttv.fleshy then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Defense")..": "..ttv.fleshy)
end
if ttv.heal then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Heal")..": "..ttv.heal)
end
if ttv.speed then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Walking speed")..": "..(ttv.speed*100).."%")
end
if ttv.gravity then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Gravity")..": "..(ttv.gravity*100).."%")
end
if ttv.jump then
tdesc=tdesc.."\n"..core.colorize("#A0A0A0",S("Jump force")..": "..(ttv.jump*100).."%")
end
tt_def={description=tdesc,
inventory_image=ttv.inventory_image or minerdream.modname.."_inv_"..tool.."_"..i..".png",
damage_groups = {level = ttv.level or 2},
armor_groups={fleshy=ttv.fleshy or 10},
groups={armor_heal=ttv.heal,armor_use=ttv.use,
physics_jump=ttv.jump,physics_speed=ttv.speed,physics_gravity=ttv.gravity}
}
for _,gc in pairs({"cracky","crumbly","choppy","snappy"}) do
tt_def.damage_groups[gc]=ttv[gc]
end
if tool == "helmet" then
tt_def.groups.armor_head=1
elseif tool == "chestplate" then
tt_def.groups.armor_torso=1
elseif tool == "leggings" then
tt_def.groups.armor_legs=1
elseif tool == "boots" then
tt_def.groups.armor_feet=1
elseif tool == "shield" then
tt_def.groups.armor_shield=1
end
toolname=minerdream.modname..":"..tool.."_"..i
armor:register_armor(toolname,tt_def)
local stick = ttv.tool_stick or "group:stick"
minetest.register_craft({
output=toolname,
recipe=local_get_recipe(tool,ingot_name,stick)
})
end
end
end
end
end
minerdream.register_node_ore=function(tdef,odef)
if odef.lump_name == nil then
odef.lump_name=tdef.ore_name.."_lump"
end
if odef.wherein == nil then
odef.wherein="stone"
end
if odef.inventory_image == nil then
odef.inventory_image=minerdream.modname.."_"..odef.ore_name.."ore.png"
end
if odef.node_name == nil then
odef.node_name=tdef.ore_modname..":"..odef.ore_name
end
local ore_def={description=S(odef.ore_name:gsub("^%l", string.upper)).." "..S("ore"),
groups={cracky=odef.crack},
sound=default.node_sound_stone_defaults(),
drop=odef.lump_name
}
if tdef.groups.is_metall then
ore_def.groups["metall"..tdef.groups.is_metall]=tdef.groups.is_metall
end
if tdef.groups.is_mineral then
ore_def.groups["mineral"..tdef.groups.is_mineral]=tdef.groups.is_mineral
end
if odef.stackmax then
ore_def.stack_max=odef.stackmax
end
if tdef.tier then
ore_def.description=core.colorize("#00FF00", ore_def.description.."\n")..tdef.tier_string
end
odef.node_name={}
if odef.wherein==nil then
odef.wherein="stone"
end
for _,wi in pairs(odef.wherein) do
local oredef=table.copy(ore_def)
oredef.name=minerdream.modname..":"..wi.."_with_"..odef.ore_name
oredef.tiles={"default_"..wi..".png^"..odef.inventory_image}
odef.node_name[wi]=oredef.name
minetest.register_node(oredef.name,oredef)
end
end
minerdream.register_ore_lump=function(ore_name,tdef)
-- base config of ore found in normal stone
local tore=tdef.ore
@ -445,6 +519,26 @@ minerdream.register_ore_lump=function(ore_name,tdef)
end
end
minerdream.register_node_mapgen=function(tdef,odef)
local wherein={"default:stone"}
if odef.wherein ~= nil then
wherein={}
for _,wi in pairs(odef.wherein) do
local tscar=odef.scarcity or 13
local map_def={ore_type = "scatter",
ore = odef.node_name[wi],
wherein = wi,
clust_scarcity = tscar * tscar * tscar,
clust_num_ores = odef.num_ores or 1,
clust_size = odef.clust_size or 1,
y_min = odef.y_min or (-31000),
y_max = odef.y_max or 0,
}
minetest.register_ore(map_def)
end
end
end
minerdream.register_mapgen=function(ore_name,tdef,mapgen_name,odef)
local wherein={"default:stone"}
if tdef.groups.in_desert ~= nil then -- check, if ore can be found in desert stone
@ -625,3 +719,5 @@ minerdream.register_dust=function(ore_name,tdef)
end
end
end

View File

@ -1,10 +1,9 @@
{"color":"835749D0",
"groups":{"drop_as_lump":1,
"groups":{
"has_bow":1,
"in_desert":1,
"is_metall":5},
"name":"ruthenium",
"ore_modname":"minerdream",
"block":{
"inventory_image":"minerdream_ruthenium_block.png"
},
@ -12,8 +11,14 @@
"inventory_image":"minerdream_ruthenium_ingot.png"
},
"ore":{
"wherein":["stone","desert_stone"],
"crack":4,
"inventory_image":"minerdream_ruthenium_ore.png"
"inventory_image":"minerdream_ruthenium_ore.png",
"clust_size":3,
"num_ores":3,
"scarcity":15,
"y_max":-500,
"y_min":-31000
},
"lump":{
"crack":4,
@ -27,14 +32,14 @@
"cooking_time":25,
"inventory_image":"minerdream_ruthenium_dust.png"
},
"mapgen":{
"clust_size":3,
"num_ores":3,
"scarcity":15,
"y_max":-500,
"y_min":-31000
},
"nugget":{
"crack":4,
"inventory_image":"minerdream_ruthenium_nugget.png",
"stack_max":99,
"cooking_time":32
},
"poorore":{
"wherein":["stone","desert_stone"],
"inventory_image":"minerdream_ruthenium_poorore.png",
"cracky":3,
"clust_size":3,
@ -43,7 +48,6 @@
"y_max":-250
},
"tier":5,
"tool_cotton":"steel_wire",
"tools":{"range":6.9,"maxlevel":3,"tool_stick":"minerdream:steelstick",
"axe":{"choppy":[1.5,0.5,0.3],"fleshy":11},
"shovel":{"crumbly":[0.8,0.3,0.15],"fleshy":9},
@ -51,7 +55,7 @@
"sword":{"fleshy":11,"snappy":[1.5,0.7,0.1]},
"pick":{"cracky":[1.5,0.7,0.25,3.5,5],"fleshy":10}
},
"3d_armor":{"cracky":2,"crumbly":1,"heal":8,"use":80,"snappy":3,"level":2,"choppy":2,
"3d_armor":{"cracky":2,"crumbly":1,"heal":8,"use":80,"snappy":3,"level":2,"choppy":2,"tool_cotton":"steel_wire",
"boots":{"fleshy":13.75,"gravity":-0.075,"jump":0.075,"speed":0.075},
"chestplate":{"fleshy":18.75,"gravity":-0.08,"jump":0.08,"speed":0.08},
"helmet":{"fleshy":13.75,"gravity":-0.08,"jump":0.08,"speed":0.08},