diff options
| author | Jeija <norrepli@gmail.com> | 2012-12-11 19:49:55 +0100 | 
|---|---|---|
| committer | Jeija <norrepli@gmail.com> | 2012-12-11 19:49:55 +0100 | 
| commit | de46729b971b5e59394834b8a01d4a7005318114 (patch) | |
| tree | 5a2cf1f18b485ddefa8e255ac6d6a600ef2e2e12 /mesecons_compatibility | |
| parent | 31f3c99288355193dc68a6e83dfc63140fd02fa0 (diff) | |
| parent | 5540fcbcb31eb32003fa0391113ed3b1dea25e47 (diff) | |
Merge branch 'mesecons_in_nodedef'
Conflicts:
	mesecons/internal.lua
Diffstat (limited to 'mesecons_compatibility')
| -rw-r--r-- | mesecons_compatibility/init.lua | 174 | 
1 files changed, 164 insertions, 10 deletions
diff --git a/mesecons_compatibility/init.lua b/mesecons_compatibility/init.lua index dcf94de..b2f793c 100644 --- a/mesecons_compatibility/init.lua +++ b/mesecons_compatibility/init.lua @@ -1,11 +1,165 @@ -minetest.after(0,  -function () -	if minetest.registered_nodes["doors:door_wood_b_1"] then -		mesecon:register_effector("doors:door_wood_b_1", "doors:door_wood_b_2") -		mesecon:register_on_signal_change(function(pos, node) -			if node.name == "doors:door_wood_b_2" or node.name == "doors:door_wood_b_1" then -				minetest.registered_nodes[node.name].on_punch(pos, node) -			end -		end) +doors = {} + +-- Registers a door - REDEFINITION ONLY | DOORS MOD MUST HAVE BEEN LOADED BEFORE +--  name: The name of the door +--  def: a table with the folowing fields: +--    description +--    inventory_image +--    groups +--    tiles_bottom: the tiles of the bottom part of the door {front, side} +--    tiles_top: the tiles of the bottom part of the door {front, side} +--    If the following fields are not defined the default values are used +--    node_box_bottom +--    node_box_top +--    selection_box_bottom +--    selection_box_top +--    only_placer_can_open: if true only the player who placed the door can +--                          open it + +function doors:register_door(name, def) +	def.groups.not_in_creative_inventory = 1 +	 +	local box = {{-0.5, -0.5, -0.5,   0.5, 0.5, -0.5+1.5/16}} +	 +	if not def.node_box_bottom then +		def.node_box_bottom = box +	end +	if not def.node_box_top then +		def.node_box_top = box +	end +	if not def.selection_box_bottom then +		def.selection_box_bottom= box +	end +	if not def.selection_box_top then +		def.selection_box_top = box +	end +	 +	local tt = def.tiles_top +	local tb = def.tiles_bottom +	 +	local function after_dig_node(pos, name) +		if minetest.env:get_node(pos).name == name then +			minetest.env:remove_node(pos) +		end +	end + +	local function on_punch(pos, dir, check_name, replace, replace_dir, params) +		pos.y = pos.y+dir +		if not minetest.env:get_node(pos).name == check_name then +			return +		end +		local p2 = minetest.env:get_node(pos).param2 +		p2 = params[p2+1] +		 +		local meta = minetest.env:get_meta(pos):to_table() +		minetest.env:set_node(pos, {name=replace_dir, param2=p2}) +		minetest.env:get_meta(pos):from_table(meta) +		 +		pos.y = pos.y-dir +		meta = minetest.env:get_meta(pos):to_table() +		minetest.env:set_node(pos, {name=replace, param2=p2}) +		minetest.env:get_meta(pos):from_table(meta)  	end -end) + +	local function on_mesecons_signal_open (pos, node) +		on_punch(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0}) +	end + +	local function on_mesecons_signal_close (pos, node) +		on_punch(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2}) +	end +	 +	local function check_player_priv(pos, player) +		if not def.only_placer_can_open then +			return true +		end +		local meta = minetest.env:get_meta(pos) +		local pn = player:get_player_name() +		return meta:get_string("doors_owner") == pn +	end +	 +	minetest.register_node(":"..name.."_b_1", { +		tiles = {tb[2], tb[2], tb[2], tb[2], tb[1], tb[1].."^[transformfx"}, +		paramtype = "light", +		paramtype2 = "facedir", +		drop = name, +		drawtype = "nodebox", +		node_box = { +			type = "fixed", +			fixed = def.node_box_bottom +		}, +		selection_box = { +			type = "fixed", +			fixed = def.selection_box_bottom +		}, +		groups = def.groups, +		 +		after_dig_node = function(pos, oldnode, oldmetadata, digger) +			pos.y = pos.y+1 +			after_dig_node(pos, name.."_t_1") +		end, +		 +		on_punch = function(pos, node, puncher) +			if check_player_priv(pos, puncher) then +				on_punch(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0}) +			end +		end, + +		mesecons = {effector = { +			action_on  = on_mesecons_signal_open +		}}, +		 +		can_dig = check_player_priv, +	}) +	 +	minetest.register_node(":"..name.."_b_2", { +		tiles = {tb[2], tb[2], tb[2], tb[2], tb[1].."^[transformfx", tb[1]}, +		paramtype = "light", +		paramtype2 = "facedir", +		drop = name, +		drawtype = "nodebox", +		node_box = { +			type = "fixed", +			fixed = def.node_box_bottom +		}, +		selection_box = { +			type = "fixed", +			fixed = def.selection_box_bottom +		}, +		groups = def.groups, +		 +		after_dig_node = function(pos, oldnode, oldmetadata, digger) +			pos.y = pos.y+1 +			after_dig_node(pos, name.."_t_2") +		end, +		 +		on_punch = function(pos, node, puncher) +			if check_player_priv(pos, puncher) then +				on_punch(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2}) +			end +		end, + +		mesecons = {effector = { +			action_off = on_mesecons_signal_close +		}}, +		 +		can_dig = check_player_priv, +	}) +end + +doors:register_door("doors:door_wood", { +	description = "Wooden Door", +	inventory_image = "door_wood.png", +	groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2,door=1}, +	tiles_bottom = {"door_wood_b.png", "door_brown.png"}, +	tiles_top = {"door_wood_a.png", "door_brown.png"}, +}) + +doors:register_door("doors:door_steel", { +	description = "Steel Door", +	inventory_image = "door_steel.png", +	groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2,door=1}, +	tiles_bottom = {"door_steel_b.png", "door_grey.png"}, +	tiles_top = {"door_steel_a.png", "door_grey.png"}, +	only_placer_can_open = true, +})  | 
