local wea_c = worldeditadditions_core local node_id_air = minetest.get_content_id("air") local node_id_ignore = minetest.get_content_id("ignore") --- Determines whether the given node/content id is an airlike node or not. -- It is recommended that the result of this function be cached. -- @param id number The content/node id to check. -- @return bool Whether the given node/content id is an airlike node or not. function wea_c.is_airlike(id) -- Do a fast check against air and ignore if id == node_id_air then return true elseif id == node_id_ignore then -- ignore = not loaded yet IIRC (so it could be anything) return false end -- If the node isn't registered, then it might not be an air node if not minetest.registered_nodes[id] then return false end if minetest.registered_nodes[id].sunlight_propagates == true then return true end -- Check for membership of the airlike group local name = minetest.get_name_from_content_id(id) local airlike_value = minetest.get_item_group(name, "airlike") if airlike_value ~= nil and airlike_value > 0 then return true end -- Just in case if wea_c.str_starts(name, "wielded_light") then return true end -- Just in case return false end --- Determines whether the given node/content id is a liquid-ish node or not. -- It is recommended that the result of this function be cached. -- @param id number The content/node id to check. -- @return bool Whether the given node/content id is a liquid-ish node or not. function wea_c.is_liquidlike(id) -- print("[is_liquidlike]") if id == node_id_ignore then return false end local node_name = minetest.get_name_from_content_id(id) if node_name == nil or not minetest.registered_nodes[node_name] then return false end local liquidtype = minetest.registered_nodes[node_name].liquidtype -- print("[is_liquidlike]", "id", id, "name", node_name, "liquidtype", liquidtype) if liquidtype == nil or liquidtype == "none" then return false end -- If it's not none, then it has to be a liquid as the only other values are source and flowing return true end --- Determines whether the given node/content id is a sapling or not. -- Nodes with the "sapling" group are considered saplings. -- It is recommended that the result of this function be cached. -- @param id number The content/node id to check. -- @return bool Whether the given node/content id is a sapling or not. function wea_c.is_sapling(id) local node_name = minetest.get_name_from_content_id(id) return minetest.get_item_group(node_name, "sapling") ~= 0 end -- ███████ █████ ██████ ██ ██ ███ ██ ██████ -- ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ -- ███████ ███████ ██████ ██ ██ ██ ██ ██ ██ ███ -- ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ -- ███████ ██ ██ ██ ███████ ██ ██ ████ ██████ -- -- █████ ██ ██ █████ ███████ ███████ ███████ -- ██ ██ ██ ██ ██ ██ ██ ██ ██ -- ███████ ██ ██ ███████ ███████ █████ ███████ -- ██ ██ ██ ██ ██ ██ ██ ██ ██ -- ██ ██ ███████ ██ ██ ██ ███████ ███████ ███████ local sapling_aliases = {} --- Register a new sapling alias. -- @param sapling_node_name string The canonical name of the sapling. -- @param alias string The alias name of the sapling. -- @returns bool[,string] Whether the alias registration was successful or not. If false, then an error message as a string is also returned as the second value. function wea_c.register_sapling_alias(sapling_node_name, alias) if sapling_aliases[sapling_node_name] ~= nil then return false, "Error: An alias against the node name '"..sapling_node_name.."' already exists." end sapling_aliases[alias] = sapling_node_name return true end --- Convenience function to register many sapling aliases at once. -- @param tbl [string, string][] A list of tables containing exactly 2 strings in the form { sapling_node_name, alias }. -- @returns bool[,string] Whether the alias registrations were successful or not. If false, then an error message as a string is also returned as the second value. function wea_c.register_sapling_alias_many(tbl) for i, next in ipairs(tbl) do local success, msg = wea_c.register_sapling_alias( next[1], next[2] ) if not success then return success, msg end end return true end --- Returns the current key ⇒ value table of sapling names and aliases. -- @return table function wea_c.get_all_sapling_aliases() return sapling_aliases end --- Attempts to normalise a sapling name using the currently registered aliases. -- @param in_name string The sapling name to normalise -- @param return_nil_on_failure bool Whether to return nil if we fail to resolve the sapling name with an alias, or return the original node name instead (default: false). function wea_c.normalise_saplingname(in_name, return_nil_on_failure) if sapling_aliases[in_name] then return sapling_aliases[in_name] elseif return_nil_on_failure then return nil else return in_name end end