diff --git a/depends.txt b/depends.txt index d2e492a..e9450f3 100644 --- a/depends.txt +++ b/depends.txt @@ -3,5 +3,5 @@ moreores stairs flowers dye - - +pipeworks +mesecons diff --git a/node_breaker.lua b/node_breaker.lua new file mode 100644 index 0000000..4f110ee --- /dev/null +++ b/node_breaker.lua @@ -0,0 +1,69 @@ +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 + diff --git a/screwdriver.lua b/screwdriver.lua index d58d11a..0b81217 100644 --- a/screwdriver.lua +++ b/screwdriver.lua @@ -1,34 +1,43 @@ - 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 = { diff --git a/sonic_screwdriver.lua b/sonic_screwdriver.lua index 07aa9b4..c6efc42 100644 --- a/sonic_screwdriver.lua +++ b/sonic_screwdriver.lua @@ -1,40 +1,49 @@ 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({ diff --git a/textures/technic_nodebreaker_back.png b/textures/technic_nodebreaker_back.png new file mode 100644 index 0000000..0bc8df9 Binary files /dev/null and b/textures/technic_nodebreaker_back.png differ diff --git a/textures/technic_nodebreaker_bottom.png b/textures/technic_nodebreaker_bottom.png new file mode 100644 index 0000000..ff1a2c6 Binary files /dev/null and b/textures/technic_nodebreaker_bottom.png differ diff --git a/textures/technic_nodebreaker_front_off.png b/textures/technic_nodebreaker_front_off.png new file mode 100644 index 0000000..d0f6f55 Binary files /dev/null and b/textures/technic_nodebreaker_front_off.png differ diff --git a/textures/technic_nodebreaker_front_on.png b/textures/technic_nodebreaker_front_on.png new file mode 100644 index 0000000..368ce32 Binary files /dev/null and b/textures/technic_nodebreaker_front_on.png differ diff --git a/textures/technic_nodebreaker_side.png b/textures/technic_nodebreaker_side.png new file mode 100644 index 0000000..aefd7c8 Binary files /dev/null and b/textures/technic_nodebreaker_side.png differ diff --git a/textures/technic_nodebreaker_side1.png b/textures/technic_nodebreaker_side1.png new file mode 100644 index 0000000..8cb8634 Binary files /dev/null and b/textures/technic_nodebreaker_side1.png differ diff --git a/textures/technic_nodebreaker_side2.png b/textures/technic_nodebreaker_side2.png new file mode 100644 index 0000000..c2855d0 Binary files /dev/null and b/textures/technic_nodebreaker_side2.png differ diff --git a/textures/technic_nodebreaker_top.png b/textures/technic_nodebreaker_top.png new file mode 100644 index 0000000..941d333 Binary files /dev/null and b/textures/technic_nodebreaker_top.png differ