2013-07-14 17:26:30 +02:00
--more_signs by addi
--Code and Textures are under the CC by-sa 3.0 licence
--see: http://creativecommons.org/licenses/by-sa/3.0/
arrow_signs = { }
function arrow_signs : savetext ( pos , formname , fields , sender )
if not minetest.get_player_privs ( sender : get_player_name ( ) ) [ " interact " ] then
minetest.chat_send_player ( sender : get_player_name ( ) , " error: you don't have permission to edit the sign. you need the interact priv " )
return
end
local meta = minetest.env : get_meta ( pos )
fields.text = fields.text or " "
print ( ( sender : get_player_name ( ) or " " ) .. " wrote \" " .. fields.text ..
" \" to sign at " .. minetest.pos_to_string ( pos ) )
meta : set_string ( " text " , fields.text )
text = arrow_signs : create_lines ( fields.text )
meta : set_string ( " infotext " , ' " ' .. text .. ' " ' )
i = 0
for wort in text : gfind ( " \n " ) do
i = i + 1
end
if i > 4 then
minetest.chat_send_player ( sender : get_player_name ( ) , " \t Information: \n You've written more than 5 lines. \n it may be that not all lines are displayed. \n Please remove the last entry " )
end
return true
end
function arrow_signs : create_lines ( text )
text = text : gsub ( " / " , " \" \n \" " )
text = text : gsub ( " | " , " \" \n \" " )
return text
end
local clone_registered = function ( case , name )
local params = { }
local list
if case == " item " then list = minetest.registered_items end
if case == " node " then list = minetest.registered_nodes end
if case == " craftitem " then list = minetest.registered_craftitems end
if case == " tool " then list = minetest.registered_tools end
if case == " entity " then list = minetest.registered_entities end
if list then
for k , v in pairs ( list [ name ] ) do
params [ k ] = v
end
end
return params
end
-- usage
local node = clone_registered ( " node " , " default:sign_wall " )
2014-01-03 23:52:55 +01:00
node.groups = { choppy = 2 , dig_immediate = 2 , sign = 1 }
2013-07-14 17:26:30 +02:00
minetest.register_node ( " :default:sign_wall " , node )
--Sign right
minetest.register_node ( " arrow_signs:wall_right " , {
description = " Sign right " ,
drawtype = " signlike " ,
tiles = { " arrow_sign_right.png " } ,
inventory_image = " arrow_sign_right.png " ,
paramtype = " light " ,
paramtype2 = " wallmounted " ,
sunlight_propagates = true ,
walkable = false ,
selection_box = {
type = " wallmounted " ,
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
} ,
groups = { choppy = 2 , dig_immediate = 2 , attached_node = 1 , sign = 1 } ,
legacy_wallmounted = true ,
sounds = default.node_sound_defaults ( ) ,
on_construct = function ( pos )
--local n = minetest.env:get_node(pos)
local meta = minetest.env : get_meta ( pos )
meta : set_string ( " formspec " , " hack:sign_text_input " )
meta : set_string ( " infotext " , " \" \" " )
end ,
on_receive_fields = function ( pos , formname , fields , sender )
arrow_signs : savetext ( pos , formname , fields , sender )
end ,
} )
-- sign left
minetest.register_node ( " arrow_signs:wall_left " , {
description = " Sign left " ,
drawtype = " signlike " ,
tiles = { " arrow_sign_left.png " } ,
inventory_image = " arrow_sign_left.png " ,
paramtype = " light " ,
paramtype2 = " wallmounted " ,
sunlight_propagates = true ,
walkable = false ,
selection_box = {
type = " wallmounted " ,
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
} ,
groups = { choppy = 2 , dig_immediate = 2 , attached_node = 1 , sign = 1 } ,
legacy_wallmounted = true ,
sounds = default.node_sound_defaults ( ) ,
on_construct = function ( pos )
--local n = minetest.env:get_node(pos)
local meta = minetest.env : get_meta ( pos )
meta : set_string ( " formspec " , " hack:sign_text_input " )
meta : set_string ( " infotext " , " \" \" " )
end ,
on_receive_fields = function ( pos , formname , fields , sender )
arrow_signs : savetext ( pos , formname , fields , sender )
end ,
} )
--Sign up
minetest.register_node ( " arrow_signs:wall_up " , {
description = " Sign up " ,
drawtype = " signlike " ,
tiles = { " arrow_sign_up.png " } ,
inventory_image = " arrow_sign_up.png " ,
paramtype = " light " ,
paramtype2 = " wallmounted " ,
sunlight_propagates = true ,
walkable = false ,
selection_box = {
type = " wallmounted " ,
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
} ,
groups = { choppy = 2 , dig_immediate = 2 , attached_node = 1 , sign = 1 } ,
legacy_wallmounted = true ,
sounds = default.node_sound_defaults ( ) ,
on_construct = function ( pos )
--local n = minetest.env:get_node(pos)
local meta = minetest.env : get_meta ( pos )
meta : set_string ( " formspec " , " hack:sign_text_input " )
meta : set_string ( " infotext " , " \" \" " )
end ,
on_receive_fields = function ( pos , formname , fields , sender )
arrow_signs : savetext ( pos , formname , fields , sender )
end ,
} )
--Sign down
minetest.register_node ( " arrow_signs:wall_down " , {
description = " Sign down " ,
drawtype = " signlike " ,
tiles = { " arrow_sign_down.png " } ,
inventory_image = " arrow_sign_down.png " ,
paramtype = " light " ,
paramtype2 = " wallmounted " ,
sunlight_propagates = true ,
walkable = false ,
selection_box = {
type = " wallmounted " ,
--wall_top = <default>
--wall_bottom = <default>
--wall_side = <default>
} ,
groups = { choppy = 2 , dig_immediate = 2 , attached_node = 1 , sign = 1 } ,
legacy_wallmounted = true ,
sounds = default.node_sound_defaults ( ) ,
on_construct = function ( pos )
--local n = minetest.env:get_node(pos)
local meta = minetest.env : get_meta ( pos )
meta : set_string ( " formspec " , " hack:sign_text_input " )
meta : set_string ( " infotext " , " \" \" " )
end ,
on_receive_fields = function ( pos , formname , fields , sender )
arrow_signs : savetext ( pos , formname , fields , sender )
end ,
} )
--recipes
minetest.register_craft ( {
output = ' arrow_signs:wall_right 1 ' ,
recipe = {
{ ' ' , ' ' , ' ' } ,
{ ' ' , ' group:sign ' , ' default:stick ' } ,
{ ' ' , ' ' , ' ' } ,
}
} )
minetest.register_craft ( {
output = ' arrow_signs:wall_left 1 ' ,
recipe = {
{ ' ' , ' ' , ' ' } ,
{ ' default:stick ' , ' group:sign ' , ' ' } ,
{ ' ' , ' ' , ' ' } ,
}
} )
minetest.register_craft ( {
output = ' arrow_signs:wall_up 1 ' ,
recipe = {
{ ' ' , ' default:stick ' , ' ' } ,
{ ' ' , ' group:sign ' , ' ' } ,
{ ' ' , ' ' , ' ' } ,
}
} )
minetest.register_craft ( {
output = ' arrow_signs:wall_down 1 ' ,
recipe = {
{ ' ' , ' ' , ' ' } ,
{ ' ' , ' group:sign ' , ' ' } ,
{ ' ' , ' default:stick ' , ' ' } ,
}
} )
minetest.register_craft ( {
output = ' default:sign_wall ' ,
recipe = {
{ ' group:sign ' } ,
}
} )
minetest.register_alias ( " more_signs:wall_right " , " arrow_signs:wall_right " )
minetest.register_alias ( " sign_right " , " arrow_signs:wall_right " )
minetest.register_alias ( " more_signs:wall_left " , " arrow_signs:wall_left " )
minetest.register_alias ( " sign_left " , " arrow_signs:wall_left " )
minetest.register_alias ( " more_signs:wall_up " , " arrow_signs:wall_up " )
minetest.register_alias ( " sign_up " , " arrow_signs:wall_up " )
minetest.register_alias ( " more_signs:wall_down " , " arrow_signs:wall_dowm " )
minetest.register_alias ( " sign_down " , " arrow_signs:wall_down " )
if locks then
local MODPATH = minetest.get_modpath ( " arrow_signs " ) ;
dofile ( MODPATH .. " /shared_locked.lua " )
end