diff options
| author | Vanessa Dannenberg <vanessa.e.dannenberg@gmail.com> | 2019-05-30 06:43:06 -0400 | 
|---|---|---|
| committer | Vanessa Dannenberg <vanessa.e.dannenberg@gmail.com> | 2019-05-30 06:43:06 -0400 | 
| commit | eae97e458ce30e210c90290cf4c405d4282a03b7 (patch) | |
| tree | 3fae3f0381878fff840ecb2ac0fbdf6bd8c5a67e /ilights | |
| parent | 54388533cedd41ca1505c368c2661c2b27a64f57 (diff) | |
| download | dreambuilder_modpack-eae97e458ce30e210c90290cf4c405d4282a03b7.tar dreambuilder_modpack-eae97e458ce30e210c90290cf4c405d4282a03b7.tar.gz dreambuilder_modpack-eae97e458ce30e210c90290cf4c405d4282a03b7.tar.bz2 dreambuilder_modpack-eae97e458ce30e210c90290cf4c405d4282a03b7.tar.xz dreambuilder_modpack-eae97e458ce30e210c90290cf4c405d4282a03b7.zip | |
update homedecor, ilights, and simple streetlights
New mod!  laza83's fork of DonBatman's mymillwork
Diffstat (limited to 'ilights')
| -rw-r--r-- | ilights/depends.txt | 2 | ||||
| -rw-r--r-- | ilights/init.lua | 186 | ||||
| -rw-r--r-- | ilights/textures/ilights_lamp_bulb_off.png | bin | 0 -> 378 bytes | |||
| -rw-r--r-- | ilights/textures/ilights_lamp_bulb_on.png (renamed from ilights/textures/ilights_lamp_bulb.png) | bin | 492 -> 492 bytes | |||
| -rw-r--r-- | ilights/textures/ilights_lamp_lens_off.png | bin | 0 -> 613 bytes | |||
| -rw-r--r-- | ilights/textures/ilights_lamp_lens_on.png (renamed from ilights/textures/ilights_lamp_lens.png) | bin | 651 -> 651 bytes | 
6 files changed, 162 insertions, 26 deletions
| diff --git a/ilights/depends.txt b/ilights/depends.txt index fe7e3d9..fe6a422 100644 --- a/ilights/depends.txt +++ b/ilights/depends.txt @@ -1,3 +1,5 @@  default  unifieddyes  intllib? +mesecons? +digilines? diff --git a/ilights/init.lua b/ilights/init.lua index 355cfcd..2b4c396 100644 --- a/ilights/init.lua +++ b/ilights/init.lua @@ -25,6 +25,123 @@ end  ilights.modpath = minetest.get_modpath("ilights") +local function is_protected(pos, clicker) +	if minetest.is_protected(pos, clicker:get_player_name()) then +		minetest.record_protection_violation(pos, +		clicker:get_player_name()) +		return true +	end +	return false +end + +if minetest.get_modpath("mesecons") then +	actions = { +		action_off = function(pos, node) +			local sep = string.find(node.name, "_", -5) +			local onoff = string.sub(node.name, sep + 1) +			if minetest.get_meta(pos):get_int("toggled") > 0 then +				minetest.swap_node(pos, { +					name = string.sub(node.name, 1, sep - 1).."_off", +					param2 = node.param2 +				}) +			end +		end, +		action_on = function(pos, node) +			minetest.get_meta(pos):set_int("toggled", 1) +			local sep = string.find(node.name, "_", -5) +			local onoff = string.sub(node.name, sep + 1) +			minetest.swap_node(pos, { +				name = string.sub(node.name, 1, sep - 1).."_on", +				param2 = node.param2 +			}) +		end +	} + +	ilights.mesecons = { +		effector = table.copy(actions) +	} +	ilights.mesecons.effector.rules = mesecon.rules.wallmounted_get +end + +-- digilines compatibility +-- this one is based on the so-named one in Jeija's digilines mod + +local player_last_clicked = {} + +local digiline_on_punch + +if minetest.get_modpath("digilines") then + +	local on_digiline_receive_string = function(pos, node, channel, msg) +		local meta = minetest.get_meta(pos) +		local setchan = meta:get_string("channel") + +		if setchan ~= channel then return end +		if msg and msg ~= "" and type(msg) == "string" then +			if msg == "off" or msg == "on" then +				local basename = string.sub(node.name, 1, string.find(node.name, "_", -5) - 1) +				if minetest.registered_nodes[basename.."_"..msg] then +					minetest.swap_node(pos, {name = basename.."_"..msg, param2 = node.param2}) +				end +			end +		end +	end + +	minetest.register_on_player_receive_fields(function(player, formname, fields) +		local name = player:get_player_name() +		local pos = player_last_clicked[name] +		if pos and formname == "ilights:set_channel" then +			if is_protected(pos, player) then return end +			if (fields.channel) then +				local meta = minetest.get_meta(pos) +				meta:set_string("channel", fields.channel) +			end +		end +	end) + +	if minetest.get_modpath("mesecons") then +		ilights.digilines = { +			effector = { +				action = on_digiline_receive_string, +			}, +			wire = { +				rules = mesecon.rules.wallmounted_get +			} +		} +	else +		ilights.digilines = { +			effector = { +				action = on_digiline_receive_string, +			}, +			wire = { +				rules = rules_alldir +			} +		} +	end + +	function digiline_on_punch(pos, node, puncher, pointed_thing) +		if is_protected(pos, puncher) then return end + +		if puncher:get_player_control().sneak then +			local name = puncher:get_player_name() +			player_last_clicked[name] = pos +			local meta = minetest.get_meta(pos) +			local form = "field[channel;Channel;]" +			minetest.show_formspec(name, "ilights:set_channel", form) +		end +	end +end + +-- turn on/off + +function ilights.toggle_light(pos, node, clicker, itemstack, pointed_thing) +	if is_protected(pos, clicker) then return end +	local sep = string.find(node.name, "_o", -5) +	local onoff = string.sub(node.name, sep + 1) +	local newname = string.sub(node.name, 1, sep - 1)..((onoff == "off") and "_on" or "_off") +	minetest.swap_node(pos, {name = newname, param2 = node.param2}) +end +  -- The important stuff!  local lamp_cbox = { @@ -34,32 +151,49 @@ local lamp_cbox = {  	wall_side =   {  -8/16, -11/32, -11/32,  4/16, 11/32, 11/32 }  } -minetest.register_node("ilights:light", { -	description = "Industrial Light", -	drawtype = "mesh", -	mesh = "ilights_lamp.obj", -	tiles = { -		{ name = "ilights_lamp_base.png", color = 0xffffffff }, -		{ name = "ilights_lamp_cage.png", color = 0xffffffff }, -		"ilights_lamp_bulb.png", -		{ name = "ilights_lamp_bulb_base.png", color = 0xffffffff }, -		"ilights_lamp_lens.png" -	}, -	use_texture_alpha = true, -	groups = {cracky=3, ud_param2_colorable = 1}, -	paramtype = "light", -	paramtype2 = "colorwallmounted", -	palette = "unifieddyes_palette_colorwallmounted.png", -	light_source = 14, -	selection_box = lamp_cbox, -	node_box = lamp_cbox, -	after_place_node = function(pos, placer, itemstack, pointed_thing) -		unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing) -	end, -}) +for _, onoff in ipairs({"on", "off"}) do + +	local light_source = (onoff == "on") and default.LIGHT_MAX or nil +	local nici = (onoff == "off") and 1 or nil + +	minetest.register_node("ilights:light_"..onoff, { +		description = "Industrial Light", +		drawtype = "mesh", +		mesh = "ilights_lamp.obj", +		tiles = { +			{ name = "ilights_lamp_base.png", color = 0xffffffff }, +			{ name = "ilights_lamp_cage.png", color = 0xffffffff }, +			"ilights_lamp_bulb_"..onoff..".png", +			{ name = "ilights_lamp_bulb_base.png", color = 0xffffffff }, +			"ilights_lamp_lens_"..onoff..".png" +		}, +		use_texture_alpha = true, +		groups = {cracky=3, ud_param2_colorable = 1, not_in_creative_inventory = nici}, +		paramtype = "light", +		paramtype2 = "colorwallmounted", +		palette = "unifieddyes_palette_colorwallmounted.png", +		light_source = light_source, +		selection_box = lamp_cbox, +		node_box = lamp_cbox, +		after_place_node = function(pos, placer, itemstack, pointed_thing) +			unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing) +		end, +		drop = { +			items = { +				{items = {"ilights:light_on"}, inherit_color = true }, +			} +		}, +		on_rightclick = ilights.toggle_light, +		mesecons =      ilights.mesecons, +		digiline =      ilights.digilines, +		on_punch =      digiline_on_punch +	}) +end + +minetest.register_alias("ilights:light", "ilights:light_on")  minetest.register_craft({ -	output = "ilights:light 3", +	output = "ilights:light_on 3",  	recipe = {  		{ "",                     "default:steel_ingot",  "" },  		{ "",                     "default:glass",        "" }, @@ -68,7 +202,7 @@ minetest.register_craft({  })  unifieddyes.register_color_craft({ -	output = "ilights:light 3", +	output = "ilights:light_on 3",  	palette = "wallmounted",  	neutral_node = "",  	recipe = { @@ -79,7 +213,7 @@ unifieddyes.register_color_craft({  })  unifieddyes.register_color_craft({ -	output = "ilights:light", +	output = "ilights:light_on",  	palette = "wallmounted",  	type = "shapeless",  	neutral_node = "ilights:light", diff --git a/ilights/textures/ilights_lamp_bulb_off.png b/ilights/textures/ilights_lamp_bulb_off.pngBinary files differ new file mode 100644 index 0000000..58048c2 --- /dev/null +++ b/ilights/textures/ilights_lamp_bulb_off.png diff --git a/ilights/textures/ilights_lamp_bulb.png b/ilights/textures/ilights_lamp_bulb_on.pngBinary files differ index 16c67cd..16c67cd 100644 --- a/ilights/textures/ilights_lamp_bulb.png +++ b/ilights/textures/ilights_lamp_bulb_on.png diff --git a/ilights/textures/ilights_lamp_lens_off.png b/ilights/textures/ilights_lamp_lens_off.pngBinary files differ new file mode 100644 index 0000000..750da4f --- /dev/null +++ b/ilights/textures/ilights_lamp_lens_off.png diff --git a/ilights/textures/ilights_lamp_lens.png b/ilights/textures/ilights_lamp_lens_on.pngBinary files differ index 50f2214..50f2214 100644 --- a/ilights/textures/ilights_lamp_lens.png +++ b/ilights/textures/ilights_lamp_lens_on.png | 
