]> git.lizzy.rs Git - Crafter.git/blob - mods/fire/init.lua
Make fire lighter by using node timers
[Crafter.git] / mods / fire / init.lua
1 minetest.register_node("fire:fire", {
2     description = "How did you even get this?",
3     drawtype = "firelike",
4         tiles = {
5                 {
6                         name = "fire.png",
7                         animation = {
8                                 type = "vertical_frames",
9                                 aspect_w = 16,
10                                 aspect_h = 16,
11                                 length = 0.3
12                         },
13                 },
14         },
15         inventory_image = "fire.png",
16     groups = {dig_immediate = 1,hurt_inside=2},
17     sounds = main.stoneSound(),
18     floodable = true,
19     drop = "",
20     walkable = false,
21     is_ground_content = false,
22     light_source = 11, --debugging
23     on_construct = function(pos)
24                 local under = minetest.get_node(vector.new(pos.x,pos.y-1,pos.z)).name
25                 --makes nether portal
26                 if under == "nether:obsidian" then
27                         minetest.remove_node(pos)
28                         create_nether_portal(pos)
29                 --fire lasts forever on netherrack
30                 elseif under ~= "nether:netherrack" then
31                         local timer = minetest.get_node_timer(pos)
32                         timer:start(math.random(0,2)+math.random())
33                 end
34     end,
35     on_timer = function(pos, elapsed)
36             local find_flammable = minetest.find_nodes_in_area(vector.subtract(pos,1), vector.add(pos,1), {"group:flammable"})
37             --print(dump(find_flammable))
38             
39             for _,p_pos in pairs(find_flammable) do
40                     if math.random() > 0.9 then
41                                 minetest.set_node(p_pos,{name="fire:fire"})
42                                 local timer = minetest.get_node_timer(p_pos)
43                                 timer:start(math.random(0,2)+math.random())
44                         end
45             end
46             
47             if math.random() > 0.85 then
48                         minetest.remove_node(pos)
49                 else
50                         local timer = minetest.get_node_timer(pos)
51                         timer:start(math.random(0,2)+math.random())
52                 end
53     end,
54 })
55
56 --flint and steel
57 minetest.register_tool("fire:flint_and_steel", {
58         description = "Flint and Steel",
59         inventory_image = "flint_and_steel.png",
60         on_place = function(itemstack, placer, pointed_thing)
61                 if pointed_thing.type ~= "node" then
62                         return
63                 end
64                 if minetest.get_node(pointed_thing.above).name ~= "air" then
65                         minetest.sound_play("flint_failed", {pos=pointed_thing.above})
66                         return
67                 end
68                 
69                 --can't make fire in the aether
70                 if pointed_thing.above.y >= 20000 then
71                         minetest.sound_play("flint_failed", {pos=pointed_thing.above,pitch=math.random(75,95)/100})
72                         return
73                 end
74                 
75                 minetest.add_node(pointed_thing.above,{name="fire:fire"})
76                 minetest.sound_play("flint_and_steel", {pos=pointed_thing.above})
77                 itemstack:add_wear(100)
78                 return(itemstack)
79         end,
80         sound = {breaks = {name="tool_break",gain=0.4}},
81 })
82
83 minetest.register_craft({
84         type = "shapeless",
85         output = "fire:flint_and_steel",
86         recipe = {"main:flint","main:iron"},
87 })