forked from Ekdohibs/itest
-
Notifications
You must be signed in to change notification settings - Fork 2
/
generator.lua
98 lines (93 loc) · 3.46 KB
/
generator.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
local fuel_spec = voltbuild.fuel_spec
local generator_definition = {
description = "Generator",
tiles = {"itest_generator_side.png", "itest_generator_side.png", "itest_generator_side.png",
"itest_generator_side.png", "itest_generator_side.png", "itest_generator_front.png"},
paramtype2 = "facedir",
groups = {energy=1, cracky=2},
legacy_facedir_simple = true,
sounds = default.node_sound_stone_defaults(),
documentation = {summary = "A generator that uses coal to generate electricty.\n"..
"Place in coal to be burned into electricity and attach cable nodes to send the electricity to other machines."..
"This will be the first type of generator you build"},
voltbuild = {max_energy=60,max_tier=1,max_stress=2000,psize=10,
speed = function (pos)
local meta = minetest.env:get_meta(pos)
local inv = meta:get_inventory()
if not inv:is_empty("fuel") and is_fuel_no_lava(inv:get_stack("fuel",1)) then
return 1
else
return 0
end
end,
fueltime = function (pos)
local meta = minetest.env:get_meta(pos)
local inv = meta:get_inventory()
local stack = inv:get_stack("fuel",1)
if not inv:is_empty("fuel") and is_fuel_no_lava(stack) then
local list = inv:get_list("fuel")
local fuel = minetest.get_craft_result({method = "fuel",
width = 1, items = list})
return fuel.time
else
return false
end
end,
energy_type_image= function (pos)
local meta = minetest.env:get_meta(pos)
local node = minetest.get_node(pos)
local fueltime = minetest.registered_nodes[node.name]["voltbuild"]["fueltime"](pos)
local percent
if fueltime then
percent = (meta:get_float("ftime")/fueltime)*100
else
percent = 100
end
return("default_furnace_fire_bg.png^[lowpart:"..(100-percent)..":default_furnace_fire_fg.png]")
end},
tube={insert_object=function(pos,node,stack,direction)
local meta=minetest.env:get_meta(pos)
local inv=meta:get_inventory()
return inv:add_item("fuel",stack)
end,
can_insert=function(pos,node,stack,direction)
local meta=minetest.env:get_meta(pos)
local inv=meta:get_inventory()
return (voltbuild.allow_metadata_inventory_put(pos,"fuel",
nil,stack,nil) and
inv:room_for_item("fuel",stack))
end,
connects = function (param2)
return true
end,
connect_sides={left=1, right=1, back=1, bottom=1, top=1, front=1}},
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
meta:set_int("energy",0)
local inv = meta:get_inventory()
inv:set_size("fuel", 1)
meta:set_string("formspec", generators.get_formspec(pos)..
fuel_spec..
"image["..voltbuild.image_location.."default_furnace_fire_bg.png]")
generators.on_construct(pos)
end,
can_dig = voltbuild.can_dig,
allow_metadata_inventory_put = voltbuild.allow_metadata_inventory_put,
allow_metadata_inventory_move = voltbuild.allow_metadata_inventory_move,
}
minetest.register_node("voltbuild:generator",generator_definition)
local copy = {}
copy.light_source=8
copy.drop = "voltbuild:generator"
copy.tiles = {"itest_generator_side.png", "itest_generator_side.png", "itest_generator_side.png",
"itest_generator_side.png", "itest_generator_side.png", "itest_generator_front_active.png"}
copy.groups = {}
copy.groups.not_in_creative_inventory=1
copy = voltbuild.deep_copy(generator_definition,copy)
minetest.register_node("voltbuild:generator_active",copy)
components.register_abm({
nodenames = {"voltbuild:generator","voltbuild:generator_active"},
interval = 1.0,
chance = 1,
action = voltbuild.generation_abm,
})