@@ -11,10 +11,79 @@ minetest.register_craftitem("default:paper", {
11
11
inventory_image = " default_paper.png" ,
12
12
})
13
13
14
+ local function book_on_use (itemstack , user , pointed_thing )
15
+ local player_name = user :get_player_name ()
16
+ local data = minetest .deserialize (itemstack :get_metadata ())
17
+ local title , text , owner = " " , " " , player_name
18
+ if data then
19
+ title , text , owner = data .title , data .text , data .owner
20
+ end
21
+ local formspec
22
+ if owner == player_name then
23
+ formspec = " size[8,8]" .. default .gui_bg ..
24
+ " field[0.5,1;7.5,0;title;Title:;" ..
25
+ minetest .formspec_escape (title ).. " ]" ..
26
+ " textarea[0.5,1.5;7.5,7;text;Contents:;" ..
27
+ minetest .formspec_escape (text ).. " ]" ..
28
+ " button_exit[2.5,7.5;3,1;save;Save]"
29
+ else
30
+ formspec = " size[8,8]" .. default .gui_bg ..
31
+ " label[1,0.5;" .. minetest .formspec_escape (title ).. " ]" ..
32
+ " label[0.5,1.5;" .. minetest .formspec_escape (text ).. " ]"
33
+ end
34
+ minetest .show_formspec (user :get_player_name (), " default:book" , formspec )
35
+ end
36
+
37
+ minetest .register_on_player_receive_fields (function (player , form_name , fields )
38
+ if form_name ~= " default:book" or not fields .save or
39
+ fields .title == " " or fields .text == " " then
40
+ return
41
+ end
42
+ local inv = player :get_inventory ()
43
+ local stack = player :get_wielded_item ()
44
+ local new_stack , data
45
+ if stack :get_name () ~= " default:book_written" then
46
+ local count = stack :get_count ()
47
+ if count == 1 then
48
+ stack :set_name (" default:book_written" )
49
+ else
50
+ stack :set_count (count - 1 )
51
+ new_stack = ItemStack (" default:book_written" )
52
+ end
53
+ else
54
+ data = minetest .deserialize (stack :get_metadata ())
55
+ end
56
+ if not data then data = {} end
57
+ data .title = fields .title
58
+ data .text = fields .text
59
+ data .owner = player :get_player_name ()
60
+ local data_str = minetest .serialize (data )
61
+ if new_stack then
62
+ new_stack :set_metadata (data_str )
63
+ if inv :room_for_item (" main" , new_stack ) then
64
+ inv :add_item (" main" , new_stack )
65
+ else
66
+ minetest .add_item (player :getpos (), new_stack )
67
+ end
68
+ else
69
+ stack :set_metadata (data_str )
70
+ end
71
+ player :set_wielded_item (stack )
72
+ end )
73
+
14
74
minetest .register_craftitem (" default:book" , {
15
75
description = " Book" ,
16
76
inventory_image = " default_book.png" ,
17
77
groups = {book = 1 },
78
+ on_use = book_on_use ,
79
+ })
80
+
81
+ minetest .register_craftitem (" default:book_written" , {
82
+ description = " Book With Text" ,
83
+ inventory_image = " default_book.png" ,
84
+ groups = {book = 1 , not_in_creative_inventory = 1 },
85
+ stack_max = 1 ,
86
+ on_use = book_on_use ,
18
87
})
19
88
20
89
minetest .register_craftitem (" default:coal_lump" , {
2 commit comments
HybridDog commentedon Jun 18, 2015
Can you also make books drawable (l don't mean ASCII art)?
ShadowNinja commentedon Jul 30, 2015
No.