Added ability to replace nodes

This commit is contained in:
neko259 2018-09-09 11:41:49 +03:00
parent 68222b1479
commit d4bccf722d

255
init.lua
View file

@ -1,104 +1,151 @@
--[[ Cleaner mod --[[ Cleaner mod
License: CC0 License: CC0
]] ]]
cleaner = {} cleaner = {}
cleaner.name = core.get_current_modname() cleaner.name = core.get_current_modname()
local debug = core.settings:get_bool('enable_debug_mods') local debug = core.settings:get_bool('enable_debug_mods')
local function log(level, msg) local function log(level, msg)
core.log(level, '[' .. cleaner.name .. '] ' .. msg) core.log(level, '[' .. cleaner.name .. '] ' .. msg)
end end
local function logDebug(msg) local function logDebug(msg)
if debug then if debug then
core.log('DEBUG: [' .. cleaner.name .. '] ' .. msg) core.log('DEBUG: [' .. cleaner.name .. '] ' .. msg)
end end
end end
-- ENTITIES -- ENTITIES
local old_entities = {} local old_entities = {}
-- Populate entities list from file in world path -- Populate entities list from file in world path
local e_list = nil local e_list = nil
local e_path = core.get_worldpath() .. '/clean_entities.txt' local e_path = core.get_worldpath() .. '/clean_entities.txt'
local e_file = io.open(e_path, 'r') local e_file = io.open(e_path, 'r')
if e_file then if e_file then
e_list = e_file:read('*a') e_list = e_file:read('*a')
e_file:close() e_file:close()
else else
-- Create empty file -- Create empty file
e_file = io.open(e_path, 'w') e_file = io.open(e_path, 'w')
if e_file then if e_file then
e_file:close() e_file:close()
end end
end end
if e_list then if e_list then
logDebug('Loading entities to clean from file ...') logDebug('Loading entities to clean from file ...')
e_list = string.split(e_list, '\n') e_list = string.split(e_list, '\n')
for _, entity_name in ipairs(e_list) do for _, entity_name in ipairs(e_list) do
table.insert(old_entities, entity_name) table.insert(old_entities, entity_name)
end end
end end
for _, entity_name in ipairs(old_entities) do for _, entity_name in ipairs(old_entities) do
logDebug('Cleaning entity: ' .. entity_name) logDebug('Cleaning entity: ' .. entity_name)
core.register_entity(':' .. entity_name, { core.register_entity(':' .. entity_name, {
on_activate = function(self, staticdata) on_activate = function(self, staticdata)
self.object:remove() self.object:remove()
end, end,
}) })
end end
-- NODES -- NODES
local old_nodes = {} local old_nodes = {}
-- Populate nodes list from file in world path -- Populate nodes list from file in world path
local n_list = nil local n_list = nil
local n_path = core.get_worldpath() .. '/clean_nodes.txt' local n_path = core.get_worldpath() .. '/clean_nodes.txt'
local n_file = io.open(n_path, 'r') local n_file = io.open(n_path, 'r')
if n_file then if n_file then
n_list = n_file:read('*a') n_list = n_file:read('*a')
n_file:close() n_file:close()
else else
-- Create empty file -- Create empty file
n_file = io.open(n_path, 'w') n_file = io.open(n_path, 'w')
if n_file then if n_file then
n_file:close() n_file:close()
end end
end end
if n_list then
logDebug('Loading nodes to clean from file ...') if n_list then
logDebug('Loading nodes to clean from file ...')
n_list = string.split(n_list, '\n')
for _, node_name in ipairs(n_list) do n_list = string.split(n_list, '\n')
table.insert(old_nodes, node_name) for _, node_name in ipairs(n_list) do
end table.insert(old_nodes, node_name)
end end
end
for _, node_name in ipairs(old_nodes) do
logDebug('Cleaning node: ' .. node_name) for _, node_name in ipairs(old_nodes) do
logDebug('Cleaning node: ' .. node_name)
core.register_node(':' .. node_name, {
groups = {old=1}, core.register_node(':' .. node_name, {
}) groups = {old=1},
end })
end
core.register_abm({
nodenames = {'group:old'},
interval = 1, local replace_nodes = {}
chance = 1,
action = function(pos, node)
core.remove_node(pos) local n_list = nil
end, local n_path = core.get_worldpath() .. '/replace_nodes.txt'
}) local n_file = io.open(n_path, 'r')
if n_file then
n_list = n_file:read('*a')
n_file:close()
else
-- Create empty file
n_file = io.open(n_path, 'w')
if n_file then
n_file:close()
end
end
if n_list then
logDebug('Loading nodes to replace from file ...')
n_list = string.split(n_list, '\n')
for _, node_def in ipairs(n_list) do
node_list = string.split(node_def, '->')
replace_nodes[node_list[1]] = node_list[2]
end
end
for old_node, new_node in pairs(replace_nodes) do
logDebug('Replacing node ' .. old_node .. ' with ' .. new_node)
core.register_node(':' .. old_node, {
groups = {old_replaced=1},
})
end
core.register_lbm({
name = "cleaner:remove_old_nodes",
nodenames = {'group:old'},
run_at_every_load = true,
action = function(pos, node)
logDebug('Replacing?')
core.remove_node(pos)
end,
})
core.register_lbm({
name = "cleaner:replace_old_nodes",
nodenames = {'group:old_replaced'},
run_at_every_load = true,
action = function(pos, node)
core.set_node(pos, {name = replace_nodes[node.name]})
end,
})