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