From 636b0f20df4fef3eef821c23ccc2f606828f5c6f Mon Sep 17 00:00:00 2001 From: Zefram <zefram@fysh.org> Date: Mon, 07 Jul 2014 15:15:05 +0200 Subject: [PATCH] Handheld prospecting tool --- technic/machines/HV/quarry.lua | 81 ++++++++++++++++++---------------------- 1 files changed, 36 insertions(+), 45 deletions(-) diff --git a/technic/machines/HV/quarry.lua b/technic/machines/HV/quarry.lua index 15b6662..f22e094 100644 --- a/technic/machines/HV/quarry.lua +++ b/technic/machines/HV/quarry.lua @@ -3,41 +3,37 @@ 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) @@ -79,7 +75,7 @@ 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( @@ -103,19 +99,15 @@ 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 @@ -127,7 +119,7 @@ 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}) @@ -135,29 +127,28 @@ 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, }) @@ -172,7 +163,7 @@ 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") -- Gitblit v1.8.0