Change steel ladder sounds + fix/add missing recipes
[oweals/minetest_game.git] / mods / default / craftitems.lua
1 -- mods/default/craftitems.lua
2
3 minetest.register_craftitem("default:stick", {
4         description = "Stick",
5         inventory_image = "default_stick.png",
6         groups = {stick = 1},
7 })
8
9 minetest.register_craftitem("default:paper", {
10         description = "Paper",
11         inventory_image = "default_paper.png",
12 })
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                         default.gui_bg_img ..
25                         "field[0.5,1;7.5,0;title;Title:;" ..
26                                 minetest.formspec_escape(title) .. "]" ..
27                         "textarea[0.5,1.5;7.5,7;text;Contents:;" ..
28                                 minetest.formspec_escape(text) .. "]" ..
29                         "button_exit[2.5,7.5;3,1;save;Save]"
30         else
31                 formspec = "size[8,8]" .. default.gui_bg ..
32                         default.gui_bg_img ..
33                         "label[0.5,0.5;by " .. owner .. "]" ..
34                         "label[0.5,0;" .. minetest.formspec_escape(title) .. "]" ..
35                         "textarea[0.5,1.5;7.5,7;text;;" ..
36                                 minetest.formspec_escape(text) .. "]"
37         end
38         minetest.show_formspec(user:get_player_name(), "default:book", formspec)
39 end
40
41 minetest.register_on_player_receive_fields(function(player, form_name, fields)
42         if form_name ~= "default:book" or not fields.save or
43                         fields.title == "" or fields.text == "" then
44                 return
45         end
46         local inv = player:get_inventory()
47         local stack = player:get_wielded_item()
48         local new_stack, data
49         if stack:get_name() ~= "default:book_written" then
50                 local count = stack:get_count()
51                 if count == 1 then
52                         stack:set_name("default:book_written")
53                 else
54                         stack:set_count(count - 1)
55                         new_stack = ItemStack("default:book_written")
56                 end
57         else
58                 data = minetest.deserialize(stack:get_metadata())
59         end
60         if not data then data = {} end
61         data.title = fields.title
62         data.text = fields.text
63         data.owner = player:get_player_name()
64         local data_str = minetest.serialize(data)
65         if new_stack then
66                 new_stack:set_metadata(data_str)
67                 if inv:room_for_item("main", new_stack) then
68                         inv:add_item("main", new_stack)
69                 else
70                         minetest.add_item(player:getpos(), new_stack)
71                 end
72         else
73                 stack:set_metadata(data_str)
74         end
75         player:set_wielded_item(stack)
76 end)
77
78 minetest.register_craftitem("default:book", {
79         description = "Book",
80         inventory_image = "default_book.png",
81         groups = {book = 1},
82         on_use = book_on_use,
83 })
84
85 minetest.register_craftitem("default:book_written", {
86         description = "Book With Text",
87         inventory_image = "default_book_written.png",
88         groups = {book = 1, not_in_creative_inventory = 1},
89         stack_max = 1,
90         on_use = book_on_use,
91 })
92
93 minetest.register_craft({
94         type = "shapeless",
95         output = "default:book_written",
96         recipe = {"default:book", "default:book_written"}
97 })
98
99 minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
100         if itemstack:get_name() ~= "default:book_written" then
101                 return
102         end
103
104         local copy = ItemStack("default:book_written")
105         local original
106         local index
107         for i = 1, player:get_inventory():get_size("craft") do
108                 if old_craft_grid[i]:get_name() == "default:book_written" then
109                         original = old_craft_grid[i]
110                         index = i
111                 end
112         end
113         if not original then
114                 return
115         end
116         local copymeta = original:get_metadata()
117         -- copy of the book held by player's mouse cursor
118         itemstack:set_metadata(copymeta)
119         -- put the book with metadata back in the craft grid
120         craft_inv:set_stack("craft", index, original)
121 end)
122
123 minetest.register_craftitem("default:coal_lump", {
124         description = "Coal Lump",
125         inventory_image = "default_coal_lump.png",
126         groups = {coal = 1}
127 })
128
129 minetest.register_craftitem("default:iron_lump", {
130         description = "Iron Lump",
131         inventory_image = "default_iron_lump.png",
132 })
133
134 minetest.register_craftitem("default:copper_lump", {
135         description = "Copper Lump",
136         inventory_image = "default_copper_lump.png",
137 })
138
139 minetest.register_craftitem("default:mese_crystal", {
140         description = "Mese Crystal",
141         inventory_image = "default_mese_crystal.png",
142 })
143
144 minetest.register_craftitem("default:gold_lump", {
145         description = "Gold Lump",
146         inventory_image = "default_gold_lump.png",
147 })
148
149 minetest.register_craftitem("default:diamond", {
150         description = "Diamond",
151         inventory_image = "default_diamond.png",
152 })
153
154 minetest.register_craftitem("default:clay_lump", {
155         description = "Clay Lump",
156         inventory_image = "default_clay_lump.png",
157 })
158
159 minetest.register_craftitem("default:steel_ingot", {
160         description = "Steel Ingot",
161         inventory_image = "default_steel_ingot.png",
162 })
163
164 minetest.register_craftitem("default:copper_ingot", {
165         description = "Copper Ingot",
166         inventory_image = "default_copper_ingot.png",
167 })
168
169 minetest.register_craftitem("default:bronze_ingot", {
170         description = "Bronze Ingot",
171         inventory_image = "default_bronze_ingot.png",
172 })
173
174 minetest.register_craftitem("default:gold_ingot", {
175         description = "Gold Ingot",
176         inventory_image = "default_gold_ingot.png"
177 })
178
179 minetest.register_craftitem("default:mese_crystal_fragment", {
180         description = "Mese Crystal Fragment",
181         inventory_image = "default_mese_crystal_fragment.png",
182 })
183
184 minetest.register_craftitem("default:clay_brick", {
185         description = "Clay Brick",
186         inventory_image = "default_clay_brick.png",
187 })
188
189 minetest.register_craftitem("default:obsidian_shard", {
190         description = "Obsidian Shard",
191         inventory_image = "default_obsidian_shard.png",
192 })