Import source (dev state between 1.2.0 and 1.3.0)
[minetest_tutorial_subgame.git] / mods / arrow_signs / init.lua
blob9b735d31c45e14b5f4cdbafc485d5241703a72b7
1 --more_signs by addi
2 --Code and Textures are under the CC by-sa 3.0 licence
3 --see: http://creativecommons.org/licenses/by-sa/3.0/
7 arrow_signs={}
9 function arrow_signs:savetext(pos, formname, fields, sender)
11 if not minetest.get_player_privs(sender:get_player_name())["interact"] then
12 minetest.chat_send_player(sender:get_player_name(), "error: you don't have permission to edit the sign. you need the interact priv")
13 return
14 end
15 local meta = minetest.env:get_meta(pos)
16 fields.text = fields.text or ""
17 print((sender:get_player_name() or "").." wrote \""..fields.text..
18 "\" to sign at "..minetest.pos_to_string(pos))
19 meta:set_string("text", fields.text)
20 text = arrow_signs:create_lines(fields.text)
21 meta:set_string("infotext", '"'..text..'"')
22 i=0
23 for wort in text:gfind("\n") do
24 i=i+1
25 end
26 if i > 4 then
27 minetest.chat_send_player(sender:get_player_name(),"\tInformation: \nYou've written more than 5 lines. \n it may be that not all lines are displayed. \n Please remove the last entry")
28 end
29 return true
30 end
32 function arrow_signs:create_lines(text)
33 text = text:gsub("/", "\"\n\"")
34 text = text:gsub("|", "\"\n\"")
35 return text
36 end
39 local clone_registered = function(case,name)
40 local params = {}
41 local list
42 if case == "item" then list = minetest.registered_items end
43 if case == "node" then list = minetest.registered_nodes end
44 if case == "craftitem" then list = minetest.registered_craftitems end
45 if case == "tool" then list = minetest.registered_tools end
46 if case == "entity" then list = minetest.registered_entities end
47 if list then
48 for k,v in pairs(list[name]) do
49 params[k] = v
50 end
51 end
52 return params
53 end
55 --Sign right
56 minetest.register_node("arrow_signs:wall_right", {
57 description = "Sign right",
58 drawtype = "signlike",
59 tiles = {"arrow_sign_right.png"},
60 inventory_image = "arrow_sign_right.png",
61 paramtype = "light",
62 paramtype2 = "wallmounted",
63 sunlight_propagates = true,
64 walkable = false,
65 selection_box = {
66 type = "wallmounted",
67 --wall_top = <default>
68 --wall_bottom = <default>
69 --wall_side = <default>
71 groups = {immortal=1,attached_node=1},
72 legacy_wallmounted = true,
73 sounds = default.node_sound_defaults(),
74 on_construct = function(pos)
75 --local n = minetest.env:get_node(pos)
76 local meta = minetest.env:get_meta(pos)
77 meta:set_string("formspec", "field[text;;${text}]")
78 meta:set_string("infotext", "\"\"")
79 end,
80 on_receive_fields = function(pos, formname, fields, sender)
81 arrow_signs:savetext(pos, formname, fields, sender)
82 end,
83 on_punch = function(pos)
84 local meta = minetest.env:get_meta(pos)
85 meta:set_string("formspec", "")
86 end,
91 -- sign left
92 minetest.register_node("arrow_signs:wall_left", {
93 description = "Sign left",
94 drawtype = "signlike",
95 tiles = {"arrow_sign_left.png"},
96 inventory_image = "arrow_sign_left.png",
97 paramtype = "light",
98 paramtype2 = "wallmounted",
99 sunlight_propagates = true,
100 walkable = false,
101 selection_box = {
102 type = "wallmounted",
103 --wall_top = <default>
104 --wall_bottom = <default>
105 --wall_side = <default>
107 groups = {immortal=1,attached_node=1},
108 legacy_wallmounted = true,
109 sounds = default.node_sound_defaults(),
110 on_construct = function(pos)
111 --local n = minetest.env:get_node(pos)
112 local meta = minetest.env:get_meta(pos)
113 meta:set_string("formspec", "field[text;;${text}]")
114 meta:set_string("infotext", "\"\"")
115 end,
116 on_receive_fields = function(pos, formname, fields, sender)
117 arrow_signs:savetext(pos, formname, fields, sender)
118 end,
119 on_punch = function(pos)
120 local meta = minetest.env:get_meta(pos)
121 meta:set_string("formspec", "")
122 end,
126 --Sign up
127 minetest.register_node("arrow_signs:wall_up", {
128 description = "Sign up",
129 drawtype = "signlike",
130 tiles = {"arrow_sign_up.png"},
131 inventory_image = "arrow_sign_up.png",
132 paramtype = "light",
133 paramtype2 = "wallmounted",
134 sunlight_propagates = true,
135 walkable = false,
136 selection_box = {
137 type = "wallmounted",
138 --wall_top = <default>
139 --wall_bottom = <default>
140 --wall_side = <default>
142 groups = {immortal=1,attached_node=1},
143 legacy_wallmounted = true,
144 sounds = default.node_sound_defaults(),
145 on_construct = function(pos)
146 --local n = minetest.env:get_node(pos)
147 local meta = minetest.env:get_meta(pos)
148 meta:set_string("formspec", "field[text;;${text}]")
149 meta:set_string("infotext", "\"\"")
150 end,
151 on_receive_fields = function(pos, formname, fields, sender)
152 arrow_signs:savetext(pos, formname, fields, sender)
153 end,
154 on_punch = function(pos)
155 local meta = minetest.env:get_meta(pos)
156 meta:set_string("formspec", "")
157 end,
161 --Sign down
162 minetest.register_node("arrow_signs:wall_down", {
163 description = "Sign down",
164 drawtype = "signlike",
165 tiles = {"arrow_sign_down.png"},
166 inventory_image = "arrow_sign_down.png",
167 paramtype = "light",
168 paramtype2 = "wallmounted",
169 sunlight_propagates = true,
170 walkable = false,
171 selection_box = {
172 type = "wallmounted",
173 --wall_top = <default>
174 --wall_bottom = <default>
175 --wall_side = <default>
177 groups = {immortal=1,attached_node=1},
178 legacy_wallmounted = true,
179 sounds = default.node_sound_defaults(),
180 on_construct = function(pos)
181 --local n = minetest.env:get_node(pos)
182 local meta = minetest.env:get_meta(pos)
183 meta:set_string("formspec", "field[text;;${text}]")
184 meta:set_string("infotext", "\"\"")
185 end,
186 on_receive_fields = function(pos, formname, fields, sender)
187 arrow_signs:savetext(pos, formname, fields, sender)
188 end,
189 on_punch = function(pos)
190 local meta = minetest.env:get_meta(pos)
191 meta:set_string("formspec", "")
192 end,