RealBadAngel
2013-02-19 671ba32e5aec9e944dd54699555ebf5a6f7714b9
commit | author | age
82cba9 1 minetest.register_alias("water_mill", "technic:water_mill")
R 2
3 minetest.register_craft({
4     output = 'technic:water_mill',
5     recipe = {
6         {'default:stone', 'default:stone', 'default:stone'},
7         {'default:wood', 'technic:diamond', 'default:wood'},
8         {'default:stone', 'moreores:copper_ingot', 'default:stone'},
9     }
10 })
11
12 minetest.register_craftitem("technic:water_mill", {
13     description = "Water Mill",
14     stack_max = 99,
15 }) 
16
17 water_mill_formspec =
18     "invsize[8,4;]"..
19     "image[1,1;1,2;technic_power_meter_bg.png]"..
20     "label[0,0;Water Mill]"..
21     "label[1,3;Power level]"..
22     "list[current_player;main;0,5;8,4;]"
23     
24
25 minetest.register_node("technic:water_mill", {
26     description = "Water Mill",
27     tiles = {"technic_water_mill_top.png", "technic_machine_bottom.png", "technic_water_mill_side.png",
28         "technic_water_mill_side.png", "technic_water_mill_side.png", "technic_water_mill_side.png"},
29     paramtype2 = "facedir",
30     groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
31     legacy_facedir_simple = true,
32     sounds = default.node_sound_wood_defaults(),
33     technic_power_machine=1,
34     internal_EU_buffer=0;
35     internal_EU_buffer_size=5000;
36     burn_time=0;
37     on_construct = function(pos)
38         local meta = minetest.env:get_meta(pos)
39         meta:set_string("infotext", "Water Mill")
40         meta:set_float("technic_power_machine", 1)
41         meta:set_float("internal_EU_buffer", 0)
42         meta:set_float("internal_EU_buffer_size", 3000)
43         meta:set_string("formspec", water_mill_formspec)    
44         end,    
45
46 })
47
48 minetest.register_node("technic:water_mill_active", {
49     description = "Water Mill",
50     tiles = {"technic_water_mill_top_active.png", "technic_machine_bottom.png", "technic_water_mill_side.png",
51         "technic_water_mill_side.png", "technic_water_mill_side.png", "technic_water_mill_side.png"},
52     paramtype2 = "facedir",
53     groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
54     legacy_facedir_simple = true,
55     sounds = default.node_sound_wood_defaults(),
56     drop="technic:water_mill",
57     technic_power_machine=1,
58     internal_EU_buffer=0;
59     internal_EU_buffer_size=0;
60 })
61
62 minetest.register_abm({
63     nodenames = {"technic:water_mill","technic:water_mill_active"},
64     interval = 1,
65     chance = 1,
66     action = function(pos, node, active_object_count, active_object_count_wider)
67
68     local meta = minetest.env:get_meta(pos)
69     local charge= meta:get_float("internal_EU_buffer")
70     local max_charge= meta:get_float("internal_EU_buffer_size")
71     local water_nodes = 0
72     local lava_nodes = 0
73     local production_level=0
74     local load_step=0
75
76     pos.x=pos.x+1
77     local check=check_node_around_mill (pos)
78     if check==1 then water_nodes=water_nodes+1 end
79     pos.x=pos.x-2
80     check=check_node_around_mill (pos)
81     if check==1 then water_nodes=water_nodes+1 end
82     pos.x=pos.x+1
83     pos.z=pos.z+1
84     check=check_node_around_mill (pos)
85     if check==1 then water_nodes=water_nodes+1 end
86     pos.z=pos.z-2
87     check=check_node_around_mill (pos)
88     if check==1 then water_nodes=water_nodes+1 end
89     pos.z=pos.z+1
90     
91     if water_nodes==1 then production_level=25 load_step=30 end
92     if water_nodes==2 then production_level=50 load_step=60 end
93     if water_nodes==3 then production_level=75 load_step=90 end
94     if water_nodes==4 then production_level=100 load_step=120 end
95
96         if production_level>0 then
97         if charge+load_step>max_charge then
98         load_step=max_charge-charge
99         end
100         if load_step>0 then 
101         charge=charge+load_step
102         meta:set_float("internal_EU_buffer",charge)
103         end
104     end
105
106     local load = math.floor((charge/max_charge)*100)
107     meta:set_string("formspec",
108                 "invsize[8,4;]"..
109                 "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
110                         (load)..":technic_power_meter_fg.png]"..
111                 "label[0,0;Water Mill]"..
112                 "label[1,3;Power level]"..
113                 "label[4,0;Production at "..tostring(production_level).."%]"
114                 )
115                 
116     if production_level>0 and minetest.env:get_node(pos).name=="technic:water_mill" then
117         hacky_swap_node (pos,"technic:water_mill_active")
118         return
119     end
120     if production_level==0 then hacky_swap_node (pos,"technic:water_mill") end
121 end
122 }) 
123
124 function check_node_around_mill (pos)
125 local node=minetest.env:get_node(pos)
126 if node.name=="default:water_flowing"  then return 1 end
127 return 0
612349 128 end
R 129
d037d2 130 register_LV_machine ("technic:water_mill","PR")
R 131 register_LV_machine ("technic:water_mill_active","PR")