local S = minetest.get_translator(minetest.get_current_modname()) local default_on_interval = minetest.settings:get("mesecons_clock.default_on_interval", 1) or 1 local default_off_interval = minetest.settings:get("mesecons_clock.default_off_interval", 1) or 1 local meseclock_toggle_timer = function (pos) local timer = minetest.get_node_timer(pos) if timer:is_started() then timer:stop() else local node = minetest.get_node(pos) local nodedef = minetest.registered_nodes[node.name] local meta = minetest.get_meta(pos) local meta_on_interval = meta:get_int("on_time") or default_on_interval local meta_off_interval = meta:get_int("off_time") or default_off_interval if (nodedef.__mesecon_state == "on") then timer:start(meta_on_interval) else timer:start(meta_off_interval) end end end local meseclock_on_timer = function (pos) local node = minetest.get_node(pos) if (mesecon.flipstate(pos, node) == "on") then mesecon.receptor_on(pos) else mesecon.receptor_off(pos) end meseclock_toggle_timer(pos) end local meseclock_make_formspec = function (pos) local meta = minetest.get_meta(pos) if meta:get_string("on_time") == "" then meta:set_string("on_time", "1") end if meta:get_string("off_time") == "" then meta:set_string("off_time", "1") end meta:set_string( "formspec", "size[6,2.5]" .. "field[0.3, 0;3,2;on_time;" .. S("On time (seconds)") .. ":;${on_time}]" .. "field[3.3, 0;3,2;off_time;" .. S("Off time (seconds)") .. ":;${off_time}]" .. "button_exit[0.3,0.5;2,3;;" .. S("Save") .. "]" ) end local meseclock_on_construct = function (pos) meseclock_make_formspec(pos) meseclock_toggle_timer(pos) end local meseclock_on_receive_fields = function (pos, _, fields, sender) if not fields.on_time then return end if minetest.is_protected(pos, sender:get_player_name()) then return end local meta = minetest.get_meta(pos) meta:set_string("on_time", fields.on_time or to_string(default_on_time)) meta:set_string("off_time", fields.off_time or to_string(default_off_time)) meseclock_make_formspec(pos) end local node_defaults = { description = S("Mesecons Clock"), drawtype = "nodebox", use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or nil, walkable = true, selection_box = { type = "fixed", fixed = { -8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }, }, node_box = { type = "fixed", fixed = { { -8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }, { -6/16, -7/16, -6/16, 6/16, -6/16, 6/16 }, }, }, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, is_ground_content = false, sounds = mesecon.node_sound.stone, on_blast = mesecon.on_blastnode, drop = "mesecons_clock:clock_off", on_construct = meseclock_on_construct, on_receive_fields = meseclock_on_receive_fields, on_punch = function (pos, _, clicker) if minetest.is_protected(pos, clicker and clicker:get_player_name() or "") then return end meseclock_toggle_timer(pos) end, on_timer = meseclock_on_timer, } local off_state = { inventory_image = "jeija_gate_off.png^meseclock.png", wield_image = "jeija_gate_off.png^meseclock.png", tiles = { "jeija_microcontroller_bottom.png^meseclock_output_off.png^jeija_gate_off.png^meseclock.png", "jeija_microcontroller_bottom.png^meseclock_output_off.png", "jeija_gate_side.png^jeija_gate_side_output_off.png", "jeija_gate_side.png^jeija_gate_side_output_off.png", "jeija_gate_side.png^jeija_gate_side_output_off.png", "jeija_gate_side.png^jeija_gate_side_output_off.png", }, groups = { bendy = 2, snappy = 1, dig_immediate = 2 }, mesecons = { receptor = { state = mesecon.state.off }, }, } local on_state = { inventory_image = "jeija_gate_on.png^meseclock.png", wield_image = "jeija_gate_on.png^meseclock.png", tiles = { "jeija_microcontroller_bottom.png^meseclock_output_on.png^jeija_gate_on.png^meseclock.png", "jeija_microcontroller_bottom.png^meseclock_output_on.png", "jeija_gate_side.png^jeija_gate_side_output_on.png", "jeija_gate_side.png^jeija_gate_side_output_on.png", "jeija_gate_side.png^jeija_gate_side_output_on.png", "jeija_gate_side.png^jeija_gate_side_output_on.png", }, groups = { bendy = 2, snappy = 1, dig_immediate = 2, not_in_creative_inventory = 1 }, mesecons = { receptor = { state = mesecon.state.on }, }, } mesecon.register_node("mesecons_clock:clock", node_defaults, off_state, on_state) if (minetest.get_modpath("mesecons_blinkyplant")) then minetest.register_craft({ type = "shapeless", output = "mesecons_clock:clock_off", recipe = {"mesecons_blinkyplant:blinky_plant_off", "mesecons_delayer:delayer_off_1"}, }) end minetest.register_craft({ type = "shaped", output = "mesecons_clock:clock_off", recipe = { {"group:mesecon_conductor_craftable", "mesecons_delayer:delayer_off_1", "group:mesecon_conductor_craftable"}, {"group:mesecon_conductor_craftable", "mesecons_delayer:delayer_off_1", "group:mesecon_conductor_craftable"}, }, })