Added NodeBreaker, Fixes to screwdrivers, added mesecons dep
9 files added
3 files modified
| | |
| | | stairs |
| | | flowers |
| | | dye |
| | | |
| | | |
| | | pipeworks |
| | | mesecons |
New file |
| | |
| | | minetest.register_node("technic:nodebreaker_off", { |
| | | description = "Node Breaker", |
| | | tile_images = {"technic_nodebreaker_top.png","technic_nodebreaker_bottom.png","technic_nodebreaker_side2.png","technic_nodebreaker_side1.png", |
| | | "technic_nodebreaker_back.png","technic_nodebreaker_front_off.png"}, |
| | | is_ground_content = true, |
| | | paramtype2 = "facedir", |
| | | groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
| | | |
| | | minetest.register_node("technic:nodebreaker_on", { |
| | | description = "Node Breaker", |
| | | tile_images = {"technic_nodebreaker_top.png","technic_nodebreaker_bottom.png","technic_nodebreaker_side2.png","technic_nodebreaker_side1.png", |
| | | "technic_nodebreaker_back.png","technic_nodebreaker_front_on.png"}, |
| | | is_ground_content = true, |
| | | paramtype2 = "facedir", |
| | | groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
| | | |
| | | mesecon:register_on_signal_on(function(pos, node) |
| | | if node.name == "technic:nodebreaker_off" then |
| | | minetest.env:add_node(pos, {name="technic:nodebreaker_on", param2 = node.param2}) |
| | | break_node (pos,node.param2) |
| | | nodeupdate(pos) |
| | | end |
| | | end) |
| | | |
| | | mesecon:register_on_signal_off(function(pos, node) |
| | | if node.name == "technic:nodebreaker_on" then |
| | | minetest.env:add_node(pos, {name="technic:nodebreaker_off", param2 = node.param2}) |
| | | nodeupdate(pos) |
| | | end |
| | | end) |
| | | |
| | | mesecon:register_effector("technic:nodebreaker_on", "technic:nodebreaker_off") |
| | | |
| | | function break_node (pos,n_param) |
| | | local pos1={} |
| | | local pos2={} |
| | | pos1.x=pos.x |
| | | pos1.y=pos.y |
| | | pos1.z=pos.z |
| | | pos2.x=pos.x |
| | | pos2.y=pos.y |
| | | pos2.z=pos.z |
| | | |
| | | --param2 3=x+ 1=x- 2=z+ 0=z- |
| | | if n_param==3 then print ("sru") pos2.x=pos2.x+1 pos1.x=pos1.x-1 end |
| | | if n_param==2 then pos2.z=pos2.z+1 pos1.z=pos1.z-1 end |
| | | if n_param==1 then pos2.x=pos2.x-1 pos1.x=pos1.x+1 end |
| | | if n_param==0 then pos2.z=pos2.z-1 pos1.x=pos1.z+1 end |
| | | |
| | | local node=minetest.env:get_node(pos2) |
| | | if node.name == "air" then return nil end |
| | | if node.name == "default:lava_source" then return nil end |
| | | if node.name == "default:lava_flowing" then return nil end |
| | | if node.name == "default:water_source" then minetest.env:remove_node(pos2) return nil end |
| | | if node.name == "default:water_flowing" then minetest.env:remove_node(pos2) return nil end |
| | | if node.name == "ignore" then minetest.env:remove_node(pos2) return nil end |
| | | local drops = minetest.get_node_drops(node.name, "default:pick_mese") |
| | | local _, dropped_item |
| | | for _, dropped_item in ipairs(drops) do |
| | | minetest.item_drop(dropped_item, "", pos1) |
| | | end |
| | | minetest.env:remove_node(pos2) |
| | | |
| | | end |
| | | |
| | |
| | | minetest.register_tool("technic:screwdriver", { |
| | | minetest.register_tool("technic:screwdriver", { |
| | | description = "Screwdriver", |
| | | inventory_image = "technic_screwdriver.png", |
| | | on_use = function(itemstack, user, pointed_thing) |
| | | -- Must be pointing to facedir applicable node |
| | | if pointed_thing.type~="node" then return end |
| | | local pos=minetest.get_pointed_thing_position(pointed_thing,above) |
| | | local node=minetest.env:get_node(pos) |
| | | local node_name=node.name |
| | | if node.param2==nil then return end |
| | | -- Get ready to set the param2 |
| | | local pos=minetest.get_pointed_thing_position(pointed_thing,above) |
| | | local node=minetest.env:get_node(pos) |
| | | local node_name=node.name |
| | | if minetest.registered_nodes[node_name].paramtype2 == "facedir" or minetest.registered_nodes[node_name].paramtype2 == "wallmounted" then |
| | | if node.param2==nil then return end |
| | | -- Get ready to set the param2 |
| | | local n = node.param2 |
| | | if minetest.registered_nodes[node_name].paramtype2 == "facedir" then |
| | | n = n+1 |
| | | if n == 4 then n = 0 end |
| | | else |
| | | n = n+1 |
| | | if n == 6 then n = 0 end |
| | | end |
| | | -- hacky_swap_node, unforunatly. |
| | | local meta = minetest.env:get_meta(pos) |
| | | local meta0 = meta:to_table() |
| | | node.param2 = n |
| | | minetest.env:set_node(pos,node) |
| | | minetest.env:set_node(pos,node) |
| | | meta = minetest.env:get_meta(pos) |
| | | meta:from_table(meta0) |
| | | local item=itemstack:to_table() |
| | | local item_wear=tonumber((item["wear"])) |
| | | item_wear=item_wear+819 |
| | | if item_wear>65535 then itemstack:clear() return itemstack end |
| | | item["wear"]=tostring(item_wear) |
| | | itemstack:replace(item) |
| | | return itemstack |
| | | end, |
| | | local item=itemstack:to_table() |
| | | local item_wear=tonumber((item["wear"])) |
| | | item_wear=item_wear+819 |
| | | if item_wear>65535 then itemstack:clear() return itemstack end |
| | | item["wear"]=tostring(item_wear) |
| | | itemstack:replace(item) |
| | | return itemstack |
| | | else |
| | | return itemstack |
| | | end |
| | | end, |
| | | }) |
| | | |
| | | |
| | | minetest.register_craft({ |
| | | output = "technic:screwdriver", |
| | | recipe = { |
| | |
| | | sonic_screwdriver_max_charge=15000 |
| | | |
| | | minetest.register_tool("technic:sonic_screwdriver", { |
| | | |
| | | minetest.register_tool("technic:sonic_screwdriver", { |
| | | description = "Sonic Screwdriver", |
| | | inventory_image = "technic_sonic_screwdriver.png", |
| | | on_use = function(itemstack, user, pointed_thing) |
| | | -- Must be pointing to facedir applicable node |
| | | if pointed_thing.type~="node" then return end |
| | | local pos=minetest.get_pointed_thing_position(pointed_thing,above) |
| | | local node=minetest.env:get_node(pos) |
| | | local node_name=node.name |
| | | if node.param2==nil then return end |
| | | local pos=minetest.get_pointed_thing_position(pointed_thing,above) |
| | | local node=minetest.env:get_node(pos) |
| | | local node_name=node.name |
| | | if minetest.registered_nodes[node_name].paramtype2 == "facedir" or minetest.registered_nodes[node_name].paramtype2 == "wallmounted" then |
| | | if node.param2==nil then return end |
| | | item=itemstack:to_table() |
| | | local charge=tonumber((item["wear"])) |
| | | if charge ==0 then charge =65535 end |
| | | charge=get_RE_item_load(charge,sonic_screwdriver_max_charge) |
| | | if charge-100>0 then |
| | | minetest.sound_play("technic_sonic_screwdriver", {pos = pos, gain = 0.5, max_hear_distance = 10,}) |
| | | local n = node.param2 |
| | | n = n+1 |
| | | if n == 4 then n = 0 end |
| | | -- hacky_swap_node, unforunatly. |
| | | local meta = minetest.env:get_meta(pos) |
| | | local meta0 = meta:to_table() |
| | | node.param2 = n |
| | | minetest.env:set_node(pos,node) |
| | | meta = minetest.env:get_meta(pos) |
| | | meta:from_table(meta0) |
| | | |
| | | charge =charge-100; |
| | | charge=set_RE_item_load(charge,sonic_screwdriver_max_charge) |
| | | item["wear"]=tostring(charge) |
| | | itemstack:replace(item) |
| | | end |
| | | return itemstack |
| | | end, |
| | | |
| | | local charge=tonumber((item["wear"])) |
| | | if charge ==0 then charge =65535 end |
| | | charge=get_RE_item_load(charge,sonic_screwdriver_max_charge) |
| | | if charge-100>0 then |
| | | minetest.sound_play("technic_sonic_screwdriver", {pos = pos, gain = 0.5, max_hear_distance = 10,}) |
| | | local n = node.param2 |
| | | if minetest.registered_nodes[node_name].paramtype2 == "facedir" then |
| | | n = n+1 |
| | | if n == 4 then n = 0 end |
| | | else |
| | | n = n+1 |
| | | if n == 6 then n = 0 end |
| | | end |
| | | -- hacky_swap_node, unforunatly. |
| | | local meta = minetest.env:get_meta(pos) |
| | | local meta0 = meta:to_table() |
| | | node.param2 = n |
| | | minetest.env:set_node(pos,node) |
| | | meta = minetest.env:get_meta(pos) |
| | | meta:from_table(meta0) |
| | | |
| | | charge =charge-100; |
| | | charge=set_RE_item_load(charge,sonic_screwdriver_max_charge) |
| | | item["wear"]=tostring(charge) |
| | | itemstack:replace(item) |
| | | end |
| | | return itemstack |
| | | else |
| | | return itemstack |
| | | end |
| | | end, |
| | | |
| | | }) |
| | | |
| | | minetest.register_craft({ |