Add support for unregistering ores

This commit is contained in:
Jordan Irwin 2021-07-12 15:44:43 -07:00
parent 69f87b6b73
commit 2d7c5aee1f
4 changed files with 76 additions and 1 deletions

View file

@ -1,5 +1,5 @@
TODO:
- add localization support
- add support for unregistering/replacing ores
- add support for unregistering ores via world path file
- change API method names to "register_[replace/remove]_*"

37
api.lua
View file

@ -62,3 +62,40 @@ function cleaner.replace_node(src, tgt)
replace_nodes[src] = tgt
end
--- Unsafe methods.
--
-- Enabled with `cleaner.unsafe` setting.
--
-- @section unsafe
if cleaner.unsafe then
--- Removes an ore definition.
--
-- @tparam string src Ore technical name.
function cleaner.remove_ore(src)
local remove_ids = {}
local total_removed = 0
local registered = false
for id, def in pairs(core.registered_ores) do
if def.ore == src then
table.insert(remove_ids, id)
registered = true
end
end
for _, id in ipairs(remove_ids) do
core.registered_ores[id] = nil
if core.registered_ores[id] then
cleaner.log("error", "unable to unregister ore " .. id)
else
total_removed = total_removed + 1
end
end
return registered, total_removed
end
end

View file

@ -9,6 +9,7 @@ v1.2
- replace_node
- find_unknown_nodes
- added setting for enabling "unsafe" methods & commands
- added support for unregistering ores
v1.1
----

View file

@ -239,3 +239,40 @@ core.register_chatcommand("find_unknown_nodes", {
return true
end,
})
--- Unsafe commands.
--
-- Enabled with `cleaner.unsafe` setting.
--
-- @section unsafe
if cleaner.unsafe then
--- Registers an ore to be removed.
--
-- @chatcmd remove_ore
-- @param ore Ore technical name.
core.register_chatcommand("remove_ore", {
privs = {server=true},
description = "Remove an ore from game.",
params = "<ore>",
func = function(name, param)
if param:find(" ") then
return false, "Too many parameters."
end
core.after(0, function()
local registered, total_removed = cleaner.remove_ore(param)
if not registered then
core.chat_send_player(name, "Ore \"" .. param .. "\" not found, not unregistering.")
else
core.chat_send_player(name, "Unregistered " .. total_removed .. " ores (this will be undone after server restart).")
end
end)
return true
end
})
end