mirror of
				https://github.com/minetest-mods/technic.git
				synced 2025-10-30 23:25:45 +01:00 
			
		
		
		
	Add Wrench mod
This commit is contained in:
		
							
								
								
									
										154
									
								
								wrench/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								wrench/init.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -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",""}, | ||||
| 	}, | ||||
| }) | ||||
		Reference in New Issue
	
	Block a user