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 |   61 +++++++++++++-----------------
 1 files changed, 26 insertions(+), 35 deletions(-)

diff --git a/technic/machines/HV/quarry.lua b/technic/machines/HV/quarry.lua
index fcf0fec..f22e094 100644
--- a/technic/machines/HV/quarry.lua
+++ b/technic/machines/HV/quarry.lua
@@ -12,32 +12,28 @@
 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)
@@ -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
@@ -135,7 +127,7 @@
 end
 
 minetest.register_node("technic:quarry", {
-	description = S("Quarry"),
+	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"},
@@ -145,11 +137,10 @@
 		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)
@@ -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