123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- local function swap_node(pos, name)
- local node = minetest.get_node(pos)
- if node.name == name then
- return
- end
- node.name = name
- minetest.swap_node(pos, node)
- end
- local loffs = {
- {x=0, y=4, z=4},
- {x=0, y=4, z=-4},
- {x=4, y=4, z=0},
- {x=-4, y=4, z=0},
-
- {x=7, y=8, z=7},
- {x=7, y=8, z=-7},
- {x=-7, y=8, z=7},
- {x=-7, y=8, z=-7},
-
- {x=9, y=8, z=0},
- {x=-9, y=8, z=0},
- {x=0, y=8, z=-9},
- {x=0, y=8, z=-9},
-
-
- {x=0, y=16, z=0},
- }
- local function destruct_light(pos)
- for _,v in ipairs(loffs) do
- local p = vector.add(pos, v)
- local n = minetest.get_node(p)
- if n.name == "bitumen:magic_light" then
- minetest.set_node(p, {name="air"})
- end
- end
- end
- local function try_turn_on(pos)
- local bpos = {x=pos.x, y=pos.y - 1, z=pos.z}
- local bnode = minetest.get_node(bpos)
- local bmeta = minetest.env:get_meta(bpos)
-
- if not bmeta or bnode.name ~= "bitumen:oil_drum" then
- swap_node(pos, "bitumen:kerosene_light")
- destruct_light(pos)
- return
- end
-
- local fluid = bmeta:get_string("fluid")
- local fill = bmeta:get_int("fill")
- local max_fill = bmeta:get_int("maxfill")
-
-
- if not fill or fill == 0 then
- swap_node(pos, "bitumen:kerosene_light")
- destruct_light(pos)
- return
- end
-
- local taken = 1
- -- turn on
- for _,v in ipairs(loffs) do
- local p = vector.add(pos, v)
- local n = minetest.get_node(p)
- if n.name == "air" then
- minetest.set_node(p, {name="bitumen:magic_light"})
- -- else
-
- end
- end
-
-
- bmeta:set_float("fill", math.max(fill - taken, 0))
- bmeta:set_string("infotext", fluid .." (".. math.floor(((fill-taken)*100/max_fill)+0.5) .."%)")
- end
- minetest.register_node("bitumen:kerosene_light", {
- description = "Kerosene Light",
- drawtype = "nodebox",
- node_box = {
- type = "fixed",
- fixed = {
- { -.1, -.4, -.1, .1, .5, .1},
- { -.4, -.5, -.4, .4, -.3, .4},
- { -.4, .5, -.4, .41, .51, .41},
- },
- },
- selection_box = {
- type = "fixed",
- fixed = {
- {-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
- },
- },
- paramtype = "light",
- is_ground_content = false,
- tiles = { "default_wood.png" },
- walkable = true,
- groups = { cracky = 3, petroleum_fixture = 1 },
- light_source = 1,
-
- on_punch = function(pos)
- swap_node(pos, "bitumen:kerosene_light_on")
- try_turn_on(pos)
- end,
-
- on_destruct = destruct_light,
- })
- minetest.register_node("bitumen:kerosene_light_on", {
- description = "Kerosene Light",
- drawtype = "nodebox",
- node_box = {
- type = "fixed",
- fixed = {
- { -.1, -.4, -.1, .1, .5, .1},
- { -.4, -.5, -.4, .4, -.3, .4},
- },
- },
- selection_box = {
- type = "fixed",
- fixed = {
- {-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
- },
- },
- paramtype = "light",
- is_ground_content = false,
- tiles = { "default_meselamp.png" },
- walkable = true,
- groups = { cracky = 3, petroleum_fixture = 1 },
- light_source = default.LIGHT_MAX,
- on_punch = function(pos)
- swap_node(pos, "bitumen:kerosene_light")
- destruct_light(pos)
- end,
-
- on_destruct = destruct_light,
- })
- minetest.register_node("bitumen:magic_light", {
- description = "Hidden Magic Light",
- drawtype = "airlike",
- -- tiles = {"default_mese.png"},
- paramtype = "light",
- sunlight_propagates = true,
- is_ground_content = false,
- light_source = default.LIGHT_MAX,
- })
- minetest.register_abm({
- nodenames = {"bitumen:kerosene_light_on"},
- -- neighbors = {"bitumen:oil_drum"},
- interval = 60,
- chance = 1,
- action = function(pos, node)
- try_turn_on(pos)
- end,
- })
- --[[ cleanup failsafe
- minetest.register_abm({
- nodenames = {"bitumen:magic_light"},
- interval = 30,
- chance = 1,
- action = function(pos, node)
- minetest.set_node(pos, {name="air"})
- end,
- })
- ]]
|