mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Move all registration logic into core.register_item for consistency
This commit is contained in:
parent
915446417d
commit
a94c9a73ba
1 changed files with 102 additions and 88 deletions
|
@ -129,6 +129,86 @@ function core.register_entity(name, prototype)
|
||||||
prototype.mod_origin = core.get_current_modname() or "??"
|
prototype.mod_origin = core.get_current_modname() or "??"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function preprocess_node(nodedef)
|
||||||
|
-- Use the nodebox as selection box if it's not set manually
|
||||||
|
if nodedef.drawtype == "nodebox" and not nodedef.selection_box then
|
||||||
|
nodedef.selection_box = nodedef.node_box
|
||||||
|
elseif nodedef.drawtype == "fencelike" and not nodedef.selection_box then
|
||||||
|
nodedef.selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8},
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
if nodedef.light_source and nodedef.light_source > core.LIGHT_MAX then
|
||||||
|
nodedef.light_source = core.LIGHT_MAX
|
||||||
|
core.log("warning", "Node 'light_source' value exceeds maximum," ..
|
||||||
|
" limiting it: " .. nodedef.name)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Flowing liquid uses param2
|
||||||
|
if nodedef.liquidtype == "flowing" then
|
||||||
|
nodedef.paramtype2 = "flowingliquid"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function preprocess_craft(itemdef)
|
||||||
|
-- BEGIN Legacy stuff
|
||||||
|
if itemdef.inventory_image == nil and itemdef.image ~= nil then
|
||||||
|
itemdef.inventory_image = itemdef.image
|
||||||
|
end
|
||||||
|
-- END Legacy stuff
|
||||||
|
end
|
||||||
|
|
||||||
|
local function preprocess_tool(tooldef)
|
||||||
|
tooldef.stack_max = 1
|
||||||
|
|
||||||
|
-- BEGIN Legacy stuff
|
||||||
|
if tooldef.inventory_image == nil and tooldef.image ~= nil then
|
||||||
|
tooldef.inventory_image = tooldef.image
|
||||||
|
end
|
||||||
|
|
||||||
|
if tooldef.tool_capabilities == nil and
|
||||||
|
(tooldef.full_punch_interval ~= nil or
|
||||||
|
tooldef.basetime ~= nil or
|
||||||
|
tooldef.dt_weight ~= nil or
|
||||||
|
tooldef.dt_crackiness ~= nil or
|
||||||
|
tooldef.dt_crumbliness ~= nil or
|
||||||
|
tooldef.dt_cuttability ~= nil or
|
||||||
|
tooldef.basedurability ~= nil or
|
||||||
|
tooldef.dd_weight ~= nil or
|
||||||
|
tooldef.dd_crackiness ~= nil or
|
||||||
|
tooldef.dd_crumbliness ~= nil or
|
||||||
|
tooldef.dd_cuttability ~= nil) then
|
||||||
|
tooldef.tool_capabilities = {
|
||||||
|
full_punch_interval = tooldef.full_punch_interval,
|
||||||
|
basetime = tooldef.basetime,
|
||||||
|
dt_weight = tooldef.dt_weight,
|
||||||
|
dt_crackiness = tooldef.dt_crackiness,
|
||||||
|
dt_crumbliness = tooldef.dt_crumbliness,
|
||||||
|
dt_cuttability = tooldef.dt_cuttability,
|
||||||
|
basedurability = tooldef.basedurability,
|
||||||
|
dd_weight = tooldef.dd_weight,
|
||||||
|
dd_crackiness = tooldef.dd_crackiness,
|
||||||
|
dd_crumbliness = tooldef.dd_crumbliness,
|
||||||
|
dd_cuttability = tooldef.dd_cuttability,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
-- END Legacy stuff
|
||||||
|
|
||||||
|
-- Automatically set punch_attack_uses as a convenience feature
|
||||||
|
local toolcaps = tooldef.tool_capabilities
|
||||||
|
if toolcaps and toolcaps.punch_attack_uses == nil then
|
||||||
|
for _, cap in pairs(toolcaps.groupcaps or {}) do
|
||||||
|
local level = (cap.maxlevel or 0) - 1
|
||||||
|
if (cap.uses or 0) ~= 0 and level >= 0 then
|
||||||
|
toolcaps.punch_attack_uses = cap.uses * (3 ^ level)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local default_tables = {
|
local default_tables = {
|
||||||
node = core.nodedef_default,
|
node = core.nodedef_default,
|
||||||
craft = core.craftitemdef_default,
|
craft = core.craftitemdef_default,
|
||||||
|
@ -136,6 +216,12 @@ local default_tables = {
|
||||||
none = core.noneitemdef_default,
|
none = core.noneitemdef_default,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local preprocess_fns = {
|
||||||
|
node = preprocess_node,
|
||||||
|
craft = preprocess_craft,
|
||||||
|
tool = preprocess_tool,
|
||||||
|
}
|
||||||
|
|
||||||
function core.register_item(name, itemdef)
|
function core.register_item(name, itemdef)
|
||||||
-- Check name
|
-- Check name
|
||||||
if name == nil then
|
if name == nil then
|
||||||
|
@ -145,23 +231,13 @@ function core.register_item(name, itemdef)
|
||||||
if forbidden_item_names[name] then
|
if forbidden_item_names[name] then
|
||||||
error("Unable to register item: Name is forbidden: " .. name)
|
error("Unable to register item: Name is forbidden: " .. name)
|
||||||
end
|
end
|
||||||
|
|
||||||
itemdef.name = name
|
itemdef.name = name
|
||||||
|
|
||||||
if itemdef.type == "node" then
|
-- Compatibility stuff depending on type
|
||||||
-- Use the nodebox as selection box if it's not set manually
|
local fn = preprocess_fns[itemdef.type]
|
||||||
if itemdef.drawtype == "nodebox" and not itemdef.selection_box then
|
if fn then
|
||||||
itemdef.selection_box = itemdef.node_box
|
fn(itemdef)
|
||||||
elseif itemdef.drawtype == "fencelike" and not itemdef.selection_box then
|
|
||||||
itemdef.selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
if itemdef.light_source and itemdef.light_source > core.LIGHT_MAX then
|
|
||||||
itemdef.light_source = core.LIGHT_MAX
|
|
||||||
core.log("warning", "Node 'light_source' value exceeds maximum," ..
|
|
||||||
" limiting to maximum: " ..name)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Apply defaults
|
-- Apply defaults
|
||||||
|
@ -184,11 +260,6 @@ function core.register_item(name, itemdef)
|
||||||
end
|
end
|
||||||
setmetatable(itemdef, {__index = defaults})
|
setmetatable(itemdef, {__index = defaults})
|
||||||
|
|
||||||
-- Flowing liquid uses param2
|
|
||||||
if itemdef.type == "node" and itemdef.liquidtype == "flowing" then
|
|
||||||
itemdef.paramtype2 = "flowingliquid"
|
|
||||||
end
|
|
||||||
|
|
||||||
-- BEGIN Legacy stuff
|
-- BEGIN Legacy stuff
|
||||||
if itemdef.cookresult_itemstring ~= nil and itemdef.cookresult_itemstring ~= "" then
|
if itemdef.cookresult_itemstring ~= nil and itemdef.cookresult_itemstring ~= "" then
|
||||||
core.register_craft({
|
core.register_craft({
|
||||||
|
@ -226,6 +297,17 @@ function core.register_item(name, itemdef)
|
||||||
register_item_raw(itemdef)
|
register_item_raw(itemdef)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function make_register_item_wrapper(the_type)
|
||||||
|
return function(name, itemdef)
|
||||||
|
itemdef.type = the_type
|
||||||
|
return core.register_item(name, itemdef)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
core.register_node = make_register_item_wrapper("node")
|
||||||
|
core.register_craftitem = make_register_item_wrapper("craft")
|
||||||
|
core.register_tool = make_register_item_wrapper("tool")
|
||||||
|
|
||||||
function core.unregister_item(name)
|
function core.unregister_item(name)
|
||||||
if not core.registered_items[name] then
|
if not core.registered_items[name] then
|
||||||
core.log("warning", "Not unregistering item " ..name..
|
core.log("warning", "Not unregistering item " ..name..
|
||||||
|
@ -241,74 +323,6 @@ function core.unregister_item(name)
|
||||||
unregister_item_raw(name)
|
unregister_item_raw(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
function core.register_node(name, nodedef)
|
|
||||||
nodedef.type = "node"
|
|
||||||
core.register_item(name, nodedef)
|
|
||||||
end
|
|
||||||
|
|
||||||
function core.register_craftitem(name, craftitemdef)
|
|
||||||
craftitemdef.type = "craft"
|
|
||||||
|
|
||||||
-- BEGIN Legacy stuff
|
|
||||||
if craftitemdef.inventory_image == nil and craftitemdef.image ~= nil then
|
|
||||||
craftitemdef.inventory_image = craftitemdef.image
|
|
||||||
end
|
|
||||||
-- END Legacy stuff
|
|
||||||
|
|
||||||
core.register_item(name, craftitemdef)
|
|
||||||
end
|
|
||||||
|
|
||||||
function core.register_tool(name, tooldef)
|
|
||||||
tooldef.type = "tool"
|
|
||||||
tooldef.stack_max = 1
|
|
||||||
|
|
||||||
-- BEGIN Legacy stuff
|
|
||||||
if tooldef.inventory_image == nil and tooldef.image ~= nil then
|
|
||||||
tooldef.inventory_image = tooldef.image
|
|
||||||
end
|
|
||||||
if tooldef.tool_capabilities == nil and
|
|
||||||
(tooldef.full_punch_interval ~= nil or
|
|
||||||
tooldef.basetime ~= nil or
|
|
||||||
tooldef.dt_weight ~= nil or
|
|
||||||
tooldef.dt_crackiness ~= nil or
|
|
||||||
tooldef.dt_crumbliness ~= nil or
|
|
||||||
tooldef.dt_cuttability ~= nil or
|
|
||||||
tooldef.basedurability ~= nil or
|
|
||||||
tooldef.dd_weight ~= nil or
|
|
||||||
tooldef.dd_crackiness ~= nil or
|
|
||||||
tooldef.dd_crumbliness ~= nil or
|
|
||||||
tooldef.dd_cuttability ~= nil) then
|
|
||||||
tooldef.tool_capabilities = {
|
|
||||||
full_punch_interval = tooldef.full_punch_interval,
|
|
||||||
basetime = tooldef.basetime,
|
|
||||||
dt_weight = tooldef.dt_weight,
|
|
||||||
dt_crackiness = tooldef.dt_crackiness,
|
|
||||||
dt_crumbliness = tooldef.dt_crumbliness,
|
|
||||||
dt_cuttability = tooldef.dt_cuttability,
|
|
||||||
basedurability = tooldef.basedurability,
|
|
||||||
dd_weight = tooldef.dd_weight,
|
|
||||||
dd_crackiness = tooldef.dd_crackiness,
|
|
||||||
dd_crumbliness = tooldef.dd_crumbliness,
|
|
||||||
dd_cuttability = tooldef.dd_cuttability,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
-- END Legacy stuff
|
|
||||||
|
|
||||||
-- This isn't just legacy, but more of a convenience feature
|
|
||||||
local toolcaps = tooldef.tool_capabilities
|
|
||||||
if toolcaps and toolcaps.punch_attack_uses == nil then
|
|
||||||
for _, cap in pairs(toolcaps.groupcaps or {}) do
|
|
||||||
local level = (cap.maxlevel or 0) - 1
|
|
||||||
if (cap.uses or 0) ~= 0 and level >= 0 then
|
|
||||||
toolcaps.punch_attack_uses = cap.uses * (3 ^ level)
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
core.register_item(name, tooldef)
|
|
||||||
end
|
|
||||||
|
|
||||||
function core.register_alias(name, convert_to)
|
function core.register_alias(name, convert_to)
|
||||||
if forbidden_item_names[name] then
|
if forbidden_item_names[name] then
|
||||||
error("Unable to register alias: Name is forbidden: " .. name)
|
error("Unable to register alias: Name is forbidden: " .. name)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue