forked from mtcontrib/homedecor_modpack
		
	Keep metadata on book place/dig.
This commit is contained in:
		| @@ -1907,6 +1907,20 @@ for c in ipairs(bookcolors) do | |||||||
| 	local color = bookcolors[c] | 	local color = bookcolors[c] | ||||||
| 	local color_d = S(bookcolors[c]) | 	local color_d = S(bookcolors[c]) | ||||||
|  |  | ||||||
|  | 	local function book_dig(pos, node, digger) | ||||||
|  | 		if minetest.is_protected(pos, digger:get_player_name()) then return end | ||||||
|  | 		local meta = minetest.get_meta(pos) | ||||||
|  | 		local stack = ItemStack({ | ||||||
|  | 			name = "homedecor:book_"..color, | ||||||
|  | 			metadata = meta:get_string("text"), | ||||||
|  | 		}) | ||||||
|  | 		stack = digger:get_inventory():add_item("main", stack) | ||||||
|  | 		if not stack:is_empty() then | ||||||
|  | 			minetest.item_drop(stack, digger, pos) | ||||||
|  | 		end | ||||||
|  | 		minetest.remove_node(pos) | ||||||
|  | 	end | ||||||
|  |  | ||||||
| minetest.register_node("homedecor:book_"..color, { | minetest.register_node("homedecor:book_"..color, { | ||||||
| 	description = S("Book (%s)"):format(color_d), | 	description = S("Book (%s)"):format(color_d), | ||||||
| 	tiles = { | 	tiles = { | ||||||
| @@ -1933,6 +1947,32 @@ minetest.register_node("homedecor:book_"..color, { | |||||||
| 		local fdir = node.param2 | 		local fdir = node.param2 | ||||||
| 		minetest.set_node(pos, { name = "homedecor:book_open_"..color, param2 = fdir }) | 		minetest.set_node(pos, { name = "homedecor:book_open_"..color, param2 = fdir }) | ||||||
| 	end, | 	end, | ||||||
|  | 	on_place = function(itemstack, placer, pointed_thing) | ||||||
|  | 		local plname = placer:get_player_name() | ||||||
|  | 		local pos = pointed_thing.under | ||||||
|  | 		local node = minetest.get_node(pos) | ||||||
|  | 		local n = minetest.registered_nodes[node.name] | ||||||
|  | 		if not n.buildable_to then | ||||||
|  | 			pos = pointed_thing.above | ||||||
|  | 			node = minetest.get_node(pos) | ||||||
|  | 			n = minetest.registered_nodes[node.name] | ||||||
|  | 			if not n.buildable_to then return end | ||||||
|  | 		end | ||||||
|  | 		if minetest.is_protected(pos, plname) then return end | ||||||
|  | 		local fdir = minetest.dir_to_facedir(placer:get_look_dir()) | ||||||
|  | 		minetest.set_node(pos, { | ||||||
|  | 			name = "homedecor:book_"..color, | ||||||
|  | 			param2 = fdir, | ||||||
|  | 		}) | ||||||
|  | 		local text = itemstack:get_metadata() or "" | ||||||
|  | 		local meta = minetest.get_meta(pos) | ||||||
|  | 		meta:set_string("text", text) | ||||||
|  | 		if not minetest.setting_getbool("creative_mode") then | ||||||
|  | 			itemstack:take_item() | ||||||
|  | 		end | ||||||
|  | 		return itemstack | ||||||
|  | 	end, | ||||||
|  | 	on_dig = book_dig, | ||||||
| 	on_use = function(itemstack, user, pointed_thing) | 	on_use = function(itemstack, user, pointed_thing) | ||||||
| 		local player_name = user:get_player_name() | 		local player_name = user:get_player_name() | ||||||
| 		local data = minetest.deserialize(itemstack:get_metadata()) | 		local data = minetest.deserialize(itemstack:get_metadata()) | ||||||
| @@ -1979,6 +2019,7 @@ minetest.register_node("homedecor:book_open_"..color, { | |||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
| 	drop = "homedecor:book_"..color, | 	drop = "homedecor:book_"..color, | ||||||
|  | 	on_dig = book_dig, | ||||||
| 	on_rightclick = function(pos, node, clicker) | 	on_rightclick = function(pos, node, clicker) | ||||||
| 		local fdir = node.param2 | 		local fdir = node.param2 | ||||||
| 		minetest.set_node(pos, { name = "homedecor:book_"..color, param2 = fdir }) | 		minetest.set_node(pos, { name = "homedecor:book_"..color, param2 = fdir }) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user