Aaron Suen 5556797e45 Genericize rake logic
This makes it possible to register additional
rakes with different capabilities.
2020-09-01 21:07:37 -04:00

134 lines
3.7 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
-- SKIP: include nodecore
local dofile, error, ipairs, minetest, pairs, rawget, rawset,
setmetatable, table, tostring, type
= dofile, error, ipairs, minetest, pairs, rawget, rawset,
setmetatable, table, tostring, type
local table_concat, table_insert, table_sort
= table.concat, table.insert, table.sort
-- LUALOCALS > ---------------------------------------------------------
local nodecore = rawget(_G, "nodecore") or {}
rawset(_G, "nodecore", nodecore)
local include = rawget(_G, "include") or function(...)
local parts = {...}
table_insert(parts, 1, minetest.get_modpath(minetest.get_current_modname()))
if parts[#parts]:sub(-4) ~= ".lua" then
parts[#parts] = parts[#parts] .. ".lua"
end
return dofile(table_concat(parts, "/"))
end
rawset(_G, "include", include)
nodecore.product = "NodeCore"
nodecore.version = include("version")
local function callguard(n, t, k, v)
if type(v) ~= "function" then return v end
return function(first, ...)
if first == t then
error("called " .. n .. ":" .. k .. "() instead of " .. n .. "." .. k .. "()")
end
return v(first, ...)
end
end
for k, v in pairs(minetest) do
minetest[k] = callguard("minetest", minetest, k, v)
end
setmetatable(nodecore, {
__newindex = function(t, k, v)
rawset(nodecore, k, callguard("nodecore", t, k, v))
end
})
minetest.register_on_mods_loaded(function()
for _, n in pairs(minetest.get_modnames()) do
if n == "default" then
error(nodecore.product
.. " cannot be loaded on top of another game!")
error()
end
end
end)
local levels = {none = true, error = true, warning = true, action = true, info = true, verbose = true}
function nodecore.log(level, ...)
if not level or not levels[level] then error("invalid log level " .. tostring(level)) end
return minetest.log(level, ...)
end
nodecore.log("action", nodecore.product .. (nodecore.version and (" Version " .. nodecore.version)
or " DEVELOPMENT VERSION"))
do
local ticked = 0
local function regreport()
ticked = ticked + 1
if ticked < 5 then return minetest.after(0, regreport) end
local reg = "registered_"
local t = {}
for k, v in pairs(nodecore) do
if k:sub(1, #reg) == reg and type(v) == "table" then
local qty = 0
for _ in pairs(v) do qty = qty + 1 end
t[#t + 1] = "#" .. k .. " = " .. qty
end
end
table_sort(t)
for _, x in ipairs(t) do nodecore.log("action", x) end
end
minetest.after(0, regreport)
end
minetest.register_on_joinplayer(function(player)
local pname = player:get_player_name()
local pinfo = minetest.get_player_information(pname)
if pinfo.protocol_version < 39 then
return minetest.kick_player(pname, "Outdated client")
end
end)
include("compat_issue10127")
include("compat_legacyent")
include("util_misc")
include("util_hookmeta")
include("util_falling")
include("util_scan_flood")
include("util_node_is")
include("util_toolcaps")
include("util_stack")
include("util_phealth")
include("util_facedir")
include("util_sound")
include("util_translate")
include("util_ezschematic")
include("util_gametime")
include("util_settlescan")
include("util_texturemod")
include("match")
include("fx_digparticles")
include("register_mods")
include("register_entlabels")
include("mapgen_limits")
include("mapgen_shared")
include("item_on_register")
include("item_drop_in_place")
include("item_oldnames")
include("item_tool_break")
include("item_tool_sounds")
include("item_tool_rakes")
include("item_punch_sounds")
include("item_sound_pitch")
include("item_nodebox_zfighting")
include("item_virtual")
include("item_stackmax")
include("item_touch_hurt")
include("item_txp_overlay")
include("item_tiledump")