From 99fd5dfee5a70b0656e40787168d2c67ba417738 Mon Sep 17 00:00:00 2001
From: Zefram <zefram@fysh.org>
Date: Wed, 30 Apr 2014 01:21:55 +0200
Subject: [PATCH] Genericise handling of multiple meanings of wear

---
 technic/tools/chainsaw.lua                |    1 +
 technic/tools/mining_lasers.lua           |    1 +
 technic/tools/flashlight.lua              |    1 +
 technic/tools/cans.lua                    |    2 ++
 technic/machines/register/battery_box.lua |    1 +
 technic/register.lua                      |    1 +
 technic/items.lua                         |    3 +++
 technic/tools/mining_drill.lua            |    5 +++++
 technic/machines/MV/tool_workshop.lua     |   12 ++++++++----
 technic/tools/sonic_screwdriver.lua       |    1 +
 10 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/technic/items.lua b/technic/items.lua
index d571917..9149460 100644
--- a/technic/items.lua
+++ b/technic/items.lua
@@ -32,6 +32,7 @@
 		"technic_diamond_block_blue.png",
 		"technic_diamond_block_blue.png",
 		"technic_diamond_block_blue.png"),
+	wear_represents = "technic_RE_charge",
 	tool_capabilities = {
 		max_drop_level = 0,
 		groupcaps = {
@@ -46,6 +47,7 @@
 		"technic_diamond_block_green.png",
 		"technic_diamond_block_green.png",
 		"technic_diamond_block_green.png"),
+	wear_represents = "technic_RE_charge",
 	tool_capabilities = {
 		max_drop_level = 0,
 		groupcaps = {
@@ -60,6 +62,7 @@
 		"technic_diamond_block_red.png",
 		"technic_diamond_block_red.png",
 		"technic_diamond_block_red.png"),
+	wear_represents = "technic_RE_charge",
 	tool_capabilities = {
 		max_drop_level = 0,
 		groupcaps = {
diff --git a/technic/machines/MV/tool_workshop.lua b/technic/machines/MV/tool_workshop.lua
index 9955d5f..b00c3bb 100644
--- a/technic/machines/MV/tool_workshop.lua
+++ b/technic/machines/MV/tool_workshop.lua
@@ -60,11 +60,15 @@
 		-- Power off automatically if no longer connected to a switching station
 		technic.switching_station_timeout_count(pos, "MV")
 
+		local repairable = false
 		local srcstack = inv:get_stack("src", 1)
-		if inv:is_empty("src") or
-		   srcstack:get_wear() == 0 or
-		   srcstack:get_name() == "technic:water_can" or
-		   srcstack:get_name() == "technic:lava_can" then
+		if (not srcstack:is_empty("src")) then
+			local itemdef = minetest.registered_items[srcstack:get_name()]
+			if (itemdef.wear_represents or "mechanical_wear") == "mechanical_wear" and srcstack:get_wear() ~= 0 then
+				repairable = true
+			end
+		end
+		if not repairable then
 			meta:set_string("infotext", S("%s Idle"):format(machine_name))
 			meta:set_int("MV_EU_demand", 0)
 			return
diff --git a/technic/machines/register/battery_box.lua b/technic/machines/register/battery_box.lua
index f7bbf1e..8efcb15 100644
--- a/technic/machines/register/battery_box.lua
+++ b/technic/machines/register/battery_box.lua
@@ -18,6 +18,7 @@
 minetest.register_tool("technic:battery", {
 	description = S("RE Battery"),
 	inventory_image = "technic_battery.png",
+	wear_represents = "technic_RE_charge",
 	tool_capabilities = {
 		charge = 0,
 		max_drop_level = 0,
diff --git a/technic/register.lua b/technic/register.lua
index 0b55282..09721ff 100644
--- a/technic/register.lua
+++ b/technic/register.lua
@@ -44,6 +44,7 @@
 
 -- Wear down a tool depending on the remaining charge.
 function technic.set_RE_wear(itemstack, item_load, max_load)
+	if (minetest.registered_items[itemstack:get_name()].wear_represents or "mechanical_wear") ~= "technic_RE_charge" then return itemstack end
 	local temp
 	if item_load == 0 then
 		temp = 0
diff --git a/technic/tools/cans.lua b/technic/tools/cans.lua
index c1c6713..e75b2db 100644
--- a/technic/tools/cans.lua
+++ b/technic/tools/cans.lua
@@ -26,6 +26,7 @@
 	description = S("Water Can"),
 	inventory_image = "technic_water_can.png",
 	stack_max = 1,
+	wear_represents = "content_level",
 	liquids_pointable = true,
 	on_use = function(itemstack, user, pointed_thing)
 		if pointed_thing.type ~= "node" then
@@ -75,6 +76,7 @@
 	description = S("Lava Can"),
 	inventory_image = "technic_lava_can.png",
 	stack_max = 1,
+	wear_represents = "content_level",
 	liquids_pointable = true,
 	on_use = function(itemstack, user, pointed_thing)
 		if pointed_thing.type ~= "node" then
diff --git a/technic/tools/chainsaw.lua b/technic/tools/chainsaw.lua
index 19ba3e8..273e36d 100644
--- a/technic/tools/chainsaw.lua
+++ b/technic/tools/chainsaw.lua
@@ -255,6 +255,7 @@
 	description = S("Chainsaw"),
 	inventory_image = "technic_chainsaw.png",
 	stack_max = 1,
+	wear_represents = "technic_RE_charge",
 	on_use = function(itemstack, user, pointed_thing)
 		if pointed_thing.type ~= "node" then
 			return itemstack
diff --git a/technic/tools/flashlight.lua b/technic/tools/flashlight.lua
index a2cfe33..7beac5e 100644
--- a/technic/tools/flashlight.lua
+++ b/technic/tools/flashlight.lua
@@ -13,6 +13,7 @@
 	description = S("Flashlight"),
 	inventory_image = "technic_flashlight.png",
 	stack_max = 1,
+	wear_represents = "technic_RE_charge",
 })
 
 minetest.register_craft({
diff --git a/technic/tools/mining_drill.lua b/technic/tools/mining_drill.lua
index 0471c71..2a7cfe7 100644
--- a/technic/tools/mining_drill.lua
+++ b/technic/tools/mining_drill.lua
@@ -326,6 +326,7 @@
 	description = S("Mining Drill Mk%d"):format(1),
 	inventory_image = "technic_mining_drill.png",
 	stack_max = 1,
+	wear_represents = "technic_RE_charge",
 	on_use = function(itemstack, user, pointed_thing)
 		if pointed_thing.type ~= "node" then
 			return itemstack
@@ -349,6 +350,7 @@
 minetest.register_tool("technic:mining_drill_mk2", {
 	description = S("Mining Drill Mk%d"):format(2),
 	inventory_image = "technic_mining_drill_mk2.png",
+	wear_represents = "technic_RE_charge",
 	on_use = function(itemstack, user, pointed_thing)
 		mining_drill_mk2_handler(itemstack, user, pointed_thing)
 		return itemstack
@@ -363,6 +365,7 @@
 		description = S("Mining Drill Mk%d Mode %d"):format(2, i),
 		inventory_image = "technic_mining_drill_mk2.png^technic_tool_mode"..i..".png",
 		wield_image = "technic_mining_drill_mk2.png",
+		wear_represents = "technic_RE_charge",
 		groups = {not_in_creative_inventory=1},
 		on_use = function(itemstack, user, pointed_thing)
 			mining_drill_mk2_handler(itemstack, user, pointed_thing)
@@ -374,6 +377,7 @@
 minetest.register_tool("technic:mining_drill_mk3", {
 	description = S("Mining Drill Mk%d"):format(3),
 	inventory_image = "technic_mining_drill_mk3.png",
+	wear_represents = "technic_RE_charge",
 	on_use = function(itemstack, user, pointed_thing)
 	mining_drill_mk3_handler(itemstack,user,pointed_thing)
 	return itemstack
@@ -388,6 +392,7 @@
 		description = S("Mining Drill Mk%d Mode %d"):format(3, i),
 		inventory_image = "technic_mining_drill_mk3.png^technic_tool_mode"..i..".png",
 		wield_image = "technic_mining_drill_mk3.png",
+		wear_represents = "technic_RE_charge",
 		groups = {not_in_creative_inventory=1},
 		on_use = function(itemstack, user, pointed_thing)
 		mining_drill_mk3_handler(itemstack,user,pointed_thing)
diff --git a/technic/tools/mining_lasers.lua b/technic/tools/mining_lasers.lua
index 4a4ed2f..c6ba57f 100644
--- a/technic/tools/mining_lasers.lua
+++ b/technic/tools/mining_lasers.lua
@@ -168,6 +168,7 @@
 		description = S("Mining Laser Mk%d"):format(m[1]),
 		inventory_image = "technic_mining_laser_mk"..m[1]..".png",
 		stack_max = 1,
+		wear_represents = "technic_RE_charge",
 		on_use = function(itemstack, user)
 			local meta = minetest.deserialize(itemstack:get_metadata())
 			if not meta or not meta.charge then
diff --git a/technic/tools/sonic_screwdriver.lua b/technic/tools/sonic_screwdriver.lua
index a9a52d8..cc4edab 100644
--- a/technic/tools/sonic_screwdriver.lua
+++ b/technic/tools/sonic_screwdriver.lua
@@ -7,6 +7,7 @@
 minetest.register_tool("technic:sonic_screwdriver", {
 	description = S("Sonic Screwdriver"),
 	inventory_image = "technic_sonic_screwdriver.png",
+	wear_represents = "technic_RE_charge",
 	on_use = function(itemstack, user, pointed_thing)
 		-- Must be pointing to facedir applicable node
 		if pointed_thing.type ~= "node" then

--
Gitblit v1.8.0