Keep metadata on book place/dig.

This commit is contained in:
Diego Martinez 2015-01-23 14:05:53 -03:00
parent 365dc1c639
commit 5bae438647

View File

@ -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 })