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:
trans_soup 2023-10-17 20:52:06 +02:00
parent 968ae04b3a
commit 5df44d2b24
3 changed files with 21 additions and 20 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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",
})