Vanessa Ezekowitz
2015-09-12 1b1780946edebfbf1e8ec2cf095b56fa76733e2b
commit | author | age
be2f30 1 -- Tool workshop
ee0765 2 -- This machine repairs tools.
S 3
4 minetest.register_alias("tool_workshop", "technic:tool_workshop")
be2f30 5
S 6 local S = technic.getter
7
ee0765 8 minetest.register_craft({
S 9     output = 'technic:tool_workshop',
10     recipe = {
5e4a87 11         {'group:wood',                         'default:diamond',        'group:wood'},
Z 12         {'mesecons_pistons:piston_sticky_off', 'technic:machine_casing', 'technic:carbon_cloth'},
13         {'default:obsidian',                   'technic:mv_cable0',      'default:obsidian'},
ee0765 14     }
S 15 })
16
7d610b 17 local workshop_demand = {5000, 3500, 2000}
Z 18
ee0765 19 local workshop_formspec =
S 20     "invsize[8,9;]"..
21     "list[current_name;src;3,1;1,1;]"..
7c4b70 22     "label[0,0;"..S("%s Tool Workshop"):format("MV").."]"..
7d610b 23     "list[current_name;upgrade1;1,3;1,1;]"..
Z 24     "list[current_name;upgrade2;2,3;1,1;]"..
25     "label[1,4;"..S("Upgrade Slots").."]"..
d732c8 26     "list[current_player;main;0,5;8,4;]"..
E 27     "listring[current_player;main]"..
28     "listring[current_name;src]"..
29     "listring[current_player;main]"..
30     "listring[current_name;upgrade1]"..
31     "listring[current_player;main]"..
32     "listring[current_name;upgrade2]"..
33     "listring[current_player;main]"
ee0765 34
563a4c 35 local run = function(pos, node)
N 36     local meta         = minetest.get_meta(pos)
37     local inv          = meta:get_inventory()
38     local eu_input     = meta:get_int("MV_EU_input")
39     local machine_name = S("%s Tool Workshop"):format("MV")
40     local machine_node = "technic:tool_workshop"
41
42     -- Setup meta data if it does not exist.
43     if not eu_input then
7d610b 44         meta:set_int("MV_EU_demand", workshop_demand[1])
563a4c 45         meta:set_int("MV_EU_input", 0)
N 46         return
47     end
7d610b 48
Z 49     local EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta)
563a4c 50
N 51     local repairable = false
52     local srcstack = inv:get_stack("src", 1)
53     if not srcstack:is_empty() then
54         local itemdef = minetest.registered_items[srcstack:get_name()]
55         if itemdef and
56                 (not itemdef.wear_represents or
57                 itemdef.wear_represents == "mechanical_wear") and
58                 srcstack:get_wear() ~= 0 then
59             repairable = true
60         end
61     end
7d610b 62     technic.handle_machine_pipeworks(pos, tube_upgrade, function (pos, x_velocity, z_velocity)
Z 63         if not repairable then
64             technic.send_items(pos, x_velocity, z_velocity, "src")
65         end
66     end)
563a4c 67     if not repairable then
N 68         meta:set_string("infotext", S("%s Idle"):format(machine_name))
69         meta:set_int("MV_EU_demand", 0)
70         return
71     end
72     
7d610b 73     if eu_input < workshop_demand[EU_upgrade+1] then
563a4c 74         meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
7d610b 75     elseif eu_input >= workshop_demand[EU_upgrade+1] then
563a4c 76         meta:set_string("infotext", S("%s Active"):format(machine_name))
N 77         srcstack:add_wear(-1000)
78         inv:set_stack("src", 1, srcstack)
79     end
7d610b 80     meta:set_int("MV_EU_demand", workshop_demand[EU_upgrade+1])
563a4c 81 end
N 82
ee0765 83 minetest.register_node("technic:tool_workshop", {
7c4b70 84     description = S("%s Tool Workshop"):format("MV"),
1b1780 85     paramtype2 = "facedir",
ee0765 86     tiles = {"technic_workshop_top.png", "technic_machine_bottom.png", "technic_workshop_side.png",
S 87              "technic_workshop_side.png", "technic_workshop_side.png", "technic_workshop_side.png"},
7d610b 88     groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, technic_machine=1, tubedevice=1, tubedevice_receiver=1},
ee0765 89     sounds = default.node_sound_wood_defaults(),
S 90     on_construct = function(pos)
91         local meta = minetest.get_meta(pos)
7c4b70 92         meta:set_string("infotext", S("%s Tool Workshop"):format("MV"))
ee0765 93         meta:set_string("formspec", workshop_formspec)
S 94         local inv = meta:get_inventory()
95         inv:set_size("src", 1)
7d610b 96         inv:set_size("upgrade1", 1)
Z 97         inv:set_size("upgrade2", 1)
ee0765 98     end,    
0809dd 99     can_dig = technic.machine_can_dig,
S 100     allow_metadata_inventory_put = technic.machine_inventory_put,
101     allow_metadata_inventory_take = technic.machine_inventory_take,
7d610b 102     tube = {
Z 103         can_insert = function (pos, node, stack, direction)
104             return minetest.get_meta(pos):get_inventory():room_for_item("src", stack)
105         end,
106         insert_object = function (pos, node, stack, direction)
107             return minetest.get_meta(pos):get_inventory():add_item("src", stack)
108         end,
109         connect_sides = {left = 1, right = 1, back = 1, top = 1, bottom = 1},
110     },
563a4c 111     technic_run = run,
bccefd 112     after_place_node = pipeworks.after_place,
c8cbd2 113     after_dig_node = technic.machine_after_dig_node
ee0765 114 })
S 115
116 technic.register_machine("MV", "technic:tool_workshop", technic.receiver)
117