forked from minetest-mods/MoreMesecons
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			781e388150
			...
			mesechest
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 36cce60622 | ||
|  | 678099bd00 | ||
|  | 15e9d9950a | ||
|  | 4da3c443e2 | 
							
								
								
									
										1
									
								
								moremesecons_mesechest/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								moremesecons_mesechest/depends.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | default | ||||||
							
								
								
									
										108
									
								
								moremesecons_mesechest/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								moremesecons_mesechest/init.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,108 @@ | |||||||
|  | local function mesechest_get_output_rules(node) | ||||||
|  | 	local rules = {{x=-1, y=0, z=0}, | ||||||
|  | 			{x=0, y=0, z=-1}, | ||||||
|  | 			{x=0, y=0, z=1}} | ||||||
|  | 	for i = 0, node.param2 do | ||||||
|  | 		rules = mesecon.rotate_rules_left(rules) | ||||||
|  | 	end | ||||||
|  | 	return rules | ||||||
|  | end | ||||||
|  |  | ||||||
|  |  | ||||||
|  | local open_chests = {} | ||||||
|  |  | ||||||
|  | -- Override minetest.register_node so it adds a prefix ":" | ||||||
|  | local old_minetest_register_node = minetest.register_node | ||||||
|  | minetest.register_node = function(name, def) | ||||||
|  | 	local old_on_metadata_inventory_put = def.on_metadata_inventory_put | ||||||
|  | 	local old_on_metadata_inventory_take = def.on_metadata_inventory_take | ||||||
|  | 	local old_on_rightclick = def.on_rightclick | ||||||
|  |  | ||||||
|  | 	def.on_metadata_inventory_put = function(pos, ...) | ||||||
|  | 		old_on_metadata_inventory_put(pos, ...) | ||||||
|  | 		mesecon.receptor_on(pos, {mesechest_get_output_rules(minetest.get_node(pos))[2]}) | ||||||
|  | 		minetest.after(1, function(pos) | ||||||
|  | 			mesecon.receptor_off(pos, {mesechest_get_output_rules(minetest.get_node(pos))[2]}) | ||||||
|  | 		end, pos) | ||||||
|  | 	end | ||||||
|  | 	def.on_metadata_inventory_take = function(pos, ...) | ||||||
|  | 		old_on_metadata_inventory_take(pos, ...) | ||||||
|  | 		mesecon.receptor_on(pos, {mesechest_get_output_rules(minetest.get_node(pos))[3]}) | ||||||
|  | 		minetest.after(1, function(pos) | ||||||
|  | 			mesecon.receptor_off(pos, {mesechest_get_output_rules(minetest.get_node(pos))[3]}) | ||||||
|  | 		end, pos) | ||||||
|  | 	end | ||||||
|  | 	def.on_rightclick = function(pos, node, clicker, ...) | ||||||
|  | 		if old_on_rightclick(pos, node, clicker, ...) == nil then | ||||||
|  | 			mesecon.receptor_on(pos, {mesechest_get_output_rules(node)[1]}) | ||||||
|  | 			open_chests[clicker:get_player_name()] = pos | ||||||
|  | 		end | ||||||
|  | 	end | ||||||
|  |  | ||||||
|  | 	old_minetest_register_node(":"..name, def) | ||||||
|  | end | ||||||
|  | local old_minetest_register_lbm = minetest.register_lbm | ||||||
|  | minetest.register_lbm = function() end | ||||||
|  |  | ||||||
|  | -- Get the on_player_receive_fields function. That's a huge hack | ||||||
|  | for i, f in ipairs(minetest.registered_on_player_receive_fields) do | ||||||
|  | 	local serialized = minetest.serialize(f) | ||||||
|  | 	if string.find(serialized, "default:chest") then | ||||||
|  | 		minetest.registered_on_player_receive_fields[i] = function(player, formname, fields) | ||||||
|  | 			if f(player, formname, fields) == true then | ||||||
|  | 				local pn = player:get_player_name() | ||||||
|  | 				if open_chests[pn] then | ||||||
|  | 					mesecon.receptor_off(open_chests[pn], {mesechest_get_output_rules(minetest.get_node(open_chests[pn]))[1]}) | ||||||
|  | 					open_chests[pn] = nil | ||||||
|  | 				end | ||||||
|  | 			end | ||||||
|  | 		end | ||||||
|  | 		break | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  |  | ||||||
|  | default.register_chest("mesechest", { | ||||||
|  | 	description = "Mese Chest", | ||||||
|  | 	tiles = { | ||||||
|  | 		"default_chest_top.png^[colorize:#d8e002:70", | ||||||
|  | 		"default_chest_top.png^[colorize:#d8e002:70", | ||||||
|  | 		"default_chest_side.png^[colorize:#d8e002:70", | ||||||
|  | 		"default_chest_side.png^[colorize:#d8e002:70", | ||||||
|  | 		"default_chest_front.png^[colorize:#d8e002:70", | ||||||
|  | 		"default_chest_inside.png^[colorize:#d8e002:70" | ||||||
|  | 	}, | ||||||
|  | 	sounds = default.node_sound_wood_defaults(), | ||||||
|  | 	sound_open = "default_chest_open", | ||||||
|  | 	sound_close = "default_chest_close", | ||||||
|  | 	groups = {choppy = 2, oddly_breakable_by_hand = 2}, | ||||||
|  | 	mesecons = { | ||||||
|  | 		receptor = { | ||||||
|  | 			rules = mesechest_get_output_rules | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | default.register_chest("mesechest_locked", { | ||||||
|  | 	description = "Locked Mese Chest", | ||||||
|  | 	tiles = { | ||||||
|  | 		"default_chest_top.png^[colorize:#d8e002:70", | ||||||
|  | 		"default_chest_top.png^[colorize:#d8e002:70", | ||||||
|  | 		"default_chest_side.png^[colorize:#d8e002:70", | ||||||
|  | 		"default_chest_side.png^[colorize:#d8e002:70", | ||||||
|  | 		"default_chest_lock.png^[colorize:#d8e002:70", | ||||||
|  | 		"default_chest_inside.png^[colorize:#d8e002:70" | ||||||
|  | 	}, | ||||||
|  | 	sounds = default.node_sound_wood_defaults(), | ||||||
|  | 	sound_open = "default_chest_open", | ||||||
|  | 	sound_close = "default_chest_close", | ||||||
|  | 	groups = {choppy = 2, oddly_breakable_by_hand = 2}, | ||||||
|  | 	protected = true, | ||||||
|  | 	mesecons = { | ||||||
|  | 		receptor = { | ||||||
|  | 			rules = mesechest_get_output_rules | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | minetest.register_node = old_minetest_register_node | ||||||
|  | minetest.register_lbm = old_minetest_register_lbm | ||||||
		Reference in New Issue
	
	Block a user