| | |
| | | |
| | | minetest.register_craft({ |
| | | recipe = { |
| | | {"default:steelblock", "pipeworks:filter", "default:steelblock"}, |
| | | {"default:steelblock", "technic:motor", "default:steelblock"}, |
| | | {"default:steelblock", "technic:diamond_drill_head", "default:steelblock"}}, |
| | | {"technic:carbon_steel_block", "pipeworks:filter", "technic:carbon_steel_block"}, |
| | | {"technic:carbon_steel_block", "technic:motor", "technic:carbon_steel_block"}, |
| | | {"technic:carbon_steel_block", "technic:diamond_drill_head", "technic:carbon_steel_block"}}, |
| | | output = "technic:quarry", |
| | | }) |
| | | |
| | | local quarry_dig_above_nodes = 3 -- How far above the quarry we will dig nodes |
| | | local quarry_max_depth = 100 |
| | | |
| | | local function get_quarry_formspec(size) |
| | | return "size[3,1.5]".. |
| | | "field[1,0.5;2,1;size;Radius;"..size.."]".. |
| | | "button[0,1;3,1;toggle;"..S("Enable/Disable").."]" |
| | | local function set_quarry_formspec(meta) |
| | | local formspec = "size[3,1.5]".. |
| | | "field[1,0.5;2,1;size;Radius;"..meta:get_int("size").."]" |
| | | if meta:get_int("enabled") == 0 then |
| | | formspec = formspec.."button[0,1;3,1;enable;"..S("%s Disabled"):format(S("%s Quarry"):format("HV")).."]" |
| | | else |
| | | formspec = formspec.."button[0,1;3,1;disable;"..S("%s Enabled"):format(S("%s Quarry"):format("HV")).."]" |
| | | end |
| | | meta:set_string("formspec", formspec) |
| | | end |
| | | |
| | | local function quarry_receive_fields(pos, formname, fields, sender) |
| | | local meta = minetest.get_meta(pos) |
| | | local size = tonumber(fields.size) or 0 |
| | | |
| | | if fields.toggle then |
| | | if meta:get_int("enabled") == 0 then |
| | | meta:set_int("enabled", 1) |
| | | else |
| | | meta:set_int("enabled", 0) |
| | | end |
| | | end |
| | | |
| | | -- Smallest size is 2. Largest is 8. |
| | | size = math.max(size, 2) |
| | | size = math.min(size, 8) |
| | | |
| | | if meta:get_int("size") ~= size then |
| | | if fields.size then |
| | | local size = tonumber(fields.size) or 0 |
| | | size = math.max(size, 2) |
| | | size = math.min(size, 8) |
| | | meta:set_int("size", size) |
| | | meta:set_string("formspec", get_quarry_formspec(size)) |
| | | end |
| | | if fields.enable then meta:set_int("enabled", 1) end |
| | | if fields.disable then meta:set_int("enabled", 0) end |
| | | set_quarry_formspec(meta) |
| | | end |
| | | |
| | | local function get_quarry_center(pos, size) |
| | |
| | | local meta = minetest.get_meta(pos) |
| | | local drops = {} |
| | | local dig_y = meta:get_int("dig_y") |
| | | local owner = meta:get_int("owner") |
| | | local owner = meta:get_string("owner") |
| | | |
| | | local vm = VoxelManip() |
| | | local p1 = vector.new( |
| | |
| | | end |
| | | if minetest.is_protected and minetest.is_protected(digpos, owner) then |
| | | meta:set_int("enabled", 0) |
| | | set_quarry_formspec(meta) |
| | | return {} |
| | | end |
| | | dig_y = digpos.y |
| | | local node = minetest.get_node(digpos) |
| | | drops = minetest.get_node_drops(node.name, "") |
| | | minetest.dig_node(digpos) |
| | | if minetest.get_node(digpos).name == node.name then |
| | | -- We tried to dig something undigable like a |
| | | -- filled chest. Notice that we check for a node |
| | | -- change, not for air. This is so that we get drops |
| | | -- from things like concrete posts with platforms, |
| | | -- which turn into regular concrete posts when dug. |
| | | drops = {} |
| | | local node_def = minetest.registered_nodes[node.name] or { diggable = false } |
| | | if node_def.diggable and ((not node_def.can_dig) or node_def.can_dig(digpos, nil)) then |
| | | minetest.remove_node(digpos) |
| | | drops = minetest.get_node_drops(node.name, "") |
| | | end |
| | | elseif not (dig_y < pos.y - quarry_max_depth) then |
| | | dig_y = dig_y - 16 |
| | |
| | | |
| | | local function send_items(items, pos, node) |
| | | for _, item in pairs(items) do |
| | | local tube_item = tube_item(vector.new(pos), item) |
| | | local tube_item = pipeworks.tube_item(vector.new(pos), item) |
| | | tube_item:get_luaentity().start_pos = vector.new(pos) |
| | | tube_item:setvelocity(vector.new(0, 1, 0)) |
| | | tube_item:setacceleration({x=0, y=0, z=0}) |
| | |
| | | end |
| | | |
| | | minetest.register_node("technic:quarry", { |
| | | description = S("Quarry"), |
| | | tiles = {"default_steel_block.png", "default_steel_block.png", |
| | | "default_steel_block.png", "default_steel_block.png", |
| | | "default_steel_block.png^default_tool_mesepick.png", "default_steel_block.png"}, |
| | | description = S("%s Quarry"):format("HV"), |
| | | tiles = {"technic_carbon_steel_block.png", "technic_carbon_steel_block.png", |
| | | "technic_carbon_steel_block.png", "technic_carbon_steel_block.png", |
| | | "technic_carbon_steel_block.png^default_tool_mesepick.png", "technic_carbon_steel_block.png"}, |
| | | paramtype2 = "facedir", |
| | | groups = {cracky=2, tubedevice=1}, |
| | | tube = { |
| | | connect_sides = {top = 1}, |
| | | }, |
| | | on_construct = function(pos) |
| | | local size = 4 |
| | | local meta = minetest.get_meta(pos) |
| | | meta:set_string("infotext", S("Quarry")) |
| | | meta:set_string("formspec", get_quarry_formspec(4)) |
| | | meta:set_int("size", size) |
| | | meta:set_string("infotext", S("%s Quarry"):format("HV")) |
| | | meta:set_int("size", 4) |
| | | set_quarry_formspec(meta) |
| | | meta:set_int("dig_y", pos.y) |
| | | end, |
| | | after_place_node = function(pos, placer, itemstack) |
| | | local meta = minetest.get_meta(pos) |
| | | meta:set_string("owner", placer:get_player_name()) |
| | | tube_scanforobjects(pos) |
| | | pipeworks.scan_for_tube_objects(pos) |
| | | end, |
| | | after_dig_node = tube_scanforobjects, |
| | | after_dig_node = pipeworks.scan_for_tube_objects, |
| | | on_receive_fields = quarry_receive_fields, |
| | | }) |
| | | |
| | |
| | | local demand = 10000 |
| | | local center = get_quarry_center(pos, size) |
| | | local dig_y = meta:get_int("dig_y") |
| | | local machine_name = S("Quarry") |
| | | local machine_name = S("%s Quarry"):format("HV") |
| | | |
| | | technic.switching_station_timeout_count(pos, "HV") |
| | | |