]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - builtin/game/register.lua
Fix default hand definition not using wieldhand.png
[dragonfireclient.git] / builtin / game / register.lua
index 05dc5fef83da73be5243b27fc0d4f640861ecd4d..bed269dbb60cbd99cf21c34721d8d153c340abb4 100644 (file)
@@ -65,20 +65,21 @@ local function check_modname_prefix(name)
                        error("Name " .. name .. " does not follow naming conventions: " ..
                                "\"" .. expected_prefix .. "\" or \":\" prefix required")
                end
-               
+
                -- Enforce that the name only contains letters, numbers and underscores.
                local subname = name:sub(#expected_prefix+1)
                if subname:find("[^%w_]") then
                        error("Name " .. name .. " does not follow naming conventions: " ..
                                "contains unallowed characters")
                end
-               
+
                return name
        end
 end
 
 function core.register_abm(spec)
        -- Add to core.registered_abms
+       assert(type(spec.action) == "function", "Required field 'action' of type function")
        core.registered_abms[#core.registered_abms + 1] = spec
        spec.mod_origin = core.get_current_modname() or "??"
 end
@@ -86,6 +87,7 @@ end
 function core.register_lbm(spec)
        -- Add to core.registered_lbms
        check_modname_prefix(spec.name)
+       assert(type(spec.action) == "function", "Required field 'action' of type function")
        core.registered_lbms[#core.registered_lbms + 1] = spec
        spec.mod_origin = core.get_current_modname() or "??"
 end
@@ -127,6 +129,11 @@ function core.register_item(name, itemdef)
                                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
                setmetatable(itemdef, {__index = core.nodedef_default})
                core.registered_nodes[itemdef.name] = itemdef
        elseif itemdef.type == "craft" then
@@ -296,7 +303,6 @@ end
 
 -- Alias the forbidden item names to "" so they can't be
 -- created via itemstrings (e.g. /give)
-local name
 for name in pairs(forbidden_item_names) do
        core.registered_aliases[name] = ""
        register_alias_raw(name, "")
@@ -325,9 +331,9 @@ core.register_item(":unknown", {
 })
 
 core.register_node(":air", {
-       description = "Air (you hacker you!)",
-       inventory_image = "unknown_node.png",
-       wield_image = "unknown_node.png",
+       description = "Air",
+       inventory_image = "air.png",
+       wield_image = "air.png",
        drawtype = "airlike",
        paramtype = "light",
        sunlight_propagates = true,
@@ -342,9 +348,9 @@ core.register_node(":air", {
 })
 
 core.register_node(":ignore", {
-       description = "Ignore (you hacker you!)",
-       inventory_image = "unknown_node.png",
-       wield_image = "unknown_node.png",
+       description = "Ignore",
+       inventory_image = "ignore.png",
+       wield_image = "ignore.png",
        drawtype = "airlike",
        paramtype = "none",
        sunlight_propagates = false,
@@ -355,11 +361,19 @@ core.register_node(":ignore", {
        air_equivalent = true,
        drop = "",
        groups = {not_in_creative_inventory=1},
+       on_place = function(itemstack, placer, pointed_thing)
+               core.chat_send_player(
+                               placer:get_player_name(),
+                               core.colorize("#FF0000",
+                               "You can't place 'ignore' nodes!"))
+               return ""
+       end,
 })
 
 -- The hand (bare definition)
 core.register_item(":", {
        type = "none",
+       wield_image = "wieldhand.png",
        groups = {not_in_creative_inventory=1},
 })
 
@@ -399,10 +413,6 @@ function core.run_callbacks(callbacks, mode, ...)
                local origin = core.callback_origins[callbacks[i]]
                if origin then
                        core.set_last_run_mod(origin.mod)
-                       --print("Running " .. tostring(callbacks[i]) ..
-                       --      " (a " .. origin.name .. " callback in " .. origin.mod .. ")")
-               else
-                       --print("No data associated with callback")
                end
                local cb_ret = callbacks[i](...)
 
@@ -430,6 +440,18 @@ function core.run_callbacks(callbacks, mode, ...)
        return ret
 end
 
+function core.run_priv_callbacks(name, priv, caller, method)
+       local def = core.registered_privileges[priv]
+       if not def or not def["on_" .. method] or
+                       not def["on_" .. method](name, caller) then
+               for _, func in ipairs(core["registered_on_priv_" .. method]) do
+                       if not func(name, caller, priv) then
+                               break
+                       end
+               end
+       end
+end
+
 --
 -- Callback registration
 --
@@ -489,13 +511,32 @@ local function make_registration_wrap(reg_fn_name, clear_fn_name)
        return list
 end
 
+local function make_wrap_deregistration(reg_fn, clear_fn, list)
+       local unregister = function (key)
+               if type(key) ~= "string" then
+                       error("key is not a string", 2)
+               end
+               if not list[key] then
+                       error("Attempt to unregister non-existent element - '" .. key .. "'", 2)
+               end
+               local temporary_list = table.copy(list)
+               clear_fn()
+               for k,v in pairs(temporary_list) do
+                       if key ~= k then
+                               reg_fn(v)
+                       end
+               end
+       end
+       return unregister
+end
+
 core.registered_on_player_hpchanges = { modifiers = { }, loggers = { } }
 
-function core.registered_on_player_hpchange(player, hp_change)
-       local last = false
+function core.registered_on_player_hpchange(player, hp_change, reason)
+       local last
        for i = #core.registered_on_player_hpchanges.modifiers, 1, -1 do
                local func = core.registered_on_player_hpchanges.modifiers[i]
-               hp_change, last = func(player, hp_change)
+               hp_change, last = func(player, hp_change, reason)
                if type(hp_change) ~= "number" then
                        local debuginfo = debug.getinfo(func)
                        error("The register_on_hp_changes function has to return a number at " ..
@@ -506,7 +547,7 @@ function core.registered_on_player_hpchange(player, hp_change)
                end
        end
        for i, func in ipairs(core.registered_on_player_hpchanges.loggers) do
-               func(player, hp_change)
+               func(player, hp_change, reason)
        end
        return hp_change
 end
@@ -527,9 +568,13 @@ core.registered_biomes      = make_registration_wrap("register_biome",      "cle
 core.registered_ores        = make_registration_wrap("register_ore",        "clear_registered_ores")
 core.registered_decorations = make_registration_wrap("register_decoration", "clear_registered_decorations")
 
+core.unregister_biome = make_wrap_deregistration(core.register_biome,
+               core.clear_registered_biomes, core.registered_biomes)
+
 core.registered_on_chat_messages, core.register_on_chat_message = make_registration()
 core.registered_globalsteps, core.register_globalstep = make_registration()
 core.registered_playerevents, core.register_playerevent = make_registration()
+core.registered_on_mods_loaded, core.register_on_mods_loaded = make_registration()
 core.registered_on_shutdown, core.register_on_shutdown = make_registration()
 core.registered_on_punchnodes, core.register_on_punchnode = make_registration()
 core.registered_on_placenodes, core.register_on_placenode = make_registration()
@@ -548,10 +593,16 @@ core.registered_craft_predicts, core.register_craft_predict = make_registration(
 core.registered_on_protection_violation, core.register_on_protection_violation = make_registration()
 core.registered_on_item_eats, core.register_on_item_eat = make_registration()
 core.registered_on_punchplayers, core.register_on_punchplayer = make_registration()
+core.registered_on_priv_grant, core.register_on_priv_grant = make_registration()
+core.registered_on_priv_revoke, core.register_on_priv_revoke = make_registration()
+core.registered_can_bypass_userlimit, core.register_can_bypass_userlimit = make_registration()
+core.registered_on_modchannel_message, core.register_on_modchannel_message = make_registration()
+core.registered_on_auth_fail, core.register_on_auth_fail = make_registration()
+core.registered_on_player_inventory_actions, core.register_on_player_inventory_action = make_registration()
+core.registered_allow_player_inventory_actions, core.register_allow_player_inventory_action = make_registration()
 
 --
 -- Compatibility for on_mapgen_init()
 --
 
 core.register_on_mapgen_init = function(func) func(core.get_mapgen_params()) end
-