2016-07-22 16:15:05 +02:00
--[[
Arrow signs mod for Minetest .
This mods adds arrowsigns into Minetest . Rotatable in all directions .
Thanks to :
Jat15 for the place and rotate system
Hectic for the new Textures that fit into Minetest 0.4 .14
2016-07-22 16:40:41 +02:00
This work is licensed under the Creative Commons Attribution - ShareAlike 3.0 Unported License .
2016-07-22 16:15:05 +02:00
To view a copy of this license , visit http : // creativecommons.org / licenses / by - sa / 3.0 / or send a letter to Creative Commons , PO Box 1866 , Mountain View , CA 94042 , USA .
] ]
2013-07-14 17:26:30 +02:00
arrow_signs = { }
2014-08-13 18:00:41 +02:00
arrow_signs.formspec = " field[text;Sign text:;${text}] " ;
2016-07-22 16:16:56 +02:00
local creative = minetest.setting_getbool ( " creative_mode " ) or false
2015-03-13 15:02:54 +01:00
arrow_signs.on_place = function ( itemstack , placer , pointed_thing )
2016-07-22 16:40:41 +02:00
2014-08-13 17:37:00 +02:00
local posabove = pointed_thing.above
local posunder = pointed_thing.under
local vector = placer : get_look_dir ( )
local place = true
2016-07-22 16:40:41 +02:00
2014-08-13 17:37:00 +02:00
if posabove.y > posunder.y then
if ( vector.z > 0.5 and vector.z <= 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 10 } )
elseif ( vector.x > 0.5 and vector.x <= 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 19 } )
elseif ( - 0.5 > vector.z and - 1 <= vector.z ) then
2016-07-22 16:40:41 +02:00
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 4 } )
2014-08-13 17:37:00 +02:00
elseif ( - 0.5 > vector.x and - 1 <= vector.x ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 13 } )
else
place = false
end
elseif posabove.y < posunder.y then
if ( vector.z > 0.5 and vector.z <= 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 8 } )
elseif ( vector.x > 0.5 and vector.x <= 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 17 } )
elseif ( - 0.5 > vector.z and - 1 <= vector.z ) then
2016-07-22 16:40:41 +02:00
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 6 } )
2014-08-13 17:37:00 +02:00
elseif ( - 0.5 > vector.x and - 1 <= vector.x ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 15 } )
else
place = false
end
elseif posabove.z > posunder.z then
if ( vector.y > 0.75 and vector.y <= 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 22 } )
elseif ( vector.y >=- 1 and vector.y <- 0.75 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 2 } )
elseif ( vector.x >= 0 and vector.x <= 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 18 } )
elseif ( vector.x < 0 and vector.x >=- 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 14 } )
else
place = false
2014-03-19 05:43:07 +01:00
end
2014-08-13 17:37:00 +02:00
elseif posabove.z < posunder.z then
if ( vector.y > 0.75 and vector.y <= 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 20 } )
elseif ( vector.y >=- 1 and vector.y <- 0.75 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 0 } )
elseif ( vector.x >= 0 and vector.x <= 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 16 } )
elseif ( vector.x < 0 and vector.x >=- 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 12 } )
else
place = false
end
elseif posabove.x > posunder.x then
if ( vector.y > 0.75 and vector.y <= 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 21 } )
elseif ( vector.y >=- 1 and vector.y <- 0.75 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 3 } )
elseif ( vector.z >= 0 and vector.z <= 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 11 } )
elseif ( vector.z < 0 and vector.z >=- 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 7 } )
else
place = false
end
elseif posabove.x < posunder.x then
if ( vector.y > 0.75 and vector.y <= 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 23 } )
elseif ( vector.y >=- 1 and vector.y <- 0.75 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 1 } )
elseif ( vector.z >= 0 and vector.z <= 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 9 } )
elseif ( vector.z < 0 and vector.z >=- 1 ) then
minetest.add_node ( posabove , { name = itemstack : get_name ( ) , param2 = 5 } )
else
place = false
end
else
place = false
2014-03-19 05:43:07 +01:00
end
2014-08-13 17:37:00 +02:00
2016-07-22 16:16:56 +02:00
if place then
if not creative then
itemstack : take_item ( )
end
2014-03-19 05:43:07 +01:00
else
2016-07-22 16:16:56 +02:00
itemstack = minetest.rotate_node ( itemstack , placer , pointed_thing )
2014-08-13 19:31:09 +02:00
end
2016-07-22 16:16:56 +02:00
return itemstack
2014-03-19 05:43:07 +01:00
end
2015-03-13 15:02:54 +01:00
arrow_signs.savetext = function ( pos , formname , fields , sender )
if fields.text then
2013-07-14 17:26:30 +02:00
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
2015-04-03 10:38:51 +02:00
if minetest.is_protected ( pos , sender : get_player_name ( ) ) then
minetest.record_protection_violation ( pos , sender : get_player_name ( ) )
return
end
2014-01-05 19:01:57 +01:00
local meta = minetest.get_meta ( pos )
2013-07-14 17:26:30 +02:00
fields.text = fields.text or " "
2015-03-13 15:02:54 +01:00
minetest.log ( " action " , ( sender : get_player_name ( ) or " " ) .. " wrote \" " .. fields.text ..
" \" to sign at " .. minetest.pos_to_string ( pos ) ) ;
2013-07-14 17:26:30 +02:00
meta : set_string ( " text " , fields.text )
2015-04-03 10:32:57 +02:00
local text , lines = arrow_signs.create_lines ( fields.text )
2013-07-14 17:26:30 +02:00
meta : set_string ( " infotext " , ' " ' .. text .. ' " ' )
2015-04-03 10:32:57 +02:00
if lines > 4 then
2015-04-26 10:50:04 +02:00
minetest.chat_send_player ( sender : get_player_name ( ) , " 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 " )
2013-07-14 17:26:30 +02:00
end
return true
end
2015-03-13 15:02:54 +01:00
end
2013-07-14 17:26:30 +02:00
2015-03-13 15:02:54 +01:00
--this function creates the linebreaks
arrow_signs.create_lines = function ( text )
2015-04-03 10:32:57 +02:00
local text , n = text : gsub ( " [ ]*(%|)[ ]* " , ' " \n " ' ) --search for |
local text , m = text : gsub ( " [ ]*(%/)[ ]* " , ' " \n " ' ) --search for /
return text , n + m
2013-07-14 17:26:30 +02:00
end
2016-07-22 17:06:36 +02:00
arrow_signs.nodebox = {
type = " fixed " ,
fixed = {
2016-07-23 05:29:56 +02:00
{ 0.25 , - 0.25 , 0.4375 , - 0.25 , 0.5 , 0.5 } ,
{ 0.1875 , - 0.3125 , 0.4375 , - 0.1875 , - 0.25 , 0.5 } ,
{ 0.125 , - 0.3125 , 0.4375 , - 0.125 , - 0.375 , 0.5 } ,
{ 0.0625 , - 0.375 , 0.4375 , - 0.0625 , - 0.437 , 0.5 }
2016-07-22 17:06:36 +02:00
}
}
arrow_signs.selection_box = {
2016-07-22 16:40:41 +02:00
type = " fixed " ,
fixed = {
2016-07-23 05:29:56 +02:00
{ 0.30 , - 0.5 , 0.4375 , - 0.30 , 0.5 , 0.5 }
2016-07-22 16:40:41 +02:00
}
2013-07-14 17:26:30 +02:00
}
2014-01-05 19:01:57 +01:00
2016-07-22 17:06:36 +02:00
local MODPATH = minetest.get_modpath ( " arrow_signs " )
2013-07-14 17:26:30 +02:00
2016-07-22 17:06:36 +02:00
-- Wooden Sign
dofile ( MODPATH .. " /wood.lua " )
2016-07-23 06:35:59 +02:00
-- Steel Sign
dofile ( MODPATH .. " /steel.lua " )
2016-07-22 17:06:36 +02:00
--Shared Locked sign
if minetest.get_modpath ( " locks " ) then
2014-08-13 17:37:00 +02:00
dofile ( MODPATH .. " /shared_locked.lua " )
2016-07-22 17:06:36 +02:00
end