-- Boilerplate to support localized strings if intllib mod is installed. local S; if (minetest.get_modpath("intllib")) then dofile(minetest.get_modpath("intllib").."/intllib.lua"); S = intllib.Getter(minetest.get_current_modname()); else S = function ( s ) return s end; end local function deepcopy ( t ) local nt = { }; for k, v in pairs(t) do if (type(v) == "table") then nt[k] = deepcopy(v); else nt[k] = v; end end return nt; end local newbook = deepcopy(minetest.registered_items["default:book"]); newbook.on_use = function ( itemstack, user, pointed_thing ) local text = itemstack:get_metadata(); local formspec = "size[8,9]".. "background[-0.5,-0.5;9,10;book_bg.png]".. "textarea[0.5,0.25;7.5,9.25;text;;"..minetest.formspec_escape(text).."]".. "button_exit[3,8.25;2,1;ok;Exit]"; minetest.show_formspec(user:get_player_name(), "default:book", formspec); end minetest.register_craftitem(":default:book", newbook); minetest.register_on_player_receive_fields(function ( player, formname, fields ) if ((formname == "default:book") and fields and fields.text) then local stack = player:get_wielded_item(); if (stack:get_name() and (stack:get_name() == "default:book")) then local t = stack:to_table(); t.metadata = fields.text; player:set_wielded_item(ItemStack(t)); end end end);