Mineclonia/mods/ITEMS/REDSTONE/mesecons_torch/init.lua

161 lines
5.1 KiB
Lua
Raw Normal View History

2015-06-29 17:55:56 +00:00
--MESECON TORCHES
local rotate_torch_rules = function (rules, param2)
2018-01-22 18:58:38 +00:00
if param2 == 1 then
return rules
elseif param2 == 5 then
return mesecon.rotate_rules_right(rules)
2015-06-29 17:55:56 +00:00
elseif param2 == 2 then
return mesecon.rotate_rules_right(mesecon.rotate_rules_right(rules)) --180 degrees
2015-06-29 17:55:56 +00:00
elseif param2 == 4 then
return mesecon.rotate_rules_left(rules)
2015-06-29 17:55:56 +00:00
elseif param2 == 0 then
2018-01-22 18:58:38 +00:00
return rules
2015-06-29 17:55:56 +00:00
else
return rules
end
end
2018-01-22 18:58:38 +00:00
local torch_get_output_rules = function(node)
if node.param2 == 1 then
return {
{ x = -1, y = 0, z = 0 },
{ x = 1, y = 0, z = 0 },
{ x = 0, y = 1, z = 0, spread = true },
{ x = 0, y = 0, z = -1 },
{ x = 0, y = 0, z = 1 },
}
else
return rotate_torch_rules({
{ x = 1, y = 0, z = 0 },
{ x = 0, y = -1, z = 0 },
{ x = 0, y = 1, z = 0, spread = true },
{ x = 0, y = 1, z = 0 },
{ x = 0, y = 0, z = -1 },
{ x = 0, y = 0, z = 1 },
}, node.param2)
end
end
2015-06-29 17:55:56 +00:00
local torch_get_input_rules = function(node)
2018-01-22 18:58:38 +00:00
if node.param2 == 1 then
return {{x = 0, y = -1, z = 0 }}
else
return rotate_torch_rules({{ x = -1, y = 0, z = 0 }}, node.param2)
end
2015-06-29 17:55:56 +00:00
end
2018-01-22 20:11:10 +00:00
local torch_inversion = function(pos, node)
if node.name == "mesecons_torch:mesecon_torch_on" then
minetest.set_node(pos, {name="mesecons_torch:mesecon_torch_off", param2=node.param2})
mesecon.receptor_off(pos, torch_get_output_rules(node))
elseif node.name == "mesecons_torch:mesecon_torch_on_wall" then
minetest.set_node(pos, {name="mesecons_torch:mesecon_torch_off_wall", param2=node.param2})
mesecon.receptor_off(pos, torch_get_output_rules(node))
elseif node.name == "mesecons_torch:mesecon_torch_off" then
minetest.set_node(pos, {name="mesecons_torch:mesecon_torch_on", param2=node.param2})
mesecon.receptor_on(pos, torch_get_output_rules(node))
elseif node.name == "mesecons_torch:mesecon_torch_off_wall" then
minetest.set_node(pos, {name="mesecons_torch:mesecon_torch_on_wall", param2=node.param2})
mesecon.receptor_on(pos, torch_get_output_rules(node))
end
end
2015-06-29 17:55:56 +00:00
minetest.register_craft({
2017-01-05 03:39:36 +00:00
output = 'mesecons_torch:mesecon_torch_on',
2015-06-29 17:55:56 +00:00
recipe = {
2017-01-09 17:45:34 +00:00
{"mesecons:redstone"},
2017-01-31 22:32:56 +00:00
{"mcl_core:stick"},}
2015-06-29 17:55:56 +00:00
})
2017-03-11 21:00:06 +00:00
mcl_torches.register_torch("mesecon_torch_off", "Redstone Torch (off)",
nil,
nil,
"jeija_torches_off.png",
2017-02-10 14:38:53 +00:00
"mcl_torches_torch_floor.obj", "mcl_torches_torch_wall.obj",
{"jeija_torches_off.png"},
0,
{dig_immediate=3, dig_by_water=1, not_in_creative_inventory=1},
mcl_sounds.node_sound_wood_defaults(),
2017-02-10 14:38:53 +00:00
{
2018-01-22 20:11:10 +00:00
mesecons = {
receptor = {
state = mesecon.state.off,
rules = torch_get_output_rules,
},
effector = {
state = mesecon.state.on,
rules = torch_get_input_rules,
action_off = torch_inversion,
},
},
2017-02-10 14:38:53 +00:00
drop = "mesecons_torch:mesecon_torch_on",
_doc_items_create_entry = false,
2017-02-10 14:38:53 +00:00
}
)
2015-06-29 17:55:56 +00:00
2017-03-11 21:00:06 +00:00
mcl_torches.register_torch("mesecon_torch_on", "Redstone Torch",
"Redstone torches are redstone components which invert the signal of surrounding redstone components. An active component will become inactive, and an inactive component will become active. Redstone torches can be used as a quick and easy way to send a redstone to a redstone trail.",
[[Redstone torches can generally be placed at the side and on the top of full solid opaque blocks. The following exceptions apply:
Glass, fence, wall, hopper: Can only be placed on top
Upside-down slab/stair: Can only be placed on top
Soul sand, mob spawner: Placement possible
2017-03-11 21:00:06 +00:00
Glowstone and pistons: No placement possible]],
2017-07-17 14:38:14 +00:00
"jeija_torches_on.png",
2017-02-10 14:38:53 +00:00
"mcl_torches_torch_floor.obj", "mcl_torches_torch_wall.obj",
{"jeija_torches_on.png"},
7,
2017-05-20 02:11:14 +00:00
{dig_immediate=3, dig_by_water=1,},
mcl_sounds.node_sound_wood_defaults(),
2017-02-10 14:38:53 +00:00
{
2018-01-22 20:11:10 +00:00
mesecons = {
receptor = {
state = mesecon.state.on,
rules = torch_get_output_rules
},
effector = {
state = mesecon.state.off,
rules = torch_get_input_rules,
action_on = torch_inversion,
},
}
2017-02-10 14:38:53 +00:00
}
)
2015-06-29 17:55:56 +00:00
minetest.register_node("mesecons_torch:redstoneblock", {
description = "Block of Redstone",
2017-03-11 02:56:29 +00:00
_doc_items_longdesc = "A block of redstone permanently supplies redstone power to its surrounding blocks.",
tiles = {"redstone_redstone_block.png"},
2015-06-29 17:55:56 +00:00
stack_max = 64,
groups = {pickaxey=1},
sounds = mcl_sounds.node_sound_stone_defaults(),
is_ground_content = false,
2015-06-29 17:55:56 +00:00
mesecons = {receptor = {
state = mesecon.state.on,
2018-01-13 00:49:28 +00:00
rules = mesecon.rules.alldirs,
2015-06-29 17:55:56 +00:00
}},
_mcl_blast_resistance = 30,
_mcl_hardness = 5,
2015-06-29 17:55:56 +00:00
})
minetest.register_craft({
output = "mesecons_torch:redstoneblock",
recipe = {
{'mesecons:wire_00000000_off','mesecons:wire_00000000_off','mesecons:wire_00000000_off'},
{'mesecons:wire_00000000_off','mesecons:wire_00000000_off','mesecons:wire_00000000_off'},
{'mesecons:wire_00000000_off','mesecons:wire_00000000_off','mesecons:wire_00000000_off'},
}
})
minetest.register_craft({
output = 'mesecons:wire_00000000_off 9',
recipe = {
{'mesecons_torch:redstoneblock'},
}
})
if minetest.get_modpath("doc") then
doc.add_entry_alias("nodes", "mesecons_torch:mesecon_torch_on", "nodes", "mesecons_torch:mesecon_torch_off")
doc.add_entry_alias("nodes", "mesecons_torch:mesecon_torch_on", "nodes", "mesecons_torch:mesecon_torch_off_wall")
end