minetest-game-adventuretest/mods/books_plus/init.lua

171 lines
6.0 KiB
Lua

--= Book (use to read or write to)
minetest.register_craftitem("books_plus:booklocked", {
description = "Locked Book",
inventory_image = "booklocked.png",
groups = {book=1,locked_book=1},
stack_max = 1,
on_use = function(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 or owner=="" then
formspec = "size[8,8]"..default.gui_bg.. -- default.gui_bg_img..
"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]"
minetest.show_formspec(user:get_player_name(), "default:book", formspec)
else
formspec = "size[8,8]"..default.gui_bg.. -- default.gui_bg_img..
"button_exit[7,0.25;1,0.5;close;x]"..
"label[0.5,0;"..minetest.formspec_escape(title).."]"..
"label[0.5,0.5;by "..owner.."]"..
"textarea[0.5,1.5;7.5,7;text;;"..
minetest.formspec_escape(text).."]"
minetest.show_formspec(user:get_player_name(), "default:lockedbook", formspec)
end
end,
})
minetest.register_on_player_receive_fields(function(player, form_name, fields)
if form_name ~= "default:book" or not fields.save then
return
end
local stack = player:get_wielded_item()
local empty_book=minetest.get_item_group(stack:get_name(), "empty_book") == 1
local book_written=minetest.get_item_group(stack:get_name(), "book") == 1
if (not empty_book) and (not book_written) then
return
end
print("fields1:"..dump(fields))
print("data1:"..dump(data))
local data = minetest.deserialize(stack:get_metadata())
if not data then data = {} end
data.title, data.text, data.owner =
fields.title, fields.text, player:get_player_name()
if empty_book then
if (fields.title=="" and fields.text=="") then
return
end
if stack:get_count()>1 then
local stack2=ItemStack("books_plus:written_book")
playerinv=player:get_inventory()
if playerinv:room_for_item("main", stack2) then
stack2:set_metadata(minetest.serialize(data))
stack:take_item(1)
playerinv:add_item("main", stack2)
player:set_wielded_item(stack)
end
else
local stack2=ItemStack("books_plus:written_book")
stack2:set_metadata(minetest.serialize(data))
player:set_wielded_item(stack2)
end
else
print("fields:"..dump(fields))
print("data:"..dump(data))
if fields.title=="" and fields.text=="" then
if minetest.get_item_group(stack:get_name(), "locked_book") == 1 then
data.owner=""
else
stack:replace("default:book")
end
end
stack:set_metadata(minetest.serialize(data))
player:set_wielded_item(stack)
end
end)
minetest.register_craft({
type = "shapeless",
output = "default:book",
recipe = {"books_plus:written_book", "dye:white"},
})
--[[
minetest.register_node("books_plus:writing_table", {
tiles = {
"default_wood.png",
"default_wood.png",
"default_wood.png",
"default_wood.png",
"default_wood.png",
"default_wood.png"
},
drawtype = "nodebox",
paramtype = "light",
node_box = {
type = "fixed",
fixed = {
{-0.5, 0.3125, -0.5, 0.5, 0.5, 0.5}, -- NodeBox9
{0.375, -0.5, -0.5, 0.5, 0.3125, -0.375}, -- NodeBox11
{0.375, -0.5, 0.375, 0.5, 0.3125, 0.5}, -- NodeBox12
{-0.5, -0.5, 0.375, -0.375, 0.3125, 0.5}, -- NodeBox14
{-0.5, -0.5, -0.5, -0.375, 0.375, -0.375}, -- NodeBox15
}
}
})
--]]
minetest.register_craftitem(":default:book", {
description = "Book",
inventory_image = "default_book.png",
groups = {empty_book=1},
stack_max = 99,
on_use = function(itemstack, user, pointed_thing)
local title=""
local text = ""
local formspec
formspec = "size[8,8]"..default.gui_bg.. -- default.gui_bg_img..
"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]"
minetest.show_formspec(user:get_player_name(), "default:book", formspec)
end,
})
minetest.register_craftitem("books_plus:written_book", {
description = "Book written",
inventory_image = "default_book.png",
groups = {book=1},
stack_max = 1,
on_use = function(itemstack, user, pointed_thing)
local player_name = user:get_player_name()
local data = minetest.deserialize(itemstack:get_metadata())
local title=""
local text = ""
if data then
title, text = data.title, data.text
end
local formspec
formspec = "size[8,8]"..default.gui_bg.. -- default.gui_bg_img..
"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]"
minetest.show_formspec(user:get_player_name(), "default:book", formspec)
end,
})
minetest.register_craft({
type ="shapeless",
output = "books_plus:booklocked",
recipe ={'default:book', "default:steel_ingot"},
})