Zefram
2014-08-18 7d610b7c80487cd7a6e66f55c9c3b1190e5dfc7f
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").."]"..
ee0765 26     "list[current_player;main;0,5;8,4;]"
S 27
563a4c 28 local run = function(pos, node)
N 29     local meta         = minetest.get_meta(pos)
30     local inv          = meta:get_inventory()
31     local eu_input     = meta:get_int("MV_EU_input")
32     local machine_name = S("%s Tool Workshop"):format("MV")
33     local machine_node = "technic:tool_workshop"
34
35     -- Setup meta data if it does not exist.
36     if not eu_input then
7d610b 37         meta:set_int("MV_EU_demand", workshop_demand[1])
563a4c 38         meta:set_int("MV_EU_input", 0)
N 39         return
40     end
7d610b 41
Z 42     local EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta)
563a4c 43
N 44     local repairable = false
45     local srcstack = inv:get_stack("src", 1)
46     if not srcstack:is_empty() then
47         local itemdef = minetest.registered_items[srcstack:get_name()]
48         if itemdef and
49                 (not itemdef.wear_represents or
50                 itemdef.wear_represents == "mechanical_wear") and
51                 srcstack:get_wear() ~= 0 then
52             repairable = true
53         end
54     end
7d610b 55     technic.handle_machine_pipeworks(pos, tube_upgrade, function (pos, x_velocity, z_velocity)
Z 56         if not repairable then
57             technic.send_items(pos, x_velocity, z_velocity, "src")
58         end
59     end)
563a4c 60     if not repairable then
N 61         meta:set_string("infotext", S("%s Idle"):format(machine_name))
62         meta:set_int("MV_EU_demand", 0)
63         return
64     end
65     
7d610b 66     if eu_input < workshop_demand[EU_upgrade+1] then
563a4c 67         meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
7d610b 68     elseif eu_input >= workshop_demand[EU_upgrade+1] then
563a4c 69         meta:set_string("infotext", S("%s Active"):format(machine_name))
N 70         srcstack:add_wear(-1000)
71         inv:set_stack("src", 1, srcstack)
72     end
7d610b 73     meta:set_int("MV_EU_demand", workshop_demand[EU_upgrade+1])
563a4c 74 end
N 75
ee0765 76 minetest.register_node("technic:tool_workshop", {
7c4b70 77     description = S("%s Tool Workshop"):format("MV"),
ee0765 78     tiles = {"technic_workshop_top.png", "technic_machine_bottom.png", "technic_workshop_side.png",
S 79              "technic_workshop_side.png", "technic_workshop_side.png", "technic_workshop_side.png"},
7d610b 80     groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, technic_machine=1, tubedevice=1, tubedevice_receiver=1},
ee0765 81     sounds = default.node_sound_wood_defaults(),
S 82     on_construct = function(pos)
83         local meta = minetest.get_meta(pos)
7c4b70 84         meta:set_string("infotext", S("%s Tool Workshop"):format("MV"))
ee0765 85         meta:set_string("formspec", workshop_formspec)
S 86         local inv = meta:get_inventory()
87         inv:set_size("src", 1)
7d610b 88         inv:set_size("upgrade1", 1)
Z 89         inv:set_size("upgrade2", 1)
ee0765 90     end,    
0809dd 91     can_dig = technic.machine_can_dig,
S 92     allow_metadata_inventory_put = technic.machine_inventory_put,
93     allow_metadata_inventory_take = technic.machine_inventory_take,
7d610b 94     tube = {
Z 95         can_insert = function (pos, node, stack, direction)
96             return minetest.get_meta(pos):get_inventory():room_for_item("src", stack)
97         end,
98         insert_object = function (pos, node, stack, direction)
99             return minetest.get_meta(pos):get_inventory():add_item("src", stack)
100         end,
101         connect_sides = {left = 1, right = 1, back = 1, top = 1, bottom = 1},
102     },
563a4c 103     technic_run = run,
ee0765 104 })
S 105
106 technic.register_machine("MV", "technic:tool_workshop", technic.receiver)
107