| | |
| | | local S = technic.getter |
| | | |
| | | local function deploy_node(inv, slot_name, pos, node, machine_node) |
| | | if node.param2 > 3 then return end |
| | | if node.name ~= "air" then |
| | | if node.name == "ignore" or |
| | | node.name == "default:lava_source" or |
| | |
| | | local function make_on(mark, length) |
| | | return function(pos, node) |
| | | local meta = minetest.get_meta(pos) |
| | | local owner = meta:get_string("owner") |
| | | local inv = meta:get_inventory() |
| | | local dir = vector.new() |
| | | if node.param2 == 3 then dir.x = 1 end |
| | |
| | | |
| | | if node.name == "technic:constructor_mk"..mark.."_off" then |
| | | technic.swap_node(pos, "technic:constructor_mk"..mark.."_on") |
| | | nodeupdate(pos) |
| | | minetest.check_for_falling(pos) |
| | | for i = 1, length do |
| | | place_pos = vector.add(place_pos, dir) |
| | | if owner ~= "" and minetest.is_protected(place_pos, owner) then |
| | | return |
| | | end |
| | | local place_node = minetest.get_node(place_pos) |
| | | deploy_node(inv, "slot"..i, place_pos, place_node, node) |
| | | end |
| | |
| | | return function(pos, node) |
| | | if node.name == "technic:constructor_mk"..mark.."_on" then |
| | | technic.swap_node(pos,"technic:constructor_mk"..mark.."_off") |
| | | nodeupdate(pos) |
| | | minetest.check_for_falling(pos) |
| | | end |
| | | end |
| | | end |
| | | |
| | | local function allow_inventory_put(pos, listname, index, stack, player) |
| | | if stack and minetest.get_item_group(stack:get_name(), "technic_constructor") == 1 then |
| | | return 0 |
| | | end |
| | | return technic.machine_inventory_put(pos, listname, index, stack, player) |
| | | end |
| | | |
| | | local function make_constructor(mark, length) |
| | | minetest.register_node("technic:constructor_mk"..mark.."_off", { |
| | |
| | | "technic_constructor_back.png", |
| | | "technic_constructor_front_off.png"}, |
| | | paramtype2 = "facedir", |
| | | groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, mesecon = 2}, |
| | | groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, |
| | | mesecon = 2, technic_constructor = 1}, |
| | | mesecons = {effector = {action_on = make_on(mark, length)}}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | on_construct = function(pos) |
| | |
| | | for i = 1, length do |
| | | inv:set_size("slot"..i, 1) |
| | | end |
| | | meta:set_string("owner", "?") |
| | | end, |
| | | after_place_node = function(pos, placer) |
| | | local meta = minetest.get_meta(pos) |
| | | meta:set_string("owner", (placer and placer:get_player_name() or "?")) |
| | | end, |
| | | can_dig = function(pos, player) |
| | | local meta = minetest.get_meta(pos) |
| | |
| | | end |
| | | return true |
| | | end, |
| | | allow_metadata_inventory_put = technic.machine_inventory_put, |
| | | allow_metadata_inventory_put = allow_inventory_put, |
| | | allow_metadata_inventory_take = technic.machine_inventory_take, |
| | | allow_metadata_inventory_move = technic.machine_inventory_move, |
| | | on_rotate = screwdriver.rotate_simple |
| | | }) |
| | | |
| | | minetest.register_node("technic:constructor_mk"..mark.."_on", { |
| | |
| | | paramtype2 = "facedir", |
| | | drop = "technic:constructor_mk"..mark.."_off", |
| | | groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, |
| | | mesecon=2, not_in_creative_inventory=1}, |
| | | mesecon=2, not_in_creative_inventory=1, technic_constructor=1}, |
| | | mesecons= {effector = {action_off = make_off(mark)}}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | allow_metadata_inventory_put = technic.machine_inventory_put, |
| | | allow_metadata_inventory_put = allow_inventory_put, |
| | | allow_metadata_inventory_take = technic.machine_inventory_take, |
| | | allow_metadata_inventory_move = technic.machine_inventory_move, |
| | | on_rotate = false |
| | | }) |
| | | end |
| | | |