From 21c96a971fb22a298bea5c3ca2d764f96918956e Mon Sep 17 00:00:00 2001
From: metalstache <ashenkster69@gmail.com>
Date: Wed, 31 Jul 2013 17:55:59 +0200
Subject: [PATCH] Add Wrench mod

---
 wrench/textures/technic_wrench.png |    0 
 wrench/depends.txt                 |    3 +
 wrench/init.lua                    |  154 +++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 157 insertions(+), 0 deletions(-)

diff --git a/wrench/depends.txt b/wrench/depends.txt
new file mode 100644
index 0000000..f6abc61
--- /dev/null
+++ b/wrench/depends.txt
@@ -0,0 +1,3 @@
+default
+technic
+technic_chests
\ No newline at end of file
diff --git a/wrench/init.lua b/wrench/init.lua
new file mode 100644
index 0000000..0950349
--- /dev/null
+++ b/wrench/init.lua
@@ -0,0 +1,154 @@
+local supported_nodes = {
+["default:chest"] = {name="wrench:default_chest", lists={"main"}},
+["default:furnace"] = {name="wrench:default_furnace", lists={"fuel", "src", "dst"}},
+["default:furnace_active"] = {name="wrench:default_furnace", lists={"fuel", "src", "dst"}},
+["technic:iron_chest"] = {name="wrench:technic_iron_chest", lists={"main"}},
+["technic:iron_locked_chest"] = {name="wrench:technic_iron_locked_chest", lists={"main"}},
+["technic:copper_chest"] = {name="wrench:technic_copper_chest", lists={"main"}},
+["technic:copper_locked_chest"] = {name="wrench:technic_copper_locked_chest", lists={"main"}},
+["technic:silver_chest"] = {name="wrench:technic_silver_chest", lists={"main"}},
+["technic:silver_locked_chest"] = {name="wrench:technic_silver_locked_chest", lists={"main"}},
+["technic:gold_chest"] = {name="wrench:technic_gold_chest", lists={"main"}},
+["technic:gold_locked_chest"] = {name="wrench:technic_gold_locked_chest", lists={"main"}},
+["technic:mithril_chest"] = {name="wrench:technic_mithril_chest", lists={"main"}},
+["technic:mithril_locked_chest"] = {name="wrench:technic_mithril_locked_chest", lists={"main"}},
+["technic:electric_furnace"] = {name="wrench:technic_electric_furnace", lists={"src", "dst"}},
+["technic:electric_furnace_active"] = {name="wrench:technic_electric_furnace_active", lists={"src", "dst"}},
+["technic:mv_electric_furnace"] = {name="wrench:technic_mv_electric_furnace", lists={"src", "dst", "upgrade1", "upgrade2"}},
+["technic:mv_electric_furnace_active"] = {name="wrench:technic_mv_electric_furnace_active", lists={"src", "dst", "upgrade1", "upgrade2"}},
+["technic:coal_alloy_furnace"] = {name="wrench:technic_coal_alloy_furnace", lists={"fuel", "src", "src2", "dst"}},
+["technic:coal_alloy_furnace_active"] = {name="wrench:technic_coal_alloy_furnace_active", lists={"fuel", "src", "src2", "dst"}},
+["technic:alloy_furnace"] = {name="wrench:technic_alloy_furnace", lists={"src", "src2", "dst"}},
+["technic:alloy_furnace_active"] = {name="wrench:technic_alloy_furnace_active", lists={"src", "src2", "dst"}},
+["technic:mv_alloy_furnace"] = {name="wrench:technic_mv_alloy_furnace", lists={"src", "src2", "dst", "upgrade1", "upgrade2"}},
+["technic:mv_alloy_furnace_active"] = {name="wrench:technic_mv_alloy_furnace_active", lists={"src", "src2", "dst", "upgrade1", "upgrade2"}},
+["technic:grinder"] = {name="wrench:technic_grinder", lists={"src", "dst"}},
+["technic:grinder_active"] = {name="wrench:technic_grinder_active", lists={"src", "dst"}},
+}
+local chest_mark_colors = {
+    {'_black','Black'},
+    {'_blue','Blue'}, 
+    {'_brown','Brown'},
+    {'_cyan','Cyan'},
+    {'_dark_green','Dark Green'},
+    {'_dark_grey','Dark Grey'},
+    {'_green','Green'},
+    {'_grey','Grey'},
+    {'_magenta','Magenta'},
+    {'_orange','Orange'},
+    {'_pink','Pink'},
+    {'_red','Red'},
+    {'_violet','Violet'},
+    {'_white','White'},
+    {'_yellow','Yellow'},
+    {'','None'}
+}
+for i=1,15,1 do
+	supported_nodes["technic:gold_chest"..chest_mark_colors[i][1]] = {name="wrench:technic_gold_chest"..chest_mark_colors[i][1], lists={"main"}}
+	supported_nodes["technic:gold_locked_chest"..chest_mark_colors[i][1]] = {name="wrench:technic_gold_locked_chest"..chest_mark_colors[i][1], lists={"main"}}
+end
+
+local function convert_to_original_name(name)
+	for key,value in pairs(supported_nodes) do
+		if name == value.name then return key end
+	end
+end
+
+for name,_ in pairs(supported_nodes) do
+	local olddef = minetest.registered_nodes[name]
+	if olddef ~= nil then
+		local newdef = {}
+		for key,value in pairs(olddef) do
+			newdef[key] = value
+		end
+		name = supported_nodes[name].name
+		newdef.stack_max = 1
+		newdef.description = newdef.description.." with items"
+		newdef.groups.not_in_creative_inventory = 1
+		newdef.on_construct = nil
+		newdef.on_destruct = nil
+		newdef.after_place_node = function(pos, placer, itemstack)
+			if olddef.after_place_node ~= nil then olddef.after_place_node(pos, placer, itemstack) end
+			if not placer:is_player() then return end
+			local node = minetest.get_node(pos)
+			local item = convert_to_original_name(itemstack:get_name())
+			minetest.set_node(pos, {name = item, param2 = node.param2})
+			local inv = minetest.get_meta(pos):get_inventory()
+			local data = minetest.deserialize(itemstack:get_metadata())
+			for listname,list in pairs(data) do
+				inv:set_list(listname, list)
+			end
+		end
+		minetest.register_node(name, newdef)
+	end
+end
+
+
+minetest.register_tool("wrench:wrench", {
+	description = "Wrench",
+	inventory_image = "technic_wrench.png",
+	tool_capabilities = {
+		full_punch_interval = 0.9,
+		max_drop_level = 0,
+		groupcaps = {
+			crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
+			snappy = {times={[3]=0.40}, uses=0, maxlevel=1},
+			oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=1.40}, uses=0, maxlevel=3}
+		},
+		damage_groups = {fleshy=1},
+	},
+	on_place = function(itemstack, placer, pointed_thing)
+		if not placer:is_player() then return end
+		local pos = pointed_thing.under
+		if pos == nil then return end
+		local name = minetest.get_node(pos).name
+		local support = supported_nodes[name]
+		if support == nil then return end
+		if name:find("_locked_chest") ~= nil then
+			local meta = minetest.get_meta(pos)
+			if not has_locked_chest_privilege(meta, placer) then
+				minetest.log("action", player:get_player_name()..
+				" tried to destroy a locked chest belonging to "..
+				meta:get_string("owner").." at "..
+				minetest.pos_to_string(pos))
+				return
+			end
+		end
+		local lists = support.lists
+		local inv = minetest.get_meta(pos):get_inventory()
+		local empty = true
+		local list_str = {}
+		for i=1,#lists,1 do
+			if not inv:is_empty(lists[i]) then empty = false end
+			local list = inv:get_list(lists[i])
+			for j=1,#list,1 do
+				list[j] = list[j]:to_string()
+			end
+			list_str[lists[i]] = list
+		end
+		inv = placer:get_inventory()
+		local stack = {}
+		stack.name = name
+		if inv:room_for_item("main", stack) then
+			minetest.remove_node(pos)
+			itemstack:add_wear(65535/20)
+			if empty then
+				inv:add_item("main", stack)
+			else
+				stack.name = supported_nodes[name].name
+				stack.metadata = minetest.serialize(list_str)
+				inv:add_item("main", stack)
+			end
+		end
+		return itemstack
+	end,
+})
+
+minetest.register_craft({
+	output = "wrench:wrench",
+	recipe = {
+	{"default:iron_lump","","default:iron_lump"},
+	{"","default:iron_lump",""},
+	{"","default:iron_lump",""},
+	},
+})
\ No newline at end of file
diff --git a/wrench/textures/technic_wrench.png b/wrench/textures/technic_wrench.png
new file mode 100644
index 0000000..471b47e
--- /dev/null
+++ b/wrench/textures/technic_wrench.png
Binary files differ

--
Gitblit v1.8.0