forked from mtcontrib/signs_lib
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			c199a33bb8
			...
			2019-05-27
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					1d33e15ea5 | ||
| 
						 | 
					dfa47c2519 | ||
| 
						 | 
					34a7242616 | 
							
								
								
									
										159
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										159
									
								
								init.lua
									
									
									
									
									
								
							@@ -41,6 +41,11 @@ local wall_dir_change = {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
signs_lib.wallmounted_rotate = function(pos, node, user, mode)
 | 
			
		||||
	if minetest.is_protected(pos, user:get_player_name()) then
 | 
			
		||||
		minetest.record_protection_violation(pos,
 | 
			
		||||
		sender:get_player_name())
 | 
			
		||||
		return false
 | 
			
		||||
	end
 | 
			
		||||
	if mode ~= screwdriver.ROTATE_FACE then return false end 
 | 
			
		||||
	minetest.swap_node(pos, { name = node.name, param2 = wall_dir_change[node.param2 % 6] })
 | 
			
		||||
	signs_lib.update_sign(pos,nil,nil,node)
 | 
			
		||||
@@ -48,6 +53,11 @@ signs_lib.wallmounted_rotate = function(pos, node, user, mode)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
signs_lib.facedir_rotate = function(pos, node, user, mode)
 | 
			
		||||
	if minetest.is_protected(pos, user:get_player_name()) then
 | 
			
		||||
		minetest.record_protection_violation(pos,
 | 
			
		||||
		sender:get_player_name())
 | 
			
		||||
		return false
 | 
			
		||||
	end
 | 
			
		||||
	if mode ~= screwdriver.ROTATE_FACE then return false end
 | 
			
		||||
	local newparam2 = (node.param2 %8) + 1
 | 
			
		||||
	if newparam2 == 5 then
 | 
			
		||||
@@ -61,6 +71,11 @@ signs_lib.facedir_rotate = function(pos, node, user, mode)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
signs_lib.facedir_rotate_simple = function(pos, node, user, mode)
 | 
			
		||||
	if minetest.is_protected(pos, user:get_player_name()) then
 | 
			
		||||
		minetest.record_protection_violation(pos,
 | 
			
		||||
		sender:get_player_name())
 | 
			
		||||
		return false
 | 
			
		||||
	end
 | 
			
		||||
	if mode ~= screwdriver.ROTATE_FACE then return false end
 | 
			
		||||
	local newparam2 = (node.param2 %8) + 1
 | 
			
		||||
	if newparam2 > 3 then newparam2 = 0 end
 | 
			
		||||
@@ -154,9 +169,15 @@ signs_lib.sign_post_model = {
 | 
			
		||||
 | 
			
		||||
-- the list of standard sign nodes
 | 
			
		||||
 | 
			
		||||
local default_sign = "default:sign_wall_wood"
 | 
			
		||||
local default_sign_image = "default_sign_wood.png"
 | 
			
		||||
 | 
			
		||||
local default_sign_metal = "default:sign_wall_steel"
 | 
			
		||||
local default_sign_metal_image = "default_sign_steel.png"
 | 
			
		||||
 | 
			
		||||
signs_lib.sign_node_list = {
 | 
			
		||||
	"default:sign_wall_wood",
 | 
			
		||||
	"default:sign_wall_steel",
 | 
			
		||||
	default_sign,
 | 
			
		||||
	default_sign_metal,
 | 
			
		||||
	"signs:sign_yard",
 | 
			
		||||
	"signs:sign_hanging",
 | 
			
		||||
	"signs:sign_wall_green",
 | 
			
		||||
@@ -170,20 +191,6 @@ signs_lib.sign_node_list = {
 | 
			
		||||
	"locked_sign:sign_wall_locked"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local default_sign, default_sign_image
 | 
			
		||||
 | 
			
		||||
-- Default sign was renamed in 0.4.14. Support both & old versions.
 | 
			
		||||
if minetest.registered_nodes["default:sign_wall_wood"] then
 | 
			
		||||
	default_sign = "default:sign_wall_wood"
 | 
			
		||||
	default_sign_image = "default_sign_wood.png"
 | 
			
		||||
else
 | 
			
		||||
	default_sign = "default:sign_wall"
 | 
			
		||||
	default_sign_image = "default_sign_wall.png"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
default_sign_metal = "default:sign_wall_steel"
 | 
			
		||||
default_sign_metal_image = "default_sign_steel.png"
 | 
			
		||||
 | 
			
		||||
--table copy
 | 
			
		||||
 | 
			
		||||
function signs_lib.table_copy(t)
 | 
			
		||||
@@ -670,6 +677,7 @@ function signs_lib.determine_sign_type(itemstack, placer, pointed_thing, locked)
 | 
			
		||||
				z = above.z - placer_pos.z
 | 
			
		||||
			}
 | 
			
		||||
		end
 | 
			
		||||
		local finalpos = above
 | 
			
		||||
 | 
			
		||||
		local fdir = minetest.dir_to_facedir(dir)
 | 
			
		||||
		local pt_name = minetest.get_node(under).name
 | 
			
		||||
@@ -677,23 +685,23 @@ function signs_lib.determine_sign_type(itemstack, placer, pointed_thing, locked)
 | 
			
		||||
 | 
			
		||||
		if fences_with_sign[pt_name] and signname == default_sign then
 | 
			
		||||
			minetest.add_node(under, {name = fences_with_sign[pt_name], param2 = fdir})
 | 
			
		||||
			finalpos = under
 | 
			
		||||
		elseif wdir == 0 and signname == default_sign then
 | 
			
		||||
			minetest.add_node(above, {name = "signs:sign_hanging", param2 = fdir})
 | 
			
		||||
		elseif wdir == 1 and signname == default_sign then
 | 
			
		||||
			minetest.add_node(above, {name = "signs:sign_yard", param2 = fdir})
 | 
			
		||||
		elseif signname == default_sign_metal then
 | 
			
		||||
		elseif signname == default_sign
 | 
			
		||||
		  or signname == default_sign_metal
 | 
			
		||||
		  or signname == "locked_sign:sign_wall_locked" then
 | 
			
		||||
			minetest.add_node(above, {name = signname, param2 = wdir })
 | 
			
		||||
		elseif signname ~= default_sign
 | 
			
		||||
		  and signname ~= default_sign_metal
 | 
			
		||||
		  and signname ~= "locked_sign:sign_wall_locked" then -- it's a signs_lib colored metal wall sign.
 | 
			
		||||
			minetest.add_node(above, {name = signname, param2 = fdir})
 | 
			
		||||
		else -- it must be a default or locked wooden wall sign
 | 
			
		||||
			minetest.add_node(above, {name = signname, param2 = wdir }) -- note it's wallmounted here!
 | 
			
		||||
			if locked then
 | 
			
		||||
				local meta = minetest.get_meta(above)
 | 
			
		||||
				local owner = placer:get_player_name()
 | 
			
		||||
				meta:set_string("owner", owner)
 | 
			
		||||
			end
 | 
			
		||||
		else
 | 
			
		||||
			minetest.add_node(above, {name = signname, param2 = fdir}) -- it must be a colored metal sign
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		if locked then
 | 
			
		||||
			local meta = minetest.get_meta(finalpos)
 | 
			
		||||
			local owner = placer:get_player_name()
 | 
			
		||||
			meta:set_string("owner", owner)
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		if not signs_lib.expect_infinite_stacks then
 | 
			
		||||
@@ -892,43 +900,70 @@ minetest.register_node(":locked_sign:sign_wall_locked", {
 | 
			
		||||
		return pname == owner or pname == minetest.settings:get("name")
 | 
			
		||||
			or minetest.check_player_privs(pname, {sign_editor=true})
 | 
			
		||||
	end,
 | 
			
		||||
	on_rotate = signs_lib.wallmounted_rotate
 | 
			
		||||
	on_rotate = function(pos, node, user, mode)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		local owner = meta:get_string("owner")
 | 
			
		||||
		if owner == user:get_player_name() then
 | 
			
		||||
			signs_lib.wallmounted_rotate(pos, node, user, mode)
 | 
			
		||||
		else
 | 
			
		||||
			return false
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- default metal sign, if defined
 | 
			
		||||
-- default metal sign
 | 
			
		||||
 | 
			
		||||
if minetest.registered_nodes["default:sign_wall_steel"] then
 | 
			
		||||
	minetest.register_node(":"..default_sign_metal, {
 | 
			
		||||
		description = S("Sign"),
 | 
			
		||||
		inventory_image = default_sign_metal_image,
 | 
			
		||||
		wield_image = default_sign_metal_image,
 | 
			
		||||
		node_placement_prediction = "",
 | 
			
		||||
		sunlight_propagates = true,
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
		paramtype2 = "wallmounted",
 | 
			
		||||
		drawtype = "nodebox",
 | 
			
		||||
		node_box = signs_lib.regular_wall_sign_model.nodebox,
 | 
			
		||||
		tiles = {"signs_wall_sign_metal.png"},
 | 
			
		||||
		groups = sign_groups,
 | 
			
		||||
 | 
			
		||||
		on_place = function(itemstack, placer, pointed_thing)
 | 
			
		||||
			return signs_lib.determine_sign_type(itemstack, placer, pointed_thing)
 | 
			
		||||
		end,
 | 
			
		||||
		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,nil,nil,node)
 | 
			
		||||
		end,
 | 
			
		||||
		on_rotate = signs_lib.wallmounted_rotate
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
minetest.register_node(":"..default_sign_metal, {
 | 
			
		||||
	description = S("Sign"),
 | 
			
		||||
	inventory_image = default_sign_metal_image,
 | 
			
		||||
	wield_image = default_sign_metal_image,
 | 
			
		||||
	node_placement_prediction = "",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "wallmounted",
 | 
			
		||||
	drawtype = "nodebox",
 | 
			
		||||
	node_box = signs_lib.regular_wall_sign_model.nodebox,
 | 
			
		||||
	tiles = {"signs_wall_sign_metal.png"},
 | 
			
		||||
	groups = sign_groups,
 | 
			
		||||
	on_place = function(itemstack, placer, pointed_thing)
 | 
			
		||||
		return signs_lib.determine_sign_type(itemstack, placer, pointed_thing, true)
 | 
			
		||||
	end,
 | 
			
		||||
	on_construct = function(pos)
 | 
			
		||||
		signs_lib.construct_sign(pos, true)
 | 
			
		||||
	end,
 | 
			
		||||
	on_destruct = function(pos)
 | 
			
		||||
		signs_lib.destruct_sign(pos)
 | 
			
		||||
	end,
 | 
			
		||||
	on_receive_fields = function(pos, formname, fields, sender)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		local owner = meta:get_string("owner")
 | 
			
		||||
		local pname = sender:get_player_name() or ""
 | 
			
		||||
		if pname ~= owner and pname ~= minetest.settings:get("name")
 | 
			
		||||
		  and not minetest.check_player_privs(pname, {sign_editor=true}) then
 | 
			
		||||
			return
 | 
			
		||||
		end
 | 
			
		||||
		signs_lib.receive_fields(pos, formname, fields, sender, true)
 | 
			
		||||
	end,
 | 
			
		||||
	on_punch = function(pos, node, puncher)
 | 
			
		||||
		signs_lib.update_sign(pos,nil,nil,node)
 | 
			
		||||
	end,
 | 
			
		||||
	can_dig = function(pos, player)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		local owner = meta:get_string("owner")
 | 
			
		||||
		local pname = player:get_player_name()
 | 
			
		||||
		return pname == owner or pname == minetest.settings:get("name")
 | 
			
		||||
			or minetest.check_player_privs(pname, {sign_editor=true})
 | 
			
		||||
	end,
 | 
			
		||||
	on_rotate = function(pos, node, user, mode)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		local owner = meta:get_string("owner")
 | 
			
		||||
		if owner == user:get_player_name() then
 | 
			
		||||
			signs_lib.wallmounted_rotate(pos, node, user, mode)
 | 
			
		||||
		else
 | 
			
		||||
			return false
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- metal, colored signs
 | 
			
		||||
if enable_colored_metal_signs then
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user