]> git.lizzy.rs Git - dragonfireclient.git/blob - games/minetest/mods/bucket/init.lua
8ed9da5228de4387ab776db9bcda39db4a8d761f
[dragonfireclient.git] / games / minetest / mods / bucket / init.lua
1 -- bucket (Minetest 0.4 mod)
2 -- A bucket, which can pick up water and lava
3
4 minetest.register_alias("bucket", "bucket:bucket_empty")
5 minetest.register_alias("bucket_water", "bucket:bucket_water")
6 minetest.register_alias("bucket_lava", "bucket:bucket_lava")
7
8 minetest.register_craft({
9         output = 'bucket:bucket_empty 1',
10         recipe = {
11                 {'default:steel_ingot', '', 'default:steel_ingot'},
12                 {'', 'default:steel_ingot', ''},
13         }
14 })
15
16 bucket = {}
17 bucket.liquids = {}
18
19 -- Register a new liquid
20 --   source = name of the source node
21 --   flowing = name of the flowing node
22 --   itemname = name of the new bucket item (or nil if liquid is not takeable)
23 --   inventory_image = texture of the new bucket item (ignored if itemname == nil)
24 -- This function can be called from any mod (that depends on bucket).
25 function bucket.register_liquid(source, flowing, itemname, inventory_image)
26         bucket.liquids[source] = {
27                 source = source,
28                 flowing = flowing,
29                 itemname = itemname,
30         }
31         bucket.liquids[flowing] = bucket.liquids[source]
32
33         if itemname ~= nil then
34                 minetest.register_craftitem(itemname, {
35                         inventory_image = inventory_image,
36                         stack_max = 1,
37                         liquids_pointable = true,
38                         on_use = function(itemstack, user, pointed_thing)
39                                 -- Must be pointing to node
40                                 if pointed_thing.type ~= "node" then
41                                         return
42                                 end
43                                 -- Check if pointing to a liquid
44                                 n = minetest.env:get_node(pointed_thing.under)
45                                 if bucket.liquids[n.name] == nil then
46                                         -- Not a liquid
47                                         minetest.env:add_node(pointed_thing.above, {name=source})
48                                 elseif n.name ~= source then
49                                         -- It's a liquid
50                                         minetest.env:add_node(pointed_thing.under, {name=source})
51                                 end
52                                 return {name="bucket:bucket_empty"}
53                         end
54                 })
55         end
56 end
57
58 minetest.register_craftitem("bucket:bucket_empty", {
59         inventory_image = "bucket.png",
60         stack_max = 1,
61         liquids_pointable = true,
62         on_use = function(itemstack, user, pointed_thing)
63                 -- Must be pointing to node
64                 if pointed_thing.type ~= "node" then
65                         return
66                 end
67                 -- Check if pointing to a liquid source
68                 n = minetest.env:get_node(pointed_thing.under)
69                 liquiddef = bucket.liquids[n.name]
70                 if liquiddef ~= nil and liquiddef.source == n.name and liquiddef.itemname ~= nil then
71                         minetest.env:add_node(pointed_thing.under, {name="air"})
72                         return {name=liquiddef.itemname}
73                 end
74         end,
75 })
76
77 bucket.register_liquid(
78         "default:water_source",
79         "default:water_flowing",
80         "bucket:bucket_water",
81         "bucket_water.png"
82 )
83
84 bucket.register_liquid(
85         "default:lava_source",
86         "default:lava_flowing",
87         "bucket:bucket_lava",
88         "bucket_lava.png"
89 )
90
91 minetest.register_craft({
92         type = "fuel",
93         recipe = "default:bucket_lava",
94         burntime = 60,
95 })