X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=mods%2Fdefault%2Fcraftitems.lua;h=facff57e7b749e2c1b506befdc1c2bdc1043cb51;hb=3740efb393b0c1bba458d44ed80ce3e04ff499ce;hp=2d3652e29cb7a91b955134d36ac9058ab4283cf2;hpb=7b8ad5786cc06e4dd7fe301fce5ab842e9f44d78;p=oweals%2Fminetest_game.git diff --git a/mods/default/craftitems.lua b/mods/default/craftitems.lua index 2d3652e2..facff57e 100644 --- a/mods/default/craftitems.lua +++ b/mods/default/craftitems.lua @@ -11,14 +11,86 @@ minetest.register_craftitem("default:paper", { inventory_image = "default_paper.png", }) +local function book_on_use(itemstack, user, pointed_thing) + local player_name = user:get_player_name() + local data = minetest.deserialize(itemstack:get_metadata()) + local title, text, owner = "", "", player_name + if data then + title, text, owner = data.title, data.text, data.owner + end + local formspec + if owner == player_name then + formspec = "size[8,8]"..default.gui_bg.. + "field[0.5,1;7.5,0;title;Title:;".. + minetest.formspec_escape(title).."]".. + "textarea[0.5,1.5;7.5,7;text;Contents:;".. + minetest.formspec_escape(text).."]".. + "button_exit[2.5,7.5;3,1;save;Save]" + else + formspec = "size[8,8]"..default.gui_bg.. + "label[0.5,0.5;by "..owner.."]".. + "label[0.5,0;"..minetest.formspec_escape(title).."]".. + "textarea[0.5,1.5;7.5,7;;"..minetest.formspec_escape(text)..";]" + end + minetest.show_formspec(user:get_player_name(), "default:book", formspec) +end + +minetest.register_on_player_receive_fields(function(player, form_name, fields) + if form_name ~= "default:book" or not fields.save or + fields.title == "" or fields.text == "" then + return + end + local inv = player:get_inventory() + local stack = player:get_wielded_item() + local new_stack, data + if stack:get_name() ~= "default:book_written" then + local count = stack:get_count() + if count == 1 then + stack:set_name("default:book_written") + else + stack:set_count(count - 1) + new_stack = ItemStack("default:book_written") + end + else + data = minetest.deserialize(stack:get_metadata()) + end + if not data then data = {} end + data.title = fields.title + data.text = fields.text + data.owner = player:get_player_name() + local data_str = minetest.serialize(data) + if new_stack then + new_stack:set_metadata(data_str) + if inv:room_for_item("main", new_stack) then + inv:add_item("main", new_stack) + else + minetest.add_item(player:getpos(), new_stack) + end + else + stack:set_metadata(data_str) + end + player:set_wielded_item(stack) +end) + minetest.register_craftitem("default:book", { description = "Book", inventory_image = "default_book.png", + groups = {book=1}, + on_use = book_on_use, +}) + +minetest.register_craftitem("default:book_written", { + description = "Book With Text", + inventory_image = "default_book.png", + groups = {book=1, not_in_creative_inventory=1}, + stack_max = 1, + on_use = book_on_use, }) minetest.register_craftitem("default:coal_lump", { description = "Coal Lump", inventory_image = "default_coal_lump.png", + groups = {coal = 1} }) minetest.register_craftitem("default:iron_lump", { @@ -81,11 +153,6 @@ minetest.register_craftitem("default:clay_brick", { inventory_image = "default_clay_brick.png", }) -minetest.register_craftitem("default:scorched_stuff", { - description = "Scorched Stuff", - inventory_image = "default_scorched_stuff.png", -}) - minetest.register_craftitem("default:obsidian_shard", { description = "Obsidian Shard", inventory_image = "default_obsidian_shard.png",