2024-10-10 03:35:45 +00:00
|
|
|
-- ██████ ███████ ██████ ██ ███████ ████████ ███████ ██████
|
|
|
|
-- ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
|
|
-- ██████ █████ ██ ███ ██ ███████ ██ █████ ██████
|
|
|
|
-- ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
|
|
-- ██ ██ ███████ ██████ ██ ███████ ██ ███████ ██ ██
|
|
|
|
--
|
|
|
|
-- ████████ ██████ ██████ ██
|
|
|
|
-- ██ ██ ██ ██ ██ ██
|
|
|
|
-- ██ ██ ██ ██ ██ ██
|
|
|
|
-- ██ ██ ██ ██ ██ ██
|
|
|
|
-- ██ ██████ ██████ ███████
|
|
|
|
|
|
|
|
--- WorldEditAdditions tool registration
|
|
|
|
-- A wrapper for registering tools for WorldEditAdditions.
|
|
|
|
-- @module worldeditadditions_core
|
|
|
|
|
|
|
|
local wea_t = worldeditadditions_tools
|
|
|
|
|
|
|
|
-- Helper functions --
|
|
|
|
local function log_error(toolname, error_message)
|
|
|
|
minetest.log("error", "register_tool("..toolname..") error: "..error_message)
|
|
|
|
end
|
|
|
|
|
|
|
|
local function log_warn(toolname, error_message)
|
|
|
|
minetest.log("warning", "register_tool("..toolname..") warning: "..error_message)
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
--- Registers a new WorldEditAdditions tool.
|
2024-10-10 16:21:34 +00:00
|
|
|
-- @param tool string The name of the tool to register (sans the ":worldeditadditions:" prefix).
|
|
|
|
--[[
|
|
|
|
=== WARNING ===
|
|
|
|
":worldeditadditions:" will be prepended to the `tool` param so
|
|
|
|
calling `register_tool(":worldeditadditions:<toolname>", def_table)`
|
|
|
|
may cause errors.
|
|
|
|
--]]
|
2024-10-10 03:35:45 +00:00
|
|
|
-- @param options table A table of options for the tool:
|
|
|
|
-- - `description` (string) A description of the tool.
|
|
|
|
-- - `inventory_image` (string) The path to the image for the tool.
|
|
|
|
-- - `on_use` (function) A function that is called when right click while pointing at something.
|
|
|
|
-- - `on_place` (function) A function that is called when left click while pointing at something.
|
|
|
|
-- - `on_secondary_use` (function) A function that is called when left click while pointing at nothing.
|
|
|
|
-- - `stack_max` (number) The maximum number of the items that can be put in an ItemStack.
|
|
|
|
-- - `groups` (table) A table of groups that the tool belongs to.
|
|
|
|
local function register_tool(tool, options)
|
|
|
|
|
|
|
|
---
|
|
|
|
-- 1: Validation
|
|
|
|
---
|
|
|
|
if type(options.description) ~= "string" then
|
|
|
|
log_error(tool, "The description option is not a string.")
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
if type(options.inventory_image) ~= "string" then
|
|
|
|
log_error(tool, "The inventory_image option is not a string.")
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
if not options.inventory_image:match("^.+%.png$") then
|
|
|
|
log_error(tool, "The inventory_image option is not a valid image path.")
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
if type(options.on_use) ~= "function" then
|
|
|
|
if options.on_use == nil then
|
|
|
|
log_warn(tool, "The on_use option is nil.")
|
|
|
|
else
|
|
|
|
log_error(tool, "The on_use option is not a function.")
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if type(options.on_place) ~= "function" then
|
|
|
|
if options.on_place == nil then
|
|
|
|
log_warn(tool, "The on_place option is nil.")
|
|
|
|
else
|
|
|
|
log_error(tool, "The on_place option is not a function.")
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if type(options.on_secondary_use) ~= "function" then
|
|
|
|
if options.on_secondary_use == nil then
|
|
|
|
log_warn(tool, "The on_secondary_use option is nil.")
|
|
|
|
else
|
|
|
|
log_error(tool, "The on_secondary_use option is not a function.")
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
---
|
|
|
|
-- 2: Normalisation
|
|
|
|
---
|
|
|
|
if not options.stack_max then options.stack_max = 1 end
|
|
|
|
if not options.groups then options.groups = {wea = 1, wand = 1} end
|
|
|
|
|
|
|
|
---
|
|
|
|
-- 3: Registration
|
|
|
|
---
|
|
|
|
minetest.register_tool(":worldeditadditions:" .. tool, options)
|
|
|
|
wea_t.registered_tools[tool] = options
|
|
|
|
end
|
|
|
|
|
|
|
|
return register_tool
|