rework loose node registration.
loose nodes are now automatically registrered when their settled counterparts are. also rewrite a small amount of wrapper code and node registration to work with this.
This commit is contained in:
parent
968ae04b3a
commit
5df44d2b24
|
@ -3,7 +3,7 @@ local function attempt_settle_at (pos)
|
|||
if minetest.get_node(below).name == "air" then return end
|
||||
|
||||
local def = minetest.registered_nodes[minetest.get_node(pos).name]
|
||||
minetest.set_node(pos, {name = def.stable_version})
|
||||
minetest.set_node(pos, {name = def.settle_into})
|
||||
end
|
||||
|
||||
-- settle nodes that are still (in the future, it will take some time for loose nodes that are still to settle).
|
||||
|
@ -17,22 +17,22 @@ blockgame.register_abm({
|
|||
|
||||
|
||||
|
||||
function blockgame.register_loose_version (name)
|
||||
local def = minetest.registered_nodes[name]
|
||||
if not def then return false end
|
||||
local events = blockgame.events.namespace("api")
|
||||
|
||||
local groups = {}
|
||||
for key, value in pairs(def.groups) do
|
||||
groups[key] = value
|
||||
end
|
||||
groups.loose = 1
|
||||
groups.can_fall = 1
|
||||
events.listen("before_register_node", function (data)
|
||||
local name = data.name
|
||||
local def = data.def
|
||||
local mod = data.mod
|
||||
|
||||
blockgame.register_node(name .. "_loose", {
|
||||
if not def.loose_variant then return end
|
||||
|
||||
blockgame.register_node(def.loose_variant, {
|
||||
description = "Loose " .. def.description,
|
||||
tiles = def.tiles, -- temporary
|
||||
groups = groups,
|
||||
stable_version = name,
|
||||
})
|
||||
return true
|
||||
end
|
||||
groups = blockgame.underride({
|
||||
loose = 1,
|
||||
falling_node = 1
|
||||
}, def.groups),
|
||||
settle_into = mod .. ":" .. name,
|
||||
}, mod)
|
||||
end)
|
||||
|
|
|
@ -34,8 +34,9 @@ end
|
|||
|
||||
local events = blockgame.events.namespace("api")
|
||||
|
||||
function blockgame.register_node (name, def)
|
||||
local modname = minetest.get_current_modname()
|
||||
function blockgame.register_node (name, def, modname)
|
||||
-- TODO: take full name and then extract modname and base name from that, that'll probably be easier to maintain.
|
||||
local modname = modname or minetest.get_current_modname()
|
||||
local full_name = modname .. ":" .. name
|
||||
|
||||
def.description = def.description or capitalize(name)
|
||||
|
|
|
@ -15,7 +15,7 @@ blockgame.register_node("cobblestone", {
|
|||
cracky = 3,
|
||||
stoney = 1,
|
||||
},
|
||||
loose_variant = modname .. ":cobblestone_loose",
|
||||
loose_variant = "cobblestone_loose",
|
||||
})
|
||||
|
||||
minetest.register_alias("mapgen_stone", modname .. ":stone")
|
||||
|
@ -35,5 +35,5 @@ blockgame.register_node("dirt", {
|
|||
dirty = 1,
|
||||
grassable = 1,
|
||||
},
|
||||
loose_variant = modname .. ":dirt_loose",
|
||||
loose_variant = "dirt_loose",
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue