summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortenplus1 <kinsellaja@yahoo.com>2018-09-26 12:13:34 +0000
committertenplus1 <kinsellaja@yahoo.com>2018-09-26 12:13:34 +0000
commite57faeb8cfc5fe16210161835f1e5b69190d96c6 (patch)
treea80006be2b87232156bc2611cbcc9c89296876a7
parent6995c3e768ef30391e63d82539071dac902c704c (diff)
downloadsigns_lib-e57faeb8cfc5fe16210161835f1e5b69190d96c6.tar
signs_lib-e57faeb8cfc5fe16210161835f1e5b69190d96c6.tar.gz
signs_lib-e57faeb8cfc5fe16210161835f1e5b69190d96c6.tar.bz2
signs_lib-e57faeb8cfc5fe16210161835f1e5b69190d96c6.tar.xz
signs_lib-e57faeb8cfc5fe16210161835f1e5b69190d96c6.zip
pass node information to sign update function, remove all entities on update incase of rogue
-rw-r--r--init.lua224
1 files changed, 94 insertions, 130 deletions
diff --git a/init.lua b/init.lua
index d181121..b8b4db5 100644
--- a/init.lua
+++ b/init.lua
@@ -40,55 +40,33 @@ local wall_dir_change = {
signs_lib.wallmounted_rotate = function(pos, node, user, mode)
if mode ~= screwdriver.ROTATE_FACE then return false end
minetest.swap_node(pos, { name = node.name, param2 = wall_dir_change[node.param2 % 6] })
- for _, v in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do
- local e = v:get_luaentity()
- if e and e.name == "signs:text" then
- v:remove()
- end
- end
- signs_lib.update_sign(pos)
+ signs_lib.update_sign(pos,nil,nil,node)
return true
end
signs_lib.facedir_rotate = function(pos, node, user, mode)
if mode ~= screwdriver.ROTATE_FACE then return false end
- newparam2 = (node.param2 %8) + 1
+ local newparam2 = (node.param2 %8) + 1
if newparam2 == 5 then
newparam2 = 6
elseif newparam2 > 6 then
newparam2 = 0
end
minetest.swap_node(pos, { name = node.name, param2 = newparam2 })
- for _, v in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do
- local e = v:get_luaentity()
- if e and e.name == "signs:text" then
- v:remove()
- end
- end
- signs_lib.update_sign(pos)
+ signs_lib.update_sign(pos,nil,nil,node)
return true
end
signs_lib.facedir_rotate_simple = function(pos, node, user, mode)
if mode ~= screwdriver.ROTATE_FACE then return false end
- newparam2 = (node.param2 %8) + 1
+ local newparam2 = (node.param2 %8) + 1
if newparam2 > 3 then newparam2 = 0 end
minetest.swap_node(pos, { name = node.name, param2 = newparam2 })
- for _, v in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do
- local e = v:get_luaentity()
- if e and e.name == "signs:text" then
- v:remove()
- end
- end
- signs_lib.update_sign(pos)
+ signs_lib.update_sign(pos,nil,nil,node)
return true
end
-
-
-
-
signs_lib.modpath = minetest.get_modpath("signs_lib")
local DEFAULT_TEXT_SCALE = {x=0.8, y=0.5}
@@ -206,15 +184,15 @@ default_sign_metal_image = "default_sign_steel.png"
--table copy
function signs_lib.table_copy(t)
- local nt = { };
- for k, v in pairs(t) do
- if type(v) == "table" then
- nt[k] = signs_lib.table_copy(v)
- else
- nt[k] = v
- end
- end
- return nt
+ local nt = { }
+ for k, v in pairs(t) do
+ if type(v) == "table" then
+ nt[k] = signs_lib.table_copy(v)
+ else
+ nt[k] = v
+ end
+ end
+ return nt
end
-- infinite stacks
@@ -512,7 +490,7 @@ local function set_obj_text(obj, text, new, pos)
end
signs_lib.construct_sign = function(pos, locked)
- local meta = minetest.get_meta(pos)
+ local meta = minetest.get_meta(pos)
meta:set_string(
"formspec",
"size[6,4]"..
@@ -523,13 +501,13 @@ signs_lib.construct_sign = function(pos, locked)
end
signs_lib.destruct_sign = function(pos)
- local objects = minetest.get_objects_inside_radius(pos, 0.5)
- for _, v in ipairs(objects) do
+ local objects = minetest.get_objects_inside_radius(pos, 0.5)
+ for _, v in ipairs(objects) do
local e = v:get_luaentity()
- if e and e.name == "signs:text" then
- v:remove()
- end
- end
+ if e and e.name == "signs:text" then
+ v:remove()
+ end
+ end
end
local function make_infotext(text)
@@ -542,7 +520,7 @@ local function make_infotext(text)
return table.concat(lines2, "\n")
end
-signs_lib.update_sign = function(pos, fields, owner)
+signs_lib.update_sign = function(pos, fields, owner, node)
-- First, check if the interact keyword from CWz's mod is being set,
-- or has been changed since the last restart...
@@ -586,28 +564,14 @@ signs_lib.update_sign = function(pos, fields, owner)
else
new = (meta:get_int("__signslib_new_format") ~= 0)
end
+ signs_lib.destruct_sign(pos)
local text = meta:get_string("text")
- if text == nil then return end
- local objects = minetest.get_objects_inside_radius(pos, 0.5)
- local found
- for _, v in ipairs(objects) do
- local e = v:get_luaentity()
- if e and e.name == "signs:text" then
- if found then
- v:remove()
- else
- set_obj_text(v, text, new, pos)
- found = true
- end
- end
- end
- if found then
- return
- end
+ if text == nil or text == "" then return end
+
+if node then print ("---", node.name, node.param2) end
- -- if there is no entity
local sign_info
- local signnode = minetest.get_node(pos)
+ local signnode = node or minetest.get_node(pos)
local signname = signnode.name
local textpos = minetest.registered_nodes[signname].textpos
if textpos then
@@ -764,52 +728,52 @@ minetest.register_node(":"..default_sign, {
signs_lib.receive_fields(pos, formname, fields, sender)
end,
on_punch = function(pos, node, puncher)
- signs_lib.update_sign(pos)
+ signs_lib.update_sign(pos,nil,nil,node)
end,
on_rotate = signs_lib.wallmounted_rotate
})
minetest.register_node(":signs:sign_yard", {
- paramtype = "light",
+ paramtype = "light",
sunlight_propagates = true,
- paramtype2 = "facedir",
- drawtype = "nodebox",
- node_box = signs_lib.yard_sign_model.nodebox,
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ node_box = signs_lib.yard_sign_model.nodebox,
selection_box = {
type = "fixed",
fixed = {-0.4375, -0.5, -0.0625, 0.4375, 0.375, 0}
},
- tiles = {"signs_top.png", "signs_bottom.png", "signs_side.png", "signs_side.png", "signs_back.png", "signs_front.png"},
- groups = {choppy=2, dig_immediate=2},
- drop = default_sign,
-
- on_construct = function(pos)
- signs_lib.construct_sign(pos)
- end,
- on_destruct = function(pos)
- signs_lib.destruct_sign(pos)
- end,
+ tiles = {"signs_top.png", "signs_bottom.png", "signs_side.png", "signs_side.png", "signs_back.png", "signs_front.png"},
+ groups = {choppy=2, dig_immediate=2},
+ drop = default_sign,
+
+ on_construct = function(pos)
+ signs_lib.construct_sign(pos)
+ end,
+ on_destruct = function(pos)
+ signs_lib.destruct_sign(pos)
+ end,
on_receive_fields = function(pos, formname, fields, sender)
signs_lib.receive_fields(pos, formname, fields, sender)
end,
on_punch = function(pos, node, puncher)
- signs_lib.update_sign(pos)
+ signs_lib.update_sign(pos,nil,nil,node)
end,
on_rotate = signs_lib.facedir_rotate_simple
})
minetest.register_node(":signs:sign_hanging", {
- paramtype = "light",
+ paramtype = "light",
sunlight_propagates = true,
- paramtype2 = "facedir",
- drawtype = "nodebox",
- node_box = signs_lib.hanging_sign_model.nodebox,
- selection_box = {
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ node_box = signs_lib.hanging_sign_model.nodebox,
+ selection_box = {
type = "fixed",
fixed = {-0.45, -0.275, -0.049, 0.45, 0.5, 0.049}
},
- tiles = {
+ tiles = {
"signs_hanging_top.png",
"signs_hanging_bottom.png",
"signs_hanging_side.png",
@@ -817,31 +781,31 @@ minetest.register_node(":signs:sign_hanging", {
"signs_hanging_back.png",
"signs_hanging_front.png"
},
- groups = {choppy=2, dig_immediate=2},
- drop = default_sign,
-
- on_construct = function(pos)
- signs_lib.construct_sign(pos)
- end,
- on_destruct = function(pos)
- signs_lib.destruct_sign(pos)
- end,
+ groups = {choppy=2, dig_immediate=2},
+ drop = default_sign,
+
+ on_construct = function(pos)
+ signs_lib.construct_sign(pos)
+ end,
+ on_destruct = function(pos)
+ signs_lib.destruct_sign(pos)
+ end,
on_receive_fields = function(pos, formname, fields, sender)
signs_lib.receive_fields(pos, formname, fields, sender)
end,
on_punch = function(pos, node, puncher)
- signs_lib.update_sign(pos)
+ signs_lib.update_sign(pos,nil,nil,node)
end,
on_rotate = signs_lib.facedir_rotate_simple
})
minetest.register_node(":signs:sign_post", {
- paramtype = "light",
+ paramtype = "light",
sunlight_propagates = true,
- paramtype2 = "facedir",
- drawtype = "nodebox",
- node_box = signs_lib.sign_post_model.nodebox,
- tiles = {
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ node_box = signs_lib.sign_post_model.nodebox,
+ tiles = {
"signs_post_top.png",
"signs_post_bottom.png",
"signs_post_side.png",
@@ -849,14 +813,14 @@ minetest.register_node(":signs:sign_post", {
"signs_post_back.png",
"signs_post_front.png",
},
- groups = {choppy=2, dig_immediate=2},
- drop = {
+ groups = {choppy=2, dig_immediate=2},
+ drop = {
max_items = 2,
items = {
{ items = { default_sign }},
{ items = { "default:fence_wood" }},
},
- },
+ },
on_rotate = signs_lib.facedir_rotate_simple
})
@@ -896,7 +860,7 @@ minetest.register_node(":locked_sign:sign_wall_locked", {
signs_lib.receive_fields(pos, formname, fields, sender, true)
end,
on_punch = function(pos, node, puncher)
- signs_lib.update_sign(pos)
+ signs_lib.update_sign(pos,nil,nil,node)
end,
can_dig = function(pos, player)
local meta = minetest.get_meta(pos)
@@ -937,7 +901,7 @@ if minetest.registered_nodes["default:sign_wall_steel"] then
signs_lib.receive_fields(pos, formname, fields, sender)
end,
on_punch = function(pos, node, puncher)
- signs_lib.update_sign(pos)
+ signs_lib.update_sign(pos,nil,nil,node)
end,
on_rotate = signs_lib.wallmounted_rotate
})
@@ -991,7 +955,7 @@ if enable_colored_metal_signs then
signs_lib.receive_fields(pos, formname, fields, sender)
end,
on_punch = function(pos, node, puncher)
- signs_lib.update_sign(pos)
+ signs_lib.update_sign(pos,nil,nil,node)
end,
on_rotate = signs_lib.facedir_rotate
})
@@ -1012,9 +976,9 @@ signs_text_on_activate = function(self)
end
minetest.register_entity(":signs:text", {
- collisionbox = { 0, 0, 0, 0, 0, 0 },
- visual = "upright_sprite",
- textures = {},
+ collisionbox = { 0, 0, 0, 0, 0, 0 },
+ visual = "upright_sprite",
+ textures = {},
on_activate = signs_text_on_activate,
})
@@ -1022,17 +986,17 @@ minetest.register_entity(":signs:text", {
-- And the good stuff here! :-)
function signs_lib.register_fence_with_sign(fencename, fencewithsignname)
- local def = minetest.registered_nodes[fencename]
- local def_sign = minetest.registered_nodes[fencewithsignname]
- if not (def and def_sign) then
- minetest.log("warning", "[signs_lib] "..S("Attempt to register unknown node as fence"))
- return
- end
- def = signs_lib.table_copy(def)
- def_sign = signs_lib.table_copy(def_sign)
- fences_with_sign[fencename] = fencewithsignname
-
- def_sign.on_place = function(itemstack, placer, pointed_thing, ...)
+ local def = minetest.registered_nodes[fencename]
+ local def_sign = minetest.registered_nodes[fencewithsignname]
+ if not (def and def_sign) then
+ minetest.log("warning", "[signs_lib] "..S("Attempt to register unknown node as fence"))
+ return
+ end
+ def = signs_lib.table_copy(def)
+ def_sign = signs_lib.table_copy(def_sign)
+ fences_with_sign[fencename] = fencewithsignname
+
+ def_sign.on_place = function(itemstack, placer, pointed_thing, ...)
local node_above = minetest.get_node_or_nil(pointed_thing.above)
local node_under = minetest.get_node_or_nil(pointed_thing.under)
local def_above = node_above and minetest.registered_nodes[node_above.name]
@@ -1077,16 +1041,16 @@ function signs_lib.register_fence_with_sign(fencename, fencewithsignname)
signs_lib.receive_fields(pos, formname, fields, sender)
end
def_sign.on_punch = function(pos, node, puncher, ...)
- signs_lib.update_sign(pos)
+ signs_lib.update_sign(pos,nil,nil,node)
end
local fencename = fencename
def_sign.after_dig_node = function(pos, node, ...)
- node.name = fencename
- minetest.add_node(pos, node)
+ node.name = fencename
+ minetest.add_node(pos, node)
end
def_sign.on_rotate = signs_lib.facedir_rotate_simple
- def_sign.drop = default_sign
+ def_sign.drop = default_sign
minetest.register_node(":"..fencename, def)
minetest.register_node(":"..fencewithsignname, def_sign)
table.insert(signs_lib.sign_node_list, fencewithsignname)
@@ -1109,18 +1073,18 @@ minetest.register_lbm({
label = "Restore sign text",
run_at_every_load = true,
action = function(pos, node)
- signs_lib.update_sign(pos)
+ signs_lib.update_sign(pos,nil,nil,node)
end
})
-- locked sign
minetest.register_craft({
- output = "locked_sign:sign_wall_locked",
- recipe = {
- {default_sign},
- {"default:steel_ingot"},
- },
+ output = "locked_sign:sign_wall_locked",
+ recipe = {
+ {default_sign},
+ {"default:steel_ingot"},
+ },
})
-- craft recipes for the metal signs