David Leal
2020-06-24 6154a04c00d7650664b78e2bca37631ae3778411
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
43     -- Setup meta data if it does not exist.
44     if not eu_input then
7d610b 45         meta:set_int("MV_EU_demand", workshop_demand[1])
563a4c 46         meta:set_int("MV_EU_input", 0)
N 47         return
48     end
7d610b 49
Z 50     local EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta)
563a4c 51
N 52     local repairable = false
53     local srcstack = inv:get_stack("src", 1)
54     if not srcstack:is_empty() then
55         local itemdef = minetest.registered_items[srcstack:get_name()]
56         if itemdef and
57                 (not itemdef.wear_represents or
58                 itemdef.wear_represents == "mechanical_wear") and
59                 srcstack:get_wear() ~= 0 then
60             repairable = true
61         end
62     end
7d610b 63     technic.handle_machine_pipeworks(pos, tube_upgrade, function (pos, x_velocity, z_velocity)
Z 64         if not repairable then
65             technic.send_items(pos, x_velocity, z_velocity, "src")
66         end
67     end)
563a4c 68     if not repairable then
N 69         meta:set_string("infotext", S("%s Idle"):format(machine_name))
70         meta:set_int("MV_EU_demand", 0)
71         return
72     end
a8daa4 73
7d610b 74     if eu_input < workshop_demand[EU_upgrade+1] then
563a4c 75         meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
7d610b 76     elseif eu_input >= workshop_demand[EU_upgrade+1] then
563a4c 77         meta:set_string("infotext", S("%s Active"):format(machine_name))
N 78         srcstack:add_wear(-1000)
79         inv:set_stack("src", 1, srcstack)
80     end
7d610b 81     meta:set_int("MV_EU_demand", workshop_demand[EU_upgrade+1])
563a4c 82 end
N 83
ee0765 84 minetest.register_node("technic:tool_workshop", {
7c4b70 85     description = S("%s Tool Workshop"):format("MV"),
1b1780 86     paramtype2 = "facedir",
869d05 87     tiles = {
VE 88         "technic_workshop_top.png"..tube_entry,
89         "technic_machine_bottom.png"..tube_entry,
90         "technic_workshop_side.png"..tube_entry,
91         "technic_workshop_side.png"..tube_entry,
92         "technic_workshop_side.png"..tube_entry,
93         "technic_workshop_side.png"
94     },
83c649 95     groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
S 96         technic_machine=1, technic_mv=1, tubedevice=1, tubedevice_receiver=1},
97     connect_sides = {"bottom", "back", "left", "right"},
ee0765 98     sounds = default.node_sound_wood_defaults(),
S 99     on_construct = function(pos)
100         local meta = minetest.get_meta(pos)
7c4b70 101         meta:set_string("infotext", S("%s Tool Workshop"):format("MV"))
ee0765 102         meta:set_string("formspec", workshop_formspec)
S 103         local inv = meta:get_inventory()
104         inv:set_size("src", 1)
7d610b 105         inv:set_size("upgrade1", 1)
Z 106         inv:set_size("upgrade2", 1)
a8daa4 107     end,
0809dd 108     can_dig = technic.machine_can_dig,
S 109     allow_metadata_inventory_put = technic.machine_inventory_put,
110     allow_metadata_inventory_take = technic.machine_inventory_take,
7d610b 111     tube = {
Z 112         can_insert = function (pos, node, stack, direction)
64f38f 113             return minetest.get_meta(pos):get_inventory():room_for_item("src", stack)
7d610b 114         end,
Z 115         insert_object = function (pos, node, stack, direction)
116             return minetest.get_meta(pos):get_inventory():add_item("src", stack)
117         end,
118         connect_sides = {left = 1, right = 1, back = 1, top = 1, bottom = 1},
119     },
563a4c 120     technic_run = run,
bccefd 121     after_place_node = pipeworks.after_place,
c8cbd2 122     after_dig_node = technic.machine_after_dig_node
ee0765 123 })
S 124
125 technic.register_machine("MV", "technic:tool_workshop", technic.receiver)
126