+++ /dev/null
-alloy_recipes ={}
-
-registered_recipes_count=1
-
-function register_alloy_recipe (string1,count1, string2,count2, string3,count3)
-alloy_recipes[registered_recipes_count]={}
-alloy_recipes[registered_recipes_count].src1_name=string1
-alloy_recipes[registered_recipes_count].src1_count=count1
-alloy_recipes[registered_recipes_count].src2_name=string2
-alloy_recipes[registered_recipes_count].src2_count=count2
-alloy_recipes[registered_recipes_count].dst_name=string3
-alloy_recipes[registered_recipes_count].dst_count=count3
-registered_recipes_count=registered_recipes_count+1
-alloy_recipes[registered_recipes_count]={}
-alloy_recipes[registered_recipes_count].src1_name=string2
-alloy_recipes[registered_recipes_count].src1_count=count2
-alloy_recipes[registered_recipes_count].src2_name=string1
-alloy_recipes[registered_recipes_count].src2_count=count1
-alloy_recipes[registered_recipes_count].dst_name=string3
-alloy_recipes[registered_recipes_count].dst_count=count3
-registered_recipes_count=registered_recipes_count+1
-end
-
-register_alloy_recipe ("technic:copper_dust",3, "technic:tin_dust",1, "technic:bronze_dust",4)
-register_alloy_recipe ("moreores:copper_ingot",3, "moreores:tin_ingot",1, "moreores:bronze_ingot",4)
-register_alloy_recipe ("technic:iron_dust",3, "technic:chromium_dust",1, "technic:stainless_steel_dust",4)
-register_alloy_recipe ("default:steel_ingot",3, "technic:chromium_ingot",1, "technic:stainless_steel_ingot",4)
-register_alloy_recipe ("technic:copper_dust",2, "technic:zinc_dust",1, "technic:brass_dust",3)
-register_alloy_recipe ("technic:copper_ingot",2, "technic:zinc_ingot",1, "technic:brass_ingot",3)
-register_alloy_recipe ("default:sand",2, "technic:coal_dust",2, "technic:silicon_wafer",1)
-register_alloy_recipe ("technic:silicon_wafer",1, "technic:mithril_dust",1, "technic:doped_silicon_wafer",1)
-
-
-minetest.register_craft({
- output = 'technic:alloy_furnace',
- recipe = {
- {'default:brick', 'default:brick', 'default:brick'},
- {'default:brick', '', 'default:brick'},
- {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
- }
-})
-
-
-alloy_furnace_formspec =
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "list[current_name;src2;3,2;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]"..
- "label[0,0;Electric Alloy Furnace]"..
- "label[1,3;Power level]"
-
-minetest.register_node("technic:alloy_furnace", {
- description = "Electric alloy furnace",
- tiles = {"technic_alloy_furnace_top.png", "technic_machine_bottom.png", "technic_alloy_furnace_side.png",
- "technic_alloy_furnace_side.png", "technic_alloy_furnace_side.png", "technic_alloy_furnace_front.png"},
- paramtype2 = "facedir",
- groups = {cracky=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_stone_defaults(),
- technic_power_machine=1,
- internal_EU_buffer=0;
- interal_EU_buffer_size=2000;
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_float("technic_power_machine", 1)
- meta:set_string("formspec", alloy_furnace_formspec)
- meta:set_string("infotext", "Electric Alloy furnace")
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("src2", 1)
- inv:set_size("dst", 4)
- local EU_used = 0
- local furnace_is_cookin = 0
- local cooked = nil
- meta:set_float("internal_EU_buffer",0)
- meta:set_float("internal_EU_buffer_size",2000)
-
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false end
- if not inv:is_empty("src") then
- return false end
- if not inv:is_empty("src2") then
- return false end
- return true
- end,
-})
-
-minetest.register_node("technic:alloy_furnace_active", {
- description = "Alloy Furnace",
- tiles = {"technic_alloy_furnace_top.png", "technic_machine_bottom.png", "technic_alloy_furnace_side.png",
- "technic_alloy_furnace_side.png", "technic_alloy_furnace_side.png", "technic_alloy_furnace_front_active.png"},
- paramtype2 = "facedir",
- light_source = 8,
- drop = "technic:alloy_furnace",
- groups = {cracky=2, not_in_creative_inventory=1},
- legacy_facedir_simple = true,
- sounds = default.node_sound_stone_defaults(),
- internal_EU_buffer=0;
- interal_EU_buffer_size=2000;
- technic_power_machine=1,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-minetest.register_abm({
- nodenames = {"technic:alloy_furnace","technic:alloy_furnace_active"},
- interval = 1,
- chance = 1,
-
- action = function(pos, node, active_object_count, active_object_count_wider)
-
- local meta = minetest.env:get_meta(pos)
- internal_EU_buffer=meta:get_float("internal_EU_buffer")
- internal_EU_buffer_size=meta:get_float("internal_EU_buffer")
- local load = math.floor(internal_EU_buffer/2000 * 100)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
- (load)..":technic_power_meter_fg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "list[current_name;src2;3,2;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]"..
- "label[0,0;Electric Alloy Furnace]"..
- "label[1,3;Power level]")
-
- local inv = meta:get_inventory()
-
- local furnace_is_cookin = meta:get_int("furnace_is_cookin")
-
-
- local srclist = inv:get_list("src")
- local srclist2 = inv:get_list("src2")
-
- srcstack = inv:get_stack("src", 1)
- if srcstack then src_item1=srcstack:to_table() end
- srcstack = inv:get_stack("src2", 1)
- if srcstack then src_item2=srcstack:to_table() end
- dst_index=nil
-
- if src_item1 and src_item2 then
- dst_index=get_cook_result(src_item1,src_item2)
- end
-
-
- if (furnace_is_cookin == 1) then
- if internal_EU_buffer>=150 then
- internal_EU_buffer=internal_EU_buffer-150;
- meta:set_float("internal_EU_buffer",internal_EU_buffer)
- meta:set_float("src_time", meta:get_float("src_time") + 1)
- if dst_index and meta:get_float("src_time") >= 4 then
- -- check if there's room for output in "dst" list
- dst_stack={}
- dst_stack["name"]=alloy_recipes[dst_index].dst_name
- dst_stack["count"]=alloy_recipes[dst_index].dst_count
- if inv:room_for_item("dst",dst_stack) then
- -- Put result in "dst" list
- inv:add_item("dst",dst_stack)
- -- take stuff from "src" list
- for i=1,alloy_recipes[dst_index].src1_count,1 do
- srcstack = inv:get_stack("src", 1)
- srcstack:take_item()
- inv:set_stack("src", 1, srcstack)
- end
- for i=1,alloy_recipes[dst_index].src2_count,1 do
- srcstack = inv:get_stack("src2", 1)
- srcstack:take_item()
- inv:set_stack("src2", 1, srcstack)
- end
-
-
- else
- print("Furnace inventory full!")
- end
- meta:set_string("src_time", 0)
- end
- end
- end
-
-
-
-
- if dst_index and meta:get_int("furnace_is_cookin")==0 then
- hacky_swap_node(pos,"technic:alloy_furnace_active")
- meta:set_string("infotext","Electric Alloy Furnace active")
- meta:set_int("furnace_is_cookin",1)
- meta:set_string("src_time", 0)
- return
- end
-
-
- if meta:get_int("furnace_is_cookin")==0 or dst_index==nil then
- hacky_swap_node(pos,"technic:alloy_furnace")
- meta:set_string("infotext","Electric Alloy Furnace inactive")
- meta:set_int("furnace_is_cookin",0)
- meta:set_string("src_time", 0)
- end
-
-end,
-})
-
-function get_cook_result(src_item1, src_item2)
-local counter=registered_recipes_count-1
-for i=1, counter,1 do
-if alloy_recipes[i].src1_name==src_item1["name"] and
- alloy_recipes[i].src2_name==src_item2["name"] and
- alloy_recipes[i].src1_count<=src_item1["count"] and
- alloy_recipes[i].src2_count<=src_item2["count"]
- then return i end
-end
-return nil
-end
-
-
---coal driven alloy furnace:
-
-minetest.register_craft({
- output = 'technic:coal_alloy_furnace',
- recipe = {
- {'default:brick', 'default:brick', 'default:brick'},
- {'default:brick', '', 'default:brick'},
- {'default:brick', 'default:brick', 'default:brick'},
- }
-})
-
-
-coal_alloy_furnace_formspec =
- "size[8,9]"..
- "label[0,0;Alloy Furnace]"..
- "image[2,2;1,1;default_furnace_fire_bg.png]"..
- "list[current_name;fuel;2,3;1,1;]"..
- "list[current_name;src;2,1;1,1;]"..
- "list[current_name;src2;3,1;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]"
-
-minetest.register_node("technic:coal_alloy_furnace", {
- description = "Alloy Furnace",
- tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", "technic_coal_alloy_furnace_side.png",
- "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front.png"},
- paramtype2 = "facedir",
- groups = {cracky=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_stone_defaults(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec", coal_alloy_furnace_formspec)
- meta:set_string("infotext", "Alloy Furnace")
- local inv = meta:get_inventory()
- inv:set_size("fuel", 1)
- inv:set_size("src", 1)
- inv:set_size("src2", 1)
- inv:set_size("dst", 4)
- local furnace_is_cookin = 0
- local dst_index = nil
-
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not (inv:is_empty("fuel") or inv:is_empty("dst") or inv:is_empty("src") or inv:is_empty("src2") )then
- return false
- end
- return true
- end,
-})
-
-minetest.register_node("technic:coal_alloy_furnace_active", {
- description = "Alloy Furnace",
- tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", "technic_coal_alloy_furnace_side.png",
- "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front_active.png"},
- paramtype2 = "facedir",
- light_source = 8,
- drop = "technic:coal_alloy_furnace",
- groups = {cracky=2, not_in_creative_inventory=1},
- legacy_facedir_simple = true,
- sounds = default.node_sound_stone_defaults(),
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not (inv:is_empty("fuel") or inv:is_empty("dst") or inv:is_empty("src") or inv:is_empty("src2") )then
- return false
- end
- return true
- end,
-})
-
-minetest.register_abm({
- nodenames = {"technic:coal_alloy_furnace","technic:coal_alloy_furnace_active"},
- interval = 1,
- chance = 1,
-
- action = function(pos, node, active_object_count, active_object_count_wider)
- local meta = minetest.env:get_meta(pos)
- for i, name in ipairs({
- "fuel_totaltime",
- "fuel_time",
- "src_totaltime",
- "src_time"
- }) do
- if meta:get_string(name) == "" then
- meta:set_float(name, 0.0)
- end
- end
-
- local inv = meta:get_inventory()
-
- srcstack = inv:get_stack("src", 1)
- if srcstack then src_item1=srcstack:to_table() end
- srcstack = inv:get_stack("src2", 1)
- if srcstack then src_item2=srcstack:to_table() end
- dst_index=nil
-
- if src_item1 and src_item2 then
- dst_index=get_cook_result(src_item1,src_item2)
- end
-
- local was_active = false
-
- if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
- was_active = true
- meta:set_float("fuel_time", meta:get_float("fuel_time") + 1)
- meta:set_float("src_time", meta:get_float("src_time") + 1)
- if dst_index and meta:get_float("src_time") >= 5 then
- -- check if there's room for output in "dst" list
- dst_stack={}
- dst_stack["name"]=alloy_recipes[dst_index].dst_name
- dst_stack["count"]=alloy_recipes[dst_index].dst_count
- if inv:room_for_item("dst",dst_stack) then
- -- Put result in "dst" list
- inv:add_item("dst", dst_stack)
- -- take stuff from "src" list
- for i=1,alloy_recipes[dst_index].src1_count,1 do
- srcstack = inv:get_stack("src", 1)
- srcstack:take_item()
- inv:set_stack("src", 1, srcstack)
- end
- for i=1,alloy_recipes[dst_index].src2_count,1 do
- srcstack = inv:get_stack("src2", 1)
- srcstack:take_item()
- inv:set_stack("src2", 1, srcstack)
- end
- else
- print("Furnace inventory full!")
- end
- meta:set_string("src_time", 0)
- end
- end
-
- if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
- local percent = math.floor(meta:get_float("fuel_time") /
- meta:get_float("fuel_totaltime") * 100)
- meta:set_string("infotext","Furnace active: "..percent.."%")
- hacky_swap_node(pos,"technic:coal_alloy_furnace_active")
- meta:set_string("formspec",
- "size[8,9]"..
- "label[0,0;Electric Alloy Furnace]"..
- "image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:"..
- (100-percent)..":default_furnace_fire_fg.png]"..
- "list[current_name;fuel;2,3;1,1;]"..
- "list[current_name;src;2,1;1,1;]"..
- "list[current_name;src2;3,1;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]")
- return
- end
-
- local fuel = nil
- local fuellist = inv:get_list("fuel")
-
- srcstack = inv:get_stack("src", 1)
- if srcstack then src_item1=srcstack:to_table() end
- srcstack = inv:get_stack("src2", 1)
- if srcstack then src_item2=srcstack:to_table() end
- dst_index=nil
-
- if src_item1 and src_item2 then
- dst_index=get_cook_result(src_item1,src_item2)
- end
-
-
- if fuellist then
- fuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
- end
-
- if fuel.time <= 0 then
- meta:set_string("infotext","Furnace out of fuel")
- hacky_swap_node(pos,"technic:coal_alloy_furnace")
- meta:set_string("formspec", coal_alloy_furnace_formspec)
- return
- end
-
- if dst_index==nil then
- if was_active then
- meta:set_string("infotext","Furnace is empty")
- hacky_swap_node(pos,"technic:coal_alloy_furnace")
- meta:set_string("formspec", coal_alloy_furnace_formspec)
- end
- return
- end
-
- meta:set_string("fuel_totaltime", fuel.time)
- meta:set_string("fuel_time", 0)
-
- local stack = inv:get_stack("fuel", 1)
- stack:take_item()
- inv:set_stack("fuel", 1, stack)
-
-end,
-})
\ No newline at end of file
+++ /dev/null
-power_tools ={}
-
-registered_power_tools_count=1
-
-function register_power_tool (string1,max_charge)
-power_tools[registered_power_tools_count]={}
-power_tools[registered_power_tools_count].tool_name=string1
-power_tools[registered_power_tools_count].max_charge=max_charge
-registered_power_tools_count=registered_power_tools_count+1
-end
-
-register_power_tool ("technic:mining_drill",60000)
-register_power_tool ("technic:chainsaw",30000)
-register_power_tool ("technic:laser_mk1",40000)
-register_power_tool ("technic:battery",10000)
-register_power_tool ("technic:sonic_screwdriver",15000)
-register_power_tool ("technic:flashlight",30000)
-register_power_tool ("technic:red_energy_crystal",100000)
-register_power_tool ("technic:green_energy_crystal",250000)
-register_power_tool ("technic:blue_energy_crystal",500000)
-
-minetest.register_alias("battery", "technic:battery")
-minetest.register_alias("battery_box", "technic:battery_box")
-
-minetest.register_craft({
- output = 'technic:battery 1',
- recipe = {
- {'default:wood', 'moreores:copper_ingot', 'default:wood'},
- {'default:wood', 'moreores:tin_ingot', 'default:wood'},
- {'default:wood', 'moreores:copper_ingot', 'default:wood'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:battery_box 1',
- recipe = {
- {'technic:battery', 'default:wood', 'technic:battery'},
- {'technic:battery', 'moreores:copper_ingot', 'technic:battery'},
- {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
- }
-})
-
-
-minetest.register_tool("technic:battery",
-{description = "RE Battery",
-inventory_image = "technic_battery.png",
-tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}})
-
-minetest.register_craftitem("technic:battery_box", {
- description = "Battery box",
- stack_max = 99,
-})
-
-
-
-battery_box_formspec =
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "image[4,1;1,1;technic_battery_reload.png]"..
- "list[current_name;dst;5,1;1,1;]"..
- "label[0,0;Battery box]"..
- "label[3,0;Charge]"..
- "label[5,0;Discharge]"..
- "label[1,3;Power level]"..
- "list[current_player;main;0,5;8,4;]"
-
-minetest.register_node("technic:battery_box", {
- description = "Battery box",
- tiles = {"technic_battery_box_top.png", "technic_battery_box_bottom.png", "technic_battery_box_side0.png",
- "technic_battery_box_side0.png", "technic_battery_box_side0.png", "technic_battery_box_side0.png"},
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
- technic_power_machine=1,
- last_side_shown=0,
- drop="technic:battery_box",
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("infotext", "Battery box")
- meta:set_float("technic_power_machine", 1)
- meta:set_string("formspec", battery_box_formspec)
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("dst", 1)
- battery_charge = 0
- max_charge = 60000
- last_side_shown=0
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-
-for i=1,8,1 do
-minetest.register_node("technic:battery_box"..i, {
- description = "Battery box",
- tiles = {"technic_battery_box_top.png", "technic_battery_box_bottom.png", "technic_battery_box_side0.png^technic_power_meter"..i..".png",
- "technic_battery_box_side0.png^technic_power_meter"..i..".png", "technic_battery_box_side0.png^technic_power_meter"..i..".png", "technic_battery_box_side0.png^technic_power_meter"..i..".png"},
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
- sounds = default.node_sound_wood_defaults(),
- technic_power_machine=1,
- last_side_shown=0,
- drop="technic:battery_box",
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("infotext", "Battery box")
- meta:set_float("technic_power_machine", 1)
- meta:set_string("formspec", battery_box_formspec)
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("dst", 1)
- battery_charge = 0
- max_charge = 60000
- last_side_shown=0
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-end
-
-
-LV_nodes_visited = {}
-
-function get_RE_item_load (load1,max_load)
-if load1==0 then load1=65535 end
-local temp = 65536-load1
-temp= temp/65535*max_load
-return math.floor(temp + 0.5)
-end
-
-function set_RE_item_load (load1,max_load)
-if load1 == 0 then return 65535 end
-local temp=load1/max_load*65535
-temp=65536-temp
-return math.floor(temp)
-end
-
-function set_RE_wear (item_stack,load1,max_load)
-local temp=65536-math.floor(load1/max_load*65535)
-item_stack["wear"]=tostring(temp)
-return item_stack
-end
-
-minetest.register_abm({
- nodenames = {"technic:battery_box","technic:battery_box1","technic:battery_box2","technic:battery_box3","technic:battery_box4",
- "technic:battery_box5","technic:battery_box6","technic:battery_box7","technic:battery_box8"
- },
- interval = 1,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
- local meta = minetest.env:get_meta(pos)
- charge= meta:get_int("battery_charge")
- max_charge= 60000
- local i=math.ceil((charge/max_charge)*8)
- if i>8 then i=8 end
- j=meta:get_float("last_side_shown")
- if i~=j then
- if i>0 then hacky_swap_node(pos,"technic:battery_box"..i)
- elseif i==0 then hacky_swap_node(pos,"technic:battery_box") end
- meta:set_float("last_side_shown",i)
- end
-
---loading registered power tools
- local inv = meta:get_inventory()
- if inv:is_empty("src")==false then
- srcstack = inv:get_stack("src", 1)
- src_item=srcstack:to_table()
- item_meta=srcstack:get_metadata()
- if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before tool/item
-
- local item_max_charge = nil
- local counter=registered_power_tools_count-1
- for i=1, counter,1 do
- if power_tools[i].tool_name==src_item["name"] then
- item_max_charge=power_tools[i].max_charge
- end
- end
- if item_max_charge then
- load1=tonumber((src_item["metadata"]))
- load_step=1000
- if load1<item_max_charge and charge>0 then
- if charge-load_step<0 then load_step=charge end
- if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end
- load1=load1+load_step
- charge=charge-load_step
- set_RE_wear(src_item,load1,item_max_charge)
- src_item["metadata"]=tostring(load1)
- inv:set_stack("src", 1, src_item)
- end
- meta:set_int("battery_charge",charge)
- end
- end
-
--- dischargin registered power tools
- if inv:is_empty("dst") == false then
- srcstack = inv:get_stack("dst", 1)
- src_item=srcstack:to_table()
- local item_max_charge = nil
- local counter=registered_power_tools_count-1
- for i=1, counter,1 do
- if power_tools[i].tool_name==src_item["name"] then
- item_max_charge=power_tools[i].max_charge
- end
- end
- if item_max_charge then
- if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before battery/crystal
- local load1=tonumber((src_item["metadata"]))
- load_step=1000
- if load1>0 and charge<max_charge then
- if charge+load_step>max_charge then load_step=max_charge-charge end
- if load1-load_step<0 then load_step=load1 end
- load1=load1-load_step
- charge=charge+load_step
- set_RE_wear(src_item,load1,item_max_charge)
- src_item["metadata"]=tostring(load1)
- inv:set_stack("dst", 1, src_item)
- end
- end
- end
-
- meta:set_int("battery_charge",charge)
-
- local load = math.floor(charge/60000 * 100)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
- (load)..":technic_power_meter_fg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "image[4,1;1,1;technic_battery_reload.png]"..
- "list[current_name;dst;5,1;1,1;]"..
- "label[0,0;Battery box]"..
- "label[3,0;Charge]"..
- "label[5,0;Discharge]"..
- "label[1,3;Power level]"..
- "list[current_player;main;0,5;8,4;]")
-
- local pos1={}
-
- pos1.y=pos.y-1
- pos1.x=pos.x
- pos1.z=pos.z
-
-
- meta1 = minetest.env:get_meta(pos1)
- if meta1:get_float("cablelike")~=1 then return end
-
- local LV_nodes = {}
- local PR_nodes = {}
- local RE_nodes = {}
-
- LV_nodes[1]={}
- LV_nodes[1].x=pos1.x
- LV_nodes[1].y=pos1.y
- LV_nodes[1].z=pos1.z
- LV_nodes[1].visited=false
-
-
-table_index=1
- repeat
- check_LV_node (PR_nodes,RE_nodes,LV_nodes,table_index)
- table_index=table_index+1
- if LV_nodes[table_index]==nil then break end
- until false
-
-
-local pos1={}
-i=1
- repeat
- if PR_nodes[i]==nil then break end -- gettin power from all connected producers
- pos1.x=PR_nodes[i].x
- pos1.y=PR_nodes[i].y
- pos1.z=PR_nodes[i].z
- local meta1 = minetest.env:get_meta(pos1)
- local internal_EU_buffer=meta1:get_float("internal_EU_buffer")
- if charge<max_charge then
- charge_to_take=200
- if internal_EU_buffer-charge_to_take<=0 then
- charge_to_take=internal_EU_buffer
- end
- if charge_to_take>0 then
- charge=charge+charge_to_take
- internal_EU_buffer=internal_EU_buffer-charge_to_take
- meta1:set_float("internal_EU_buffer",internal_EU_buffer)
- end
- end
- i=i+1
- until false
-
-if charge>max_charge then charge=max_charge end
-
-i=1
- repeat
- if RE_nodes[i]==nil then break end
- pos1.x=RE_nodes[i].x -- loading all conected machines buffers
- pos1.y=RE_nodes[i].y
- pos1.z=RE_nodes[i].z
- local meta1 = minetest.env:get_meta(pos1)
- local internal_EU_buffer=meta1:get_float("internal_EU_buffer")
- local internal_EU_buffer_size=meta1:get_float("internal_EU_buffer_size")
-
- local charge_to_give=200
- if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
- charge_to_give=internal_EU_buffer_size-internal_EU_buffer
- end
- if charge-charge_to_give<0 then charge_to_give=charge end
-
- internal_EU_buffer=internal_EU_buffer+charge_to_give
- meta1:set_float("internal_EU_buffer",internal_EU_buffer)
- charge=charge-charge_to_give;
-
- i=i+1
- until false
- charge=math.floor(charge)
- charge_string=tostring(charge)
- meta:set_string("infotext", "Battery box: "..charge_string.."/"..max_charge);
- meta:set_int("battery_charge",charge)
-
-end
-})
-
-function add_new_cable_node (LV_nodes,pos1)
-local i=1
- repeat
- if LV_nodes[i]==nil then break end
- if pos1.x==LV_nodes[i].x and pos1.y==LV_nodes[i].y and pos1.z==LV_nodes[i].z then return false end
- i=i+1
- until false
-LV_nodes[i]={}
-LV_nodes[i].x=pos1.x
-LV_nodes[i].y=pos1.y
-LV_nodes[i].z=pos1.z
-LV_nodes[i].visited=false
-return true
-end
-
-function check_LV_node (PR_nodes,RE_nodes,LV_nodes,i)
- local pos1={}
- pos1.x=LV_nodes[i].x
- pos1.y=LV_nodes[i].y
- pos1.z=LV_nodes[i].z
- LV_nodes[i].visited=true
- new_node_added=false
-
- pos1.x=pos1.x+1
- check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
- pos1.x=pos1.x-2
- check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
- pos1.x=pos1.x+1
-
- pos1.y=pos1.y+1
- check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
- pos1.y=pos1.y-2
- check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
- pos1.y=pos1.y+1
-
- pos1.z=pos1.z+1
- check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
- pos1.z=pos1.z-2
- check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
- pos1.z=pos1.z+1
-return new_node_added
-end
-
-function check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
-meta = minetest.env:get_meta(pos1)
-if meta:get_float("cablelike")==1 then new_node_added=add_new_cable_node(LV_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:solar_panel" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:generator" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:generator_active" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:geothermal" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:geothermal_active" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:water_mill" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:water_mill_active" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:electric_furnace" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:electric_furnace_active" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:alloy_furnace" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:alloy_furnace_active" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:tool_workshop" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:music_player" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:grinder" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
-end
-
\ No newline at end of file
+++ /dev/null
-minetest.register_craft({
- output = 'technic:mv_battery_box 1',
- recipe = {
- {'technic:battery_box', 'technic:battery_box', 'technic:battery_box'},
- {'technic:battery_box', 'technic:mv_transformer', 'technic:battery_box'},
- {'', 'technic:mv_cable', ''},
- }
-})
-
-
-
-mv_battery_box_formspec =
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "image[4,1;1,1;technic_battery_reload.png]"..
- "list[current_name;dst;5,1;1,1;]"..
- "label[0,0;MV_Battery box]"..
- "label[3,0;Charge]"..
- "label[5,0;Discharge]"..
- "label[1,3;Power level]"..
- "list[current_player;main;0,5;8,4;]"
-
-minetest.register_node("technic:mv_battery_box", {
- description = "MV Battery Box",
- tiles = {"technic_mv_battery_box_top.png", "technic_mv_battery_box_bottom.png", "technic_mv_battery_box_side0.png",
- "technic_mv_battery_box_side0.png", "technic_mv_battery_box_side0.png", "technic_mv_battery_box_side0.png"},
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
- technic_mv_power_machine=1,
- last_side_shown=0,
- drop="technic:mv_battery_box",
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("infotext", "MV Battery box")
- meta:set_float("technic_mv_power_machine", 1)
- meta:set_string("formspec", battery_box_formspec)
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("dst", 1)
- battery_charge = 0
- max_charge = 300000
- last_side_shown=0
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-
-for i=1,8,1 do
-minetest.register_node("technic:mv_battery_box"..i, {
- description = "MV Battery Box",
- tiles = {"technic_mv_battery_box_top.png", "technic_mv_battery_box_bottom.png", "technic_mv_battery_box_side0.png^technic_power_meter"..i..".png",
- "technic_mv_battery_box_side0.png^technic_power_meter"..i..".png", "technic_mv_battery_box_side0.png^technic_power_meter"..i..".png", "technic_mv_battery_box_side0.png^technic_power_meter"..i..".png"},
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
- sounds = default.node_sound_wood_defaults(),
- technic_power_machine=1,
- last_side_shown=0,
- drop="technic:mv_battery_box",
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("infotext", "MV Battery box")
- meta:set_float("technic_mv_power_machine", 1)
- meta:set_string("formspec", battery_box_formspec)
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("dst", 1)
- battery_charge = 0
- max_charge = 300000
- last_side_shown=0
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-end
-
-
-MV_nodes_visited = {}
-
-
-minetest.register_abm({
- nodenames = {"technic:mv_battery_box","technic:mv_battery_box1","technic:mv_battery_box2","technic:mv_battery_box3","technic:mv_battery_box4",
- "technic:mv_battery_box5","technic:mv_battery_box6","technic:mv_battery_box7","technic:mv_battery_box8"
- },
- interval = 1,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
- local meta = minetest.env:get_meta(pos)
- charge= meta:get_int("battery_charge")
- max_charge= 300000
- local i=math.ceil((charge/max_charge)*8)
- if i>8 then i=8 end
- j=meta:get_float("last_side_shown")
- if i~=j then
- if i>0 then hacky_swap_node(pos,"technic:mv_battery_box"..i)
- elseif i==0 then hacky_swap_node(pos,"technic:mv_battery_box") end
- meta:set_float("last_side_shown",i)
- end
-
---loading registered power tools
- local inv = meta:get_inventory()
- if inv:is_empty("src")==false then
- srcstack = inv:get_stack("src", 1)
- src_item=srcstack:to_table()
- item_meta=srcstack:get_metadata()
- if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before tool/item
-
- local item_max_charge = nil
- local counter=registered_power_tools_count-1
- for i=1, counter,1 do
- if power_tools[i].tool_name==src_item["name"] then
- item_max_charge=power_tools[i].max_charge
- end
- end
- if item_max_charge then
- load1=tonumber((src_item["metadata"]))
- load_step=4000
- if load1<item_max_charge and charge>0 then
- if charge-load_step<0 then load_step=charge end
- if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end
- load1=load1+load_step
- charge=charge-load_step
- set_RE_wear(src_item,load1,item_max_charge)
- src_item["metadata"]=tostring(load1)
- inv:set_stack("src", 1, src_item)
- end
- meta:set_int("battery_charge",charge)
- end
- end
-
--- dischargin registered power tools
- if inv:is_empty("dst") == false then
- srcstack = inv:get_stack("dst", 1)
- src_item=srcstack:to_table()
- local item_max_charge = nil
- local counter=registered_power_tools_count-1
- for i=1, counter,1 do
- if power_tools[i].tool_name==src_item["name"] then
- item_max_charge=power_tools[i].max_charge
- end
- end
- if item_max_charge then
- if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before battery/crystal
- local load1=tonumber((src_item["metadata"]))
- load_step=4000
- if load1>0 and charge<max_charge then
- if charge+load_step>max_charge then load_step=max_charge-charge end
- if load1-load_step<0 then load_step=load1 end
- load1=load1-load_step
- charge=charge+load_step
- set_RE_wear(src_item,load1,item_max_charge)
- src_item["metadata"]=tostring(load1)
- inv:set_stack("dst", 1, src_item)
- end
- end
- end
-
- meta:set_int("battery_charge",charge)
-
- local load = math.floor(charge/300000 * 100)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
- (load)..":technic_power_meter_fg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "image[4,1;1,1;technic_battery_reload.png]"..
- "list[current_name;dst;5,1;1,1;]"..
- "label[0,0;MV Battery box]"..
- "label[3,0;Charge]"..
- "label[5,0;Discharge]"..
- "label[1,3;Power level]"..
- "list[current_player;main;0,5;8,4;]")
-
- local pos1={}
-
- pos1.y=pos.y-1
- pos1.x=pos.x
- pos1.z=pos.z
-
-
- meta1 = minetest.env:get_meta(pos1)
- if meta1:get_float("mv_cablelike")~=1 then return end
-
- local MV_nodes = {}
- local PR_nodes = {}
- local RE_nodes = {}
-
- MV_nodes[1]={}
- MV_nodes[1].x=pos1.x
- MV_nodes[1].y=pos1.y
- MV_nodes[1].z=pos1.z
- MV_nodes[1].visited=false
-
-table_index=1
- repeat
- check_MV_node (PR_nodes,RE_nodes,MV_nodes,table_index)
- table_index=table_index+1
- if MV_nodes[table_index]==nil then break end
- until false
-
-
-local pos1={}
-i=1
- repeat
- if PR_nodes[i]==nil then break end -- gettin power from all connected producers
- pos1.x=PR_nodes[i].x
- pos1.y=PR_nodes[i].y
- pos1.z=PR_nodes[i].z
- local meta1 = minetest.env:get_meta(pos1)
- local internal_EU_buffer=meta1:get_float("internal_EU_buffer")
- if charge<max_charge then
- charge_to_take=1000
- if internal_EU_buffer-charge_to_take<=0 then
- charge_to_take=internal_EU_buffer
- end
- if charge_to_take>0 then
- charge=charge+charge_to_take
- internal_EU_buffer=internal_EU_buffer-charge_to_take
- meta1:set_float("internal_EU_buffer",internal_EU_buffer)
- end
- end
- i=i+1
- until false
-
-if charge>max_charge then charge=max_charge end
-
-i=1
- repeat
- if RE_nodes[i]==nil then break end
- pos1.x=RE_nodes[i].x -- loading all conected machines buffers
- pos1.y=RE_nodes[i].y
- pos1.z=RE_nodes[i].z
- local meta1 = minetest.env:get_meta(pos1)
- local internal_EU_buffer=meta1:get_float("internal_EU_buffer")
- local internal_EU_buffer_size=meta1:get_float("internal_EU_buffer_size")
-
- local charge_to_give=1000
- if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
- charge_to_give=internal_EU_buffer_size-internal_EU_buffer
- end
- if charge-charge_to_give<0 then charge_to_give=charge end
-
- internal_EU_buffer=internal_EU_buffer+charge_to_give
- meta1:set_float("internal_EU_buffer",internal_EU_buffer)
- charge=charge-charge_to_give;
-
- i=i+1
- until false
- charge=math.floor(charge)
- charge_string=tostring(charge)
- meta:set_string("infotext", "Battery box: "..charge_string.."/"..max_charge);
- meta:set_int("battery_charge",charge)
-
-end
-})
-
-function add_new_MVcable_node (MV_nodes,pos1)
-local i=1
- repeat
- if MV_nodes[i]==nil then break end
- if pos1.x==MV_nodes[i].x and pos1.y==MV_nodes[i].y and pos1.z==MV_nodes[i].z then return false end
- i=i+1
- until false
-MV_nodes[i]={}
-MV_nodes[i].x=pos1.x
-MV_nodes[i].y=pos1.y
-MV_nodes[i].z=pos1.z
-MV_nodes[i].visited=false
-return true
-end
-
-function check_MV_node (PR_nodes,RE_nodes,MV_nodes,i)
- local pos1={}
- pos1.x=MV_nodes[i].x
- pos1.y=MV_nodes[i].y
- pos1.z=MV_nodes[i].z
- MV_nodes[i].visited=true
- new_node_added=false
-
- pos1.x=pos1.x+1
- check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
- pos1.x=pos1.x-2
- check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
- pos1.x=pos1.x+1
-
- pos1.y=pos1.y+1
- check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
- pos1.y=pos1.y-2
- check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
- pos1.y=pos1.y+1
-
- pos1.z=pos1.z+1
- check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
- pos1.z=pos1.z-2
- check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
- pos1.z=pos1.z+1
-return new_node_added
-end
-
-function check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
-meta = minetest.env:get_meta(pos1)
-if meta:get_float("mv_cablelike")==1 then new_node_added=add_new_MVcable_node(MV_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:solar_panel_mv" then new_node_added=add_new_MVcable_node(PR_nodes,pos1) end
-end
-
\ No newline at end of file
+++ /dev/null
-water_can_max_load = 16
-lava_can_max_load = 8
-
-minetest.register_craft({
- output = 'technic:water_can 1',
- recipe = {
- {'technic:zinc_ingot', 'technic:rubber','technic:zinc_ingot'},
- {'default:steel_ingot', '', 'default:steel_ingot'},
- {'technic:zinc_ingot', 'default:steel_ingot', 'technic:zinc_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:lava_can 1',
- recipe = {
- {'technic:zinc_ingot', 'technic:stainless_steel_ingot','technic:zinc_ingot'},
- {'technic:stainless_steel_ingot', '', 'technic:stainless_steel_ingot'},
- {'technic:zinc_ingot', 'technic:stainless_steel_ingot', 'technic:zinc_ingot'},
- }
-})
-
-
-minetest.register_tool("technic:water_can", {
- description = "Water Can",
- inventory_image = "technic_water_can.png",
- stack_max = 1,
- liquids_pointable = true,
- on_use = function(itemstack, user, pointed_thing)
-
- if pointed_thing.type ~= "node" then
- return end
-
- n = minetest.env:get_node(pointed_thing.under)
- if n.name == "default:water_source" then
- item=itemstack:to_table()
- local load=tonumber((item["wear"]))
- if load==0 then load =65535 end
- load=get_RE_item_load(load,water_can_max_load)
- if load+1<17 then
- minetest.env:add_node(pointed_thing.under, {name="air"})
- load=load+1;
- load=set_RE_item_load(load,water_can_max_load)
- item["wear"]=tostring(load)
- itemstack:replace(item)
- end
- return itemstack
- end
- item=itemstack:to_table()
- load=tonumber((item["wear"]))
- if load==0 then load =65535 end
- load=get_RE_item_load(load,water_can_max_load)
- if load==0 then return end
-
- if n.name == "default:water_flowing" then
- minetest.env:add_node(pointed_thing.under, {name="default:water_source"})
- load=load-1;
- load=set_RE_item_load(load,water_can_max_load)
- item["wear"]=tostring(load)
- itemstack:replace(item)
- return itemstack
- end
-
- n = minetest.env:get_node(pointed_thing.above)
- if n.name == "air" then
- minetest.env:add_node(pointed_thing.above, {name="default:water_source"})
- load=load-1;
- load=set_RE_item_load(load,water_can_max_load)
- item["wear"]=tostring(load)
- itemstack:replace(item)
- return itemstack
- end
- end,
-})
-
-minetest.register_tool("technic:lava_can", {
- description = "Lava Can",
- inventory_image = "technic_lava_can.png",
- stack_max = 1,
- liquids_pointable = true,
- on_use = function(itemstack, user, pointed_thing)
-
- if pointed_thing.type ~= "node" then
- return end
-
- n = minetest.env:get_node(pointed_thing.under)
- if n.name == "default:lava_source" then
- item=itemstack:to_table()
- local load=tonumber((item["wear"]))
- if load==0 then load =65535 end
- load=get_RE_item_load(load,lava_can_max_load)
- if load+1<9 then
- minetest.env:add_node(pointed_thing.under, {name="air"})
- load=load+1;
- load=set_RE_item_load(load,lava_can_max_load)
- item["wear"]=tostring(load)
- itemstack:replace(item)
- end
- return itemstack
- end
- item=itemstack:to_table()
- load=tonumber((item["wear"]))
- if load==0 then load =65535 end
- load=get_RE_item_load(load,lava_can_max_load)
- if load==0 then return end
-
- if n.name == "default:lava_flowing" then
- minetest.env:add_node(pointed_thing.under, {name="default:lava_source"})
- load=load-1;
- load=set_RE_item_load(load,lava_can_max_load)
- item["wear"]=tostring(load)
- itemstack:replace(item)
- return itemstack
- end
-
- n = minetest.env:get_node(pointed_thing.above)
- if n.name == "air" then
- minetest.env:add_node(pointed_thing.above, {name="default:lava_source"})
- load=load-1;
- load=set_RE_item_load(load,lava_can_max_load)
- item["wear"]=tostring(load)
- itemstack:replace(item)
- return itemstack
- end
- end,
-})
+++ /dev/null
-chainsaw_max_charge=30000
-
-minetest.register_tool("technic:chainsaw", {
- description = "Chainsaw",
- inventory_image = "technic_chainsaw.png",
- stack_max = 1,
- on_use = function(itemstack, user, pointed_thing)
- if pointed_thing.type=="node" then
- item=itemstack:to_table()
- if item["metadata"]=="" or item["metadata"]=="0" then return end --tool not charged
- charge=tonumber(item["metadata"])
- charge_to_take=600;
- if charge-charge_to_take>0 then
- charge_to_take=chainsaw_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,charge_to_take)
- charge=charge-charge_to_take;
- set_RE_wear(item,charge,chainsaw_max_charge)
- item["metadata"]=tostring(charge)
- itemstack:replace(item)
- return itemstack
- end
- end
- end,
-})
-
-minetest.register_craft({
- output = 'technic:chainsaw',
- recipe = {
- {'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:battery'},
- {'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:battery'},
- {'','','moreores:copper_ingot'},
- }
-})
-
-
-
-
-timber_nodenames={"default:jungletree", "default:papyrus", "default:cactus", "default:tree"}
-
-function chainsaw_dig_it (pos, player,charge_to_take)
- charge_to_take=0
- local node=minetest.env:get_node(pos)
- local i=1
- while timber_nodenames[i]~=nil do
- if node.name==timber_nodenames[i] then
- charge_to_take=600
- np={x=pos.x, y=pos.y, z=pos.z}
- while minetest.env:get_node(np).name==timber_nodenames[i] do
- minetest.env:remove_node(np)
- minetest.env:add_item(np, timber_nodenames[i])
- np={x=np.x, y=np.y+1, z=np.z}
- end
- minetest.sound_play("chainsaw", {pos = pos, gain = 1.0, max_hear_distance = 10,})
- return charge_to_take
- end
- i=i+1
- end
-
-return charge_to_take
-end
\ No newline at end of file
+++ /dev/null
-minetest.register_alias("coal_furnace", "technic:coal_furnace")
-
-minetest.register_craft({
- output = 'technic:coal_furnace',
- recipe = {
- {'default:stone', 'default:stone', 'default:stone'},
- {'default:stone', '', 'default:stone'},
- {'default:stone', 'default:stone', 'default:stone'},
- }
-})
-
-
-coal_furnace_formspec =
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]"..
- "label[0,0;Coal Furnace]")
-
-minetest.register_node("technic:coal_furnace", {
- description = "Coal furnace",
- tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
- "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front.png"},
- paramtype2 = "facedir",
- groups = {cracky=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_stone_defaults(),
- technic_power_machine=1,
- internal_EU_buffer=0;
- interal_EU_buffer_size=2000;
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec", coal_furnace_formspec)
- meta:set_string("infotext", "Coal furnace")
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("dst", 4)
- local EU_used = 0
- local furnace_is_cookin = 0
- local cooked = nil
- meta:set_float("internal_EU_buffer",0)
- meta:set_float("internal_EU_buffer_size",2000)
-
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-minetest.register_node("technic:coal_furnace_active", {
- description = "Coal Furnace",
- tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
- "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front_active.png"},
- paramtype2 = "facedir",
- light_source = 8,
- drop = "technic:coal_furnace",
- groups = {cracky=2, not_in_creative_inventory=1},
- legacy_facedir_simple = true,
- sounds = default.node_sound_stone_defaults(),
- internal_EU_buffer=0;
- interal_EU_buffer_size=2000;
- technic_power_machine=1,
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec", electric_furnace_formspec)
- meta:set_string("infotext", "Coal furnace");
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("dst", 4)
- local EU_used = 0
- local furnace_is_cookin = 0
- local cooked = nil
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-minetest.register_abm({
- nodenames = {"technic:coal_furnace","technic:coal_furnace_active"},
- interval = 1,
- chance = 1,
-
- action = function(pos, node, active_object_count, active_object_count_wider)
-
- local meta = minetest.env:get_meta(pos)
- internal_EU_buffer=meta:get_float("internal_EU_buffer")
- internal_EU_buffer_size=meta:get_float("internal_EU_buffer")
- local load = math.floor(internal_EU_buffer/2000 * 100)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
- (load)..":technic_power_meter_fg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]"..
- "label[0,0;Electric Furnace]")
-
- local inv = meta:get_inventory()
-
- local furnace_is_cookin = meta:get_float("furnace_is_cookin")
-
-
- local srclist = inv:get_list("src")
- local cooked=nil
-
- if srclist then
- cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
- end
-
-
- if (furnace_is_cookin == 1) then
- if internal_EU_buffer>=150 then
- internal_EU_buffer=internal_EU_buffer-150;
- meta:set_float("internal_EU_buffer",internal_EU_buffer)
- meta:set_float("src_time", meta:get_float("src_time") + 3)
- if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
- -- check if there's room for output in "dst" list
- if inv:room_for_item("dst",cooked.item) then
- -- Put result in "dst" list
- inv:add_item("dst", cooked.item)
- -- take stuff from "src" list
- srcstack = inv:get_stack("src", 1)
- srcstack:take_item()
- inv:set_stack("src", 1, srcstack)
- else
- print("Furnace inventory full!")
- end
- meta:set_string("src_time", 0)
- end
- end
- end
-
-
-
-
- if srclist then
- cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
- if cooked.time>0 then
- hacky_swap_node(pos,"technic:coal_furnace_active")
- meta:set_string("infotext","Furnace active")
- meta:set_string("furnace_is_cookin",1)
- meta:set_string("src_time", 0)
- return
- end
-
- end
-
- hacky_swap_node(pos,"technic:coal_furnace")
- meta:set_string("infotext","Furnace inactive")
- meta:set_string("furnace_is_cookin",0)
- meta:set_string("src_time", 0)
-
-
-end,
-})
\ No newline at end of file
+++ /dev/null
-
-minetest.register_craft({
- output = 'technic:rebar 6',
- recipe = {
- {'','', 'default:steel_ingot'},
- {'','default:steel_ingot',''},
- {'default:steel_ingot', '', ''},
- }
-})
-
-minetest.register_craft({
- output = 'technic:concrete 5',
- recipe = {
- {'default:stone','technic:rebar','default:stone'},
- {'technic:rebar','default:stone','technic:rebar'},
- {'default:stone','technic:rebar','default:stone'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:concrete_post 4',
- recipe = {
- {'default:stone','technic:rebar','default:stone'},
- {'default:stone','technic:rebar','default:stone'},
- {'default:stone','technic:rebar','default:stone'},
-}
-})
-
-minetest.register_craftitem("technic:rebar", {
- description = "Rebar",
- inventory_image = "technic_rebar.png",
- stack_max = 99,
-})
-
-minetest.register_craftitem("technic:concrete", {
- description = "Concrete Block",
- inventory_image = "technic_concrete_block.png",
- stack_max = 99,
-})
-
-minetest.register_craftitem("technic:concrete_post", {
- description = "Concrete Post",
- inventory_image = "technic_concrete_post.png",
- stack_max = 99,
-})
-
-
-
--- NODES:
-
-minetest.register_node("technic:concrete", {
- description = "Concrete Block",
- tile_images = {"technic_concrete_block.png",},
- is_ground_content = true,
- groups = {cracky=1},
- sounds = default.node_sound_stone_defaults(),
-})
-
-minetest.register_node("technic:concrete_post", {
- description = "Concrete Post",
- drawtype = "fencelike",
- tiles = {"technic_concrete_block.png"},
- inventory_image = "default_fence.png",
- wield_image = "default_fence.png",
- paramtype = "light",
- is_ground_content = true,
- selection_box = {
- type = "fixed",
- fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
- },
-
- groups = {cracky=1},
- sounds = default.node_sound_stone_defaults(),
-})
\ No newline at end of file
+++ /dev/null
--- Please note that item_drop module already contains item_pickup
-enable_item_drop=false
-enable_item_pickup=true
+++ /dev/null
-
-minetest.register_craft({
- type = "shapeless",
- output = 'technic:constructor_mk1_off 1',
- recipe = {'technic:nodebreaker_off', 'technic:deployer_off'},
-
-})
-minetest.register_craft({
- type = "shapeless",
- output = 'technic:constructor_mk2_off 1',
- recipe = {'technic:constructor_mk1_off', 'technic:constructor_mk1_off'},
-
-})
-
-minetest.register_craft({
- type = "shapeless",
- output = 'technic:constructor_mk3_off 1',
- recipe = {'technic:constructor_mk2_off', 'technic:constructor_mk2_off'},
-
-})
-
-minetest.register_node("technic:constructor_mk1_off", {
- description = "Constructor MK1",
- tile_images = {"technic_constructor_mk1_top_off.png","technic_constructor_mk1_bottom_off.png","technic_constructor_mk1_side2_off.png","technic_constructor_mk1_side1_off.png",
- "technic_constructor_back.png","technic_constructor_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(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "label[0,0;Constructor MK1]"..
- "label[5,0;Slot 1]"..
- "list[current_name;slot1;6,0;1,1;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Constructor MK1")
- local inv = meta:get_inventory()
- inv:set_size("slot1", 1)
- end,
-
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos)
- local inv = meta:get_inventory()
- return inv:is_empty("slot1")
- end,
-})
-
-minetest.register_node("technic:constructor_mk1_on", {
- description = "Constructor MK1",
- tile_images = {"technic_constructor_mk1_top_on.png","technic_constructor_mk1_bottom_on.png","technic_constructor_mk1_side2_on.png","technic_constructor_mk1_side1_on.png",
- "technic_constructor_back.png","technic_constructor_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,not_in_creative_inventory=1},
- sounds = default.node_sound_stone_defaults(),
-})
-
-mesecon:register_on_signal_on(function(pos, node)
- local meta = minetest.env:get_meta(pos)
- local inv = meta:get_inventory()
- local pos1={}
- pos1.x=pos.x
- pos1.y=pos.y
- pos1.z=pos.z
- if node.param2==3 then pos1.x=pos1.x+1 end
- if node.param2==2 then pos1.z=pos1.z+1 end
- if node.param2==1 then pos1.x=pos1.x-1 end
- if node.param2==0 then pos1.z=pos1.z-1 end
-
- if node.name == "technic:constructor_mk1_off" then
- hacky_swap_node(pos,"technic:constructor_mk1_on")
- nodeupdate(pos)
- local node1=minetest.env:get_node(pos1)
- deploy_node (inv,"slot1",pos1,node1,node)
- end
-
-end)
-
-mesecon:register_on_signal_off(function(pos, node)
- if node.name == "technic:constructor_mk1_on" then
- hacky_swap_node(pos,"technic:constructor_mk1_off")
- nodeupdate(pos)
- end
-end)
-
-mesecon:register_effector("technic:constructor_mk1_on", "technic:constructor_mk1_off")
-
-minetest.register_node("technic:constructor_mk2_off", {
- description = "Constructor MK2",
- tile_images = {"technic_constructor_mk2_top_off.png","technic_constructor_mk2_bottom_off.png","technic_constructor_mk2_side2_off.png","technic_constructor_mk2_side1_off.png",
- "technic_constructor_back.png","technic_constructor_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(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "label[0,0;Constructor MK2]"..
- "label[5,0;Slot 1]"..
- "list[current_name;slot1;6,0;1,1;]"..
- "label[5,1;Slot 2]"..
- "list[current_name;slot2;6,1;1,1;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Constructor MK2")
- local inv = meta:get_inventory()
- inv:set_size("slot1", 1)
- inv:set_size("slot2", 1)
- end,
-
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos)
- local inv = meta:get_inventory()
- if inv:is_empty("slot1")==false or inv:is_empty("slot2")==false then return false end
- return true
- end,
-})
-
-minetest.register_node("technic:constructor_mk2_on", {
- description = "Constructor MK2",
- tile_images = {"technic_constructor_mk2_top_on.png","technic_constructor_mk2_bottom_on.png","technic_constructor_mk2_side2_on.png","technic_constructor_mk2_side1_on.png",
- "technic_constructor_back.png","technic_constructor_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,not_in_creative_inventory=1},
- sounds = default.node_sound_stone_defaults(),
-})
-
-mesecon:register_on_signal_on(function(pos, node)
- local meta = minetest.env:get_meta(pos)
- local inv = meta:get_inventory()
- 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
- if node.param2==3 then pos1.x=pos1.x+1 pos2.x=pos2.x+2 end
- if node.param2==2 then pos1.z=pos1.z+1 pos2.z=pos2.z+2 end
- if node.param2==1 then pos1.x=pos1.x-1 pos2.x=pos2.x-2 end
- if node.param2==0 then pos1.z=pos1.z-1 pos2.z=pos2.z-2 end
-
- if node.name == "technic:constructor_mk2_off" then
- hacky_swap_node(pos,"technic:constructor_mk2_on")
- nodeupdate(pos)
- local node1=minetest.env:get_node(pos1)
- deploy_node (inv,"slot1",pos1,node1,node)
- local node1=minetest.env:get_node(pos2)
- deploy_node (inv,"slot2",pos2,node1,node)
- end
-
-end)
-
-
-mesecon:register_on_signal_off(function(pos, node)
- if node.name == "technic:constructor_mk2_on" then
- hacky_swap_node(pos,"technic:constructor_mk2_off")
- nodeupdate(pos)
- end
-end)
-
-mesecon:register_effector("technic:constructor_mk2_on", "technic:constructor_mk2_off")
-
-minetest.register_node("technic:constructor_mk3_off", {
- description = "Constructor MK3",
- tile_images = {"technic_constructor_mk3_top_off.png","technic_constructor_mk3_bottom_off.png","technic_constructor_mk3_side2_off.png","technic_constructor_mk3_side1_off.png",
- "technic_constructor_back.png","technic_constructor_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(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "label[0,0;Constructor MK2]"..
- "label[5,0;Slot 1]"..
- "list[current_name;slot1;6,0;1,1;]"..
- "label[5,1;Slot 2]"..
- "list[current_name;slot2;6,1;1,1;]"..
- "label[5,2;Slot 3]"..
- "list[current_name;slot3;6,2;1,1;]"..
- "label[5,3;Slot 4]"..
- "list[current_name;slot4;6,3;1,1;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Constructor MK3")
- local inv = meta:get_inventory()
- inv:set_size("slot1", 1)
- inv:set_size("slot2", 1)
- inv:set_size("slot3", 1)
- inv:set_size("slot4", 1)
-
- end,
-
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos)
- local inv = meta:get_inventory()
- if inv:is_empty("slot1")==false or inv:is_empty("slot2")==false or inv:is_empty("slot3")==false or inv:is_empty("slot4")==false then return false end
- return true
- end,
-})
-
-minetest.register_node("technic:constructor_mk3_on", {
- description = "Constructor MK3",
- tile_images = {"technic_constructor_mk3_top_on.png","technic_constructor_mk3_bottom_on.png","technic_constructor_mk3_side2_on.png","technic_constructor_mk3_side1_on.png",
- "technic_constructor_back.png","technic_constructor_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,not_in_creative_inventory=1},
- sounds = default.node_sound_stone_defaults(),
-})
-
-mesecon:register_on_signal_on(function(pos, node)
- local meta = minetest.env:get_meta(pos)
- local inv = meta:get_inventory()
-
- local pos1={}
- local pos2={}
- local pos3={}
- local pos4={}
-
- pos1.x=pos.x
- pos1.y=pos.y
- pos1.z=pos.z
-
- pos2.x=pos.x
- pos2.y=pos.y
- pos2.z=pos.z
-
- pos3.x=pos.x
- pos3.y=pos.y
- pos3.z=pos.z
-
- pos4.x=pos.x
- pos4.y=pos.y
- pos4.z=pos.z
-
- if node.param2==3 then pos1.x=pos1.x+1 pos2.x=pos2.x+2 pos3.x=pos3.x+3 pos4.x=pos4.x+4 end
- if node.param2==2 then pos1.z=pos1.z+1 pos2.z=pos2.z+2 pos3.z=pos3.z+3 pos4.z=pos4.z+4 end
- if node.param2==1 then pos1.x=pos1.x-1 pos2.x=pos2.x-2 pos3.x=pos3.x-3 pos4.x=pos4.x-4 end
- if node.param2==0 then pos1.z=pos1.z-1 pos2.z=pos2.z-2 pos3.z=pos3.z-3 pos4.z=pos4.z-4 end
-
- if node.name == "technic:constructor_mk3_off" then
- hacky_swap_node(pos,"technic:constructor_mk3_on")
- nodeupdate(pos)
- local node1=minetest.env:get_node(pos1)
- deploy_node (inv,"slot1",pos1,node1,node)
- local node1=minetest.env:get_node(pos2)
- deploy_node (inv,"slot2",pos2,node1,node)
- local node1=minetest.env:get_node(pos3)
- deploy_node (inv,"slot3",pos3,node1,node)
- local node1=minetest.env:get_node(pos4)
- deploy_node (inv,"slot4",pos4,node1,node)
- end
-
-end)
-
-
-mesecon:register_on_signal_off(function(pos, node)
- if node.name == "technic:constructor_mk3_on" then
- hacky_swap_node(pos,"technic:constructor_mk3_off")
- nodeupdate(pos)
- end
-end)
-
-mesecon:register_effector("technic:constructor_mk3_on", "technic:constructor_mk3_off")
-
-
-deploy_node =function (inv, slot_name, pos1, node1, node)
-if node1.name == "air" then
- if not inv:is_empty(slot_name) then
- stack1=inv:get_list(slot_name)
- node_to_be_placed={name=stack1[1]:get_name(), param1=0, param2=node.param2}
- minetest.env:set_node(pos1,node_to_be_placed)
- stack1[1]:take_item()
- inv:set_stack(slot_name, 1, stack1[1])
- return
- end
- return
- end
- if node1.name == "ignore" or
- node1.name == "default:lava_source" or
- node1.name == "default:lava_flowing" or
- node1.name == "default:water_source" or
- node1.name == "default:water_flowing"
- then return end
- if inv:room_for_item(slot_name,node1) then
- inv:add_item(slot_name,node1)
- minetest.env:remove_node(pos1)
- end
-
-end
\ No newline at end of file
+++ /dev/null
-minetest.register_craft({
- output = 'technic:copper_chest 1',
- recipe = {
- {'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'},
- {'moreores:copper_ingot','technic:iron_chest','moreores:copper_ingot'},
- {'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:copper_locked_chest 1',
- recipe = {
- {'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'},
- {'moreores:copper_ingot','technic:iron_locked_chest','moreores:copper_ingot'},
- {'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:copper_locked_chest 1',
- recipe = {
- {'default:steel_ingot'},
- {'technic:copper_chest'},
- }
-})
-
-minetest.register_craftitem("technic:copper_chest", {
- description = "Copper Chest",
- stack_max = 99,
-})
-minetest.register_craftitem("technic:copper_locked_chest", {
- description = "Copper Locked Chest",
- stack_max = 99,
-})
-
-minetest.register_node("technic:copper_chest", {
- description = "Copper Chest",
- tiles = {"technic_copper_chest_top.png", "technic_copper_chest_top.png", "technic_copper_chest_side.png",
- "technic_copper_chest_side.png", "technic_copper_chest_side.png", "technic_copper_chest_front.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[10,9;]"..
- "list[current_name;main;0,0;10,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Copper Chest")
- local inv = meta:get_inventory()
- inv:set_size("main", 10*4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
-
- on_metadata_inventory_move = function(pos, from_list, from_index,
- to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in chest at "..minetest.pos_to_string(pos))
- return minetest.node_metadata_inventory_move_allow_all(
- pos, from_list, from_index, to_list, to_index, count, player)
- end,
- on_metadata_inventory_offer = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to chest at "..minetest.pos_to_string(pos))
- return minetest.node_metadata_inventory_offer_allow_all(
- pos, listname, index, stack, player)
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from chest at "..minetest.pos_to_string(pos))
- end,
-})
-
-
-local function has_locked_chest_privilege(meta, player)
- if player:get_player_name() ~= meta:get_string("owner") then
- return false
- end
- return true
-end
-
-minetest.register_node("technic:copper_locked_chest", {
- description = "Copper Locked Chest",
- tiles = {"technic_copper_chest_top.png", "technic_copper_chest_top.png", "technic_copper_chest_side.png",
- "technic_copper_chest_side.png", "technic_copper_chest_side.png", "technic_copper_chest_locked.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- after_place_node = function(pos, placer)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("owner", placer:get_player_name() or "")
- meta:set_string("infotext", "Copper Locked Chest (owned by "..
- meta:get_string("owner")..")")
- end,
-on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[10,9;]"..
- "list[current_name;main;0,0;10,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Copper Locked Chest")
- meta:set_string("owner", "")
- local inv = meta:get_inventory()
- inv:set_size("main", 10*4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
- allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return count
- end,
- allow_metadata_inventory_put = function(pos, listname, index, stack, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- allow_metadata_inventory_take = function(pos, listname, index, stack, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_put = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from locked chest at "..minetest.pos_to_string(pos))
- end,
-})
+++ /dev/null
-moreores
-flowers
-pipeworks
-mesecons
-farming
+++ /dev/null
-minetest.register_craft({
- output = 'technic:deployer_off 1',
- recipe = {
- {'default:wood', 'default:chest','default:wood'},
- {'default:stone', 'mesecons:piston','default:stone'},
- {'default:stone', 'mesecons:mesecon','default:stone'},
-
- }
-})
-
-minetest.register_node("technic:deployer_off", {
- description = "Deployer",
- tile_images = {"technic_deployer_top.png","technic_deployer_bottom.png","technic_deployer_side2.png","technic_deployer_side1.png",
- "technic_deployer_back.png","technic_deployer_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,tubedevice=1},
- sounds = default.node_sound_stone_defaults(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "label[0,0;Deployer]"..
- "list[current_name;main;4,1;3,3;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Deployer")
- local inv = meta:get_inventory()
- inv:set_size("main", 3*3)
- end,
-
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("main") then
- return false
- end
- return true
- end,
-
-})
-
-minetest.register_node("technic:deployer_on", {
- description = "Deployer",
- tile_images = {"technic_deployer_top.png","technic_deployer_bottom.png","technic_deployer_side2.png","technic_deployer_side1.png",
- "technic_deployer_back.png","technic_deployer_front_on.png"},
- is_ground_content = true,
- paramtype2 = "facedir",
- tubelike=1,
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2,tubedevice=1,not_in_creative_inventory=1},
- sounds = default.node_sound_stone_defaults(),
-})
-
-mesecon:register_on_signal_on(function(pos, node)
- local pos1={}
- pos1.x=pos.x
- pos1.y=pos.y
- pos1.z=pos.z
- if node.param2==3 then pos1.x=pos1.x+1 end
- if node.param2==2 then pos1.z=pos1.z+1 end
- if node.param2==1 then pos1.x=pos1.x-1 end
- if node.param2==0 then pos1.z=pos1.z-1 end
-
- if node.name == "technic:deployer_off" then
- hacky_swap_node(pos,"technic:deployer_on")
- nodeupdate(pos)
- local meta = minetest.env:get_meta(pos);
-
- local inv = meta:get_inventory()
- print (dump(inv))
- for _,stack in ipairs(inv:get_list("main")) do
- print (dump(stack:get_name()))
-
- if stack:get_name() ~=nil then
- node1={name=stack:get_name(), param1=0, param2=node.param2}
- minetest.env:place_node(pos1,node1)
- return
- end
- end
- end
-end)
-
-mesecon:register_on_signal_off(function(pos, node)
- if node.name == "technic:deployer_on" then
- hacky_swap_node(pos,"technic:deployer_off")
- nodeupdate(pos)
- end
-end)
-
-mesecon:register_effector("technic:deployer_on", "technic:deployer_off")
-
-
+++ /dev/null
-power_tools ={}
-
-registered_power_tools_count=1
-
-function register_power_tool (string1,max_charge)
-power_tools[registered_power_tools_count]={}
-power_tools[registered_power_tools_count].tool_name=string1
-power_tools[registered_power_tools_count].max_charge=max_charge
-registered_power_tools_count=registered_power_tools_count+1
-end
-
-register_power_tool ("technic:mining_drill",60000)
-register_power_tool ("technic:laser_mk1",40000)
-register_power_tool ("technic:battery",10000)
-
-minetest.register_alias("battery", "technic:battery")
-minetest.register_alias("battery_box", "technic:battery_box")
-minetest.register_alias("electric_furnace", "technic:electric_furnace")
-
-
-minetest.register_craft({
- output = 'technic:battery 1',
- recipe = {
- {'default:wood', 'moreores:copper_ingot', 'default:wood'},
- {'default:wood', 'moreores:tin_ingot', 'default:wood'},
- {'default:wood', 'moreores:copper_ingot', 'default:wood'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:battery_box 1',
- recipe = {
- {'technic:battery', 'default:wood', 'technic:battery'},
- {'technic:battery', 'moreores:copper_ingot', 'technic:battery'},
- {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:electric_furnace',
- recipe = {
- {'default:brick', 'default:brick', 'default:brick'},
- {'default:brick', '', 'default:brick'},
- {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
- }
-})
-
-
-minetest.register_tool("technic:battery",
-{description = "RE Battery",
-inventory_image = "technic_battery.png",
-energy_charge = 0,
-tool_capabilities = {max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}})
-
-minetest.register_craftitem("technic:battery_box", {
- description = "Battery box",
- stack_max = 99,
-})
-
-
-
-battery_box_formspec =
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "image[4,1;1,1;technic_battery_reload.png]"..
- "list[current_name;dst;5,1;1,1;]"..
- "label[0,0;Battery box]"..
- "label[3,0;Charge]"..
- "label[5,0;Discharge]"..
- "label[1,3;Power level]"..
- "list[current_player;main;0,5;8,4;]"
-
-minetest.register_node("technic:battery_box", {
- description = "Battery box",
- tiles = {"technic_battery_box_top.png", "technic_battery_box_bottom.png", "technic_battery_box_side.png",
- "technic_battery_box_side.png", "technic_battery_box_side.png", "technic_battery_box_side.png"},
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
- technic_power_machine=1,
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("infotext", "Battery box")
- meta:set_float("technic_power_machine", 1)
- meta:set_string("formspec", battery_box_formspec)
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("dst", 1)
- battery_charge = 0
- max_charge = 60000
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-electric_furnace_formspec =
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]"..
- "label[0,0;Electric Furnace]"..
- "label[1,3;Power level]"
-
-minetest.register_node("technic:electric_furnace", {
- description = "Electric furnace",
- tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
- "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front.png"},
- paramtype2 = "facedir",
- groups = {cracky=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_stone_defaults(),
- technic_power_machine=1,
- internal_EU_buffer=0;
- interal_EU_buffer_size=2000;
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_float("technic_power_machine", 1)
- meta:set_string("formspec", electric_furnace_formspec)
- meta:set_string("infotext", "Electric furnace")
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("dst", 4)
- local EU_used = 0
- local furnace_is_cookin = 0
- local cooked = nil
- meta:set_float("internal_EU_buffer",0)
- meta:set_float("internal_EU_buffer_size",2000)
-
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-minetest.register_node("technic:electric_furnace_active", {
- description = "Electric Furnace",
- tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
- "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front_active.png"},
- paramtype2 = "facedir",
- light_source = 8,
- drop = "technic:electric_furnace",
- groups = {cracky=2, not_in_creative_inventory=1},
- legacy_facedir_simple = true,
- sounds = default.node_sound_stone_defaults(),
- internal_EU_buffer=0;
- interal_EU_buffer_size=2000;
- technic_power_machine=1,
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_float("technic_power_machine", 1)
- meta:set_string("formspec", electric_furnace_formspec)
- meta:set_string("infotext", "Electric furnace");
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("dst", 4)
- local EU_used = 0
- local furnace_is_cookin = 0
- local cooked = nil
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-minetest.register_abm({
- nodenames = {"technic:electric_furnace","technic:electric_furnace_active"},
- interval = 1,
- chance = 1,
-
- action = function(pos, node, active_object_count, active_object_count_wider)
-
- local meta = minetest.env:get_meta(pos)
- internal_EU_buffer=meta:get_float("internal_EU_buffer")
- internal_EU_buffer_size=meta:get_float("internal_EU_buffer")
- local load = math.floor(internal_EU_buffer/2000 * 100)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
- (load)..":technic_power_meter_fg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]"..
- "label[0,0;Electric Furnace]"..
- "label[1,3;Power level]")
-
- local inv = meta:get_inventory()
-
- local furnace_is_cookin = meta:get_float("furnace_is_cookin")
-
-
- local srclist = inv:get_list("src")
- local cooked=nil
-
- if srclist then
- cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
- end
-
-
- if (furnace_is_cookin == 1) then
- if internal_EU_buffer>=150 then
- internal_EU_buffer=internal_EU_buffer-150;
- meta:set_float("internal_EU_buffer",internal_EU_buffer)
- meta:set_float("src_time", meta:get_float("src_time") + 3)
- if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
- -- check if there's room for output in "dst" list
- if inv:room_for_item("dst",cooked.item) then
- -- Put result in "dst" list
- inv:add_item("dst", cooked.item)
- -- take stuff from "src" list
- srcstack = inv:get_stack("src", 1)
- srcstack:take_item()
- inv:set_stack("src", 1, srcstack)
- else
- print("Furnace inventory full!")
- end
- meta:set_string("src_time", 0)
- end
- end
- end
-
-
-
-
- if srclist then
- cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
- if cooked.time>0 then
- hacky_swap_node(pos,"technic:electric_furnace_active")
- meta:set_string("infotext","Furnace active")
- meta:set_string("furnace_is_cookin",1)
- -- meta:set_string("formspec", electric_furnace_formspec)
- meta:set_string("src_time", 0)
- return
- end
-
- end
-
- hacky_swap_node(pos,"technic:electric_furnace")
- meta:set_string("infotext","Furnace inactive")
- meta:set_string("furnace_is_cookin",0)
- -- meta:set_string("formspec", electric_furnace_formspec)
- meta:set_string("src_time", 0)
-
-
-end,
-})
\ No newline at end of file
+++ /dev/null
-minetest.register_alias("electric_furnace", "technic:electric_furnace")
-
-minetest.register_craft({
- output = 'technic:electric_furnace',
- recipe = {
- {'default:cobble', 'default:cobble', 'default:cobble'},
- {'default:cobble', '', 'default:cobble'},
- {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
- }
-})
-
-
-electric_furnace_formspec =
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]"..
- "label[0,0;Electric Furnace]"..
- "label[1,3;Power level]"
-
-minetest.register_node("technic:electric_furnace", {
- description = "Electric furnace",
- tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
- "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front.png"},
- paramtype2 = "facedir",
- groups = {cracky=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_stone_defaults(),
- technic_power_machine=1,
- internal_EU_buffer=0;
- interal_EU_buffer_size=2000;
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_float("technic_power_machine", 1)
- meta:set_string("formspec", electric_furnace_formspec)
- meta:set_string("infotext", "Electric furnace")
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("dst", 4)
- local EU_used = 0
- local furnace_is_cookin = 0
- local cooked = nil
- meta:set_float("internal_EU_buffer",0)
- meta:set_float("internal_EU_buffer_size",2000)
-
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-minetest.register_node("technic:electric_furnace_active", {
- description = "Electric Furnace",
- tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
- "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front_active.png"},
- paramtype2 = "facedir",
- light_source = 8,
- drop = "technic:electric_furnace",
- groups = {cracky=2, not_in_creative_inventory=1},
- legacy_facedir_simple = true,
- sounds = default.node_sound_stone_defaults(),
- internal_EU_buffer=0;
- interal_EU_buffer_size=2000;
- technic_power_machine=1,
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_float("technic_power_machine", 1)
- meta:set_string("formspec", electric_furnace_formspec)
- meta:set_string("infotext", "Electric furnace");
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("dst", 4)
- local EU_used = 0
- local furnace_is_cookin = 0
- local cooked = nil
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("dst") then
- return false
- elseif not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-minetest.register_abm({
- nodenames = {"technic:electric_furnace","technic:electric_furnace_active"},
- interval = 1,
- chance = 1,
-
- action = function(pos, node, active_object_count, active_object_count_wider)
-
- local meta = minetest.env:get_meta(pos)
- internal_EU_buffer=meta:get_float("internal_EU_buffer")
- internal_EU_buffer_size=meta:get_float("internal_EU_buffer")
- local load = math.floor(internal_EU_buffer/2000 * 100)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
- (load)..":technic_power_meter_fg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]"..
- "label[0,0;Electric Furnace]"..
- "label[1,3;Power level]")
-
- local inv = meta:get_inventory()
-
- local furnace_is_cookin = meta:get_float("furnace_is_cookin")
-
-
- local srclist = inv:get_list("src")
- local cooked=nil
-
- if srclist then
- cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
- end
-
-
- if (furnace_is_cookin == 1) then
- if internal_EU_buffer>=150 then
- internal_EU_buffer=internal_EU_buffer-150;
- meta:set_float("internal_EU_buffer",internal_EU_buffer)
- meta:set_float("src_time", meta:get_float("src_time") + 3)
- if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
- -- check if there's room for output in "dst" list
- if inv:room_for_item("dst",cooked.item) then
- -- Put result in "dst" list
- inv:add_item("dst", cooked.item)
- -- take stuff from "src" list
- srcstack = inv:get_stack("src", 1)
- srcstack:take_item()
- inv:set_stack("src", 1, srcstack)
- else
- print("Furnace inventory full!")
- end
- meta:set_string("src_time", 0)
- end
- end
- end
-
-
-
-
- if srclist then
- cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
- if cooked.time>0 then
- hacky_swap_node(pos,"technic:electric_furnace_active")
- meta:set_string("infotext","Furnace active")
- meta:set_string("furnace_is_cookin",1)
- -- meta:set_string("formspec", electric_furnace_formspec)
- meta:set_string("src_time", 0)
- return
- end
-
- end
-
- hacky_swap_node(pos,"technic:electric_furnace")
- meta:set_string("infotext","Furnace inactive")
- meta:set_string("furnace_is_cookin",0)
- -- meta:set_string("formspec", electric_furnace_formspec)
- meta:set_string("src_time", 0)
-
-
-end,
-})
+++ /dev/null
--- original code comes from walkin_light mod by Echo http://minetest.net/forum/viewtopic.php?id=2621
-
-flashlight_max_charge=30000
-
- minetest.register_tool("technic:flashlight", {
- description = "Flashlight",
- inventory_image = "technic_flashlight.png",
- stack_max = 1,
- on_use = function(itemstack, user, pointed_thing)
- end,
- })
-
- minetest.register_craft({
- output = "technic:flashlight",
- recipe = {
- {"glass","glass","glass"},
- {"technic:stainless_steel_ingot","technic:battery","technic:stainless_steel_ingot"},
- {"","technic:battery",""}
- }
- })
-local players = {}
-local player_positions = {}
-local last_wielded = {}
-
-function round(num)
- return math.floor(num + 0.5)
-end
-
-minetest.register_on_joinplayer(function(player)
- local player_name = player:get_player_name()
- table.insert(players, player_name)
- local pos = player:getpos()
- local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
- player_positions[player_name] = {}
- player_positions[player_name]["x"] = rounded_pos.x;
- player_positions[player_name]["y"] = rounded_pos.y;
- player_positions[player_name]["z"] = rounded_pos.z;
-end)
-
-minetest.register_on_leaveplayer(function(player)
- local player_name = player:get_player_name()
- for i,v in ipairs(players) do
- if v == player_name then
- table.remove(players, i)
- last_wielded[player_name] = nil
- -- Neuberechnung des Lichts erzwingen
- local pos = player:getpos()
- local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
- minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"})
- minetest.env:add_node(rounded_pos,{type="node",name="air"})
- player_positions[player_name]["x"] = nil
- player_positions[player_name]["y"] = nil
- player_positions[player_name]["z"] = nil
- player_positions[player_name]["m"] = nil
- player_positions[player_name] = nil
- end
- end
-end)
-
-minetest.register_globalstep(function(dtime)
- for i,player_name in ipairs(players) do
- local player = minetest.env:get_player_by_name(player_name)
- flashlight_weared=check_for_flashlight(player)
- local pos = player:getpos()
- local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
- local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]}
-
- if last_wielded[player_name] and not flashlight_weared then --remove light, flashlight weared out or was removed from hotbar
- local node=minetest.env:get_node_or_nil(old_pos)
- if node then
- if node.name=="technic:light" then
- minetest.env:add_node(old_pos,{type="node",name="technic:light_off"})
- minetest.env:add_node(old_pos,{type="node",name="air"})
- last_wielded[player_name]=false
- end
- end
- end
-
- player_moved=not(old_pos.x==rounded_pos.x and old_pos.y==rounded_pos.y and old_pos.z==rounded_pos.z)
- if player_moved and last_wielded[player_name] and flashlight_weared then
-
- local node=minetest.env:get_node_or_nil(rounded_pos)
- if node then
- if node.name=="air" then
- minetest.env:add_node(rounded_pos,{type="node",name="technic:light"})
- end
- end
- local node=minetest.env:get_node_or_nil(old_pos)
- if node then
- if node.name=="technic:light" then
- minetest.env:add_node(old_pos,{type="node",name="technic:light_off"})
- minetest.env:add_node(old_pos,{type="node",name="air"})
- end
- end
- player_positions[player_name]["x"] = rounded_pos.x
- player_positions[player_name]["y"] = rounded_pos.y
- player_positions[player_name]["z"] = rounded_pos.z
-
- else if not last_wielded[player_name] and flashlight_weared then
- local node=minetest.env:get_node_or_nil(rounded_pos)
- if node then
- if node.name=="air" then
- minetest.env:add_node(rounded_pos,{type="node",name="technic:light"})
- end
- end
- player_positions[player_name]["x"] = rounded_pos.x
- player_positions[player_name]["y"] = rounded_pos.y
- player_positions[player_name]["z"] = rounded_pos.z
- last_wielded[player_name]=true
- end
-
- end
- end
-end)
-
-minetest.register_node("technic:light", {
- drawtype = "glasslike",
- tile_images = {"technic_light.png"},
- paramtype = "light",
- walkable = false,
- buildable_to = true,
- is_ground_content = true,
- light_propagates = true,
- sunlight_propagates = true,
- light_source = 15,
- selection_box = {
- type = "fixed",
- fixed = {0, 0, 0, 0, 0, 0},
- },
-})
-minetest.register_node("technic:light_off", {
- drawtype = "glasslike",
- tile_images = {"technic_light.png"},
- paramtype = "light",
- walkable = false,
- buildable_to = true,
- is_ground_content = true,
- light_propagates = true,
- sunlight_propagates = true,
- selection_box = {
- type = "fixed",
- fixed = {0, 0, 0, 0, 0, 0},
- },
-})
-
-function check_for_flashlight (player)
-if player==nil then return false end
-local inv = player:get_inventory()
-local hotbar=inv:get_list("main")
- for i=1,8,1 do
-
- if hotbar[i]:get_name() == "technic:flashlight" then
- item=hotbar[i]:to_table()
- if item["metadata"]=="" or item["metadata"]=="0" then return false end --flashlight not charghed
- charge=tonumber(item["metadata"])
- if charge-2>0 then
- charge =charge-2;
- set_RE_wear(item,charge,flashlight_max_charge)
- item["metadata"]=tostring(charge)
- hotbar[i]:replace(item)
- inv:set_stack("main",i,hotbar[i])
- return true
- end
- end
- end
-return false
-end
\ No newline at end of file
+++ /dev/null
-minetest.register_alias("generator", "technic:generator")
-minetest.register_alias("generator", "technic:generator_active")
-
-minetest.register_craft({
- output = 'technic:generator',
- recipe = {
- {'default:stone', 'default:stone', 'default:stone'},
- {'default:stone', '', 'default:stone'},
- {'default:stone', 'moreores:copper_ingot', 'default:stone'},
- }
-})
-
-minetest.register_craftitem("technic:generator", {
- description = "Coal Driven Generator",
- stack_max = 99,
-})
-
-generator_formspec =
- "invsize[8,9;]"..
- "image[0,0;5,5;technic_generator_menu.png]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
--- "label[0,0;Generator]"..
- "label[1,3;Power level]"..
- "list[current_name;src;3,1;1,1;]"..
- "image[4,1;1,1;default_furnace_fire_bg.png]"..
- "list[current_player;main;0,5;8,4;]"
-
-
-minetest.register_node("technic:generator", {
- description = "Coal Driven Generator",
- tiles = {"technic_generator_top.png", "technic_machine_bottom.png", "technic_generator_side.png",
- "technic_generator_side.png", "technic_generator_side.png", "technic_generator_front.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- technic_power_machine=1,
- internal_EU_buffer=0;
- internal_EU_buffer_size=5000;
- burn_time=0;
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("infotext", "Generator")
- meta:set_float("technic_power_machine", 1)
- meta:set_float("internal_EU_buffer", 0)
- meta:set_float("internal_EU_buffer_size", 5000)
- meta:set_string("formspec", generator_formspec)
- meta:set_float("burn_time", 0)
-
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
-
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("src") then
- return false
- end
- return true
- end,
-
-})
-
-minetest.register_node("technic:generator_active", {
- description = "Coal Driven Generator",
- tiles = {"technic_generator_top.png", "technic_machine_bottom.png", "technic_generator_side.png",
- "technic_generator_side.png", "technic_generator_side.png", "technic_generator_front_active.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- drop="technic:generator",
- technic_power_machine=1,
- internal_EU_buffer=0;
- internal_EU_buffer_size=0;
- burn_time=0;
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("src") then
- return false
- end
- return true
- end,
-
-})
-minetest.register_abm({
- nodenames = {"technic:generator","technic:generator_active"},
- interval = 1,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
-
- local meta = minetest.env:get_meta(pos)
- local burn_time= meta:get_float("burn_time")
- local charge= meta:get_float("internal_EU_buffer")
- local max_charge= meta:get_float("internal_EU_buffer_size")
- local burn_charge=200
-
- if burn_time>0 then
- if charge+burn_charge>max_charge then
- burn_charge=max_charge-charge
- end
- if burn_charge>0 then
- burn_time=burn_time-1
- meta:set_float("burn_time",burn_time)
- charge=charge+burn_charge
- meta:set_float("internal_EU_buffer",charge)
- end
-
- end
- if burn_time==0 then
- local inv = meta:get_inventory()
- if inv:is_empty("src")==false then
- local srcstack = inv:get_stack("src", 1)
- src_item=srcstack:to_table()
- if src_item["name"]== "default:coal_lump" then
- srcstack:take_item()
- inv:set_stack("src", 1, srcstack)
- burn_time=16
- meta:set_float("burn_time",burn_time)
- hacky_swap_node (pos,"technic:generator_active")
- end
- end
- end
-
- local load = math.floor((charge/max_charge)*100)
- local percent = math.floor((burn_time/16)*100)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
- (load)..":technic_power_meter_fg.png]"..
- "label[0,0;Generator]"..
- "label[1,3;Power level]"..
- "list[current_name;src;3,1;1,1;]"..
- "image[4,1;1,1;default_furnace_fire_bg.png^[lowpart:"..
- (percent)..":default_furnace_fire_fg.png]"..
- "list[current_player;main;0,5;8,4;]"
- )
-
- if burn_time==0 then
- hacky_swap_node (pos,"technic:generator")
- end
-
-
- end
-})
-
+++ /dev/null
-minetest.register_alias("geothermal", "technic:geothermal")
-
-minetest.register_craft({
- output = 'technic:geothermal',
- recipe = {
- {'default:stone', 'default:stone', 'default:stone'},
- {'moreores:copper_ingot', 'technic:diamond', 'moreores:copper_ingot'},
- {'default:stone', 'moreores:copper_ingot', 'default:stone'},
- }
-})
-
-minetest.register_craftitem("technic:geothermal", {
- description = "Geothermal Generator",
- stack_max = 99,
-})
-
-geothermal_formspec =
- "invsize[8,4;]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
- "label[0,0;Geothermal Generator]"..
- "label[1,3;Power level]"..
- "list[current_player;main;0,5;8,4;]"
-
-
-minetest.register_node("technic:geothermal", {
- description = "Geothermal Generator",
- tiles = {"technic_geothermal_top.png", "technic_machine_bottom.png", "technic_geothermal_side.png",
- "technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- technic_power_machine=1,
- internal_EU_buffer=0;
- internal_EU_buffer_size=5000;
- burn_time=0;
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("infotext", "Geothermal Generator")
- meta:set_float("technic_power_machine", 1)
- meta:set_float("internal_EU_buffer", 0)
- meta:set_float("internal_EU_buffer_size", 2000)
- meta:set_string("formspec", geothermal_formspec)
- end,
-
-})
-
-minetest.register_node("technic:geothermal_active", {
- description = "Geothermal Generator",
- tiles = {"technic_geothermal_top_active.png", "technic_machine_bottom.png", "technic_geothermal_side.png",
- "technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- drop="technic:geothermal",
- technic_power_machine=1,
- internal_EU_buffer=0;
- internal_EU_buffer_size=0;
-})
-
-minetest.register_abm({
- nodenames = {"technic:geothermal","technic:geothermal_active"},
- interval = 1,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
-
- local meta = minetest.env:get_meta(pos)
- local charge= meta:get_float("internal_EU_buffer")
- local max_charge= meta:get_float("internal_EU_buffer_size")
- local water_nodes = 0
- local lava_nodes = 0
- local production_level=0
- local load_step=0
-
- pos.x=pos.x+1
- local check=check_node_around (pos)
- if check==1 then water_nodes=water_nodes+1 end
- if check==2 then lava_nodes=lava_nodes+1 end
- pos.x=pos.x-2
- check=check_node_around (pos)
- if check==1 then water_nodes=water_nodes+1 end
- if check==2 then lava_nodes=lava_nodes+1 end
- pos.x=pos.x+1
- pos.z=pos.z+1
- check=check_node_around (pos)
- if check==1 then water_nodes=water_nodes+1 end
- if check==2 then lava_nodes=lava_nodes+1 end
- pos.z=pos.z-2
- check=check_node_around (pos)
- if check==1 then water_nodes=water_nodes+1 end
- if check==2 then lava_nodes=lava_nodes+1 end
- pos.z=pos.z+1
-
- if water_nodes==1 and lava_nodes==1 then production_level=50 load_step=30 end
- if water_nodes==2 and lava_nodes==1 then production_level=75 load_step=45 end
- if water_nodes==1 and lava_nodes==2 then production_level=75 load_step=45 end
- if water_nodes==2 and lava_nodes==2 then production_level=100 load_step=60 end
- if water_nodes==3 and lava_nodes==1 then production_level=25 load_step=15 end
- if water_nodes==1 and lava_nodes==3 then production_level=25 load_step=15 end
-
- if production_level>0 then
- if charge+load_step>max_charge then
- load_step=max_charge-charge
- end
- if load_step>0 then
- charge=charge+load_step
- meta:set_float("internal_EU_buffer",charge)
- end
- end
-
- local load = math.floor((charge/max_charge)*100)
- meta:set_string("formspec",
- "invsize[8,4;]"..
- "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
- (load)..":technic_power_meter_fg.png]"..
- "label[0,0;Geothermal Generator]"..
- "label[1,3;Power level]"..
- "label[4,0;Production at "..tostring(production_level).."%]"
- )
-
- if production_level>0 and minetest.env:get_node(pos).name=="technic:geothermal" then
- hacky_swap_node (pos,"technic:geothermal_active")
- return
- end
- if production_level==0 then hacky_swap_node (pos,"technic:geothermal") end
-end
-})
-
-function check_node_around (pos)
-local node=minetest.env:get_node(pos)
-if node.name=="default:water_source" or node.name=="default:water_flowing" then return 1 end
-if node.name=="default:lava_source" or node.name=="default:lava_flowing" then return 2 end
-return 0
-end
\ No newline at end of file
+++ /dev/null
-local chest_mark_colors = {
- '_black',
- '_blue',
- '_brown',
- '_cyan',
- '_dark_green',
- '_dark_grey',
- '_green',
- '_grey',
- '_magenta',
- '_orange',
- '_pink',
- '_red',
- '_violet',
- '_white',
- '_yellow',
-}
-
-minetest.register_craft({
- output = 'technic:gold_chest 1',
- recipe = {
- {'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'},
- {'moreores:gold_ingot','technic:silver_chest','moreores:gold_ingot'},
- {'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:gold_locked_chest 1',
- recipe = {
- {'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'},
- {'moreores:gold_ingot','technic:silver_locked_chest','moreores:gold_ingot'},
- {'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:gold_locked_chest 1',
- recipe = {
- {'default:steel_ingot'},
- {'technic:gold_chest'},
- }
-})
-
-minetest.register_craftitem("technic:gold_chest", {
- description = "Gold Chest",
- stack_max = 99,
-})
-minetest.register_craftitem("technic:gold_locked_chest", {
- description = "Gold Locked Chest",
- stack_max = 99,
-})
-
-minetest.register_node("technic:gold_chest", {
- description = "Gold Chest",
- tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
- "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_front.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[12,9;]"..
- "list[current_name;main;0,0;12,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Gold Chest")
- local inv = meta:get_inventory()
- inv:set_size("main", 12*4)
- end,
-
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
-
- on_punch = function (pos, node, puncher)
- chest_punched (pos,node,puncher);
- end,
-
- on_receive_fields = function(pos, formname, fields, sender)
- local meta = minetest.env:get_meta(pos);
- fields.text = fields.text or ""
- meta:set_string("text", fields.text)
- meta:set_string("infotext", '"'..fields.text..'"')
-
- meta:set_string("formspec",
- "invsize[12,9;]"..
- "list[current_name;main;0,0;12,4;]"..
- "list[current_player;main;0,5;8,4;]")
- end,
-
- on_metadata_inventory_move = function(pos, from_list, from_index,
- to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in chest at "..minetest.pos_to_string(pos))
- return minetest.node_metadata_inventory_move_allow_all(
- pos, from_list, from_index, to_list, to_index, count, player)
- end,
- on_metadata_inventory_offer = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to chest at "..minetest.pos_to_string(pos))
- return minetest.node_metadata_inventory_offer_allow_all(
- pos, listname, index, stack, player)
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from chest at "..minetest.pos_to_string(pos))
- end,
-})
-
-for i, state in ipairs(chest_mark_colors) do
-minetest.register_node("technic:gold_chest".. state, {
- description = "Gold Chest",
- tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
- "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_front"..state..".png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, not_in_creative_inventory=1,tubedevice=1,tubedevice_receiver=1},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- drop = "technic:gold_chest",
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[12,9;]"..
- "list[current_name;main;0,0;12,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Gold Chest")
- local inv = meta:get_inventory()
- inv:set_size("main", 12*4)
- end,
-
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
-
- on_punch = function (pos, node, puncher)
- chest_punched (pos,node,puncher);
- end,
-
- on_receive_fields = function(pos, formname, fields, sender)
- local meta = minetest.env:get_meta(pos);
- fields.text = fields.text or ""
- meta:set_string("text", fields.text)
- meta:set_string("infotext", '"'..fields.text..'"')
-
- meta:set_string("formspec",
- "invsize[12,9;]"..
- "list[current_name;main;0,0;12,4;]"..
- "list[current_player;main;0,5;8,4;]")
- end,
-
- on_metadata_inventory_move = function(pos, from_list, from_index,
- to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in chest at "..minetest.pos_to_string(pos))
- return minetest.node_metadata_inventory_move_allow_all(
- pos, from_list, from_index, to_list, to_index, count, player)
- end,
- on_metadata_inventory_offer = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to chest at "..minetest.pos_to_string(pos))
- return minetest.node_metadata_inventory_offer_allow_all(
- pos, listname, index, stack, player)
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from chest at "..minetest.pos_to_string(pos))
- end,
-})
-end
-
-
-local function has_locked_chest_privilege(meta, player)
- if player:get_player_name() ~= meta:get_string("owner") then
- return false
- end
- return true
-end
-
-minetest.register_node("technic:gold_locked_chest", {
- description = "Gold Locked Chest",
- tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
- "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_locked.png"},
- paramtype2 = "facedir",
- drop = "technic:gold_locked_chest",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- after_place_node = function(pos, placer)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("owner", placer:get_player_name() or "")
- meta:set_string("infotext", "Gold Locked Chest (owned by "..
- meta:get_string("owner")..")")
- end,
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[12,9;]"..
- "list[current_name;main;0,0;12,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Gold Locked Chest")
- meta:set_string("owner", "")
- local inv = meta:get_inventory()
- inv:set_size("main", 12*4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
-
- on_punch = function (pos, node, puncher)
- local meta = minetest.env:get_meta(pos);
- if (has_locked_chest_privilege(meta, puncher)) then
- locked_chest_punched (pos,node,puncher);
- end
- end,
-
- on_receive_fields = function(pos, formname, fields, sender)
- local meta = minetest.env:get_meta(pos);
- fields.text = fields.text or ""
- meta:set_string("text", fields.text)
- meta:set_string("infotext", '"'..fields.text..'"')
-
- meta:set_string("formspec",
- "invsize[12,9;]"..
- "list[current_name;main;0,0;12,4;]"..
- "list[current_player;main;0,5;8,4;]")
- end,
-
- allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return count
- end,
- allow_metadata_inventory_put = function(pos, listname, index, stack, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- allow_metadata_inventory_take = function(pos, listname, index, stack, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_put = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from locked chest at "..minetest.pos_to_string(pos))
- end,
-})
-
-for i, state in ipairs(chest_mark_colors) do
-minetest.register_node("technic:gold_locked_chest".. state, {
- description = "Gold Locked Chest",
- tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
- "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_locked"..state..".png"},
- paramtype2 = "facedir",
- drop = "technic:gold_locked_chest",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, not_in_creative_inventory=1,tubedevice=1,tubedevice_receiver=1},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- after_place_node = function(pos, placer)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("owner", placer:get_player_name() or "")
- meta:set_string("infotext", "Gold Locked Chest (owned by "..
- meta:get_string("owner")..")")
- end,
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[12,9;]"..
- "list[current_name;main;0,0;12,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Gold Locked Chest")
- meta:set_string("owner", "")
- local inv = meta:get_inventory()
- inv:set_size("main", 12*4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
-
- on_punch = function (pos, node, puncher)
- local meta = minetest.env:get_meta(pos);
- if (has_locked_chest_privilege(meta, puncher)) then
- locked_chest_punched (pos,node,puncher);
- end
- end,
-
- on_receive_fields = function(pos, formname, fields, sender)
- local meta = minetest.env:get_meta(pos);
- fields.text = fields.text or ""
- meta:set_string("text", fields.text)
- meta:set_string("infotext", '"'..fields.text..'"')
-
- meta:set_string("formspec",
- "invsize[12,9;]"..
- "list[current_name;main;0,0;12,4;]"..
- "list[current_player;main;0,5;8,4;]")
- end,
-
- allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return count
- end,
- allow_metadata_inventory_put = function(pos, listname, index, stack, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- allow_metadata_inventory_take = function(pos, listname, index, stack, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_put = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from locked chest at "..minetest.pos_to_string(pos))
- end,
-})
-end
-
-function chest_punched (pos,node,puncher)
-
- local player_tool = puncher:get_wielded_item();
- local item=player_tool:get_name();
- if item == "dye:black" then
- if (hacky_swap_node(pos,"technic:gold_chest_black")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:blue" then
- if (hacky_swap_node(pos,"technic:gold_chest_blue")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:brown" then
- if (hacky_swap_node(pos,"technic:gold_chest_brown")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:cyan" then
- if (hacky_swap_node(pos,"technic:gold_chest_cyan")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:dark_green" then
- if (hacky_swap_node(pos,"technic:gold_chest_dark_green")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:dark_grey" then
- if (hacky_swap_node(pos,"technic:gold_chest_dark_grey")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:green" then
- if (hacky_swap_node(pos,"technic:gold_chest_green")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:grey" then
- if (hacky_swap_node(pos,"technic:gold_chest_grey")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:magenta" then
- if (hacky_swap_node(pos,"technic:gold_chest_magenta")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:orange" then
- if (hacky_swap_node(pos,"technic:gold_chest_orange")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:pink" then
- if (hacky_swap_node(pos,"technic:gold_chest_pink")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:red" then
- if (hacky_swap_node(pos,"technic:gold_chest_red")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:violet" then
- if (hacky_swap_node(pos,"technic:gold_chest_violet")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:white" then
- if (hacky_swap_node(pos,"technic:gold_chest_white")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:yellow" then
- if (hacky_swap_node(pos,"technic:gold_chest_yellow")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
-
- local meta = minetest.env:get_meta(pos);
- meta:set_string("formspec", "hack:sign_text_input")
- end
-
-
-function locked_chest_punched (pos,node,puncher)
-
- local player_tool = puncher:get_wielded_item();
- local item=player_tool:get_name();
- if item == "dye:black" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_black")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:blue" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_blue")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:brown" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_brown")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:cyan" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_cyan")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:dark_green" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_dark_green")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:dark_grey" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_dark_grey")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:green" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_green")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:grey" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_grey")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:magenta" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_magenta")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:orange" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_orange")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:pink" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_pink")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:red" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_red")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:violet" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_violet")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:white" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_white")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
- if item == "dye:yellow" then
- if (hacky_swap_node(pos,"technic:gold_locked_chest_yellow")) then
- player_tool:take_item(1);
- puncher:set_wielded_item(player_tool);
- return
- end
- end
-
- local meta = minetest.env:get_meta(pos);
- meta:set_string("formspec", "hack:sign_text_input")
- end
-
\ No newline at end of file
+++ /dev/null
-grinder_recipes ={}
-
-registered_grinder_recipes_count=1
-
-function register_grinder_recipe (string1,string2)
-grinder_recipes[registered_grinder_recipes_count]={}
-grinder_recipes[registered_grinder_recipes_count].src_name=string1
-grinder_recipes[registered_grinder_recipes_count].dst_name=string2
-registered_grinder_recipes_count=registered_grinder_recipes_count+1
-end
-
-register_grinder_recipe("default:stone","default:sand")
-register_grinder_recipe("default:cobble","default:gravel")
-register_grinder_recipe("default:gravel","default:dirt")
-register_grinder_recipe("default:desert_stone","default:desert_sand")
-register_grinder_recipe("default:iron_lump","technic:iron_dust 2")
-register_grinder_recipe("default:coal_lump","technic:coal_dust 2")
-register_grinder_recipe("moreores:copper_lump","technic:copper_dust 2")
-register_grinder_recipe("moreores:tin_lump","technic:tin_dust 2")
-register_grinder_recipe("moreores:silver_lump","technic:silver_dust 2")
-register_grinder_recipe("moreores:gold_lump","technic:gold_dust 2")
-register_grinder_recipe("moreores:mithril_lump","technic:mithril_dust 2")
-register_grinder_recipe("technic:chromium_lump","technic:chromium_dust 2")
-register_grinder_recipe("technic:zinc_lump","technic:zinc_dust 2")
-register_grinder_recipe("technic:coal_dust","dye:black 2")
-register_grinder_recipe("default:cactus","dye:green 2")
-register_grinder_recipe("default:dry_shrub","dye:brown 2")
-register_grinder_recipe("flowers:flower_geranium","dye:blue 2")
-register_grinder_recipe("flowers:flower_dandelion_white","dye:white 2")
-register_grinder_recipe("flowers:flower_dandelion_yellow","dye:yellow 2")
-register_grinder_recipe("flowers:flower_tulip","dye:orange 2")
-register_grinder_recipe("flowers:flower_rose","dye:red 2")
-register_grinder_recipe("flowers:flower_viola","dye:violet 2")
-
-
-minetest.register_craftitem( "technic:coal_dust", {
- description = "Coal Dust",
- inventory_image = "technic_coal_dust.png",
- on_place_on_ground = minetest.craftitem_place_item,
- })
-
-minetest.register_craftitem( "technic:iron_dust", {
- description = "Iron Dust",
- inventory_image = "technic_iron_dust.png",
- on_place_on_ground = minetest.craftitem_place_item,
- })
-
-minetest.register_craft({
- type = "cooking",
- output = "default:steel_ingot",
- recipe = "technic:iron_dust",
-})
-
-minetest.register_craftitem( "technic:copper_dust", {
- description = "Copper Dust",
- inventory_image = "technic_copper_dust.png",
- on_place_on_ground = minetest.craftitem_place_item,
- })
-minetest.register_craft({
- type = "cooking",
- output = "moreores:copper_ingot",
- recipe = "technic:copper_dust",
-})
-
-minetest.register_craftitem( "technic:tin_dust", {
- description = "Tin Dust",
- inventory_image = "technic_tin_dust.png",
- on_place_on_ground = minetest.craftitem_place_item,
- })
-minetest.register_craft({
- type = "cooking",
- output = "moreores:tin_ingot",
- recipe = "technic:tin_dust",
-})
-
-minetest.register_craftitem( "technic:silver_dust", {
- description = "Silver Dust",
- inventory_image = "technic_silver_dust.png",
- on_place_on_ground = minetest.craftitem_place_item,
- })
-minetest.register_craft({
- type = "cooking",
- output = "moreores:silver_ingot",
- recipe = "technic:silver_dust",
-})
-
-minetest.register_craftitem( "technic:gold_dust", {
- description = "Gold Dust",
- inventory_image = "technic_gold_dust.png",
- on_place_on_ground = minetest.craftitem_place_item,
- })
-minetest.register_craft({
- type = "cooking",
- output = "moreores:gold_ingot",
- recipe = "technic:gold_dust",
-})
-
-minetest.register_craftitem( "technic:mithril_dust", {
- description = "Mithril Dust",
- inventory_image = "technic_mithril_dust.png",
- on_place_on_ground = minetest.craftitem_place_item,
- })
-minetest.register_craft({
- type = "cooking",
- output = "moreores:mithril_ingot",
- recipe = "technic:mithril_dust",
-})
-
-minetest.register_craftitem( "technic:chromium_dust", {
- description = "Chromium Dust",
- inventory_image = "technic_chromium_dust.png",
- on_place_on_ground = minetest.craftitem_place_item,
- })
-minetest.register_craft({
- type = "cooking",
- output = "technic:chromium_ingot",
- recipe = "technic:chromium_dust",
-})
-
-minetest.register_craftitem( "technic:bronze_dust", {
- description = "Bronze Dust",
- inventory_image = "technic_bronze_dust.png",
- on_place_on_ground = minetest.craftitem_place_item,
- })
-minetest.register_craft({
- type = "cooking",
- output = "moreores:bronze_ingot",
- recipe = "technic:bronze_dust",
-})
-
-minetest.register_craftitem( "technic:brass_dust", {
- description = "Brass Dust",
- inventory_image = "technic_brass_dust.png",
- on_place_on_ground = minetest.craftitem_place_item,
- })
-minetest.register_craft({
- type = "cooking",
- output = "technic:brass_ingot",
- recipe = "technic:brass_dust",
-})
-
-minetest.register_craftitem( "technic:stainless_steel_dust", {
- description = "Stainless Steel Dust",
- inventory_image = "technic_stainless_steel_dust.png",
- })
-
-minetest.register_craft({
- type = "cooking",
- output = "technic:stainless_steel_ingot",
- recipe = "technic:stainless_steel_dust",
-})
-
-minetest.register_craftitem( "technic:zinc_dust", {
- description = "Zinc Dust",
- inventory_image = "technic_zinc_dust.png",
- })
-
-minetest.register_craft({
- type = "cooking",
- output = "technic:zinc_ingot",
- recipe = "technic:zinc_dust",
-})
-
-minetest.register_alias("grinder", "technic:grinder")
-minetest.register_craft({
- output = 'technic:grinder',
- recipe = {
- {'default:desert_stone', 'default:desert_stone', 'default:desert_stone'},
- {'default:desert_stone', 'technic:diamond', 'default:desert_stone'},
- {'default:stone', 'moreores:copper_ingot', 'default:stone'},
- }
-})
-
-minetest.register_craftitem("technic:grinder", {
- description = "Grinder",
- stack_max = 99,
-})
-
-grinder_formspec =
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
- "label[0,0;Grinder]"..
- "label[1,3;Power level]"..
- "list[current_name;src;3,1;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]"
-
-
-minetest.register_node("technic:grinder", {
- description = "Grinder",
- tiles = {"technic_grinder_top.png", "technic_machine_bottom.png", "technic_grinder_side.png",
- "technic_grinder_side.png", "technic_grinder_side.png", "technic_grinder_front.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- technic_power_machine=1,
- internal_EU_buffer=0;
- internal_EU_buffer_size=5000;
- grind_time=0;
- grinded = nil;
- src_time = 0;
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("infotext", "Grinder")
- meta:set_float("technic_power_machine", 1)
- meta:set_float("internal_EU_buffer", 0)
- meta:set_float("internal_EU_buffer_size", 5000)
- meta:set_string("formspec", grinder_formspec)
- meta:set_float("grind_time", 0)
-
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- inv:set_size("dst", 4)
-
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("src") then
- return false
- end
- if not inv:is_empty("dst") then
- return false
- end
-
- return true
- end,
-
-})
-
-minetest.register_abm({
- nodenames = {"technic:grinder"},
- interval = 1,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
-
- local meta = minetest.env:get_meta(pos)
- local charge= meta:get_float("internal_EU_buffer")
- local max_charge= meta:get_float("internal_EU_buffer_size")
- local grind_cost=200
-
- local load = math.floor((charge/max_charge)*100)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
- (load)..":technic_power_meter_fg.png]"..
- "label[0,0;Grinder]"..
- "label[1,3;Power level]"..
- "list[current_name;src;3,1;1,1;]"..
- "list[current_name;dst;5,1;2,2;]"..
- "list[current_player;main;0,5;8,4;]"
- )
-
-
-
- local inv = meta:get_inventory()
-
--- local grinder_on = meta:get_float("grinder_on")
-
-
- local srclist = inv:get_list("src")
- if inv:is_empty("src") then meta:set_float("grinder_on",0) end
-
-
- if (meta:get_float("grinder_on") == 1) then
- if charge>=grind_cost then
- charge=charge-grind_cost;
- meta:set_float("internal_EU_buffer",charge)
- meta:set_float("src_time", meta:get_float("src_time") + 1)
- if meta:get_float("src_time") >= meta:get_float("grind_time") then
- -- check if there's room for output in "dst" list
- grinded = get_grinded_item (inv:get_stack("src", 1))
- if inv:room_for_item("dst",grinded) then
- -- Put result in "dst" list
- inv:add_item("dst", grinded)
- -- take stuff from "src" list
- srcstack = inv:get_stack("src", 1)
- srcstack:take_item()
- inv:set_stack("src", 1, srcstack)
- if inv:is_empty("src") then meta:set_float("grinder_on",0) end
-
-
-
- else
- print("Grinder inventory full!")
- end
- meta:set_float("src_time", 0)
- end
- end
- end
-
- if (meta:get_float("grinder_on")==0) then
- local grinded=nil
- if not inv:is_empty("src") then
- grinded = get_grinded_item (inv:get_stack("src", 1))
- if grinded then meta:set_float("grinder_on",1) end
- grind_time=4
- meta:set_float("grind_time",grind_time)
- meta:set_float("src_time", 0)
- return
- end
- end
-
-
- end
-})
-
-function get_grinded_item (items)
-new_item =nil
-src_item=items:to_table()
-item_name=src_item["name"]
-
-local counter=registered_grinder_recipes_count-1
-for i=1, counter,1 do
-if grinder_recipes[i].src_name==item_name then return ItemStack(grinder_recipes[i].dst_name) end
-end
-return nil
-
-end
\ No newline at end of file
+++ /dev/null
--- Minetest 0.4.3 : technic
-
-minetest.register_alias("rebar", "technic:rebar")
-minetest.register_alias("concrete", "technic:concrete")
-minetest.register_alias("concrete_post", "technic:concrete_post")
-minetest.register_alias("iron_chest", "technic:iron_chest")
-minetest.register_alias("iron_locked_chest", "technic:iron_locked_chest")
-minetest.register_alias("copper_chest", "technic:copper_chest")
-minetest.register_alias("copper_locked_chest", "technic:copper_locked_chest")
-minetest.register_alias("silver_chest", "technic:silver_chest")
-minetest.register_alias("silver_locked_chest", "technic:silver_locked_chest")
-minetest.register_alias("gold_chest", "technic:gold_chest")
-minetest.register_alias("gold_locked_chest", "technic:gold_locked_chest")
-minetest.register_alias("mithril_chest", "technic:mithril_chest")
-minetest.register_alias("mithril_locked_chest", "technic:mithril_locked_chest")
-
-
-modpath=minetest.get_modpath("technic")
-
---Read technic config file
-dofile(modpath.."/config.lua")
-
-dofile(modpath.."/concrete.lua")
-dofile(modpath.."/iron_chest.lua")
-dofile(modpath.."/copper_chest.lua")
-dofile(modpath.."/silver_chest.lua")
-dofile(modpath.."/gold_chest.lua")
-dofile(modpath.."/mithril_chest.lua")
-dofile(modpath.."/electric_furnace.lua")
-dofile(modpath.."/battery_box.lua")
-dofile(modpath.."/wires.lua")
-dofile(modpath.."/wires_mv.lua")
-dofile(modpath.."/ores.lua")
-dofile(modpath.."/tool_workshop.lua")
-dofile(modpath.."/music_player.lua")
-dofile(modpath.."/grinder.lua")
-dofile(modpath.."/mining_laser_mk1.lua")
-dofile(modpath.."/injector.lua")
-dofile(modpath.."/generator.lua")
-dofile(modpath.."/solar_panel.lua")
-dofile(modpath.."/geothermal.lua")
-dofile(modpath.."/water_mill.lua")
-dofile(modpath.."/alloy_furnace.lua")
-dofile(modpath.."/items.lua")
-dofile(modpath.."/mining_drill.lua")
-dofile(modpath.."/screwdriver.lua")
-dofile(modpath.."/sonic_screwdriver.lua")
-dofile(modpath.."/node_breaker.lua")
-dofile(modpath.."/deployer.lua")
-dofile(modpath.."/constructor.lua")
-dofile(modpath.."/tree_tap.lua")
-dofile(modpath.."/flashlight.lua")
-dofile(modpath.."/cans.lua")
-dofile(modpath.."/chainsaw.lua")
-
-if enable_item_drop then dofile(modpath.."/item_drop.lua") end
-if enable_item_pickup then dofile(modpath.."/item_pickup.lua") end
-
---MV machines
-dofile(modpath.."/solar_panel_mv.lua")
-dofile(modpath.."/battery_box_mv.lua")
-
-
-function has_locked_chest_privilege(meta, player)
- if player:get_player_name() ~= meta:get_string("owner") then
- return false
- end
- return true
-end
-
-
-function hacky_swap_node(pos,name)
- local node = minetest.env:get_node(pos)
- local meta = minetest.env:get_meta(pos)
- local meta0 = meta:to_table()
- if node.name == name then
- return nil
- end
- node.name = name
- local meta0 = meta:to_table()
- minetest.env:set_node(pos,node)
- meta = minetest.env:get_meta(pos)
- meta:from_table(meta0)
- return 1
-end
\ No newline at end of file
+++ /dev/null
-minetest.register_craftitem("technic:injector", {
- description = "Injector",
- stack_max = 99,
-})
-
-minetest.register_node("technic:injector", {
- description = "Injector",
- tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png",
- "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_front.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[9,9;]"..
- "list[current_name;main;0,2;8,2;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Injector")
- local inv = meta:get_inventory()
- inv:set_size("main", 8*4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
- on_punch = function (pos, node, puncher)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- for _,stack in ipairs(inv:get_list("main")) do
- if stack:get_name() ~="" then
- inv:remove_item("main",stack)
- pos1=pos
- pos1.y=pos1.y
- local x=pos1.x+1.5
- local z=pos1.z
- item1=tube_item({x=pos1.x,y=pos1.y,z=pos1.z},stack)
- item1:get_luaentity().start_pos = {x=pos1.x,y=pos1.y,z=pos1.z}
- item1:setvelocity({x=1, y=0, z=0})
- item1:setacceleration({x=0, y=0, z=0})
- return
- end
- end
-end,
-})
-
-
-function tube_item(pos, item)
- local TUBE_nodes = {}
- local CHEST_nodes = {}
-
- TUBE_nodes[1]={}
- TUBE_nodes[1].x=pos.x
- TUBE_nodes[1].y=pos.y
- TUBE_nodes[1].z=pos.z
-
-
-table_index=1
- repeat
- check_TUBE_node (TUBE_nodes,CHEST_nodes,table_index)
- table_index=table_index+1
- if TUBE_nodes[table_index]==nil then break end
- until false
-found=table_index-1
-
-
-print("Found "..found.." tubes connected")
-print(dump(CHEST_nodes))
- -- Take item in any format
- local stack = ItemStack(item)
- local obj = minetest.env:add_entity(pos, "technic:tubed_item")
- obj:get_luaentity():set_item(stack:to_string())
- return obj
-end
-
-minetest.register_entity("technic:tubed_item", {
- initial_properties = {
- hp_max = 1,
- physical = false,
- collisionbox = {0,0,0,0,0,0},
- visual = "sprite",
- visual_size = {x=0.5, y=0.5},
- textures = {""},
- spritediv = {x=1, y=1},
- initial_sprite_basepos = {x=0, y=0},
- is_visible = false,
- start_pos={},
- route={}
- },
-
- itemstring = '',
- physical_state = false,
-
- set_item = function(self, itemstring)
- self.itemstring = itemstring
- local stack = ItemStack(itemstring)
- local itemtable = stack:to_table()
- local itemname = nil
- if itemtable then
- itemname = stack:to_table().name
- end
- local item_texture = nil
- local item_type = ""
- if minetest.registered_items[itemname] then
- item_texture = minetest.registered_items[itemname].inventory_image
- item_type = minetest.registered_items[itemname].type
- end
- prop = {
- is_visible = true,
- visual = "sprite",
- textures = {"unknown_item.png"}
- }
- if item_texture and item_texture ~= "" then
- prop.visual = "sprite"
- prop.textures = {item_texture}
- prop.visual_size = {x=0.3, y=0.3}
- else
- prop.visual = "wielditem"
- prop.textures = {itemname}
- prop.visual_size = {x=0.15, y=0.15}
- end
- self.object:set_properties(prop)
- end,
-
- get_staticdata = function(self)
-
- return minetest.serialize({
- itemstring=self.itemstring,
- velocity=self.object:getvelocity(),
- start_pos=self.start_pos
- })
- end,
-
- on_activate = function(self, staticdata)
--- print (dump(staticdata))
- if staticdata=="" or staticdata==nil then return end
- local item = minetest.deserialize(staticdata)
- local stack = ItemStack(item.itemstring)
- local itemtable = stack:to_table()
- local itemname = nil
- if itemtable then
- itemname = stack:to_table().name
- end
-
- if itemname then
- self.start_pos=item.start_pos
- self.object:setvelocity(item.velocity)
- self.object:setacceleration({x=0, y=0, z=0})
- self.object:setpos(item.start_pos)
- end
- self:set_item(item.itemstring)
- end,
-
- on_step = function(self, dtime)
- if self.start_pos then
- local pos = self.object:getpos()
- local node = minetest.env:get_node(pos)
- local meta = minetest.env:get_meta(pos)
- tubelike=meta:get_int("tubelike")
- local stack = ItemStack(self.itemstring)
- local drop_pos=nil
-
- local velocity=self.object:getvelocity()
-
- if velocity==nil then print ("wypadl") return end
-
- if math.abs(velocity.x)==1 then
- local next_node=math.abs(pos.x-self.start_pos.x)
- if next_node >= 1 then
- self.start_pos.x=self.start_pos.x+velocity.x
- if check_pos_vector (self.start_pos, velocity)==0 then
- if check_next_step (self.start_pos, velocity)==0 then
- drop_pos=minetest.env:find_node_near({x=self.start_pos.x,y=self.start_pos.y,z=self.start_pos.z+velocity.x}, 1, "air")
- if drop_pos then minetest.item_drop(stack, "", drop_pos) end
- self.object:remove()
- end
- self.object:setpos(self.start_pos)
- self.object:setvelocity(velocity)
- return
- end
- end
- end
-
- if math.abs(velocity.y)==1 then
- local next_node=math.abs(pos.y-self.start_pos.y)
- if next_node >= 1 then
- self.start_pos.y=self.start_pos.y+velocity.y
- if check_pos_vector (self.start_pos, velocity)==0 then
- if check_next_step (self.start_pos, velocity)==0 then
- drop_pos=minetest.env:find_node_near({x=self.start_pos.x+velocity.x,y=self.start_pos.y+velocity.y,z=self.start_pos.z+velocity.z}, 1, "air")
- if drop_pos then minetest.item_drop(stack, "", drop_pos) end
- self.object:remove()
- end
- self.object:setpos(self.start_pos)
- self.object:setvelocity(velocity)
- return
- end
- end
- end
-
- if math.abs(velocity.z)==1 then
- local next_node=math.abs(pos.z-self.start_pos.z)
- if next_node >= 1 then
- self.start_pos.z=self.start_pos.z+velocity.z
- if check_pos_vector (self.start_pos, velocity)==0 then
- if check_next_step (self.start_pos, velocity)==0 then
- drop_pos=minetest.env:find_node_near({x=self.start_pos.x+velocity.x,y=self.start_pos.y+velocity.y,z=self.start_pos.z+velocity.z}, 1, "air")
- if drop_pos then minetest.item_drop(stack, "", drop_pos) end
- self.object:remove()
- end
- self.object:setpos(self.start_pos)
- self.object:setvelocity(velocity)
- return
- end
- end
- end
- end
-
-end
-})
-
-
-function check_next_step (pos,velocity)
-local meta
-local tubelike
-
-if velocity.x==0 then
-meta = minetest.env:get_meta({x=pos.x-1,y=pos.y,z=pos.z})
-tubelike=meta:get_int("tubelike")
-if tubelike==1 then velocity.x=-1 velocity.y=0 velocity.z=0 return 1 end
-meta = minetest.env:get_meta({x=pos.x+1,y=pos.y,z=pos.z})
-tubelike=meta:get_int("tubelike")
-if tubelike==1 then velocity.x=1 velocity.y=0 velocity.z=0 return 1 end
-end
-
-if velocity.z==0 then
-meta = minetest.env:get_meta({x=pos.x,y=pos.y,z=pos.z+1})
-tubelike=meta:get_int("tubelike")
-if tubelike==1 then velocity.x=0 velocity.y=0 velocity.z=1 return 1 end
-meta = minetest.env:get_meta({x=pos.x,y=pos.y,z=pos.z-1})
-tubelike=meta:get_int("tubelike")
-if tubelike==1 then velocity.x=0 velocity.y=0 velocity.z=-1 return 1 end
-end
-
-if velocity.y==0 then
-meta = minetest.env:get_meta({x=pos.x,y=pos.y+1,z=pos.z})
-tubelike=meta:get_int("tubelike")
-if tubelike==1 then velocity.x=0 velocity.y=1 velocity.z=0 return 1 end
-meta = minetest.env:get_meta({x=pos.x,y=pos.y-1,z=pos.z})
-tubelike=meta:get_int("tubelike")
-if tubelike==1 then velocity.x=0 velocity.y=-1 velocity.z=0 return 1 end
-end
-
-print ("spadl")
-return 0
-end
-
-function check_pos_vector (pos,velocity)
-added={}
-added.x=pos.x+velocity.x
-added.y=pos.y+velocity.y
-added.z=pos.z+velocity.z
-local meta=minetest.env:get_meta(added)
---print(dump(added).." : "..tubelike)
-if meta:get_int("tubelike")==1 then return 1 end
-return 0
-end
-
-function add_new_TUBE_node (TUBE_nodes,pos1,parent)
-local i=1
- repeat
- if TUBE_nodes[i]==nil then break end
- if pos1.x==TUBE_nodes[i].x and pos1.y==TUBE_nodes[i].y and pos1.z==TUBE_nodes[i].z then return false end
- i=i+1
- until false
-TUBE_nodes[i]={}
-TUBE_nodes[i].x=pos1.x
-TUBE_nodes[i].y=pos1.y
-TUBE_nodes[i].z=pos1.z
-TUBE_nodes[i].parent_x=parent.x
-TUBE_nodes[i].parent_y=parent.y
-TUBE_nodes[i].parent_z=parent.z
-
-return true
-end
-
-function check_TUBE_node (TUBE_nodes,CHEST_nodes,i)
- local pos1={}
- local parent={}
- pos1.x=TUBE_nodes[i].x
- pos1.y=TUBE_nodes[i].y
- pos1.z=TUBE_nodes[i].z
- parent.x=pos1.x
- parent.y=pos1.y
- parent.z=pos1.z
- new_node_added=false
-
- pos1.x=pos1.x+1
- check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
- pos1.x=pos1.x-2
- check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
- pos1.x=pos1.x+1
-
- pos1.y=pos1.y+1
- check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
- pos1.y=pos1.y-2
- check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
- pos1.y=pos1.y+1
-
- pos1.z=pos1.z+1
- check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
- pos1.z=pos1.z-2
- check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
- pos1.z=pos1.z+1
-return new_node_added
-end
-
-function check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
-meta = minetest.env:get_meta(pos1)
-if meta:get_float("tubelike")==1 then add_new_TUBE_node(TUBE_nodes,pos1,parent) return end
-nctr = minetest.env:get_node(pos1)
-if minetest.get_item_group(nctr.name, "tubedevice_receiver") == 1 then add_new_TUBE_node(CHEST_nodes,pos1,parent) return end
-end
\ No newline at end of file
+++ /dev/null
-minetest.register_craft({
- output = 'technic:iron_chest 1',
- recipe = {
- {'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
- {'default:steel_ingot','default:chest','default:steel_ingot'},
- {'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:iron_locked_chest 1',
- recipe = {
- {'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
- {'default:steel_ingot','default:chest_locked','default:steel_ingot'},
- {'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:iron_locked_chest 1',
- recipe = {
- {'default:steel_ingot'},
- {'technic:iron_chest'},
- }
-})
-
-
-minetest.register_craftitem("technic:iron_chest", {
- description = "Iron Chest",
- stack_max = 99,
-})
-minetest.register_craftitem("technic:iron_locked_chest", {
- description = "Iron Locked Chest",
- stack_max = 99,
-})
-
-minetest.register_alias("blabla", "technic:iron_chest")
-
-minetest.register_node("technic:iron_chest", {
- description = "Iron Chest",
- tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png",
- "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_front.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[9,9;]"..
- "list[current_name;main;0,0;9,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Iron Chest")
- local inv = meta:get_inventory()
- inv:set_size("main", 9*4)
- end,
-
- after_place_node = function(pos, placer)
- ntop1 = minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z})
- ntop = minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z})
- if ntop.name ~= "air" then
- minetest.node_dig(pos, ntop1, placer)
- end
- end,
-
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
- on_metadata_inventory_move = function(pos, from_list, from_index,
- to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in chest at "..minetest.pos_to_string(pos))
- return minetest.node_metadata_inventory_move_allow_all(
- pos, from_list, from_index, to_list, to_index, count, player)
- end,
- on_metadata_inventory_offer = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to chest at "..minetest.pos_to_string(pos))
- return minetest.node_metadata_inventory_offer_allow_all(
- pos, listname, index, stack, player)
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from chest at "..minetest.pos_to_string(pos))
- end,
-})
-
-local function has_locked_chest_privilege(meta, player)
- if player:get_player_name() ~= meta:get_string("owner") then
- return false
- end
- return true
-end
-
-minetest.register_node("technic:iron_locked_chest", {
- description = "Iron Locked Chest",
- tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png",
- "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_locked.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- after_place_node = function(pos, placer)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("owner", placer:get_player_name() or "")
- meta:set_string("infotext", "Locked Iron Chest (owned by "..
- meta:get_string("owner")..")")
- end,
-on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[9,9;]"..
- "list[current_name;main;0,0;9,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Iron Locked Chest")
- meta:set_string("owner", "")
- local inv = meta:get_inventory()
- inv:set_size("main", 9*4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
- allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return count
- end,
- allow_metadata_inventory_put = function(pos, listname, index, stack, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- allow_metadata_inventory_take = function(pos, listname, index, stack, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_put = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from locked chest at "..minetest.pos_to_string(pos))
- end,
-})
-
-function add_item (player)
-player:get_inventory():add_item("main", "blabla 1")
-end
\ No newline at end of file
+++ /dev/null
--- This part written by PilzAdam (item_drop mod)
-
-minetest.register_globalstep(function(dtime)
- for _,player in ipairs(minetest.get_connected_players()) do
- local pos = player:getpos()
- pos.y = pos.y+0.5
- local inv = player:get_inventory()
-
- for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do
- if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
- if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
- inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
- if object:get_luaentity().itemstring ~= "" then
- minetest.sound_play("item_drop_pickup", {
- to_player = player:get_player_name(),
- })
- end
- object:get_luaentity().itemstring = ""
- object:remove()
- end
- end
- end
-
- for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 2)) do
- if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
- if object:get_luaentity().collect then
- if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
- local pos1 = pos
- pos1.y = pos1.y+0.2
- local pos2 = object:getpos()
- local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z}
- vec.x = vec.x*3
- vec.y = vec.y*3
- vec.z = vec.z*3
- object:setvelocity(vec)
-
- minetest.after(1, function(args)
- local lua = object:get_luaentity()
- if object == nil or lua == nil or lua.itemstring == nil then
- return
- end
- if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
- inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
- if object:get_luaentity().itemstring ~= "" then
- minetest.sound_play("item_drop_pickup", {
- to_player = player:get_player_name(),
- })
- end
- object:get_luaentity().itemstring = ""
- object:remove()
- else
- object:setvelocity({x=0,y=0,z=0})
- end
- end, {player, object})
-
- end
- end
- end
- end
- end
-end)
-
-function minetest.handle_node_drops(pos, drops, digger)
- for _,item in ipairs(drops) do
- local count, name
- if type(item) == "string" then
- count = 1
- name = item
- else
- count = item:get_count()
- name = item:get_name()
- end
- for i=1,count do
- local obj = minetest.env:add_item(pos, name)
- if obj ~= nil then
- obj:get_luaentity().collect = true
- local x = math.random(1, 5)
- if math.random(1,2) == 1 then
- x = -x
- end
- local z = math.random(1, 5)
- if math.random(1,2) == 1 then
- z = -z
- end
- obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z})
-
- -- FIXME this doesnt work for deactiveted objects
- if minetest.setting_get("remove_items") and tonumber(minetest.setting_get("remove_items")) then
- minetest.after(tonumber(minetest.setting_get("remove_items")), function(obj)
- obj:remove()
- end, obj)
- end
- end
- end
- end
-end
-
-if minetest.setting_get("log_mods") then
- minetest.log("action", "item_drop loaded")
-end
+++ /dev/null
-minetest.register_globalstep(function(dtime)
- for _,player in ipairs(minetest.get_connected_players()) do
- local pos = player:getpos()
- pos.y = pos.y+0.5
- local inv = player:get_inventory()
-
- for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do
- if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
- if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
- inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
- if object:get_luaentity().itemstring ~= "" then
- minetest.sound_play("item_drop_pickup", {
- to_player = player:get_player_name(),
- })
- end
- object:get_luaentity().itemstring = ""
- object:remove()
- end
- end
- end
-
- for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 2)) do
- if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
- if object:get_luaentity().collect then
- if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
- local pos1 = pos
- pos1.y = pos1.y+0.2
- local pos2 = object:getpos()
- local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z}
- vec.x = vec.x*3
- vec.y = vec.y*3
- vec.z = vec.z*3
- object:setvelocity(vec)
-
- minetest.after(1, function(args)
- local lua = object:get_luaentity()
- if object == nil or lua == nil or lua.itemstring == nil then
- return
- end
- if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
- inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
- if object:get_luaentity().itemstring ~= "" then
- minetest.sound_play("item_drop_pickup", {
- to_player = player:get_player_name(),
- })
- end
- object:get_luaentity().itemstring = ""
- object:remove()
- else
- object:setvelocity({x=0,y=0,z=0})
- end
- end, {player, object})
-
- end
- else
- minetest.after(0.5, function(entity)
- entity.collect = true
- end, object:get_luaentity())
- end
- end
- end
- end
-end)
+++ /dev/null
-minetest.register_craftitem( "technic:silicon_wafer", {
- description = "Silicon Wafer",
- inventory_image = "technic_silicon_wafer.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craftitem( "technic:doped_silicon_wafer", {
- description = "Doped Silicon Wafer",
- inventory_image = "technic_doped_silicon_wafer.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craft({
- output = 'pipeworks:tube_000000 9',
- recipe = {
- {'technic:stainless_steel_ingot', 'default:glass', 'technic:stainless_steel_ingot'},
- {'technic:stainless_steel_ingot', 'default:glass', 'technic:stainless_steel_ingot'},
- {'technic:stainless_steel_ingot', 'default:glass', 'technic:stainless_steel_ingot'},
- }
-})
-
-minetest.register_craftitem( "technic:diamond_drill_head", {
- description = "Diamond Drill Head",
- inventory_image = "technic_diamond_drill_head.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craft({
- output = 'technic:diamond_drill_head',
- recipe = {
- {'technic:stainless_steel_ingot', 'technic:diamond', 'technic:stainless_steel_ingot'},
- {'technic:diamond', '', 'technic:diamond'},
- {'technic:stainless_steel_ingot', 'technic:diamond', 'technic:stainless_steel_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:diamond_block',
- recipe = {
- {'technic:diamond', 'technic:diamond', 'technic:diamond'},
- {'technic:diamond', 'technic:diamond', 'technic:diamond'},
- {'technic:diamond', 'technic:diamond', 'technic:diamond'},
- }
-})
-
-minetest.register_node( "technic:diamond_block", {
- description = "Diamond Block",
- tiles = { "technic_diamond_block.png" },
- is_ground_content = true,
- groups = {cracky=3},
- sounds = default.node_sound_stone_defaults(),
- drop = 'craft "technic:diamond_block" 1',
-})
-
-minetest.register_craft({
- output = 'technic:green_energy_crystal',
- recipe = {
- {'moreores:gold_ingot', 'technic:battery', 'group:dye,basecolor_green'},
- {'technic:battery', 'technic:red_energy_crystal', 'technic:battery'},
- {'group:dye,basecolor_green', 'technic:battery', 'moreores:gold_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:blue_energy_crystal',
- recipe = {
- {'moreores:gold_ingot', 'technic:battery', 'group:dye,basecolor_blue'},
- {'technic:battery', 'technic:green_energy_crystal', 'technic:battery'},
- {'group:dye,basecolor_green', 'technic:battery', 'moreores:gold_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:red_energy_crystal',
- recipe = {
- {'moreores:gold_ingot', 'technic:battery', 'group:dye,basecolor_red'},
- {'technic:battery', 'technic:diamond_block', 'technic:battery'},
- {'group:dye,basecolor_red', 'technic:battery', 'moreores:gold_ingot'},
- }
-})
-
-minetest.register_tool("technic:blue_energy_crystal",
-{description = "Blue Energy Crystal",
-inventory_image = minetest.inventorycube("technic_diamond_block_blue.png", "technic_diamond_block_blue.png", "technic_diamond_block_blue.png"),
-tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}})
-
-minetest.register_tool("technic:green_energy_crystal",
-{description = "Green Energy Crystal",
-inventory_image = minetest.inventorycube("technic_diamond_block_green.png", "technic_diamond_block_green.png", "technic_diamond_block_green.png"),
-tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}})
-
-minetest.register_tool("technic:red_energy_crystal",
-{description = "Red Energy Crystal",
-inventory_image = minetest.inventorycube("technic_diamond_block_red.png", "technic_diamond_block_red.png", "technic_diamond_block_red.png"),
-tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}})
-
-
-minetest.register_craftitem( "technic:fine_copper_wire", {
- description = "Fine Copper Wire",
- inventory_image = "technic_fine_copper_wire.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craft({
- output = 'technic:fine_copper_wire 2',
- recipe = {
- {'', 'moreores:copper_ingot', ''},
- {'', 'moreores:copper_ingot', ''},
- {'', 'moreores:copper_ingot', ''},
- }
-})
-
-minetest.register_craftitem( "technic:copper_coil", {
- description = "Copper Coil",
- inventory_image = "technic_copper_coil.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craft({
- output = 'technic:copper_coil 1',
- recipe = {
- {'technic:fine_copper_wire', 'default:steel_ingot', 'technic:fine_copper_wire'},
- {'default:steel_ingot', '', 'default:steel_ingot'},
- {'technic:fine_copper_wire', 'default:steel_ingot', 'technic:fine_copper_wire'},
- }
-})
-
-minetest.register_craftitem( "technic:motor", {
- description = "Electric Motor",
- inventory_image = "technic_motor.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craft({
- output = 'technic:motor',
- recipe = {
- {'default:steel_ingot', 'technic:copper_coil', 'default:steel_ingot'},
- {'default:steel_ingot', 'technic:copper_coil', 'default:steel_ingot'},
- {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
- }
-})
-
-minetest.register_craftitem( "technic:mv_transformer", {
- description = "Medium Voltage Transformer",
- inventory_image = "technic_mv_transformer.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craft({
- output = 'technic:mv_transformer',
- recipe = {
- {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
- {'technic:copper_coil', 'default:steel_ingot', 'technic:copper_coil'},
- {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
- }
-})
-
+++ /dev/null
-mining_drill_max_charge=60000
-
-minetest.register_tool("technic:mining_drill", {
- description = "Mining Drill",
- inventory_image = "technic_mining_drill.png",
- stack_max = 1,
- on_use = function(itemstack, user, pointed_thing)
- if pointed_thing.type=="node" then
- item=itemstack:to_table()
- if item["metadata"]=="" or item["metadata"]=="0" then return end --tool not charged
- charge=tonumber(item["metadata"])
- if charge-200>0 then
- drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user)
- charge =charge-200;
- item["metadata"]=tostring(charge)
- set_RE_wear(item,charge,mining_drill_max_charge)
- itemstack:replace(item)
- end
- return itemstack
- end
- end,
-})
-
-minetest.register_craft({
- output = 'technic:mining_drill',
- recipe = {
- {'technic:stainless_steel_ingot', 'technic:diamond_drill_head', 'technic:stainless_steel_ingot'},
- {'technic:stainless_steel_ingot', 'technic:red_energy_crystal', 'technic:stainless_steel_ingot'},
- {'', 'moreores:copper_ingot', ''},
- }
-})
-
-
-
-
-
-
-function drill_dig_it (pos, player)
- local node=minetest.env:get_node(pos)
- if node.name == "air" or node.name == "ignore" then return end
- if node.name == "default:lava_source" then return end
- if node.name == "default:lava_flowing" then return end
- if node.name == "default:water_source" then minetest.env:remove_node(pos) return end
- if node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end
-
- minetest.sound_play("mining_drill", {pos = pos, gain = 1.0, max_hear_distance = 10,})
- minetest.node_dig(pos,node,player)
-
-end
\ No newline at end of file
+++ /dev/null
-laser_mk1_max_charge=40000
-local laser_shoot = function(itemstack, player, pointed_thing)
- local laser_straight_mode=0
- local playerpos=player:getpos()
- local dir=player:get_look_dir()
- if pointed_thing.type=="node" then
- pos=minetest.get_pointed_thing_position(pointed_thing, above)
- local node = minetest.env:get_node(pos)
- if node.name~="ignore" then
- minetest.node_dig(pos,node,player)
- end
- laser_straight_mode=1
- end
-
- direction_y=math.abs(math.floor(dir.y*100))
- if direction_y>50 then entity_name="technic:laser_beam_entityV"
- else entity_name="technic:laser_beam_entity" end
-
- if laser_straight_mode==1 then
- pos1=minetest.get_pointed_thing_position(pointed_thing, under)
- pos1.x=math.floor(pos1.x)
- pos1.y=math.floor(pos1.y)
- pos1.z=math.floor(pos1.z)
- obj=minetest.env:add_entity(pos1,entity_name)
- else
- obj=minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.6,z=playerpos.z},entity_name)
- end
- if obj:get_luaentity().player == nil then
- obj:get_luaentity().player = player
- end
- if laser_straight_mode==1 and direction_y<50 then
- obj:setvelocity({x=dir.x*8, y=0, z=dir.z*8})
- else if laser_straight_mode==1 and direction_y>50 then
- obj:setvelocity({x=0, y=dir.y*8, z=dir.z*8})
- end
- end
- if laser_straight_mode==0 then
- obj:setvelocity({x=dir.x*8, y=dir.y*8, z=dir.z*8})
- end
- obj:setacceleration({x=0, y=0, z=0})
- obj:setyaw(player:get_look_yaw()+math.pi)
- if obj:get_luaentity().player == nil then
- obj:get_luaentity().player = player
- end
- --obj:get_luaentity().node = player:get_inventory():get_stack("main", 1):get_name()
- minetest.sound_play("technic_laser", {pos = playerpos, gain = 1.0, max_hear_distance = 10,})
- return true
-end
-
-
-minetest.register_tool("technic:laser_mk1", {
- description = "Mining Laser MK1",
- inventory_image = "technic_mining_laser_mk1.png",
- stack_max = 1,
- on_use = function(itemstack, user, pointed_thing)
- item=itemstack:to_table()
- if item["metadata"]=="" or item["metadata"]=="0" then return end
- local charge=tonumber((item["metadata"]))
- if charge-400>0 then
- laser_shoot(item, user, pointed_thing)
- charge =charge-400;
- item["metadata"]=tostring(charge)
- charge=set_RE_wear(item,charge,laser_mk1_max_charge)
- itemstack:replace(item)
- end
- return itemstack
- end,
-})
-
-minetest.register_craft({
- output = 'technic:laser_mk1',
- recipe = {
- {'technic:diamond', 'default:steel_ingot', 'technic:battery'},
- {'', 'default:steel_ingot', 'technic:battery'},
- {'', '', 'moreores:copper_ingot'},
- }
-})
-
-
-
-minetest.register_node("technic:laser_beam_box", {
- drawtype = "nodebox",
- node_box = {
- type = "fixed",
- fixed = {
- { -0.5 , -0.1, -0.1 , 0.1 , 0.1 , 0.1 },
- { -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1 },
- }
- },
- tiles = {"technic_laser_beam.png"},
- groups = {not_in_creative_inventory=1},
-})
-
-minetest.register_node("technic:laser_beam_boxV", {
- drawtype = "nodebox",
- node_box = {
- type = "fixed",
- fixed = {
- { -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1 },
- { -0.1 , -0.5, -0.1 , 0.1 , 0.1 , 0.1 },
-
- }
- },
- tiles = {"technic_laser_beam.png"},
- groups = {not_in_creative_inventory=1},
-})
-
-LASER_BEAM_ENTITY={
- physical = false,
- timer=0,
- visual = "wielditem",
- visual_size = {x=0.2, y=0.2},
- textures = {"technic:laser_beam_box"},
- lastpos={},
- max_range=10,
- count=0,
--- digger=nil,
- collisionbox = {0,0,0,0,0,0},
-}
-
-LASER_BEAM_ENTITY.on_step = function(self, dtime)
- self.timer=self.timer+dtime
- local pos = self.object:getpos()
- if self.player~=nil then if self.lastpos.x~=nil then lazer_it (pos, self.player) end end
- if self.lastpos.x ~=nil and self.lastpos.y ~=nil and self.lastpos.y ~=nil then
- temp1={x=math.floor(self.lastpos.x),y=math.floor(self.lastpos.y),z=math.floor(self.lastpos.z)}
- temp2={x=math.floor(pos.x),y=math.floor(pos.y),z=math.floor(pos.z)}
- if temp1.x==temp2.x and temp1.y==temp2.y and temp1.z==temp2.z then return end
- end
- self.lastpos={x=pos.x, y=pos.y, z=pos.z}
- self.count=self.count+1
- if self.count==self.max_range then self.object:remove() end
-end
-
-LASER_BEAM_ENTITYV={
- physical = false,
- timer=0,
- visual = "wielditem",
- visual_size = {x=0.2, y=0.2},
- textures = {"technic:laser_beam_boxV"},
- lastpos={},
- max_range=15,
- count=0,
- collisionbox = {0,0,0,0,0,0},
-}
-
-LASER_BEAM_ENTITYV.on_step = function(self, dtime)
- self.timer=self.timer+dtime
- local pos = self.object:getpos()
- if self.player~=nil then if self.lastpos.x~=nil then lazer_it (pos, self.player) end end
- if self.lastpos.x ~=nil and self.lastpos.y ~=nil and self.lastpos.y ~=nil then
- temp1={x=math.floor(self.lastpos.x),y=math.floor(self.lastpos.y),z=math.floor(self.lastpos.z)}
- temp2={x=math.floor(pos.x),y=math.floor(pos.y),z=math.floor(pos.z)}
- if temp1.x==temp2.x and temp1.y==temp2.y and temp1.z==temp2.z then return end
- end
- self.lastpos={x=pos.x, y=pos.y, z=pos.z}
- self.count=self.count+1
- if self.count==self.max_range then self.object:remove() end
-end
-
-
-minetest.register_entity("technic:laser_beam_entity", LASER_BEAM_ENTITY)
-minetest.register_entity("technic:laser_beam_entityV", LASER_BEAM_ENTITYV)
-
-function lazer_it (pos, player)
- local pos1={}
--- pos1.x=math.floor(pos.x)
--- pos1.y=math.floor(pos.y)
--- pos1.z=math.floor(pos.z)
- local node = minetest.env:get_node(pos)
- if node.name == "air" or node.name == "ignore" or node.name == "default:lava_source" or node.name == "default:lava_flowing" then return end
- if node.name == "default:water_source" or node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end
- if player then minetest.node_dig(pos,node,player) end
-end
\ No newline at end of file
+++ /dev/null
-minetest.register_craft({
- output = 'technic:mithril_chest 1',
- recipe = {
- {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
- {'moreores:mithril_ingot','technic:gold_chest','moreores:mithril_ingot'},
- {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:mithril_locked_chest 1',
- recipe = {
- {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
- {'moreores:mithril_ingot','technic:gold_locked_chest','moreores:mithril_ingot'},
- {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:mithril_locked_chest 1',
- recipe = {
- {'default:steel_ingot'},
- {'technic:mithril_chest'},
- }
-})
-
-minetest.register_node("technic:mithril_chest", {
- description = "Mithril Chest",
- tiles = {"technic_mithril_chest_top.png", "technic_mithril_chest_top.png", "technic_mithril_chest_side.png",
- "technic_mithril_chest_side.png", "technic_mithril_chest_side.png", "technic_mithril_chest_front.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[13,9;]"..
- "list[current_name;main;0,0;13,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Mithril Chest")
- local inv = meta:get_inventory()
- inv:set_size("main", 13*4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
-
- on_metadata_inventory_move = function(pos, from_list, from_index,
- to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in chest at "..minetest.pos_to_string(pos))
- return minetest.node_metadata_inventory_move_allow_all(
- pos, from_list, from_index, to_list, to_index, count, player)
- end,
- on_metadata_inventory_offer = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to chest at "..minetest.pos_to_string(pos))
- return minetest.node_metadata_inventory_offer_allow_all(
- pos, listname, index, stack, player)
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from chest at "..minetest.pos_to_string(pos))
- end,
-})
-
-minetest.register_node("technic:mithril_locked_chest", {
- description = "Mithril Locked Chest",
- tiles = {"technic_mithril_chest_top.png", "technic_mithril_chest_top.png", "technic_mithril_chest_side.png",
- "technic_mithril_chest_side.png", "technic_mithril_chest_side.png", "technic_mithril_chest_locked.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- after_place_node = function(pos, placer)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("owner", placer:get_player_name() or "")
- meta:set_string("infotext", "Mithril Locked Chest (owned by "..
- meta:get_string("owner")..")")
- end,
-on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[13,9;]"..
- "list[current_name;main;0,0;13,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Mithril Locked Chest")
- meta:set_string("owner", "")
- local inv = meta:get_inventory()
- inv:set_size("main", 13*4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
- allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return count
- end,
- allow_metadata_inventory_put = function(pos, listname, index, stack, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- allow_metadata_inventory_take = function(pos, listname, index, stack, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_put = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from locked chest at "..minetest.pos_to_string(pos))
- end,
-})
+++ /dev/null
-minetest.register_alias("music_player", "technic:music_player")
-minetest.register_craft({
- output = 'technic:music_player',
- recipe = {
- {'default:wood', 'default:wood', 'default:wood'},
- {'technic:diamond', 'technic:diamond', 'technic:diamond'},
- {'default:stone', 'moreores:copper_ingot', 'default:stone'},
- }
-})
-
-minetest.register_craftitem("technic:music_player", {
- description = "Music Player",
- stack_max = 99,
-})
-
-music_player_formspec =
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
- "label[0,0;Music Player]"..
- "label[1,3;Power level]"..
- "button[5,2;1,1;track1;1]"..
- "button[6,2;1,1;track2;2]"
-
-
-minetest.register_node("technic:music_player", {
- description = "Music Player",
- tiles = {"technic_music_player_top.png", "technic_machine_bottom.png", "technic_music_player_side.png",
- "technic_music_player_side.png", "technic_music_player_side.png", "technic_music_player_side.png"},
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
- technic_power_machine=1,
- internal_EU_buffer=0,
- internal_EU_buffer_size=5000,
- music_player_on=0,
- music_playing =0,
- music_handle = 0,
- music_player_current_track =1,
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("infotext", "Music Player")
- meta:set_float("technic_power_machine", 1)
- meta:set_float("internal_EU_buffer", 1)
- meta:set_float("internal_EU_buffer_size", 5000)
- meta:set_string("formspec", music_player_formspec)
- meta:set_float("music_player_on", 0)
- meta:set_float("music_player_current_track", 1)
- end,
-
- on_receive_fields = function(pos, formanme, fields, sender)
-
- local meta = minetest.env:get_meta(pos)
- player_on=meta:get_float("music_player_on")
- music_handle=meta:get_float("music_handle")
- music_player_current_track=meta:get_float("music_player_current_track")
- if fields.track1 then music_player_current_track=1 end
- if fields.track2 then music_player_current_track=2 end
- if fields.track3 then music_player_current_track=3 end
- if fields.track4 then music_player_current_track=4 end
- if fields.track5 then music_player_current_track=5 end
- if fields.track6 then music_player_current_track=6 end
- if fields.track7 then music_player_current_track=7 end
- if fields.track8 then music_player_current_track=8 end
- if fields.track9 then music_player_current_track=9 end
- meta:set_float("music_player_current_track",music_player_current_track)
- if fields.play and player_on==1 then
- if music_handle then minetest.sound_stop(music_handle) end
- music_handle=minetest.sound_play("technic_track"..music_player_current_track, {pos = pos, gain = 1.0,loop = true, max_hear_distance = 72,})
- meta:set_float("music_playing",1)
- end
- if fields.stop then
- meta:set_float("music_playing",0)
- if music_handle then minetest.sound_stop(music_handle) end
- end
- meta:set_float("music_handle",music_handle)
- end,
-})
-
-minetest.register_abm({
- nodenames = {"technic:music_player"},
- interval = 1,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
- local meta = minetest.env:get_meta(pos)
- local charge= meta:get_float("internal_EU_buffer")
- local max_charge= meta:get_float("internal_EU_buffer_size")
- player_on=meta:get_float("music_player_on")
- music_player_current_track=meta:get_float("music_player_current_track")
- local play_cost=80
-
- if charge>play_cost then
- if meta:get_float("music_playing")==1 then charge=charge-play_cost end
- meta:set_float("internal_EU_buffer",charge)
- meta:set_float("music_player_on",1)
- else
- meta:set_float("music_playing",0)
- meta:set_float("music_player_on",0)
- if music_handle then minetest.sound_stop(music_handle) end
- end
- local load = math.floor((charge/max_charge)*100)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
- (load)..":technic_power_meter_fg.png]"..
- "label[0,0;Music Player]"..
- "label[1,3;Power level]"..
- "button[4,1;1,1;track1;1]"..
- "button[5,1;1,1;track2;2]"..
- "button[6,1;1,1;track3;3]"..
- "button[4,2;1,1;track4;4]"..
- "button[5,2;1,1;track5;5]"..
- "button[6,2;1,1;track6;6]"..
- "button[4,3;1,1;track7;7]"..
- "button[5,3;1,1;track8;8]"..
- "button[6,3;1,1;track9;9]"..
- "button[4,4;1,2;play;Play]"..
- "button[6,4;1,2;stop;Stop]"..
- "label[4,0;Current track "..tostring(music_player_current_track).."]"
-
- )
-
-
-
-
- end
-})
-
+++ /dev/null
-minetest.register_craft({
- output = 'technic:nodebreaker_off 1',
- recipe = {
- {'default:wood', 'default:pick_mese','default:wood'},
- {'default:stone', 'mesecons:piston','default:stone'},
- {'default:stone', 'mesecons:mesecon','default:stone'},
-
- }
-})
-
-minetest.register_node("technic:nodebreaker_off", {
- description = "Node Breaker",
- tile_images = {"technic_nodebreaker_top_off.png","technic_nodebreaker_bottom_off.png","technic_nodebreaker_side2_off.png","technic_nodebreaker_side1_off.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,tubedevice=1},
- sounds = default.node_sound_stone_defaults(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- end,
-
-})
-
-minetest.register_node("technic:nodebreaker_on", {
- description = "Node Breaker",
- tile_images = {"technic_nodebreaker_top_on.png","technic_nodebreaker_bottom_on.png","technic_nodebreaker_side2_on.png","technic_nodebreaker_side1_on.png",
- "technic_nodebreaker_back.png","technic_nodebreaker_front_on.png"},
- is_ground_content = true,
- paramtype2 = "facedir",
- tubelike=1,
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2,tubedevice=1,not_in_creative_inventory=1},
- 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-
- local x_velocity=0
- local z_velocity=0
-
- if n_param==3 then pos2.x=pos2.x+1 pos1.x=pos1.x-1 x_velocity=-1 end
- if n_param==2 then pos2.z=pos2.z+1 pos1.z=pos1.z-1 z_velocity=-1 end
- if n_param==1 then pos2.x=pos2.x-1 pos1.x=pos1.x+1 x_velocity=1 end
- if n_param==0 then pos2.z=pos2.z-1 pos1.x=pos1.z+1 z_velocity=1 end
-
- local node=minetest.env:get_node(pos2)
- local meta = minetest.env:get_meta(pos1)
- tubelike=meta:get_int("tubelike")
- --if tubelike==1 then
- 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
- local item1=tube_item({x=pos.x,y=pos.y,z=pos.z},dropped_item)
- item1:get_luaentity().start_pos = {x=pos.x,y=pos.y,z=pos.z}
- item1:setvelocity({x=x_velocity, y=0, z=z_velocity})
- item1:setacceleration({x=0, y=0, z=0})
--- minetest.item_drop(dropped_item, "", pos1)
- end
- minetest.env:remove_node(pos2)
- --end
-end
-
+++ /dev/null
-minetest.register_node( "technic:marble", {
- description = "Marble",
- tiles = { "technic_marble.png" },
- is_ground_content = true,
- groups = {cracky=3},
- sounds = default.node_sound_stone_defaults(),
-})
-
-minetest.register_node( "technic:marble_bricks", {
- description = "Marble Bricks",
- tiles = { "technic_marble_bricks.png" },
- is_ground_content = true,
- groups = {cracky=3},
- sounds = default.node_sound_stone_defaults(),
-})
-
-minetest.register_craft({
- output = 'technic:marble_bricks 4',
- recipe = {
- {'technic:marble','technic:marble'},
- {'technic:marble','technic:marble'}
- }
-})
-
-minetest.register_node( "technic:granite", {
- description = "Granite",
- tiles = { "technic_granite.png" },
- is_ground_content = true,
- groups = {cracky=3},
- sounds = default.node_sound_stone_defaults(),
-})
-
-stairsplus.register_stair_and_slab_and_panel_and_micro("marble", "technic:marble",
- {cracky=3},
- {"technic_marble.png"},
- "Marble Stairs",
- "Marble Slab",
- "Marble Panel",
- "Marble Microblock",
- "marble")
-stairsplus.register_stair_and_slab_and_panel_and_micro("marble_bricks", "technic:marble_bricks",
- {cracky=3},
- {"technic_marble_bricks.png"},
- "Marble Bricks Stairs",
- "Marble Bricks Slab",
- "Marble Bricks Panel",
- "Marble Bricks Microblock",
- "marble_bricks")
-stairsplus.register_stair_and_slab_and_panel_and_micro("granite", "technic:granite",
- {cracky=3},
- {"technic_granite.png"},
- "Granite Stairs",
- "Granite Slab",
- "Granite Panel",
- "Granite Microblock",
- "granite")
-
-minetest.register_node( "technic:mineral_diamond", {
- description = "Diamond Ore",
- tiles = { "default_stone.png^technic_mineral_diamond.png" },
- is_ground_content = true,
- groups = {cracky=3},
- sounds = default.node_sound_stone_defaults(),
- drop = 'craft "technic:diamond" 1',
-})
-
-minetest.register_craftitem( "technic:diamond", {
- description = "Diamond",
- inventory_image = "technic_diamond.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_node( "technic:mineral_uranium", {
- description = "Uranium Ore",
- tiles = { "default_stone.png^technic_mineral_uranium.png" },
- is_ground_content = true,
- groups = {cracky=3},
- sounds = default.node_sound_stone_defaults(),
- drop = 'craft "technic:uranium" 1',
-})
-
-minetest.register_craftitem( "technic:uranium", {
- description = "Uranium",
- inventory_image = "technic_uranium.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_node( "technic:mineral_chromium", {
- description = "Chromium Ore",
- tiles = { "default_stone.png^technic_mineral_chromium.png" },
- is_ground_content = true,
- groups = {cracky=3},
- sounds = default.node_sound_stone_defaults(),
- drop = 'craft "technic:chromium_lump" 1',
-})
-
-minetest.register_craftitem( "technic:chromium_lump", {
- description = "Chromium Lump",
- inventory_image = "technic_chromium_lump.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craftitem( "technic:chromium_ingot", {
- description = "Chromium Ingot",
- inventory_image = "technic_chromium_ingot.png",
- on_place_on_ground = minetest.craftitem_place_item,
-})
-
-minetest.register_craft({
- type = 'cooking',
- output = "technic:chromium_ingot",
- recipe = "technic:chromium_lump"
- })
-
-
-minetest.register_node( "technic:mineral_zinc", {
- description = "Zinc Ore",
- tile_images = { "default_stone.png^technic_mineral_zinc.png" },
- is_ground_content = true,
- groups = {cracky=3},
- sounds = default.node_sound_stone_defaults(),
- drop = 'craft "technic:zinc_lump" 1',
-})
-
-minetest.register_craftitem( "technic:zinc_lump", {
- description = "Zinc Lump",
- inventory_image = "technic_zinc_lump.png",
-})
-
-minetest.register_craftitem( "technic:zinc_ingot", {
- description = "Zinc Ingot",
- inventory_image = "technic_zinc_ingot.png",
-})
-
-minetest.register_craftitem( "technic:stainless_steel_ingot", {
- description = "Stainless Steel Ingot",
- inventory_image = "technic_stainless_steel_ingot.png",
-})
-
-minetest.register_craftitem( "technic:brass_ingot", {
- description = "Brass Ingot",
- inventory_image = "technic_brass_ingot.png",
-})
-
-minetest.register_craft({
- type = 'cooking',
- output = "technic:zinc_ingot",
- recipe = "technic:zinc_lump"
- })
-
-
-local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, ore_per_chunk, height_min, height_max)
- if maxp.y < height_min or minp.y > height_max then
- return
- end
- local y_min = math.max(minp.y, height_min)
- local y_max = math.min(maxp.y, height_max)
- local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1)
- local pr = PseudoRandom(seed)
- local num_chunks = math.floor(chunks_per_volume * volume)
- local chunk_size = 3
- if ore_per_chunk <= 4 then
- chunk_size = 2
- end
- local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk)
- --print("generate_ore num_chunks: "..dump(num_chunks))
- for i=1,num_chunks do
- if (y_max-chunk_size+1 <= y_min) then return end
- local y0 = pr:next(y_min, y_max-chunk_size+1)
- if y0 >= height_min and y0 <= height_max then
- local x0 = pr:next(minp.x, maxp.x-chunk_size+1)
- local z0 = pr:next(minp.z, maxp.z-chunk_size+1)
- local p0 = {x=x0, y=y0, z=z0}
- for x1=0,chunk_size-1 do
- for y1=0,chunk_size-1 do
- for z1=0,chunk_size-1 do
- if pr:next(1,inverse_chance) == 1 then
- local x2 = x0+x1
- local y2 = y0+y1
- local z2 = z0+z1
- local p2 = {x=x2, y=y2, z=z2}
- if minetest.env:get_node(p2).name == wherein then
- minetest.env:set_node(p2, {name=name})
- end
- end
- end
- end
- end
- end
- end
- --print("generate_ore done")
-end
-
-minetest.register_on_generated(function(minp, maxp, seed)
-generate_ore("technic:mineral_diamond", "default:stone", minp, maxp, seed+21, 1/11/11/11, 4, -31000, -300)
-generate_ore("technic:mineral_uranium", "default:stone", minp, maxp, seed+22, 1/10/10/10, 3, -300, -80)
-generate_ore("technic:mineral_chromium", "default:stone", minp, maxp, seed+23, 1/10/10/10, 2, -31000, -100)
-generate_ore("technic:mineral_zinc", "default:stone", minp, maxp, seed+24, 1/9/9/9, 4, -31000, 2)
-generate_ore("technic:marble", "default:stone", minp, maxp, seed+25, 1/128, 20, -100, -32)
-generate_ore("technic:granite", "default:stone", minp, maxp, seed+25, 1/128, 15, -190, -90)
-end)
\ No newline at end of file
+++ /dev/null
-minetest.register_craft({
- output = 'technic:project_table 1',
- recipe = {
- {'default:wood','default:wood','default:wood'},
- {'default:wood','default:chest','default:wood'},
- {'default:stone','default:stone','default:stone'},
- }
-})
-
-
-minetest.register_craftitem("technic:project_table", {
- description = "Project Table",
- stack_max = 99,
-})
-
-minetest.register_node("technic:project_table", {
- description = "Project Table",
- tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png",
- "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_front.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[9,9;]"..
- "list[current_name;main;0,2;8,2;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Iron Chest")
- local inv = meta:get_inventory()
- inv:set_size("main", 8*4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
-})
\ No newline at end of file
+++ /dev/null
--- Code of rubber tree by PilzAdam
-
-minetest.register_node("technic:rubber_sapling", {
- description = "Rubber Tree Sapling",
- drawtype = "plantlike",
- tiles = {"technic_rubber_sapling.png"},
- inventory_image = "technic_rubber_sapling.png",
- wield_image = "technic_rubber_sapling.png",
- paramtype = "light",
- walkable = false,
- groups = {dig_immediate=3,flammable=2},
- sounds = default.node_sound_defaults(),
-})
-
-minetest.register_node("technic:rubber_tree_full", {
- description = "Rubber Tree",
- tiles = {"default_tree_top.png", "default_tree_top.png", "technic_rubber_tree_full.png"},
- groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
- drop = "default:tree",
- sounds = default.node_sound_wood_defaults(),
-
- on_dig = function(pos, node, digger)
- minetest.node_dig(pos, node, digger)
- minetest.env:remove_node(pos)
- end,
-
- after_destruct = function(pos, oldnode)
- oldnode.name = "technic:rubber_tree_empty"
- minetest.env:set_node(pos, oldnode)
- end
-})
-
-
-minetest.register_node("technic:rubber_tree_empty", {
- tiles = {"default_tree_top.png", "default_tree_top.png", "technic_rubber_tree_empty.png"},
- groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2, not_in_creative_inventory=1},
- drop = "default:tree",
- sounds = default.node_sound_wood_defaults(),
-})
-
-minetest.register_abm({
- nodenames = {"technic:rubber_tree_empty"},
- interval = 60,
- chance = 15,
- action = function(pos, node)
- node.name = "technic:rubber_tree_full"
- minetest.env:set_node(pos, node)
- end
-})
-
-minetest.register_node("technic:rubber_leaves", {
- drawtype = "allfaces_optional",
- visual_scale = 1.3,
- tiles = {"default_leaves.png"},
- paramtype = "light",
- groups = {snappy=3, leafdecay=3, flammable=2, not_in_creative_inventory=1},
- drop = {
- max_items = 1,
- items = {
- {
- items = {'technic:rubber_sapling'},
- rarity = 20,
- },
- }
- },
- sounds = default.node_sound_leaves_defaults(),
-})
-
-minetest.register_abm({
- nodenames = {"technic:rubber_sapling"},
- interval = 60,
- chance = 20,
- action = function(pos, node)
- generate_tree(pos, "technic:rubber_tree_full", "technic:rubber_leaves", {"default:dirt", "default:dirt_with_grass"})
- end
-})
-
-minetest.register_on_generated(function(minp, maxp, blockseed)
- if math.random(1, 100) > 5 then
- return
- end
- local tmp = {x=(maxp.x-minp.x)/2+minp.x, y=(maxp.y-minp.y)/2+minp.y, z=(maxp.z-minp.z)/2+minp.z}
- local pos = minetest.env:find_node_near(tmp, maxp.x-minp.x, {"default:dirt_with_grass"})
- if pos ~= nil then
- generate_tree({x=pos.x, y=pos.y+1, z=pos.z}, "technic:rubber_tree_full", "technic:rubber_leaves", {"default:dirt", "default:dirt_with_grass"})
- end
-end)
-
-
--- ========= FUEL =========
-minetest.register_craft({
- type = "fuel",
- recipe = "technic:rubber_sapling",
- burntime = 10
-})
-
-function generate_tree(pos, trunk, leaves, underground, replacements)
- pos.y = pos.y-1
- local nodename = minetest.env:get_node(pos).name
- local ret = true
- for _,name in ipairs(underground) do
- if nodename == name then
- ret = false
- break
- end
- end
- pos.y = pos.y+1
- if ret or minetest.env:get_node_light(pos) < 8 then
- return
- end
-
- node = {name = ""}
- for dy=1,4 do
- pos.y = pos.y+dy
- if minetest.env:get_node(pos).name ~= "air" then
- return
- end
- pos.y = pos.y-dy
- end
- node.name = trunk
- for dy=0,4 do
- pos.y = pos.y+dy
- minetest.env:set_node(pos, node)
- pos.y = pos.y-dy
- end
-
- if not replacements then
- replacements = {}
- end
-
- node.name = leaves
- pos.y = pos.y+3
- for dx=-2,2 do
- for dz=-2,2 do
- for dy=0,3 do
- pos.x = pos.x+dx
- pos.y = pos.y+dy
- pos.z = pos.z+dz
-
- if dx == 0 and dz == 0 and dy==3 then
- if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
- minetest.env:set_node(pos, node)
- for name,rarity in pairs(replacements) do
- if math.random(1, rarity) == 1 then
- minetest.env:set_node(pos, {name=name})
- end
- end
- end
- elseif dx == 0 and dz == 0 and dy==4 then
- if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
- minetest.env:set_node(pos, node)
- for name,rarity in pairs(replacements) do
- if math.random(1, rarity) == 1 then
- minetest.env:set_node(pos, {name=name})
- end
- end
- end
- elseif math.abs(dx) ~= 2 and math.abs(dz) ~= 2 then
- if minetest.env:get_node(pos).name == "air" then
- minetest.env:set_node(pos, node)
- for name,rarity in pairs(replacements) do
- if math.random(1, rarity) == 1 then
- minetest.env:set_node(pos, {name=name})
- end
- end
- end
- else
- if math.abs(dx) ~= 2 or math.abs(dz) ~= 2 then
- if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
- minetest.env:set_node(pos, node)
- for name,rarity in pairs(replacements) do
- if math.random(1, rarity) == 1 then
- minetest.env:set_node(pos, {name=name})
- end
- end
- end
- end
- end
-
- pos.x = pos.x-dx
- pos.y = pos.y-dy
- pos.z = pos.z-dz
- end
- end
- end
-end
+++ /dev/null
- 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 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)
- 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
- else
- return itemstack
- end
- end,
- })
-
- minetest.register_craft({
- output = "technic:screwdriver",
- recipe = {
- {"technic:stainless_steel_ingot"},
- {"default:stick"}
- }
- })
+++ /dev/null
-minetest.register_craft({
- output = 'technic:silver_chest 1',
- recipe = {
- {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
- {'moreores:silver_ingot','technic:copper_chest','moreores:silver_ingot'},
- {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:silver_locked_chest 1',
- recipe = {
- {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
- {'moreores:silver_ingot','technic:copper_locked_chest','moreores:silver_ingot'},
- {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
- }
-})
-
-minetest.register_craft({
- output = 'technic:silver_locked_chest 1',
- recipe = {
- {'default:steel_ingot'},
- {'technic:silver_chest'},
- }
-})
-
-minetest.register_craftitem("technic:silver_chest", {
- description = "Silver Chest",
- stack_max = 99,
-})
-minetest.register_craftitem("technic:silver_locked_chest", {
- description = "Silver Locked Chest",
- stack_max = 99,
-})
-
-minetest.register_node("technic:silver_chest", {
- description = "Silver Chest",
- tiles = {"technic_silver_chest_top.png", "technic_silver_chest_top.png", "technic_silver_chest_side.png",
- "technic_silver_chest_side.png", "technic_silver_chest_side.png", "technic_silver_chest_front.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[11,9;]"..
- "list[current_name;main;0,0;11,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Silver Chest")
- local inv = meta:get_inventory()
- inv:set_size("main", 11*4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
-
- on_punch = function (pos, node, puncher)
- local meta = minetest.env:get_meta(pos);
- meta:set_string("formspec", "hack:sign_text_input")
- end,
-
- on_receive_fields = function(pos, formname, fields, sender)
- local meta = minetest.env:get_meta(pos);
- fields.text = fields.text or ""
- meta:set_string("text", fields.text)
- meta:set_string("infotext", '"'..fields.text..'"')
-
- meta:set_string("formspec",
- "invsize[11,9;]"..
- "list[current_name;main;0,0;11,4;]"..
- "list[current_player;main;0,5;8,4;]")
- end,
-
- on_metadata_inventory_move = function(pos, from_list, from_index,
- to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in chest at "..minetest.pos_to_string(pos))
- return minetest.node_metadata_inventory_move_allow_all(
- pos, from_list, from_index, to_list, to_index, count, player)
- end,
- on_metadata_inventory_offer = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to chest at "..minetest.pos_to_string(pos))
- return minetest.node_metadata_inventory_offer_allow_all(
- pos, listname, index, stack, player)
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from chest at "..minetest.pos_to_string(pos))
- end,
-
-})
-
-local function has_locked_chest_privilege(meta, player)
- if player:get_player_name() ~= meta:get_string("owner") then
- return false
- end
- return true
-end
-
-minetest.register_node("technic:silver_locked_chest", {
- description = "Silver Locked Chest",
- tiles = {"technic_silver_chest_top.png", "technic_silver_chest_top.png", "technic_silver_chest_side.png",
- "technic_silver_chest_side.png", "technic_silver_chest_side.png", "technic_silver_chest_locked.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- after_place_node = function(pos, placer)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("owner", placer:get_player_name() or "")
- meta:set_string("infotext", "Silver Locked Chest (owned by "..
- meta:get_string("owner")..")")
- end,
-on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("formspec",
- "invsize[11,9;]"..
- "list[current_name;main;0,0;11,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Silver Locked Chest")
- meta:set_string("owner", "")
- local inv = meta:get_inventory()
- inv:set_size("main", 11*4)
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- return inv:is_empty("main")
- end,
-
- on_punch = function (pos, node, puncher)
- local meta = minetest.env:get_meta(pos);
- meta:set_string("formspec", "hack:sign_text_input")
- end,
-
- on_receive_fields = function(pos, formname, fields, sender)
- local meta = minetest.env:get_meta(pos);
- fields.text = fields.text or ""
- meta:set_string("text", fields.text)
- meta:set_string("infotext", '"'..fields.text..'"')
-
- meta:set_string("formspec",
- "invsize[11,9;]"..
- "list[current_name;main;0,0;11,4;]"..
- "list[current_player;main;0,5;8,4;]")
- end,
-
- allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return count
- end,
- allow_metadata_inventory_put = function(pos, listname, index, stack, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- allow_metadata_inventory_take = function(pos, listname, index, stack, player)
- local meta = minetest.env:get_meta(pos)
- if not has_locked_chest_privilege(meta, player) then
- minetest.log("action", player:get_player_name()..
- " tried to access a locked chest belonging to "..
- meta:get_string("owner").." at "..
- minetest.pos_to_string(pos))
- return 0
- end
- return stack:get_count()
- end,
- on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff in locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_put = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " moves stuff to locked chest at "..minetest.pos_to_string(pos))
- end,
- on_metadata_inventory_take = function(pos, listname, index, stack, player)
- minetest.log("action", player:get_player_name()..
- " takes stuff from locked chest at "..minetest.pos_to_string(pos))
- end,
-})
+++ /dev/null
-minetest.register_node("technic:solar_panel", {
- tiles = {"technic_solar_panel_top.png", "technic_solar_panel_bottom.png", "technic_solar_panel_side.png",
- "technic_solar_panel_side.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png"},
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
- description="Solar Panel",
- active = false,
- technic_power_machine=1,
- internal_EU_buffer=0;
- internal_EU_buffer_size=1000;
- drawtype = "nodebox",
- paramtype = "light",
- is_ground_content = true,
- node_box = {
- type = "fixed",
- fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
- },
- selection_box = {
- type = "fixed",
- fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
- },
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_float("technic_power_machine", 1)
- meta:set_float("internal_EU_buffer", 0)
- meta:set_float("internal_EU_buffer_size", 1000)
-
- meta:set_string("infotext", "Solar Panel")
- meta:set_float("active", false)
- end,
-})
-
-minetest.register_craft({
- output = 'technic:solar_panel 1',
- recipe = {
- {'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer','technic:doped_silicon_wafer'},
- {'technic:doped_silicon_wafer', 'moreores:copper_ingot','technic:doped_silicon_wafer'},
- {'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer','technic:doped_silicon_wafer'},
-
- }
-})
-
-minetest.register_abm(
- {nodenames = {"technic:solar_panel"},
- interval = 1,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
-
- local pos1={}
- pos1.y=pos.y+1
- pos1.x=pos.x
- pos1.z=pos.z
-
- local light = minetest.env:get_node_light(pos1, nil)
- local meta = minetest.env:get_meta(pos)
- if light == nil then light = 0 end
- if light >= 14 then
- meta:set_string("infotext", "Solar Panel is active ")
- meta:set_float("active",1)
- local internal_EU_buffer=meta:get_float("internal_EU_buffer")
- local internal_EU_buffer_size=meta:get_float("internal_EU_buffer_size")
- local charge_to_give=40+(pos1.y/250*40) -- make solar energy depending on height
- if charge_to_give<0 then charge_to_give=0 end
- if charge_to_give>160 then charge_to_give=160 end
- if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
- charge_to_give=internal_EU_buffer_size-internal_EU_buffer
- end
- internal_EU_buffer=internal_EU_buffer+charge_to_give
- meta:set_float("internal_EU_buffer",internal_EU_buffer)
-
- else
- meta:set_string("infotext", "Solar Panel is inactive");
- meta:set_float("active",0)
- end
- end,
-})
\ No newline at end of file
+++ /dev/null
-minetest.register_node("technic:solar_panel_mv", {
- tiles = {"technic_mv_solar_panel_top.png", "technic_mv_solar_panel_bottom.png", "technic_mv_solar_panel_side.png",
- "technic_mv_solar_panel_side.png", "technic_mv_solar_panel_side.png", "technic_mv_solar_panel_side.png"},
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
- description="MV Solar Panel",
- active = false,
- technic_mv_power_machine=1,
- internal_EU_buffer=0;
- internal_EU_buffer_size=10000;
- drawtype = "nodebox",
- paramtype = "light",
- is_ground_content = true,
- node_box = {
- type = "fixed",
- fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
- },
- selection_box = {
- type = "fixed",
- fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
- },
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_float("technic_mv_power_machine", 1)
- meta:set_float("internal_EU_buffer", 0)
- meta:set_float("internal_EU_buffer_size", 10000)
-
- meta:set_string("infotext", "MV Solar Panel")
- meta:set_float("active", false)
- end,
-})
-
-minetest.register_craft({
- output = 'technic:solar_panel_mv 1',
- recipe = {
- {'technic:solar_panel', 'technic:solar_panel','technic:solar_panel'},
- {'technic:solar_panel', 'technic:mv_transformer','technic:solar_panel'},
- {'', 'technic:mv_cable',''},
-
- }
-})
-
-minetest.register_abm(
- {nodenames = {"technic:solar_panel_mv"},
- interval = 1,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
-
- local pos1={}
- pos1.y=pos.y+1
- pos1.x=pos.x
- pos1.z=pos.z
-
- local light = minetest.env:get_node_light(pos1, nil)
- local meta = minetest.env:get_meta(pos)
- if light == nil then light = 0 end
- if light >= 14 then
- meta:set_string("infotext", "Solar Panel is active ")
- meta:set_float("active",1)
- local internal_EU_buffer=meta:get_float("internal_EU_buffer")
- local internal_EU_buffer_size=meta:get_float("internal_EU_buffer_size")
- local charge_to_give=300+(pos1.y/250*300) -- make solar energy depending on height
- if charge_to_give<0 then charge_to_give=0 end
- if charge_to_give>600 then charge_to_give=600 end
- if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
- charge_to_give=internal_EU_buffer_size-internal_EU_buffer
- end
- internal_EU_buffer=internal_EU_buffer+charge_to_give
- meta:set_float("internal_EU_buffer",internal_EU_buffer)
-
- else
- meta:set_string("infotext", "Solar Panel is inactive");
- meta:set_float("active",0)
- end
- end,
-})
\ No newline at end of file
+++ /dev/null
-sonic_screwdriver_max_charge=15000
-
- 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 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()
- if item["metadata"]=="" or item["metadata"]=="0" then return end
- local charge=tonumber((item["metadata"]))
- if charge-100>0 then
- minetest.sound_play("technic_sonic_screwdriver", {pos = pos, gain = 0.3, 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;
- item["metadata"]=tostring(charge)
- set_RE_wear(item,charge,sonic_screwdriver_max_charge)
- itemstack:replace(item)
- end
- return itemstack
- else
- return itemstack
- end
- end,
-
- })
-
- minetest.register_craft({
- output = "technic:sonic_screwdriver",
- recipe = {
- {"technic:diamond"},
- {"technic:battery"},
- {"technic:stainless_steel_ingot"}
- }
- })
--- /dev/null
+This simple mod uses nodeboxes to supply a complete set of 3D flanged pipes,
+along with "valve" and "pump" devices.
+
+Unlike the previous version of this mod, these pipes are rounded, and when
+placed, they'll automatically join together as needed. Pipes can go vertically
+or horizontally, and there are enough nodes defined to allow for all possible
+connections. Valves and pumps can only be placed horizontally, and will
+automatically rotate and join with neighboring pipes as objects are added, as
+well as joining with each other under certain circumstances.
+
+Pipes come in two variants: one type bears one or more dark windows on each
+pipe, suggesting they're empty, while the other type bears green-tinted
+windows, as if full (the two colors should also be easy to select if you want
+to change them in a paint program). These windows only appear on straight
+lengths and on certain junctions.
+
+There are no crafting recipes, yet, but you can use /giveme as usual, namely
+"/giveme pipeworks:pipe 999" or so, and then place them as needed. See
+init.lua for more details.
+
+This mod is intended to be used as a basis or at least as sort of a model for
+something else to build on (perhaps a nicer-looking oil mod?), and does not
+provide any of the code necessary to cause anything to flow through them. Like
+the pipes, the valve and pump don't do anything useful yet, but you can punch
+them to turn them "on" and "off". Note that the valve and pump textures and
+shapes are not yet complete (hence their boxy appearance).
+
+This mod is a work in progress.
+
+Please note that owing to the nature of this mod, I have opted to use 64px
+textures. Anything less just looks terrible.
+
+If you don't need the old node names from the previous version of this mod,
+edit init.lua and comment-out the 'dofile' line at the top.
--- /dev/null
+-- autorouting for pipes
+
+function pipe_scanforobjects(pos)
+ pipe_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }, "_loaded")
+ pipe_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }, "_loaded")
+ pipe_autoroute({ x=pos.x , y=pos.y-1, z=pos.z }, "_loaded")
+ pipe_autoroute({ x=pos.x , y=pos.y+1, z=pos.z }, "_loaded")
+ pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }, "_loaded")
+ pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }, "_loaded")
+ pipe_autoroute(pos, "_loaded")
+
+ pipe_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }, "_empty")
+ pipe_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }, "_empty")
+ pipe_autoroute({ x=pos.x , y=pos.y-1, z=pos.z }, "_empty")
+ pipe_autoroute({ x=pos.x , y=pos.y+1, z=pos.z }, "_empty")
+ pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }, "_empty")
+ pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }, "_empty")
+ pipe_autoroute(pos, "_empty")
+end
+
+function pipe_autoroute(pos, state)
+ nctr = minetest.env:get_node(pos)
+ if (string.find(nctr.name, "pipeworks:pipe_") == nil) then return end
+
+ pipes_scansurroundings(pos)
+
+ nsurround = pxm..pxp..pym..pyp..pzm..pzp
+ if nsurround == "000000" then nsurround = "110000" end
+ minetest.env:add_node(pos, { name = "pipeworks:pipe_"..nsurround..state })
+end
+
+-- autorouting for pneumatic tubes
+
+function tube_scanforobjects(pos)
+ tube_autoroute({ x=pos.x-1, y=pos.y , z=pos.z })
+ tube_autoroute({ x=pos.x+1, y=pos.y , z=pos.z })
+ tube_autoroute({ x=pos.x , y=pos.y-1, z=pos.z })
+ tube_autoroute({ x=pos.x , y=pos.y+1, z=pos.z })
+ tube_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 })
+ tube_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 })
+ tube_autoroute(pos)
+end
+
+function tube_autoroute(pos)
+ nctr = minetest.env:get_node(pos)
+ print ("minetest.get_item_group("..nctr.name..',"tubedevice") == '..minetest.get_item_group(nctr.name, "tubedevice"))
+ if (string.find(nctr.name, "pipeworks:tube_") == nil)
+ and minetest.get_item_group(nctr.name, "tubedevice") ~= 1 then return end
+
+ pxm=0
+ pxp=0
+ pym=0
+ pyp=0
+ pzm=0
+ pzp=0
+
+ nxm = minetest.env:get_node({ x=pos.x-1, y=pos.y , z=pos.z })
+ nxp = minetest.env:get_node({ x=pos.x+1, y=pos.y , z=pos.z })
+ nym = minetest.env:get_node({ x=pos.x , y=pos.y-1, z=pos.z })
+ nyp = minetest.env:get_node({ x=pos.x , y=pos.y+1, z=pos.z })
+ nzm = minetest.env:get_node({ x=pos.x , y=pos.y , z=pos.z-1 })
+ nzp = minetest.env:get_node({ x=pos.x , y=pos.y , z=pos.z+1 })
+
+ if (string.find(nxm.name, "pipeworks:tube_") ~= nil)
+ or minetest.get_item_group(nxm.name, "tubedevice") == 1 then pxm=1 end
+ if (string.find(nxp.name, "pipeworks:tube_") ~= nil)
+ or minetest.get_item_group(nxp.name, "tubedevice") == 1 then pxp=1 end
+ if (string.find(nym.name, "pipeworks:tube_") ~= nil)
+ or minetest.get_item_group(nym.name, "tubedevice") == 1 then pym=1 end
+ if (string.find(nyp.name, "pipeworks:tube_") ~= nil)
+ or minetest.get_item_group(nyp.name, "tubedevice") == 1 then pyp=1 end
+ if (string.find(nzm.name, "pipeworks:tube_") ~= nil)
+ or minetest.get_item_group(nzm.name, "tubedevice") == 1 then pzm=1 end
+ if (string.find(nzp.name, "pipeworks:tube_") ~= nil)
+ or minetest.get_item_group(nzp.name, "tubedevice") == 1 then pzp=1 end
+
+ nsurround = pxm..pxp..pym..pyp..pzm..pzp
+ if minetest.get_item_group(nctr.name, "tubedevice") ~= 1 then
+ minetest.env:add_node(pos, { name = "pipeworks:tube_"..nsurround })
+ end
+
+end
+
+-- auto-rotation code for various devices the tubes attach to
+
+function pipe_device_autorotate(pos, state, bname)
+
+ if state == nil then
+ nname = bname
+ else
+ nname = bname.."_"..state
+ end
+
+ local nctr = minetest.env:get_node(pos)
+
+ pipes_scansurroundings(pos)
+
+ if (pxm+pxp) ~= 0 then
+ minetest.env:add_node(pos, { name = nname.."_x" })
+ return
+ end
+
+ if (pzm+pzp) ~= 0 then
+ minetest.env:add_node(pos, { name = nname.."_z" })
+ end
+
+end
+
+function pipes_scansurroundings(pos)
+ pxm=0
+ pxp=0
+ pym=0
+ pyp=0
+ pzm=0
+ pzp=0
+
+ nxm = minetest.env:get_node({ x=pos.x-1, y=pos.y , z=pos.z })
+ nxp = minetest.env:get_node({ x=pos.x+1, y=pos.y , z=pos.z })
+ nym = minetest.env:get_node({ x=pos.x , y=pos.y-1, z=pos.z })
+ nyp = minetest.env:get_node({ x=pos.x , y=pos.y+1, z=pos.z })
+ nzm = minetest.env:get_node({ x=pos.x , y=pos.y , z=pos.z-1 })
+ nzp = minetest.env:get_node({ x=pos.x , y=pos.y , z=pos.z+1 })
+
+ if (string.find(nxm.name, "pipeworks:pipe_") ~= nil) then pxm=1 end
+ if (string.find(nxp.name, "pipeworks:pipe_") ~= nil) then pxp=1 end
+ if (string.find(nym.name, "pipeworks:pipe_") ~= nil) then pym=1 end
+ if (string.find(nyp.name, "pipeworks:pipe_") ~= nil) then pyp=1 end
+ if (string.find(nzm.name, "pipeworks:pipe_") ~= nil) then pzm=1 end
+ if (string.find(nzp.name, "pipeworks:pipe_") ~= nil) then pzp=1 end
+
+ for p in ipairs(pipes_devicelist) do
+ pdev = pipes_devicelist[p]
+ if (string.find(nxm.name, "pipeworks:"..pdev.."_off_x") ~= nil) or
+ (string.find(nxm.name, "pipeworks:"..pdev.."_on_x") ~= nil) or
+ (string.find(nxm.name, "pipeworks:"..pdev.."_x") ~= nil) then
+ pxm=1
+ end
+
+ if (string.find(nxp.name, "pipeworks:"..pdev.."_off_x") ~= nil) or
+ (string.find(nxp.name, "pipeworks:"..pdev.."_on_x") ~= nil) or
+ (string.find(nxp.name, "pipeworks:"..pdev.."_x") ~= nil) then
+ pxp=1
+ end
+
+ if (string.find(nzm.name, "pipeworks:"..pdev.."_off_z") ~= nil) or
+ (string.find(nzm.name, "pipeworks:"..pdev.."_on_z") ~= nil) or
+ (string.find(nzm.name, "pipeworks:"..pdev.."_z") ~= nil) then
+ pzm=1
+ end
+
+ if (string.find(nzp.name, "pipeworks:"..pdev.."_off_z") ~= nil) or
+ (string.find(nzp.name, "pipeworks:"..pdev.."_on_z") ~= nil) or
+ (string.find(nzp.name, "pipeworks:"..pdev.."_z") ~= nil) then
+ pzp=1
+ end
+ end
+
+ -- storage tanks and intake grates have vertical connections
+ -- also, so they require a special case
+
+ if (string.find(nym.name, "pipeworks:storage_tank_") ~= nil) or
+ (string.find(nym.name, "pipeworks:intake") ~= nil) or
+ (string.find(nym.name, "pipeworks:outlet") ~= nil) then
+ pym=1
+ end
+end
+
+function pipe_look_for_stackable_tanks(pos)
+ tym = minetest.env:get_node({ x=pos.x , y=pos.y-1, z=pos.z })
+
+ if string.find(tym.name, "pipeworks:storage_tank_") ~= nil or
+ string.find(tym.name, "pipeworks:expansion_tank_") ~= nil then
+ minetest.env:add_node(pos, { name = "pipeworks:expansion_tank_0"})
+ end
+end
+
--- /dev/null
+Changelog
+---------
+
+2012-08-24: Added square-ish pneumatic tubes, with their own autoplace code
+(they do not connect to the steel pipes or their related devices).
+
+2012-08-22: Added outlet grate, made it participate in autoplace algorithm.
+Extended storage tank to show fill level in 10% steps (0% to 100%). Added
+"expansion tank" that appears if the user stacks tanks upwards. (Downwards is
+not checked).
+
+2012-08-21: Made storage tank participate in autoplace algorithm. Tuned API a
+little to allow for more flexible placement. Re-organized code a bit to allow
+for some upcoming rules changes. Made storage tanks' upper/lower fittins and
+intake grate participate in autoplace algorithm.
+
+2012-08-20: Added temporary nodes for storage tank and intake grating, but
+without autoplace.
+
+2012-08-19: Pumps and valves now fully participate in the
+auto-rotate/auto-place algorithm.
+
+2012-08-18: Total rewrite again. All pipes are now nice and round-looking, and
+they auto-connect! Also added temporary nodes for pump and valve (each with an
+on/off setting - punch to change). No crafting recipes yet and the pipes still
+don't do anything useful yet. Soon.
+
+2012-08-06: Moved this changelog off the forum post and into a separate file.
+
+2012-08-05 (multiple updates): Rewrote pipeworks to use loops and tables to
+create the nodes. Requires far less code now. Added -X, +X, -Y, +Y, -Z, +Z
+capped stubs and a short centered horizontal segment. Changed node definitions
+so that the aforementioned "short centered" segment is given on dig/drop.
+Renamed it to just "pipeworks:pipe" (and pipe_loaded). Added empty/loaded
+indicator images to the capped ends, removed some redundant comments. Made the
+empty/loaded indication at the capped end more prominent.
+
+2012-07-21: Added screenshot showing pipes as they look now that nodebox
+texture rotation is fixed.
+
+2012-07-18: Changed the mod name and all internals to 'pipeworks' instead of
+'pipes'... after a couple of mistakes :-)
+
+2012-07-12: moved project to github.
+
+2012-06-23: Initial release, followed by reworking the textures a bit.
--- /dev/null
+-- Crafting recipes for pipeworks
+
+-- If the technic mod is present, then don't bother registering these recipes
+-- as that mod supplies its own.
+
+if io.open(minetest.get_modpath("pipeworks").."/../technic/init.lua", "r") == nil then
+
+ -- If homedecor is not installed, we need to register a few of its crafts
+ -- manually so we can use them.
+
+ if minetest.get_modpath("homedecor") == nil then
+
+ minetest.register_craftitem(":homedecor:plastic_sheeting", {
+ description = "Plastic sheet",
+ inventory_image = "pipeworks_plastic_sheeting.png",
+ })
+
+ minetest.register_craft({
+ type = "cooking",
+ output = "homedecor:plastic_sheeting",
+ recipe = "default:junglegrass",
+ })
+
+ minetest.register_craft({
+ type = 'fuel',
+ recipe = 'homedecor:plastic_sheeting',
+ burntime = 30,
+ })
+ end
+
+ minetest.register_craft( {
+ output = "pipeworks:pipe_110000_empty 12",
+ recipe = {
+ { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" },
+ { "", "", "" },
+ { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
+ },
+ })
+
+ minetest.register_craft( {
+ output = "pipeworks:pump 2",
+ recipe = {
+ { "default:stone", "default:stone", "default:stone" },
+ { "default:steel_ingot", "default:stick", "default:steel_ingot" },
+ { "default:stone", "default:stone", "default:stone" }
+ },
+ })
+
+ minetest.register_craft( {
+ output = "pipeworks:valve 2",
+ recipe = {
+ { "", "default:stick", "" },
+ { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" },
+ { "", "default:steel_ingot", "" }
+ },
+ })
+
+ minetest.register_craft( {
+ output = "pipeworks:storage_tank 2",
+ recipe = {
+ { "", "default:steel_ingot", "default:steel_ingot" },
+ { "default:steel_ingot", "default:glass", "default:steel_ingot" },
+ { "default:steel_ingot", "default:steel_ingot", "" }
+ },
+ })
+
+ minetest.register_craft( {
+ output = "pipeworks:intake 2",
+ recipe = {
+ { "", "default:steel_ingot", "" },
+ { "default:steel_ingot", "", "default:steel_ingot" },
+ { "", "default:steel_ingot", "" }
+ },
+ })
+
+ minetest.register_craft( {
+ output = "pipeworks:outlet 2",
+ recipe = {
+ { "default:steel_ingot", "", "default:steel_ingot" },
+ { "", "default:steel_ingot", "" },
+ { "default:steel_ingot", "", "default:steel_ingot" }
+ },
+ })
+
+ minetest.register_craft( {
+ output = "pipeworks:tube 12",
+ recipe = {
+ { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
+ { "", "", "" },
+ { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
+ },
+ })
+
+end
--- /dev/null
+-- List of devices that should participate in the autoplace algorithm
+
+pipes_devicelist = {
+ "pump",
+ "valve",
+ "storage_tank_0",
+ "storage_tank_1",
+ "storage_tank_2",
+ "storage_tank_3",
+ "storage_tank_4",
+ "storage_tank_5",
+ "storage_tank_6",
+ "storage_tank_7",
+ "storage_tank_8",
+ "storage_tank_9",
+ "storage_tank_10"
+}
+
+-- tables
+
+minetest.register_alias("pipeworks:pump", "pipeworks:pump_off_x")
+minetest.register_alias("pipeworks:valve", "pipeworks:valve_off_x")
+minetest.register_alias("pipeworks:storage_tank", "pipeworks:storage_tank_0_x")
+
+pipe_pumpbody_x = {
+ { -6/16, -8/16, -6/16, 6/16, 8/16, 6/16 }
+}
+
+pipe_pumpbody_z = {
+ { -6/16, -8/16, -6/16, 6/16, 8/16, 6/16 }
+}
+
+pipe_valvebody_x = {
+ { -4/16, -4/16, -4/16, 4/16, 4/16, 4/16 }
+}
+
+pipe_valvebody_z = {
+ { -4/16, -4/16, -4/16, 4/16, 4/16, 4/16 }
+}
+
+pipe_valvehandle_on_x = {
+ { -5/16, 4/16, -1/16, 0, 5/16, 1/16 }
+}
+
+pipe_valvehandle_on_z = {
+ { -1/16, 4/16, -5/16, 1/16, 5/16, 0 }
+}
+
+pipe_valvehandle_off_x = {
+ { -1/16, 4/16, -5/16, 1/16, 5/16, 0 }
+}
+
+pipe_valvehandle_off_z = {
+ { -5/16, 4/16, -1/16, 0, 5/16, 1/16 }
+}
+
+-- Now define the nodes.
+
+local states = { "on", "off" }
+local dgroups = ""
+
+for s in ipairs(states) do
+
+ if states[s] == "off" then
+ dgroups = {snappy=3, pipe=1}
+ else
+ dgroups = {snappy=3, pipe=1, not_in_creative_inventory=1}
+ end
+
+ local pumpboxes = {}
+ pipe_addbox(pumpboxes, pipe_leftstub)
+ pipe_addbox(pumpboxes, pipe_pumpbody_x)
+ pipe_addbox(pumpboxes, pipe_rightstub)
+ local tilex = "pipeworks_pump_ends.png"
+ local tilez = "pipeworks_pump_"..states[s]..".png"
+
+ minetest.register_node("pipeworks:pump_"..states[s].."_x", {
+ description = "Pump Module ("..states[s]..")",
+ drawtype = "nodebox",
+ tiles = {
+ "pipeworks_pump_top_x.png",
+ "pipeworks_pump_sides.png",
+ tilex,
+ tilex,
+ "pipeworks_pump_sides.png",
+ tilez
+ },
+ paramtype = "light",
+ selection_box = {
+ type = "fixed",
+ fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }
+ },
+ node_box = {
+ type = "fixed",
+ fixed = pumpboxes
+ },
+ groups = dgroups,
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ after_place_node = function(pos)
+ pipe_device_autorotate(pos, states[s], "pipeworks:pump")
+ pipe_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ drop = "pipeworks:pump_off_x"
+ })
+
+ local pumpboxes = {}
+ pipe_addbox(pumpboxes, pipe_frontstub)
+ pipe_addbox(pumpboxes, pipe_pumpbody_z)
+ pipe_addbox(pumpboxes, pipe_backstub)
+
+ minetest.register_node("pipeworks:pump_"..states[s].."_z", {
+ description = "Pump Module ("..states[s]..", Z-axis)",
+ drawtype = "nodebox",
+ tiles = {
+ "pipeworks_pump_top_z.png",
+ "pipeworks_pump_sides.png",
+ tilez,
+ tilez,
+ "pipeworks_pump_sides.png",
+ tilex
+ },
+ paramtype = "light",
+ selection_box = {
+ type = "fixed",
+ fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }
+ },
+ node_box = {
+ type = "fixed",
+ fixed = pumpboxes
+ },
+ groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ after_place_node = function(pos)
+ pipe_device_autorotate(pos, states[s], "pipeworks:pump")
+ pipe_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ drop = "pipeworks:pump_off_x"
+ })
+
+ local valveboxes = {}
+ pipe_addbox(valveboxes, pipe_leftstub)
+ pipe_addbox(valveboxes, pipe_valvebody_x)
+ if states[s] == "off" then
+ pipe_addbox(valveboxes, pipe_valvehandle_off_x)
+ else
+ pipe_addbox(valveboxes, pipe_valvehandle_on_x)
+ end
+ pipe_addbox(valveboxes, pipe_rightstub)
+ local tilex = "pipeworks_valvebody_ends.png"
+ local tilez = "pipeworks_valvebody_sides.png"
+
+ minetest.register_node("pipeworks:valve_"..states[s].."_x", {
+ description = "Valve ("..states[s]..")",
+ drawtype = "nodebox",
+ tiles = {
+ "pipeworks_valvebody_top_"..states[s].."_x.png",
+ "pipeworks_valvebody_bottom.png",
+ tilex,
+ tilex,
+ tilez,
+ tilez,
+ },
+ paramtype = "light",
+ selection_box = {
+ type = "fixed",
+ fixed = { -8/16, -4/16, -5/16, 8/16, 5/16, 5/16 }
+ },
+ node_box = {
+ type = "fixed",
+ fixed = valveboxes
+ },
+ groups = dgroups,
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ after_place_node = function(pos)
+ pipe_device_autorotate(pos, states[s], "pipeworks:valve")
+ pipe_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ drop = "pipeworks:valve_off_x",
+ pipelike=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_int("pipelike",1)
+ end,
+ })
+
+ local valveboxes = {}
+ pipe_addbox(valveboxes, pipe_frontstub)
+ pipe_addbox(valveboxes, pipe_valvebody_z)
+ if states[s] == "off" then
+ pipe_addbox(valveboxes, pipe_valvehandle_off_z)
+ else
+ pipe_addbox(valveboxes, pipe_valvehandle_on_z)
+ end
+ pipe_addbox(valveboxes, pipe_backstub)
+
+ minetest.register_node("pipeworks:valve_"..states[s].."_z", {
+ description = "Valve ("..states[s]..", Z-axis)",
+ drawtype = "nodebox",
+ tiles = {
+ "pipeworks_valvebody_top_"..states[s].."_z.png",
+ "pipeworks_valvebody_bottom.png",
+ tilez,
+ tilez,
+ tilex,
+ tilex,
+ },
+ paramtype = "light",
+ selection_box = {
+ type = "fixed",
+ fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
+ },
+ node_box = {
+ type = "fixed",
+ fixed = valveboxes
+ },
+ groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ after_place_node = function(pos)
+ pipe_device_autorotate(pos, states[s], "pipeworks:valve")
+ pipe_scanforobjects(pos)
+
+ end,
+ after_dig_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ drop = "pipeworks:valve_off_x",
+ pipelike=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_int("pipelike",1)
+ end,
+ })
+end
+
+-- intake grate
+
+minetest.register_node("pipeworks:intake", {
+ description = "Intake grate",
+ drawtype = "nodebox",
+ tiles = {
+ "pipeworks_intake_top.png",
+ "pipeworks_intake_sides.png",
+ "pipeworks_intake_sides.png",
+ "pipeworks_intake_sides.png",
+ "pipeworks_intake_sides.png",
+ "pipeworks_intake_sides.png"
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }
+ },
+ node_box = {
+ type = "fixed",
+ fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }
+ },
+ paramtype = "light",
+ groups = {snappy=3, pipe=1},
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ after_place_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ pipelike=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_int("pipelike",1)
+ end,
+})
+
+-- outlet grate
+
+minetest.register_node("pipeworks:outlet", {
+ description = "Outlet grate",
+ drawtype = "nodebox",
+ tiles = {
+ "pipeworks_outlet_top.png",
+ "pipeworks_outlet_sides.png",
+ "pipeworks_outlet_sides.png",
+ "pipeworks_outlet_sides.png",
+ "pipeworks_outlet_sides.png",
+ "pipeworks_outlet_sides.png"
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }
+ },
+ node_box = {
+ type = "fixed",
+ fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }
+ },
+ paramtype = "light",
+ groups = {snappy=3, pipe=1},
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ after_place_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ pipelike=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_int("pipelike",1)
+ end,
+})
+
+-- tanks
+
+for fill = 0, 10 do
+ if fill == 0 then
+ filldesc="empty"
+ sgroups = {snappy=3, pipe=1, tankfill=fill+1}
+ else
+ filldesc=fill.."0% full"
+ sgroups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1}
+ end
+
+ minetest.register_node("pipeworks:expansion_tank_"..fill, {
+ description = "Expansion Tank ("..filldesc..")... You hacker, you.",
+ tiles = {
+ "pipeworks_storage_tank_fittings.png",
+ "pipeworks_storage_tank_fittings.png",
+ "pipeworks_storage_tank_back.png",
+ "pipeworks_storage_tank_back.png",
+ "pipeworks_storage_tank_back.png",
+ "pipeworks_storage_tank_front_"..fill..".png"
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1},
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ drop = "pipeworks:storage_tank_"..fill.."_x",
+ after_place_node = function(pos)
+ pipe_look_for_stackable_tanks(pos)
+ pipe_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ pipelike=0,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_int("pipelike",0)
+ end,
+ })
+
+ minetest.register_node("pipeworks:storage_tank_"..fill.."_x", {
+ description = "Fluid Storage Tank ("..filldesc..")",
+ tiles = {
+ "pipeworks_storage_tank_fittings.png",
+ "pipeworks_storage_tank_back.png",
+ "pipeworks_storage_tank_fittings.png",
+ "pipeworks_storage_tank_fittings.png",
+ "pipeworks_storage_tank_back.png",
+ "pipeworks_storage_tank_front_"..fill..".png"
+ },
+ paramtype = "light",
+ groups = sgroups,
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ after_place_node = function(pos)
+ pipe_look_for_stackable_tanks(pos)
+ if string.find(minetest.env:get_node(pos).name, "pipeworks:storage_tank_") ~= nil then
+ pipe_device_autorotate(pos, nil, "pipeworks:storage_tank_"..fill)
+ end
+ pipe_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ pipelike=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_int("pipelike",1)
+ end,
+ })
+
+ minetest.register_node("pipeworks:storage_tank_"..fill.."_z", {
+ description = "Fluid Storage Tank (Z axis, "..filldesc..")... You hacker, you.",
+ tiles = {
+ "pipeworks_storage_tank_fittings.png",
+ "pipeworks_storage_tank_back.png",
+ "pipeworks_storage_tank_front_"..fill..".png",
+ "pipeworks_storage_tank_back.png",
+ "pipeworks_storage_tank_fittings.png",
+ "pipeworks_storage_tank_fittings.png"
+ },
+ paramtype = "light",
+ groups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1},
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ drop = "pipeworks:storage_tank_"..fill.."_x",
+ after_place_node = function(pos)
+ pipe_look_for_stackable_tanks(pos)
+ if string.find(minetest.env:get_node(pos).name, "pipeworks:storage_tank_") ~= nil then
+ pipe_device_autorotate(pos, nil, "pipeworks:storage_tank_"..fill)
+ end
+ pipe_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ pipelike=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_int("pipelike",1)
+ end,
+ })
+end
+
+-- various actions
+
+local axes = { "x", "z" }
+
+for a in ipairs(axes) do
+ minetest.register_on_punchnode(function (pos, node)
+ if node.name=="pipeworks:valve_on_"..axes[a] then
+ minetest.env:add_node(pos, { name = "pipeworks:valve_off_"..axes[a] })
+ local meta = minetest.env:get_meta(pos)
+ meta:set_int("pipelike",0)
+ end
+ end)
+
+ minetest.register_on_punchnode(function (pos, node)
+ if node.name=="pipeworks:valve_off_"..axes[a] then
+ minetest.env:add_node(pos, { name = "pipeworks:valve_on_"..axes[a] })
+ local meta = minetest.env:get_meta(pos)
+ meta:set_int("pipelike",1)
+ end
+ end)
+
+ minetest.register_on_punchnode(function (pos, node)
+ if node.name=="pipeworks:pump_on_"..axes[a] then
+ minetest.env:add_node(pos, { name = "pipeworks:pump_off_"..axes[a] })
+ end
+ end)
+
+ minetest.register_on_punchnode(function (pos, node)
+ if node.name=="pipeworks:pump_off_"..axes[a] then
+ minetest.env:add_node(pos, { name = "pipeworks:pump_on_"..axes[a] })
+ end
+ end)
+end
+
--- /dev/null
+-- Pipeworks mod by Vanessa Ezekowitz - 2012-08-05
+--
+-- Entirely my own code. This mod supplies various shapes of pipes
+-- and devices that they can connect to such as pumps, valves, etc.
+-- All pipes autoconnect as you lay them out, and devices will auto-
+-- connect to them.
+--
+-- License: WTFPL
+--
+
+-- Un-comment the following dofile line to re-enable the old pipe nodes.
+-- dofile(minetest.get_modpath("pipeworks").."/oldpipes.lua")
+
+minetest.register_alias("pipeworks:pipe", "pipeworks:pipe_110000_empty")
+
+pipe_leftstub = {
+ { -32/64, -2/64, -6/64, 1/64, 2/64, 6/64 }, -- pipe segment against -X face
+ { -32/64, -4/64, -5/64, 1/64, 4/64, 5/64 },
+ { -32/64, -5/64, -4/64, 1/64, 5/64, 4/64 },
+ { -32/64, -6/64, -2/64, 1/64, 6/64, 2/64 },
+
+ { -32/64, -3/64, -8/64, -30/64, 3/64, 8/64 }, -- (the flange for it)
+ { -32/64, -5/64, -7/64, -30/64, 5/64, 7/64 },
+ { -32/64, -6/64, -6/64, -30/64, 6/64, 6/64 },
+ { -32/64, -7/64, -5/64, -30/64, 7/64, 5/64 },
+ { -32/64, -8/64, -3/64, -30/64, 8/64, 3/64 }
+}
+
+pipe_rightstub = {
+ { -1/64, -2/64, -6/64, 32/64, 2/64, 6/64 }, -- pipe segment against +X face
+ { -1/64, -4/64, -5/64, 32/64, 4/64, 5/64 },
+ { -1/64, -5/64, -4/64, 32/64, 5/64, 4/64 },
+ { -1/64, -6/64, -2/64, 32/64, 6/64, 2/64 },
+
+ { 30/64, -3/64, -8/64, 32/64, 3/64, 8/64 }, -- (the flange for it)
+ { 30/64, -5/64, -7/64, 32/64, 5/64, 7/64 },
+ { 30/64, -6/64, -6/64, 32/64, 6/64, 6/64 },
+ { 30/64, -7/64, -5/64, 32/64, 7/64, 5/64 },
+ { 30/64, -8/64, -3/64, 32/64, 8/64, 3/64 }
+}
+
+pipe_bottomstub = {
+ { -2/64, -32/64, -6/64, 2/64, 1/64, 6/64 }, -- pipe segment against -Y face
+ { -4/64, -32/64, -5/64, 4/64, 1/64, 5/64 },
+ { -5/64, -32/64, -4/64, 5/64, 1/64, 4/64 },
+ { -6/64, -32/64, -2/64, 6/64, 1/64, 2/64 },
+
+ { -3/64, -32/64, -8/64, 3/64, -30/64, 8/64 }, -- (the flange for it)
+ { -5/64, -32/64, -7/64, 5/64, -30/64, 7/64 },
+ { -6/64, -32/64, -6/64, 6/64, -30/64, 6/64 },
+ { -7/64, -32/64, -5/64, 7/64, -30/64, 5/64 },
+ { -8/64, -32/64, -3/64, 8/64, -30/64, 3/64 }
+}
+
+
+pipe_topstub = {
+ { -2/64, -1/64, -6/64, 2/64, 32/64, 6/64 }, -- pipe segment against +Y face
+ { -4/64, -1/64, -5/64, 4/64, 32/64, 5/64 },
+ { -5/64, -1/64, -4/64, 5/64, 32/64, 4/64 },
+ { -6/64, -1/64, -2/64, 6/64, 32/64, 2/64 },
+
+ { -3/64, 30/64, -8/64, 3/64, 32/64, 8/64 }, -- (the flange for it)
+ { -5/64, 30/64, -7/64, 5/64, 32/64, 7/64 },
+ { -6/64, 30/64, -6/64, 6/64, 32/64, 6/64 },
+ { -7/64, 30/64, -5/64, 7/64, 32/64, 5/64 },
+ { -8/64, 30/64, -3/64, 8/64, 32/64, 3/64 }
+}
+
+pipe_frontstub = {
+ { -6/64, -2/64, -32/64, 6/64, 2/64, 1/64 }, -- pipe segment against -Z face
+ { -5/64, -4/64, -32/64, 5/64, 4/64, 1/64 },
+ { -4/64, -5/64, -32/64, 4/64, 5/64, 1/64 },
+ { -2/64, -6/64, -32/64, 2/64, 6/64, 1/64 },
+
+ { -8/64, -3/64, -32/64, 8/64, 3/64, -30/64 }, -- (the flange for it)
+ { -7/64, -5/64, -32/64, 7/64, 5/64, -30/64 },
+ { -6/64, -6/64, -32/64, 6/64, 6/64, -30/64 },
+ { -5/64, -7/64, -32/64, 5/64, 7/64, -30/64 },
+ { -3/64, -8/64, -32/64, 3/64, 8/64, -30/64 }
+}
+
+pipe_backstub = {
+ { -6/64, -2/64, -1/64, 6/64, 2/64, 32/64 }, -- pipe segment against -Z face
+ { -5/64, -4/64, -1/64, 5/64, 4/64, 32/64 },
+ { -4/64, -5/64, -1/64, 4/64, 5/64, 32/64 },
+ { -2/64, -6/64, -1/64, 2/64, 6/64, 32/64 },
+
+ { -8/64, -3/64, 30/64, 8/64, 3/64, 32/64 }, -- (the flange for it)
+ { -7/64, -5/64, 30/64, 7/64, 5/64, 32/64 },
+ { -6/64, -6/64, 30/64, 6/64, 6/64, 32/64 },
+ { -5/64, -7/64, 30/64, 5/64, 7/64, 32/64 },
+ { -3/64, -8/64, 30/64, 3/64, 8/64, 32/64 }
+}
+
+pipe_selectboxes = {
+ { -32/64, -8/64, -8/64, 8/64, 8/64, 8/64 },
+ { -8/64 , -8/64, -8/64, 32/64, 8/64, 8/64 },
+ { -8/64 , -32/64, -8/64, 8/64, 8/64, 8/64 },
+ { -8/64 , -8/64, -8/64, 8/64, 32/64, 8/64 },
+ { -8/64 , -8/64, -32/64, 8/64, 8/64, 8/64 },
+ { -8/64 , -8/64, -8/64, 8/64, 8/64, 32/64 }
+}
+
+pipe_bendsphere = {
+ { -4/64, -4/64, -4/64, 4/64, 4/64, 4/64 },
+ { -5/64, -3/64, -3/64, 5/64, 3/64, 3/64 },
+ { -3/64, -5/64, -3/64, 3/64, 5/64, 3/64 },
+ { -3/64, -3/64, -5/64, 3/64, 3/64, 5/64 }
+}
+
+-- Functions
+
+dbg = function(s)
+ if DEBUG == 1 then
+ print('[PIPEWORKS] ' .. s)
+ end
+end
+
+function pipes_fix_image_names(table, replacement)
+ outtable={}
+ for i in ipairs(table) do
+ outtable[i]=string.gsub(table[i], "_XXXXX", replacement)
+ end
+
+ return outtable
+end
+
+function pipe_addbox(t, b)
+ for i in ipairs(b)
+ do table.insert(t, b[i])
+ end
+end
+
+-- now define the nodes!
+
+for xm = 0, 1 do
+for xp = 0, 1 do
+for ym = 0, 1 do
+for yp = 0, 1 do
+for zm = 0, 1 do
+for zp = 0, 1 do
+ local outboxes = {}
+ local outsel = {}
+ local outimgs = {}
+
+ if yp==1 then
+ pipe_addbox(outboxes, pipe_topstub)
+ table.insert(outsel, pipe_selectboxes[4])
+ table.insert(outimgs, "pipeworks_pipe_end.png")
+ else
+ table.insert(outimgs, "pipeworks_plain.png")
+ end
+ if ym==1 then
+ pipe_addbox(outboxes, pipe_bottomstub)
+ table.insert(outsel, pipe_selectboxes[3])
+ table.insert(outimgs, "pipeworks_pipe_end.png")
+ else
+ table.insert(outimgs, "pipeworks_plain.png")
+ end
+ if xp==1 then
+ pipe_addbox(outboxes, pipe_rightstub)
+ table.insert(outsel, pipe_selectboxes[2])
+ table.insert(outimgs, "pipeworks_pipe_end.png")
+ else
+ table.insert(outimgs, "pipeworks_plain.png")
+ end
+ if xm==1 then
+ pipe_addbox(outboxes, pipe_leftstub)
+ table.insert(outsel, pipe_selectboxes[1])
+ table.insert(outimgs, "pipeworks_pipe_end.png")
+ else
+ table.insert(outimgs, "pipeworks_plain.png")
+ end
+ if zp==1 then
+ pipe_addbox(outboxes, pipe_backstub)
+ table.insert(outsel, pipe_selectboxes[6])
+ table.insert(outimgs, "pipeworks_pipe_end.png")
+ else
+ table.insert(outimgs, "pipeworks_plain.png")
+ end
+ if zm==1 then
+ pipe_addbox(outboxes, pipe_frontstub)
+ table.insert(outsel, pipe_selectboxes[5])
+ table.insert(outimgs, "pipeworks_pipe_end.png")
+ else
+ table.insert(outimgs, "pipeworks_plain.png")
+ end
+
+ local jx = xp+xm
+ local jy = yp+ym
+ local jz = zp+zm
+
+ if (jx+jy+jz) == 1 then
+ if xm == 1 then
+ table.remove(outimgs, 3)
+ table.insert(outimgs, 3, "pipeworks_pipe_end_XXXXX.png")
+ end
+ if xp == 1 then
+ table.remove(outimgs, 4)
+ table.insert(outimgs, 4, "pipeworks_pipe_end_XXXXX.png")
+ end
+ if ym == 1 then
+ table.remove(outimgs, 1)
+ table.insert(outimgs, 1, "pipeworks_pipe_end_XXXXX.png")
+ end
+ if xp == 1 then
+ table.remove(outimgs, 2)
+ table.insert(outimgs, 2, "pipeworks_pipe_end_XXXXX.png")
+ end
+ if zm == 1 then
+ table.remove(outimgs, 5)
+ table.insert(outimgs, 5, "pipeworks_pipe_end_XXXXX.png")
+ end
+ if zp == 1 then
+ table.remove(outimgs, 6)
+ table.insert(outimgs, 6, "pipeworks_pipe_end_XXXXX.png")
+ end
+ end
+
+ if (jx==1 and jy==1 and jz~=1) or (jx==1 and jy~=1 and jz==1) or (jx~= 1 and jy==1 and jz==1) then
+ pipe_addbox(outboxes, pipe_bendsphere)
+ end
+
+ if (jx==2 and jy~=2 and jz~=2) then
+ table.remove(outimgs, 5)
+ table.remove(outimgs, 5)
+ table.insert(outimgs, 5, "pipeworks_windowed_XXXXX.png")
+ table.insert(outimgs, 5, "pipeworks_windowed_XXXXX.png")
+ end
+
+ if (jx~=2 and jy~=2 and jz==2) or (jx~=2 and jy==2 and jz~=2) then
+ table.remove(outimgs, 3)
+ table.remove(outimgs, 3)
+ table.insert(outimgs, 3, "pipeworks_windowed_XXXXX.png")
+ table.insert(outimgs, 3, "pipeworks_windowed_XXXXX.png")
+ end
+
+ local pname = xm..xp..ym..yp..zm..zp
+ local pgroups = ""
+
+ if pname ~= "110000" then
+ pgroups = {snappy=3, pipe=1, not_in_creative_inventory=1}
+ pipedesc = "Pipe segment (empty, "..pname..")... You hacker, you."
+ else
+ pgroups = {snappy=3, pipe=1}
+ pipedesc = "Pipe segment"
+ end
+
+ minetest.register_node("pipeworks:pipe_"..pname.."_empty", {
+ description = pipedesc,
+ drawtype = "nodebox",
+ tiles = pipes_fix_image_names(outimgs, "_empty"),
+ paramtype = "light",
+ selection_box = {
+ type = "fixed",
+ fixed = outsel
+ },
+ node_box = {
+ type = "fixed",
+ fixed = outboxes
+ },
+ groups = pgroups,
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ drop = "pipeworks:pipe_110000_empty",
+ pipelike=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_int("pipelike",1)
+ end,
+ after_place_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ })
+
+ minetest.register_node("pipeworks:pipe_"..pname.."_loaded", {
+ description = "Pipe segment (loaded, "..pname..")... You hacker, you.",
+ drawtype = "nodebox",
+ tiles = pipes_fix_image_names(outimgs, "_loaded"),
+ paramtype = "light",
+ selection_box = {
+ type = "fixed",
+ fixed = outsel
+ },
+ node_box = {
+ type = "fixed",
+ fixed = outboxes
+ },
+ groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ drop = "pipeworks:pipe_110000_loaded",
+ pipelike=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_int("pipelike",1)
+ end,
+ after_place_node = function(pos)
+ pipe_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ pipe_scanforobjects(pos)
+ end
+ })
+end
+end
+end
+end
+end
+end
+
+dofile(minetest.get_modpath("pipeworks").."/tubes.lua")
+dofile(minetest.get_modpath("pipeworks").."/devices.lua")
+dofile(minetest.get_modpath("pipeworks").."/autoplace.lua")
+dofile(minetest.get_modpath("pipeworks").."/crafts.lua")
+
+print("Pipeworks loaded!")
--- /dev/null
+-- This file is basically most of the old init.lua and only supplies the
+-- old nodes created by the previous verison of Pipeworks.
+--
+-- License: WTFPL
+--
+
+local nodenames = {
+ "vertical",
+ "horizontal",
+ "junction_xy",
+ "junction_xz",
+ "bend_xy_down",
+ "bend_xy_up",
+ "bend_xz",
+ "crossing_xz",
+ "crossing_xy",
+ "crossing_xyz",
+ "pipe_segment",
+ "cap_neg_x",
+ "cap_pos_x",
+ "cap_neg_y",
+ "cap_pos_y",
+ "cap_neg_z",
+ "cap_pos_z"
+}
+
+local descriptions = {
+ "vertical",
+ "horizontal",
+ "junction between X and Y axes",
+ "junction between X and Z axes",
+ "downward bend between X and Y axes",
+ "upward bend between X and Y axes",
+ "bend between X/Z axes",
+ "4-way crossing between X and Z axes",
+ "4-way crossing between X/Z and Y axes",
+ "6-way crossing",
+ "basic segment",
+ "capped, negative X half only",
+ "capped, positive X half only",
+ "capped, negative Y half only",
+ "capped, positive Y half only",
+ "capped, negative Z half only",
+ "capped, positive Z half only"
+}
+
+local nodeimages = {
+ {"pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_plain.png",
+ "pipeworks_plain.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png"},
+
+ {"pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_plain.png",
+ "pipeworks_plain.png"},
+
+ {"pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_plain.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png"},
+
+ {"pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_plain.png"},
+
+ {"pipeworks_plain.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_plain.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png"},
+
+ {"pipeworks_pipe_end.png",
+ "pipeworks_plain.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_plain.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png"},
+
+ {"pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_plain.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_plain.png"},
+
+ {"pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png"},
+
+ {"pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png"},
+
+ {"pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png"},
+
+-- horizontal short segment
+
+ {"pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_plain.png",
+ "pipeworks_plain.png"},
+
+-- capped
+
+ {"pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png"},
+
+ {"pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png"},
+
+ {"pipeworks_windowed_XXXXX.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png"},
+
+ {"pipeworks_pipe_end.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png"},
+
+ {"pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_pipe_end.png"},
+
+ {"pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_windowed_XXXXX.png",
+ "pipeworks_pipe_end.png",
+ "pipeworks_windowed_XXXXX.png"},
+}
+
+local selectionboxes = {
+ { -0.15, -0.5, -0.15, 0.15, 0.5, 0.15 },
+ { -0.5, -0.15, -0.15, 0.5, 0.15, 0.15 },
+ { -0.15, -0.5, -0.15, 0.5, 0.5, 0.15 },
+ { -0.5, -0.15, -0.15, 0.5, 0.15, 0.5 },
+ { -0.15, -0.5, -0.15, 0.5, 0.15, 0.15 },
+ { -0.15, -0.15, -0.15, 0.5, 0.5, 0.15 },
+ { -0.15, -0.15, -0.15, 0.5, 0.15, 0.5 },
+ { -0.5, -0.15, -0.5, 0.5, 0.15, 0.5 },
+ { -0.5, -0.5, -0.15, 0.5, 0.5, 0.15 },
+ { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
+ { -0.3, -0.15, -0.15, 0.3, 0.15, 0.15 },
+ { -0.5, -0.15, -0.15, 0, 0.15, 0.15 },
+ { 0, -0.15, -0.15, 0.5, 0.15, 0.15 },
+ { -0.15, -0.5, -0.15, 0.15, 0, 0.15 },
+ { -0.15, 0, -0.15, 0.15, 0.5, 0.15 },
+ { -0.15, -0.15, -0.5, 0.15, 0.15, 0 },
+ { -0.15, -0.15, 0, 0.15, 0.15, 0.5 },
+}
+
+local nodeboxes = {
+ {{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 }, -- vertical
+ { -0.1 , -0.45, -0.1 , 0.1 , 0.45, 0.1 },
+ { -0.15, 0.45, -0.15, 0.15, 0.5 , 0.15 }},
+
+ {{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 }, -- horizontal
+ { -0.45, -0.1 , -0.1 , 0.45, 0.1 , 0.1 },
+ { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }},
+
+ {{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 }, -- vertical with X/Z junction
+ { -0.1 , -0.45, -0.1 , 0.1 , 0.45, 0.1 },
+ { -0.15, 0.45, -0.15, 0.15, 0.5 , 0.15 },
+ { 0.1 , -0.1 , -0.1 , 0.45, 0.1 , 0.1 },
+ { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }},
+
+ {{ -0.15, -0.15, 0.45, 0.15, 0.15, 0.5 }, -- horizontal with X/Z junction
+ { -0.1 , -0.1 , 0.1 , 0.1 , 0.1 , 0.45 },
+ { -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
+ { -0.45, -0.1 , -0.1 , 0.45, 0.1 , 0.1 },
+ { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }},
+
+ {{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 }, -- bend down from X/Z to Y axis
+ { -0.1 , -0.45, -0.1 , 0.1 , 0.1 , 0.1 },
+ { -0.1 , -0.1 , -0.1 , 0.45, 0.1 , 0.1 },
+ { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }},
+
+ {{ -0.15, 0.45 , -0.15, 0.15, 0.5, 0.15 }, -- bend up from X/Z to Y axis
+ { -0.1 , -0.1 , -0.1 , 0.1 , 0.45, 0.1 },
+ { -0.1 , -0.1 , -0.1 , 0.45, 0.1 , 0.1 },
+ { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }},
+
+ {{ -0.15, -0.15, 0.45, 0.15, 0.15, 0.5 }, -- bend between X and Z axes
+ { -0.1 , -0.1 , 0.1 , 0.1 , 0.1 , 0.45 },
+ { -0.1 , -0.1 , -0.1 , 0.45, 0.1 , 0.1 },
+ { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }},
+
+ {{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 }, -- 4-way crossing between X and Z axes
+ { -0.45, -0.1 , -0.1 , 0.45, 0.1 , 0.1 },
+ { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 },
+ { -0.15, -0.15, -0.5 , 0.15, 0.15, -0.45 },
+ { -0.1 , -0.1 , -0.45, 0.1 , 0.1 , 0.45 },
+ { -0.15, -0.15, 0.45, 0.15, 0.15, 0.5 }},
+
+ {{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 }, -- 4-way crossing between X/Z and Y axes
+ { -0.1 , -0.45, -0.1 , 0.1 , 0.45, 0.1 },
+ { -0.15, 0.45, -0.15, 0.15, 0.5 , 0.15 },
+ { -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
+ { -0.45, -0.1 , -0.1 , 0.45, 0.1 , 0.1 },
+ { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }},
+
+ {{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 }, -- 6-way crossing (all 3 axes)
+ { -0.45, -0.1 , -0.1 , 0.45, 0.1 , 0.1 },
+ { 0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 },
+ { -0.15, -0.15, -0.5 , 0.15, 0.15, -0.45 },
+ { -0.1 , -0.1 , -0.45, 0.1 , 0.1 , 0.45 },
+ { -0.15, -0.15, 0.45, 0.15, 0.15, 0.5 },
+ { -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 },
+ { -0.1 , -0.45, -0.1 , 0.1 , 0.45, 0.1 },
+ { -0.15, 0.45, -0.15, 0.15, 0.5 , 0.15 }},
+
+ {{ -0.3 , -0.15, -0.15, -0.25, 0.15, 0.15 }, -- main center segment
+ { -0.25, -0.1 , -0.1 , 0.25, 0.1 , 0.1 },
+ { 0.25, -0.15, -0.15, 0.3 , 0.15, 0.15 }},
+
+ {{ -0.5, -0.15, -0.15, -0.45, 0.15, 0.15 }, -- anchored at -X
+ { -0.45, -0.1, -0.1, -0.2, 0.1, 0.1 },
+ { -0.2, -0.15, -0.15, -0.15, 0.15, 0.15 },
+ { -0.15, -0.12, -0.12, -0.1, 0.12, 0.12 },
+ { -0.1, -0.08, -0.08, -0.05, 0.08, 0.08 },
+ { -0.05, -0.04, -0.04, 0, 0.04, 0.04 }},
+
+ {{ 0.45, -0.15, -0.15, 0.5, 0.15, 0.15 }, -- anchored at +X
+ { 0.2, -0.1, -0.1, 0.45, 0.1, 0.1 },
+ { 0.15, -0.15, -0.15, 0.2, 0.15, 0.15 },
+ { 0.1, -0.12, -0.12, 0.15, 0.12, 0.12 },
+ { 0.05, -0.08, -0.08, 0.1, 0.08, 0.08 },
+ { 0, -0.04, -0.04, 0.05, 0.04, 0.04 }},
+
+ {{ -0.15, -0.5, -0.15, 0.15, -0.45, 0.15 }, -- anchored at -Y
+ { -0.1, -0.45, -0.1, 0.1, -0.2, 0.1 },
+ { -0.15, -0.2, -0.15, 0.15, -0.15, 0.15 },
+ { -0.12, -0.15, -0.12, 0.12, -0.1, 0.12 },
+ { -0.08, -0.1, -0.08, 0.08, -0.05, 0.08 },
+ { -0.04, -0.05, -0.04, 0.04, 0, 0.04 }},
+
+ {{ -0.15, 0.45, -0.15, 0.15, 0.5, 0.15 }, -- anchored at +Y
+ { -0.1, 0.2, -0.1, 0.1, 0.45, 0.1 },
+ { -0.15, 0.15, -0.15, 0.15, 0.2, 0.15 },
+ { -0.12, 0.1, -0.12, 0.12, 0.15, 0.12 },
+ { -0.08, 0.05, -0.08, 0.08, 0.1, 0.08 } ,
+ { -0.04, 0, -0.04, 0.04, 0.05, 0.04 }},
+
+ {{ -0.15, -0.15, -0.5, 0.15, 0.15, -0.45 }, -- anchored at -Z
+ { -0.1, -0.1, -0.45, 0.1, 0.1, -0.2 },
+ { -0.15, -0.15, -0.2, 0.15, 0.15, -0.15 },
+ { -0.12, -0.12, -0.15, 0.12, 0.12, -0.1 },
+ { -0.08, -0.08, -0.1, 0.08, 0.08, -0.05 },
+ { -0.04, -0.04, -0.05, 0.04, 0.04, 0 }},
+
+ {{ -0.15, -0.15, 0.45, 0.15, 0.15, 0.5 }, -- anchored at +Z
+ { -0.1, -0.1, 0.2, 0.1, 0.1, 0.45 },
+ { -0.15, -0.15, 0.15, 0.15, 0.15, 0.2 },
+ { -0.12, -0.12, 0.1, 0.12, 0.12, 0.15 },
+ { -0.08, -0.08, 0.05, 0.08, 0.08, 0.1 },
+ { -0.04, -0.04, 0, 0.04, 0.04, 0.05 }},
+}
+
+function fix_image_names(node, replacement)
+ outtable={}
+ for i in ipairs(nodeimages[node]) do
+ outtable[i]=string.gsub(nodeimages[node][i], "_XXXXX", replacement)
+ end
+
+ return outtable
+end
+
+-- Now define the actual nodes
+
+for node in ipairs(nodenames) do
+
+ if node ~= 2 then
+ pgroups = {snappy=3, pipe=1, not_in_creative_inventory=1}
+ else
+ pgroups = {snappy=3, pipe=1}
+ end
+
+ minetest.register_node("pipeworks:"..nodenames[node], {
+ description = "Empty Pipe ("..descriptions[node]..")",
+ drawtype = "nodebox",
+ tiles = fix_image_names(node, "_empty"),
+ paramtype = "light",
+ paramtype2 = "facedir",
+ selection_box = {
+ type = "fixed",
+ fixed = selectionboxes[node],
+ },
+ node_box = {
+ type = "fixed",
+ fixed = nodeboxes[node]
+ },
+ groups = pgroups,
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ drop = "pipeworks:pipe"
+ })
+
+ minetest.register_node("pipeworks:"..nodenames[node].."_loaded", {
+ description = "Loaded Pipe ("..descriptions[node]..")",
+ drawtype = "nodebox",
+ tiles = fix_image_names(node, "_loaded"),
+ paramtype = "light",
+ paramtype2 = "facedir",
+ selection_box = {
+ type = "fixed",
+ fixed = selectionboxes[node],
+ },
+ node_box = {
+ type = "fixed",
+ fixed = nodeboxes[node]
+ },
+ groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ drop = "pipeworks:pipe"
+ })
+end
+
--- /dev/null
+-- This file supplies pneumatic tubes and a 'test' device
+
+minetest.register_node("pipeworks:testobject", {
+ description = "Pneumatic tube test ojbect",
+ tiles = {
+ "pipeworks_testobject.png",
+ },
+ paramtype = "light",
+ groups = {snappy=3, tubedevice=1},
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ after_place_node = function(pos)
+ tube_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ tube_scanforobjects(pos)
+ end,
+})
+
+-- tables
+
+minetest.register_alias("pipeworks:tube", "pipeworks:tube_000000")
+
+tube_leftstub = {
+ { -32/64, -9/64, -9/64, 9/64, 9/64, 9/64 }, -- tube segment against -X face
+}
+
+tube_rightstub = {
+ { -9/64, -9/64, -9/64, 32/64, 9/64, 9/64 }, -- tube segment against +X face
+}
+
+tube_bottomstub = {
+ { -9/64, -32/64, -9/64, 9/64, 9/64, 9/64 }, -- tube segment against -Y face
+}
+
+
+tube_topstub = {
+ { -9/64, -9/64, -9/64, 9/64, 32/64, 9/64 }, -- tube segment against +Y face
+}
+
+tube_frontstub = {
+ { -9/64, -9/64, -32/64, 9/64, 9/64, 9/64 }, -- tube segment against -Z face
+}
+
+tube_backstub = {
+ { -9/64, -9/64, -9/64, 9/64, 9/64, 32/64 }, -- tube segment against -Z face
+}
+
+tube_selectboxes = {
+ { -32/64, -10/64, -10/64, 10/64, 10/64, 10/64 },
+ { -10/64 , -10/64, -10/64, 32/64, 10/64, 10/64 },
+ { -10/64 , -32/64, -10/64, 10/64, 10/64, 10/64 },
+ { -10/64 , -10/64, -10/64, 10/64, 32/64, 10/64 },
+ { -10/64 , -10/64, -32/64, 10/64, 10/64, 10/64 },
+ { -10/64 , -10/64, -10/64, 10/64, 10/64, 32/64 }
+}
+
+-- Functions
+
+function tube_addbox(t, b)
+ for i in ipairs(b)
+ do table.insert(t, b[i])
+ end
+end
+
+-- now define the nodes!
+
+for xm = 0, 1 do
+for xp = 0, 1 do
+for ym = 0, 1 do
+for yp = 0, 1 do
+for zm = 0, 1 do
+for zp = 0, 1 do
+ local outboxes = {}
+ local outsel = {}
+ local outimgs = {}
+
+ if yp==1 then
+ tube_addbox(outboxes, tube_topstub)
+ table.insert(outsel, tube_selectboxes[4])
+ table.insert(outimgs, "pipeworks_tube_noctr.png")
+ else
+ table.insert(outimgs, "pipeworks_tube_plain.png")
+ end
+ if ym==1 then
+ tube_addbox(outboxes, tube_bottomstub)
+ table.insert(outsel, tube_selectboxes[3])
+ table.insert(outimgs, "pipeworks_tube_noctr.png")
+ else
+ table.insert(outimgs, "pipeworks_tube_plain.png")
+ end
+ if xp==1 then
+ tube_addbox(outboxes, tube_rightstub)
+ table.insert(outsel, tube_selectboxes[2])
+ table.insert(outimgs, "pipeworks_tube_noctr.png")
+ else
+ table.insert(outimgs, "pipeworks_tube_plain.png")
+ end
+ if xm==1 then
+ tube_addbox(outboxes, tube_leftstub)
+ table.insert(outsel, tube_selectboxes[1])
+ table.insert(outimgs, "pipeworks_tube_noctr.png")
+ else
+ table.insert(outimgs, "pipeworks_tube_plain.png")
+ end
+ if zp==1 then
+ tube_addbox(outboxes, tube_backstub)
+ table.insert(outsel, tube_selectboxes[6])
+ table.insert(outimgs, "pipeworks_tube_noctr.png")
+ else
+ table.insert(outimgs, "pipeworks_tube_plain.png")
+ end
+ if zm==1 then
+ tube_addbox(outboxes, tube_frontstub)
+ table.insert(outsel, tube_selectboxes[5])
+ table.insert(outimgs, "pipeworks_tube_noctr.png")
+ else
+ table.insert(outimgs, "pipeworks_tube_plain.png")
+ end
+
+ local jx = xp+xm
+ local jy = yp+ym
+ local jz = zp+zm
+
+ if (jx+jy+jz) == 1 then
+ if xm == 1 then
+ table.remove(outimgs, 3)
+ table.insert(outimgs, 3, "pipeworks_tube_end.png")
+ end
+ if xp == 1 then
+ table.remove(outimgs, 4)
+ table.insert(outimgs, 4, "pipeworks_tube_end.png")
+ end
+ if ym == 1 then
+ table.remove(outimgs, 1)
+ table.insert(outimgs, 1, "pipeworks_tube_end.png")
+ end
+ if xp == 1 then
+ table.remove(outimgs, 2)
+ table.insert(outimgs, 2, "pipeworks_tube_end.png")
+ end
+ if zm == 1 then
+ table.remove(outimgs, 5)
+ table.insert(outimgs, 5, "pipeworks_tube_end.png")
+ end
+ if zp == 1 then
+ table.remove(outimgs, 6)
+ table.insert(outimgs, 6, "pipeworks_tube_end.png")
+ end
+ end
+
+ local tname = xm..xp..ym..yp..zm..zp
+ local tgroups = ""
+
+ if tname ~= "000000" then
+ tgroups = {snappy=3, tube=1, not_in_creative_inventory=1}
+ tubedesc = "Pneumatic tube segment ("..tname..")... You hacker, you."
+ iimg=nil
+ wscale = {x=1,y=1,z=1}
+ else
+ tgroups = {snappy=3, tube=1}
+ tubedesc = "Pneumatic tube segment"
+ iimg="pipeworks_tube_inv.png"
+ outimgs = {
+ "pipeworks_tube_short.png",
+ "pipeworks_tube_short.png",
+ "pipeworks_tube_end.png",
+ "pipeworks_tube_end.png",
+ "pipeworks_tube_short.png",
+ "pipeworks_tube_short.png"
+ }
+ outboxes = { -24/64, -9/64, -9/64, 24/64, 9/64, 9/64 }
+ outsel = { -24/64, -10/64, -10/64, 24/64, 10/64, 10/64 }
+ wscale = {x=1,y=1,z=0.01}
+ end
+
+ minetest.register_node("pipeworks:tube_"..tname, {
+ description = tubedesc,
+ drawtype = "nodebox",
+ tiles = outimgs,
+ inventory_image=iimg,
+ wield_image=iimg,
+ wield_scale=wscale,
+ paramtype = "light",
+ selection_box = {
+ type = "fixed",
+ fixed = outsel
+ },
+ node_box = {
+ type = "fixed",
+ fixed = outboxes
+ },
+ groups = tgroups,
+ sounds = default.node_sound_wood_defaults(),
+ walkable = true,
+ stack_max = 99,
+ drop = "pipeworks:tube_000000",
+ tubelike=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_int("tubelike",1)
+ end,
+ after_place_node = function(pos)
+ tube_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ tube_scanforobjects(pos)
+ end
+ })
+
+end
+end
+end
+end
+end
+end
+
--- /dev/null
+alloy_recipes ={}
+
+registered_recipes_count=1
+
+function register_alloy_recipe (string1,count1, string2,count2, string3,count3)
+alloy_recipes[registered_recipes_count]={}
+alloy_recipes[registered_recipes_count].src1_name=string1
+alloy_recipes[registered_recipes_count].src1_count=count1
+alloy_recipes[registered_recipes_count].src2_name=string2
+alloy_recipes[registered_recipes_count].src2_count=count2
+alloy_recipes[registered_recipes_count].dst_name=string3
+alloy_recipes[registered_recipes_count].dst_count=count3
+registered_recipes_count=registered_recipes_count+1
+alloy_recipes[registered_recipes_count]={}
+alloy_recipes[registered_recipes_count].src1_name=string2
+alloy_recipes[registered_recipes_count].src1_count=count2
+alloy_recipes[registered_recipes_count].src2_name=string1
+alloy_recipes[registered_recipes_count].src2_count=count1
+alloy_recipes[registered_recipes_count].dst_name=string3
+alloy_recipes[registered_recipes_count].dst_count=count3
+registered_recipes_count=registered_recipes_count+1
+if UI_recipes_hook then
+ minetest.register_craft({
+ type = "alloy",
+ output = string3.." "..count3,
+ recipe = {
+ {string1.." "..count1},
+ {string2.." "..count2},
+ }
+ })
+ end
+end
+
+register_alloy_recipe ("technic:copper_dust",3, "technic:tin_dust",1, "technic:bronze_dust",4)
+register_alloy_recipe ("moreores:copper_ingot",3, "moreores:tin_ingot",1, "moreores:bronze_ingot",4)
+register_alloy_recipe ("technic:iron_dust",3, "technic:chromium_dust",1, "technic:stainless_steel_dust",4)
+register_alloy_recipe ("default:steel_ingot",3, "technic:chromium_ingot",1, "technic:stainless_steel_ingot",4)
+register_alloy_recipe ("technic:copper_dust",2, "technic:zinc_dust",1, "technic:brass_dust",3)
+register_alloy_recipe ("moreores:copper_ingot",2, "technic:zinc_ingot",1, "technic:brass_ingot",3)
+register_alloy_recipe ("default:sand",2, "technic:coal_dust",2, "technic:silicon_wafer",1)
+register_alloy_recipe ("technic:silicon_wafer",1, "technic:mithril_dust",1, "technic:doped_silicon_wafer",1)
+
+
+minetest.register_craft({
+ output = 'technic:alloy_furnace',
+ recipe = {
+ {'default:brick', 'default:brick', 'default:brick'},
+ {'default:brick', '', 'default:brick'},
+ {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
+ }
+})
+
+
+alloy_furnace_formspec =
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "list[current_name;src2;3,2;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]"..
+ "label[0,0;Electric Alloy Furnace]"..
+ "label[1,3;Power level]"
+
+minetest.register_node("technic:alloy_furnace", {
+ description = "Electric alloy furnace",
+ tiles = {"technic_alloy_furnace_top.png", "technic_machine_bottom.png", "technic_alloy_furnace_side.png",
+ "technic_alloy_furnace_side.png", "technic_alloy_furnace_side.png", "technic_alloy_furnace_front.png"},
+ paramtype2 = "facedir",
+ groups = {cracky=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_stone_defaults(),
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ interal_EU_buffer_size=2000;
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_float("technic_power_machine", 1)
+ meta:set_string("formspec", alloy_furnace_formspec)
+ meta:set_string("infotext", "Electric Alloy furnace")
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("src2", 1)
+ inv:set_size("dst", 4)
+ local EU_used = 0
+ local furnace_is_cookin = 0
+ local cooked = nil
+ meta:set_float("internal_EU_buffer",0)
+ meta:set_float("internal_EU_buffer_size",2000)
+
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false end
+ if not inv:is_empty("src") then
+ return false end
+ if not inv:is_empty("src2") then
+ return false end
+ return true
+ end,
+})
+
+minetest.register_node("technic:alloy_furnace_active", {
+ description = "Alloy Furnace",
+ tiles = {"technic_alloy_furnace_top.png", "technic_machine_bottom.png", "technic_alloy_furnace_side.png",
+ "technic_alloy_furnace_side.png", "technic_alloy_furnace_side.png", "technic_alloy_furnace_front_active.png"},
+ paramtype2 = "facedir",
+ light_source = 8,
+ drop = "technic:alloy_furnace",
+ groups = {cracky=2, not_in_creative_inventory=1},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_stone_defaults(),
+ internal_EU_buffer=0;
+ interal_EU_buffer_size=2000;
+ technic_power_machine=1,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+minetest.register_abm({
+ nodenames = {"technic:alloy_furnace","technic:alloy_furnace_active"},
+ interval = 1,
+ chance = 1,
+
+ action = function(pos, node, active_object_count, active_object_count_wider)
+
+ local meta = minetest.env:get_meta(pos)
+ internal_EU_buffer=meta:get_float("internal_EU_buffer")
+ internal_EU_buffer_size=meta:get_float("internal_EU_buffer")
+ local load = math.floor(internal_EU_buffer/2000 * 100)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "list[current_name;src2;3,2;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]"..
+ "label[0,0;Electric Alloy Furnace]"..
+ "label[1,3;Power level]")
+
+ local inv = meta:get_inventory()
+
+ local furnace_is_cookin = meta:get_int("furnace_is_cookin")
+
+
+ local srclist = inv:get_list("src")
+ local srclist2 = inv:get_list("src2")
+
+ srcstack = inv:get_stack("src", 1)
+ if srcstack then src_item1=srcstack:to_table() end
+ srcstack = inv:get_stack("src2", 1)
+ if srcstack then src_item2=srcstack:to_table() end
+ dst_index=nil
+
+ if src_item1 and src_item2 then
+ dst_index=get_cook_result(src_item1,src_item2)
+ end
+
+
+ if (furnace_is_cookin == 1) then
+ if internal_EU_buffer>=150 then
+ internal_EU_buffer=internal_EU_buffer-150;
+ meta:set_float("internal_EU_buffer",internal_EU_buffer)
+ meta:set_float("src_time", meta:get_float("src_time") + 1)
+ if dst_index and meta:get_float("src_time") >= 4 then
+ -- check if there's room for output in "dst" list
+ dst_stack={}
+ dst_stack["name"]=alloy_recipes[dst_index].dst_name
+ dst_stack["count"]=alloy_recipes[dst_index].dst_count
+ if inv:room_for_item("dst",dst_stack) then
+ -- Put result in "dst" list
+ inv:add_item("dst",dst_stack)
+ -- take stuff from "src" list
+ for i=1,alloy_recipes[dst_index].src1_count,1 do
+ srcstack = inv:get_stack("src", 1)
+ srcstack:take_item()
+ inv:set_stack("src", 1, srcstack)
+ end
+ for i=1,alloy_recipes[dst_index].src2_count,1 do
+ srcstack = inv:get_stack("src2", 1)
+ srcstack:take_item()
+ inv:set_stack("src2", 1, srcstack)
+ end
+
+
+ else
+ print("Furnace inventory full!")
+ end
+ meta:set_string("src_time", 0)
+ end
+ end
+ end
+
+
+
+
+ if dst_index and meta:get_int("furnace_is_cookin")==0 then
+ hacky_swap_node(pos,"technic:alloy_furnace_active")
+ meta:set_string("infotext","Electric Alloy Furnace active")
+ meta:set_int("furnace_is_cookin",1)
+ meta:set_string("src_time", 0)
+ return
+ end
+
+
+ if meta:get_int("furnace_is_cookin")==0 or dst_index==nil then
+ hacky_swap_node(pos,"technic:alloy_furnace")
+ meta:set_string("infotext","Electric Alloy Furnace inactive")
+ meta:set_int("furnace_is_cookin",0)
+ meta:set_string("src_time", 0)
+ end
+
+end,
+})
+
+function get_cook_result(src_item1, src_item2)
+local counter=registered_recipes_count-1
+for i=1, counter,1 do
+if alloy_recipes[i].src1_name==src_item1["name"] and
+ alloy_recipes[i].src2_name==src_item2["name"] and
+ alloy_recipes[i].src1_count<=src_item1["count"] and
+ alloy_recipes[i].src2_count<=src_item2["count"]
+ then return i end
+end
+return nil
+end
+
+
+--coal driven alloy furnace:
+
+minetest.register_craft({
+ output = 'technic:coal_alloy_furnace',
+ recipe = {
+ {'default:brick', 'default:brick', 'default:brick'},
+ {'default:brick', '', 'default:brick'},
+ {'default:brick', 'default:brick', 'default:brick'},
+ }
+})
+
+
+coal_alloy_furnace_formspec =
+ "size[8,9]"..
+ "label[0,0;Alloy Furnace]"..
+ "image[2,2;1,1;default_furnace_fire_bg.png]"..
+ "list[current_name;fuel;2,3;1,1;]"..
+ "list[current_name;src;2,1;1,1;]"..
+ "list[current_name;src2;3,1;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]"
+
+minetest.register_node("technic:coal_alloy_furnace", {
+ description = "Alloy Furnace",
+ tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", "technic_coal_alloy_furnace_side.png",
+ "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front.png"},
+ paramtype2 = "facedir",
+ groups = {cracky=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_stone_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec", coal_alloy_furnace_formspec)
+ meta:set_string("infotext", "Alloy Furnace")
+ local inv = meta:get_inventory()
+ inv:set_size("fuel", 1)
+ inv:set_size("src", 1)
+ inv:set_size("src2", 1)
+ inv:set_size("dst", 4)
+ local furnace_is_cookin = 0
+ local dst_index = nil
+
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not (inv:is_empty("fuel") or inv:is_empty("dst") or inv:is_empty("src") or inv:is_empty("src2") )then
+ return false
+ end
+ return true
+ end,
+})
+
+minetest.register_node("technic:coal_alloy_furnace_active", {
+ description = "Alloy Furnace",
+ tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", "technic_coal_alloy_furnace_side.png",
+ "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front_active.png"},
+ paramtype2 = "facedir",
+ light_source = 8,
+ drop = "technic:coal_alloy_furnace",
+ groups = {cracky=2, not_in_creative_inventory=1},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_stone_defaults(),
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not (inv:is_empty("fuel") or inv:is_empty("dst") or inv:is_empty("src") or inv:is_empty("src2") )then
+ return false
+ end
+ return true
+ end,
+})
+
+minetest.register_abm({
+ nodenames = {"technic:coal_alloy_furnace","technic:coal_alloy_furnace_active"},
+ interval = 1,
+ chance = 1,
+
+ action = function(pos, node, active_object_count, active_object_count_wider)
+ local meta = minetest.env:get_meta(pos)
+ for i, name in ipairs({
+ "fuel_totaltime",
+ "fuel_time",
+ "src_totaltime",
+ "src_time"
+ }) do
+ if meta:get_string(name) == "" then
+ meta:set_float(name, 0.0)
+ end
+ end
+
+ local inv = meta:get_inventory()
+
+ srcstack = inv:get_stack("src", 1)
+ if srcstack then src_item1=srcstack:to_table() end
+ srcstack = inv:get_stack("src2", 1)
+ if srcstack then src_item2=srcstack:to_table() end
+ dst_index=nil
+
+ if src_item1 and src_item2 then
+ dst_index=get_cook_result(src_item1,src_item2)
+ end
+
+ local was_active = false
+
+ if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
+ was_active = true
+ meta:set_float("fuel_time", meta:get_float("fuel_time") + 1)
+ meta:set_float("src_time", meta:get_float("src_time") + 1)
+ if dst_index and meta:get_float("src_time") >= 5 then
+ -- check if there's room for output in "dst" list
+ dst_stack={}
+ dst_stack["name"]=alloy_recipes[dst_index].dst_name
+ dst_stack["count"]=alloy_recipes[dst_index].dst_count
+ if inv:room_for_item("dst",dst_stack) then
+ -- Put result in "dst" list
+ inv:add_item("dst", dst_stack)
+ -- take stuff from "src" list
+ for i=1,alloy_recipes[dst_index].src1_count,1 do
+ srcstack = inv:get_stack("src", 1)
+ srcstack:take_item()
+ inv:set_stack("src", 1, srcstack)
+ end
+ for i=1,alloy_recipes[dst_index].src2_count,1 do
+ srcstack = inv:get_stack("src2", 1)
+ srcstack:take_item()
+ inv:set_stack("src2", 1, srcstack)
+ end
+ else
+ print("Furnace inventory full!")
+ end
+ meta:set_string("src_time", 0)
+ end
+ end
+
+ if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
+ local percent = math.floor(meta:get_float("fuel_time") /
+ meta:get_float("fuel_totaltime") * 100)
+ meta:set_string("infotext","Furnace active: "..percent.."%")
+ hacky_swap_node(pos,"technic:coal_alloy_furnace_active")
+ meta:set_string("formspec",
+ "size[8,9]"..
+ "label[0,0;Electric Alloy Furnace]"..
+ "image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:"..
+ (100-percent)..":default_furnace_fire_fg.png]"..
+ "list[current_name;fuel;2,3;1,1;]"..
+ "list[current_name;src;2,1;1,1;]"..
+ "list[current_name;src2;3,1;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]")
+ return
+ end
+
+ local fuel = nil
+ local fuellist = inv:get_list("fuel")
+
+ srcstack = inv:get_stack("src", 1)
+ if srcstack then src_item1=srcstack:to_table() end
+ srcstack = inv:get_stack("src2", 1)
+ if srcstack then src_item2=srcstack:to_table() end
+ dst_index=nil
+
+ if src_item1 and src_item2 then
+ dst_index=get_cook_result(src_item1,src_item2)
+ end
+
+
+ if fuellist then
+ fuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
+ end
+
+ if fuel.time <= 0 then
+ meta:set_string("infotext","Furnace out of fuel")
+ hacky_swap_node(pos,"technic:coal_alloy_furnace")
+ meta:set_string("formspec", coal_alloy_furnace_formspec)
+ return
+ end
+
+ if dst_index==nil then
+ if was_active then
+ meta:set_string("infotext","Furnace is empty")
+ hacky_swap_node(pos,"technic:coal_alloy_furnace")
+ meta:set_string("formspec", coal_alloy_furnace_formspec)
+ end
+ return
+ end
+
+ meta:set_string("fuel_totaltime", fuel.time)
+ meta:set_string("fuel_time", 0)
+
+ local stack = inv:get_stack("fuel", 1)
+ stack:take_item()
+ inv:set_stack("fuel", 1, stack)
+
+end,
+})
--- /dev/null
+power_tools ={}
+
+registered_power_tools_count=1
+
+function register_power_tool (string1,max_charge)
+power_tools[registered_power_tools_count]={}
+power_tools[registered_power_tools_count].tool_name=string1
+power_tools[registered_power_tools_count].max_charge=max_charge
+registered_power_tools_count=registered_power_tools_count+1
+end
+
+register_power_tool ("technic:mining_drill",60000)
+register_power_tool ("technic:chainsaw",30000)
+register_power_tool ("technic:laser_mk1",40000)
+register_power_tool ("technic:battery",10000)
+register_power_tool ("technic:sonic_screwdriver",15000)
+register_power_tool ("technic:flashlight",30000)
+register_power_tool ("technic:red_energy_crystal",100000)
+register_power_tool ("technic:green_energy_crystal",250000)
+register_power_tool ("technic:blue_energy_crystal",500000)
+
+minetest.register_alias("battery", "technic:battery")
+minetest.register_alias("battery_box", "technic:battery_box")
+
+minetest.register_craft({
+ output = 'technic:battery 1',
+ recipe = {
+ {'default:wood', 'moreores:copper_ingot', 'default:wood'},
+ {'default:wood', 'moreores:tin_ingot', 'default:wood'},
+ {'default:wood', 'moreores:copper_ingot', 'default:wood'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:battery_box 1',
+ recipe = {
+ {'technic:battery', 'default:wood', 'technic:battery'},
+ {'technic:battery', 'moreores:copper_ingot', 'technic:battery'},
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+ }
+})
+
+
+minetest.register_tool("technic:battery",
+{description = "RE Battery",
+inventory_image = "technic_battery.png",
+tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}})
+
+minetest.register_craftitem("technic:battery_box", {
+ description = "Battery box",
+ stack_max = 99,
+})
+
+
+
+battery_box_formspec =
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "image[4,1;1,1;technic_battery_reload.png]"..
+ "list[current_name;dst;5,1;1,1;]"..
+ "label[0,0;Battery box]"..
+ "label[3,0;Charge]"..
+ "label[5,0;Discharge]"..
+ "label[1,3;Power level]"..
+ "list[current_player;main;0,5;8,4;]"
+
+minetest.register_node("technic:battery_box", {
+ description = "Battery box",
+ tiles = {"technic_battery_box_top.png", "technic_battery_box_bottom.png", "technic_battery_box_side0.png",
+ "technic_battery_box_side0.png", "technic_battery_box_side0.png", "technic_battery_box_side0.png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ sounds = default.node_sound_wood_defaults(),
+ technic_power_machine=1,
+ last_side_shown=0,
+ drop="technic:battery_box",
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("infotext", "Battery box")
+ meta:set_float("technic_power_machine", 1)
+ meta:set_string("formspec", battery_box_formspec)
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 1)
+ battery_charge = 0
+ max_charge = 60000
+ last_side_shown=0
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+
+for i=1,8,1 do
+minetest.register_node("technic:battery_box"..i, {
+ description = "Battery box",
+ tiles = {"technic_battery_box_top.png", "technic_battery_box_bottom.png", "technic_battery_box_side0.png^technic_power_meter"..i..".png",
+ "technic_battery_box_side0.png^technic_power_meter"..i..".png", "technic_battery_box_side0.png^technic_power_meter"..i..".png", "technic_battery_box_side0.png^technic_power_meter"..i..".png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+ sounds = default.node_sound_wood_defaults(),
+ technic_power_machine=1,
+ last_side_shown=0,
+ drop="technic:battery_box",
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("infotext", "Battery box")
+ meta:set_float("technic_power_machine", 1)
+ meta:set_string("formspec", battery_box_formspec)
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 1)
+ battery_charge = 0
+ max_charge = 60000
+ last_side_shown=0
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+end
+
+
+LV_nodes_visited = {}
+
+function get_RE_item_load (load1,max_load)
+if load1==0 then load1=65535 end
+local temp = 65536-load1
+temp= temp/65535*max_load
+return math.floor(temp + 0.5)
+end
+
+function set_RE_item_load (load1,max_load)
+if load1 == 0 then return 65535 end
+local temp=load1/max_load*65535
+temp=65536-temp
+return math.floor(temp)
+end
+
+function set_RE_wear (item_stack,load1,max_load)
+local temp=65536-math.floor(load1/max_load*65535)
+item_stack["wear"]=tostring(temp)
+return item_stack
+end
+
+minetest.register_abm({
+ nodenames = {"technic:battery_box","technic:battery_box1","technic:battery_box2","technic:battery_box3","technic:battery_box4",
+ "technic:battery_box5","technic:battery_box6","technic:battery_box7","technic:battery_box8"
+ },
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+ local meta = minetest.env:get_meta(pos)
+ charge= meta:get_int("battery_charge")
+ max_charge= 60000
+ local i=math.ceil((charge/max_charge)*8)
+ if i>8 then i=8 end
+ j=meta:get_float("last_side_shown")
+ if i~=j then
+ if i>0 then hacky_swap_node(pos,"technic:battery_box"..i)
+ elseif i==0 then hacky_swap_node(pos,"technic:battery_box") end
+ meta:set_float("last_side_shown",i)
+ end
+
+--loading registered power tools
+ local inv = meta:get_inventory()
+ if inv:is_empty("src")==false then
+ srcstack = inv:get_stack("src", 1)
+ src_item=srcstack:to_table()
+ item_meta=srcstack:get_metadata()
+ if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before tool/item
+
+ local item_max_charge = nil
+ local counter=registered_power_tools_count-1
+ for i=1, counter,1 do
+ if power_tools[i].tool_name==src_item["name"] then
+ item_max_charge=power_tools[i].max_charge
+ end
+ end
+ if item_max_charge then
+ load1=tonumber((src_item["metadata"]))
+ load_step=1000
+ if load1<item_max_charge and charge>0 then
+ if charge-load_step<0 then load_step=charge end
+ if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end
+ load1=load1+load_step
+ charge=charge-load_step
+ set_RE_wear(src_item,load1,item_max_charge)
+ src_item["metadata"]=tostring(load1)
+ inv:set_stack("src", 1, src_item)
+ end
+ meta:set_int("battery_charge",charge)
+ end
+ end
+
+-- dischargin registered power tools
+ if inv:is_empty("dst") == false then
+ srcstack = inv:get_stack("dst", 1)
+ src_item=srcstack:to_table()
+ local item_max_charge = nil
+ local counter=registered_power_tools_count-1
+ for i=1, counter,1 do
+ if power_tools[i].tool_name==src_item["name"] then
+ item_max_charge=power_tools[i].max_charge
+ end
+ end
+ if item_max_charge then
+ if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before battery/crystal
+ local load1=tonumber((src_item["metadata"]))
+ load_step=1000
+ if load1>0 and charge<max_charge then
+ if charge+load_step>max_charge then load_step=max_charge-charge end
+ if load1-load_step<0 then load_step=load1 end
+ load1=load1-load_step
+ charge=charge+load_step
+ set_RE_wear(src_item,load1,item_max_charge)
+ src_item["metadata"]=tostring(load1)
+ inv:set_stack("dst", 1, src_item)
+ end
+ end
+ end
+
+ meta:set_int("battery_charge",charge)
+
+ local load = math.floor(charge/60000 * 100)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "image[4,1;1,1;technic_battery_reload.png]"..
+ "list[current_name;dst;5,1;1,1;]"..
+ "label[0,0;Battery box]"..
+ "label[3,0;Charge]"..
+ "label[5,0;Discharge]"..
+ "label[1,3;Power level]"..
+ "list[current_player;main;0,5;8,4;]")
+
+ local pos1={}
+
+ pos1.y=pos.y-1
+ pos1.x=pos.x
+ pos1.z=pos.z
+
+
+ meta1 = minetest.env:get_meta(pos1)
+ if meta1:get_float("cablelike")~=1 then return end
+
+ local LV_nodes = {}
+ local PR_nodes = {}
+ local RE_nodes = {}
+
+ LV_nodes[1]={}
+ LV_nodes[1].x=pos1.x
+ LV_nodes[1].y=pos1.y
+ LV_nodes[1].z=pos1.z
+ LV_nodes[1].visited=false
+
+
+table_index=1
+ repeat
+ check_LV_node (PR_nodes,RE_nodes,LV_nodes,table_index)
+ table_index=table_index+1
+ if LV_nodes[table_index]==nil then break end
+ until false
+
+
+local pos1={}
+i=1
+ repeat
+ if PR_nodes[i]==nil then break end -- gettin power from all connected producers
+ pos1.x=PR_nodes[i].x
+ pos1.y=PR_nodes[i].y
+ pos1.z=PR_nodes[i].z
+ local meta1 = minetest.env:get_meta(pos1)
+ local internal_EU_buffer=meta1:get_float("internal_EU_buffer")
+ if charge<max_charge then
+ charge_to_take=200
+ if internal_EU_buffer-charge_to_take<=0 then
+ charge_to_take=internal_EU_buffer
+ end
+ if charge_to_take>0 then
+ charge=charge+charge_to_take
+ internal_EU_buffer=internal_EU_buffer-charge_to_take
+ meta1:set_float("internal_EU_buffer",internal_EU_buffer)
+ end
+ end
+ i=i+1
+ until false
+
+if charge>max_charge then charge=max_charge end
+
+i=1
+ repeat
+ if RE_nodes[i]==nil then break end
+ pos1.x=RE_nodes[i].x -- loading all conected machines buffers
+ pos1.y=RE_nodes[i].y
+ pos1.z=RE_nodes[i].z
+ local meta1 = minetest.env:get_meta(pos1)
+ local internal_EU_buffer=meta1:get_float("internal_EU_buffer")
+ local internal_EU_buffer_size=meta1:get_float("internal_EU_buffer_size")
+
+ local charge_to_give=200
+ if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
+ charge_to_give=internal_EU_buffer_size-internal_EU_buffer
+ end
+ if charge-charge_to_give<0 then charge_to_give=charge end
+
+ internal_EU_buffer=internal_EU_buffer+charge_to_give
+ meta1:set_float("internal_EU_buffer",internal_EU_buffer)
+ charge=charge-charge_to_give;
+
+ i=i+1
+ until false
+ charge=math.floor(charge)
+ charge_string=tostring(charge)
+ meta:set_string("infotext", "Battery box: "..charge_string.."/"..max_charge);
+ meta:set_int("battery_charge",charge)
+
+end
+})
+
+function add_new_cable_node (LV_nodes,pos1)
+local i=1
+ repeat
+ if LV_nodes[i]==nil then break end
+ if pos1.x==LV_nodes[i].x and pos1.y==LV_nodes[i].y and pos1.z==LV_nodes[i].z then return false end
+ i=i+1
+ until false
+LV_nodes[i]={}
+LV_nodes[i].x=pos1.x
+LV_nodes[i].y=pos1.y
+LV_nodes[i].z=pos1.z
+LV_nodes[i].visited=false
+return true
+end
+
+function check_LV_node (PR_nodes,RE_nodes,LV_nodes,i)
+ local pos1={}
+ pos1.x=LV_nodes[i].x
+ pos1.y=LV_nodes[i].y
+ pos1.z=LV_nodes[i].z
+ LV_nodes[i].visited=true
+ new_node_added=false
+
+ pos1.x=pos1.x+1
+ check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+ pos1.x=pos1.x-2
+ check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+ pos1.x=pos1.x+1
+
+ pos1.y=pos1.y+1
+ check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+ pos1.y=pos1.y-2
+ check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+ pos1.y=pos1.y+1
+
+ pos1.z=pos1.z+1
+ check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+ pos1.z=pos1.z-2
+ check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+ pos1.z=pos1.z+1
+return new_node_added
+end
+
+function check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+meta = minetest.env:get_meta(pos1)
+if meta:get_float("cablelike")==1 then new_node_added=add_new_cable_node(LV_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:solar_panel" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:generator" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:generator_active" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:geothermal" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:geothermal_active" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:water_mill" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:water_mill_active" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:electric_furnace" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:electric_furnace_active" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:alloy_furnace" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:alloy_furnace_active" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:tool_workshop" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:music_player" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:grinder" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
+end
+
\ No newline at end of file
--- /dev/null
+minetest.register_craft({
+ output = 'technic:mv_battery_box 1',
+ recipe = {
+ {'technic:battery_box', 'technic:battery_box', 'technic:battery_box'},
+ {'technic:battery_box', 'technic:mv_transformer', 'technic:battery_box'},
+ {'', 'technic:mv_cable', ''},
+ }
+})
+
+
+
+mv_battery_box_formspec =
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "image[4,1;1,1;technic_battery_reload.png]"..
+ "list[current_name;dst;5,1;1,1;]"..
+ "label[0,0;MV_Battery box]"..
+ "label[3,0;Charge]"..
+ "label[5,0;Discharge]"..
+ "label[1,3;Power level]"..
+ "list[current_player;main;0,5;8,4;]"
+
+minetest.register_node("technic:mv_battery_box", {
+ description = "MV Battery Box",
+ tiles = {"technic_mv_battery_box_top.png", "technic_mv_battery_box_bottom.png", "technic_mv_battery_box_side0.png",
+ "technic_mv_battery_box_side0.png", "technic_mv_battery_box_side0.png", "technic_mv_battery_box_side0.png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ sounds = default.node_sound_wood_defaults(),
+ technic_mv_power_machine=1,
+ last_side_shown=0,
+ drop="technic:mv_battery_box",
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("infotext", "MV Battery box")
+ meta:set_float("technic_mv_power_machine", 1)
+ meta:set_string("formspec", battery_box_formspec)
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 1)
+ battery_charge = 0
+ max_charge = 300000
+ last_side_shown=0
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+
+for i=1,8,1 do
+minetest.register_node("technic:mv_battery_box"..i, {
+ description = "MV Battery Box",
+ tiles = {"technic_mv_battery_box_top.png", "technic_mv_battery_box_bottom.png", "technic_mv_battery_box_side0.png^technic_power_meter"..i..".png",
+ "technic_mv_battery_box_side0.png^technic_power_meter"..i..".png", "technic_mv_battery_box_side0.png^technic_power_meter"..i..".png", "technic_mv_battery_box_side0.png^technic_power_meter"..i..".png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+ sounds = default.node_sound_wood_defaults(),
+ technic_power_machine=1,
+ last_side_shown=0,
+ drop="technic:mv_battery_box",
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("infotext", "MV Battery box")
+ meta:set_float("technic_mv_power_machine", 1)
+ meta:set_string("formspec", battery_box_formspec)
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 1)
+ battery_charge = 0
+ max_charge = 300000
+ last_side_shown=0
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+end
+
+
+MV_nodes_visited = {}
+
+
+minetest.register_abm({
+ nodenames = {"technic:mv_battery_box","technic:mv_battery_box1","technic:mv_battery_box2","technic:mv_battery_box3","technic:mv_battery_box4",
+ "technic:mv_battery_box5","technic:mv_battery_box6","technic:mv_battery_box7","technic:mv_battery_box8"
+ },
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+ local meta = minetest.env:get_meta(pos)
+ charge= meta:get_int("battery_charge")
+ max_charge= 300000
+ local i=math.ceil((charge/max_charge)*8)
+ if i>8 then i=8 end
+ j=meta:get_float("last_side_shown")
+ if i~=j then
+ if i>0 then hacky_swap_node(pos,"technic:mv_battery_box"..i)
+ elseif i==0 then hacky_swap_node(pos,"technic:mv_battery_box") end
+ meta:set_float("last_side_shown",i)
+ end
+
+--loading registered power tools
+ local inv = meta:get_inventory()
+ if inv:is_empty("src")==false then
+ srcstack = inv:get_stack("src", 1)
+ src_item=srcstack:to_table()
+ item_meta=srcstack:get_metadata()
+ if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before tool/item
+
+ local item_max_charge = nil
+ local counter=registered_power_tools_count-1
+ for i=1, counter,1 do
+ if power_tools[i].tool_name==src_item["name"] then
+ item_max_charge=power_tools[i].max_charge
+ end
+ end
+ if item_max_charge then
+ load1=tonumber((src_item["metadata"]))
+ load_step=4000
+ if load1<item_max_charge and charge>0 then
+ if charge-load_step<0 then load_step=charge end
+ if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end
+ load1=load1+load_step
+ charge=charge-load_step
+ set_RE_wear(src_item,load1,item_max_charge)
+ src_item["metadata"]=tostring(load1)
+ inv:set_stack("src", 1, src_item)
+ end
+ meta:set_int("battery_charge",charge)
+ end
+ end
+
+-- dischargin registered power tools
+ if inv:is_empty("dst") == false then
+ srcstack = inv:get_stack("dst", 1)
+ src_item=srcstack:to_table()
+ local item_max_charge = nil
+ local counter=registered_power_tools_count-1
+ for i=1, counter,1 do
+ if power_tools[i].tool_name==src_item["name"] then
+ item_max_charge=power_tools[i].max_charge
+ end
+ end
+ if item_max_charge then
+ if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before battery/crystal
+ local load1=tonumber((src_item["metadata"]))
+ load_step=4000
+ if load1>0 and charge<max_charge then
+ if charge+load_step>max_charge then load_step=max_charge-charge end
+ if load1-load_step<0 then load_step=load1 end
+ load1=load1-load_step
+ charge=charge+load_step
+ set_RE_wear(src_item,load1,item_max_charge)
+ src_item["metadata"]=tostring(load1)
+ inv:set_stack("dst", 1, src_item)
+ end
+ end
+ end
+
+ meta:set_int("battery_charge",charge)
+
+ local load = math.floor(charge/300000 * 100)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "image[4,1;1,1;technic_battery_reload.png]"..
+ "list[current_name;dst;5,1;1,1;]"..
+ "label[0,0;MV Battery box]"..
+ "label[3,0;Charge]"..
+ "label[5,0;Discharge]"..
+ "label[1,3;Power level]"..
+ "list[current_player;main;0,5;8,4;]")
+
+ local pos1={}
+
+ pos1.y=pos.y-1
+ pos1.x=pos.x
+ pos1.z=pos.z
+
+
+ meta1 = minetest.env:get_meta(pos1)
+ if meta1:get_float("mv_cablelike")~=1 then return end
+
+ local MV_nodes = {}
+ local PR_nodes = {}
+ local RE_nodes = {}
+
+ MV_nodes[1]={}
+ MV_nodes[1].x=pos1.x
+ MV_nodes[1].y=pos1.y
+ MV_nodes[1].z=pos1.z
+ MV_nodes[1].visited=false
+
+table_index=1
+ repeat
+ check_MV_node (PR_nodes,RE_nodes,MV_nodes,table_index)
+ table_index=table_index+1
+ if MV_nodes[table_index]==nil then break end
+ until false
+
+
+local pos1={}
+i=1
+ repeat
+ if PR_nodes[i]==nil then break end -- gettin power from all connected producers
+ pos1.x=PR_nodes[i].x
+ pos1.y=PR_nodes[i].y
+ pos1.z=PR_nodes[i].z
+ local meta1 = minetest.env:get_meta(pos1)
+ local internal_EU_buffer=meta1:get_float("internal_EU_buffer")
+ if charge<max_charge then
+ charge_to_take=1000
+ if internal_EU_buffer-charge_to_take<=0 then
+ charge_to_take=internal_EU_buffer
+ end
+ if charge_to_take>0 then
+ charge=charge+charge_to_take
+ internal_EU_buffer=internal_EU_buffer-charge_to_take
+ meta1:set_float("internal_EU_buffer",internal_EU_buffer)
+ end
+ end
+ i=i+1
+ until false
+
+if charge>max_charge then charge=max_charge end
+
+i=1
+ repeat
+ if RE_nodes[i]==nil then break end
+ pos1.x=RE_nodes[i].x -- loading all conected machines buffers
+ pos1.y=RE_nodes[i].y
+ pos1.z=RE_nodes[i].z
+ local meta1 = minetest.env:get_meta(pos1)
+ local internal_EU_buffer=meta1:get_float("internal_EU_buffer")
+ local internal_EU_buffer_size=meta1:get_float("internal_EU_buffer_size")
+
+ local charge_to_give=1000
+ if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
+ charge_to_give=internal_EU_buffer_size-internal_EU_buffer
+ end
+ if charge-charge_to_give<0 then charge_to_give=charge end
+
+ internal_EU_buffer=internal_EU_buffer+charge_to_give
+ meta1:set_float("internal_EU_buffer",internal_EU_buffer)
+ charge=charge-charge_to_give;
+
+ i=i+1
+ until false
+ charge=math.floor(charge)
+ charge_string=tostring(charge)
+ meta:set_string("infotext", "Battery box: "..charge_string.."/"..max_charge);
+ meta:set_int("battery_charge",charge)
+
+end
+})
+
+function add_new_MVcable_node (MV_nodes,pos1)
+local i=1
+ repeat
+ if MV_nodes[i]==nil then break end
+ if pos1.x==MV_nodes[i].x and pos1.y==MV_nodes[i].y and pos1.z==MV_nodes[i].z then return false end
+ i=i+1
+ until false
+MV_nodes[i]={}
+MV_nodes[i].x=pos1.x
+MV_nodes[i].y=pos1.y
+MV_nodes[i].z=pos1.z
+MV_nodes[i].visited=false
+return true
+end
+
+function check_MV_node (PR_nodes,RE_nodes,MV_nodes,i)
+ local pos1={}
+ pos1.x=MV_nodes[i].x
+ pos1.y=MV_nodes[i].y
+ pos1.z=MV_nodes[i].z
+ MV_nodes[i].visited=true
+ new_node_added=false
+
+ pos1.x=pos1.x+1
+ check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+ pos1.x=pos1.x-2
+ check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+ pos1.x=pos1.x+1
+
+ pos1.y=pos1.y+1
+ check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+ pos1.y=pos1.y-2
+ check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+ pos1.y=pos1.y+1
+
+ pos1.z=pos1.z+1
+ check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+ pos1.z=pos1.z-2
+ check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+ pos1.z=pos1.z+1
+return new_node_added
+end
+
+function check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
+meta = minetest.env:get_meta(pos1)
+if meta:get_float("mv_cablelike")==1 then new_node_added=add_new_MVcable_node(MV_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:solar_panel_mv" then new_node_added=add_new_MVcable_node(PR_nodes,pos1) end
+end
+
--- /dev/null
+water_can_max_load = 16
+lava_can_max_load = 8
+
+minetest.register_craft({
+ output = 'technic:water_can 1',
+ recipe = {
+ {'technic:zinc_ingot', 'technic:rubber','technic:zinc_ingot'},
+ {'default:steel_ingot', '', 'default:steel_ingot'},
+ {'technic:zinc_ingot', 'default:steel_ingot', 'technic:zinc_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:lava_can 1',
+ recipe = {
+ {'technic:zinc_ingot', 'technic:stainless_steel_ingot','technic:zinc_ingot'},
+ {'technic:stainless_steel_ingot', '', 'technic:stainless_steel_ingot'},
+ {'technic:zinc_ingot', 'technic:stainless_steel_ingot', 'technic:zinc_ingot'},
+ }
+})
+
+
+minetest.register_tool("technic:water_can", {
+ description = "Water Can",
+ inventory_image = "technic_water_can.png",
+ stack_max = 1,
+ liquids_pointable = true,
+ on_use = function(itemstack, user, pointed_thing)
+
+ if pointed_thing.type ~= "node" then
+ return end
+ n = minetest.env:get_node(pointed_thing.under)
+
+ item=itemstack:to_table()
+ local load=nil
+ if item["metadata"]=="" then load=0
+ else load=tonumber(item["metadata"])
+ end
+
+ if n.name == "default:water_source" then
+ if load+1<17 then
+ minetest.env:add_node(pointed_thing.under, {name="air"})
+ load=load+1;
+ item["metadata"]=tostring(load)
+ set_RE_wear(item,load,water_can_max_load)
+ itemstack:replace(item)
+ end
+ return itemstack
+ end
+ item=itemstack:to_table()
+ if load==0 then return end
+
+ if n.name == "default:water_flowing" then
+ minetest.env:add_node(pointed_thing.under, {name="default:water_source"})
+ load=load-1;
+ item["metadata"]=tostring(load)
+ set_RE_wear(item,load,water_can_max_load)
+ itemstack:replace(item)
+ return itemstack
+ end
+
+ n = minetest.env:get_node(pointed_thing.above)
+ if n.name == "air" then
+ minetest.env:add_node(pointed_thing.above, {name="default:water_source"})
+ load=load-1;
+ item["metadata"]=tostring(load)
+ set_RE_wear(item,load,water_can_max_load)
+ itemstack:replace(item)
+ return itemstack
+ end
+ end,
+})
+
+minetest.register_tool("technic:lava_can", {
+ description = "Lava Can",
+ inventory_image = "technic_lava_can.png",
+ stack_max = 1,
+ liquids_pointable = true,
+ on_use = function(itemstack, user, pointed_thing)
+
+ item=itemstack:to_table()
+ local load=nil
+ if item["metadata"]=="" then load=0
+ else load=tonumber(item["metadata"])
+ end
+
+ if n.name == "default:water_source" then
+ if load+1<17 then
+ minetest.env:add_node(pointed_thing.under, {name="air"})
+ load=load+1;
+ item["metadata"]=tostring(load)
+ set_RE_wear(item,load,water_can_max_load)
+ itemstack:replace(item)
+ end
+ return itemstack
+ end
+ item=itemstack:to_table()
+ if load==0 then return end
+
+ if n.name == "default:lava_flowing" then
+ minetest.env:add_node(pointed_thing.under, {name="default:lava_source"})
+ load=load-1;
+ item["metadata"]=tostring(load)
+ set_RE_wear(item,load,water_can_max_load)
+ itemstack:replace(item)
+ return itemstack
+ end
+
+ n = minetest.env:get_node(pointed_thing.above)
+ if n.name == "air" then
+ minetest.env:add_node(pointed_thing.above, {name="default:lava_source"})
+ load=load-1;
+ item["metadata"]=tostring(load)
+ set_RE_wear(item,load,water_can_max_load)
+ itemstack:replace(item)
+ return itemstack
+ end
+
+ if pointed_thing.type ~= "node" then
+ return end
+
+ n = minetest.env:get_node(pointed_thing.under)
+ if n.name == "default:lava_source" then
+ item=itemstack:to_table()
+ local load=tonumber((item["wear"]))
+ if load==0 then load =65535 end
+ load=get_RE_item_load(load,lava_can_max_load)
+ if load+1<9 then
+ minetest.env:add_node(pointed_thing.under, {name="air"})
+ load=load+1;
+ load=set_RE_item_load(load,lava_can_max_load)
+ item["wear"]=tostring(load)
+ itemstack:replace(item)
+ end
+ return itemstack
+ end
+ item=itemstack:to_table()
+ load=tonumber((item["wear"]))
+ if load==0 then load =65535 end
+ load=get_RE_item_load(load,lava_can_max_load)
+ if load==0 then return end
+
+ if n.name == "default:lava_flowing" then
+ minetest.env:add_node(pointed_thing.under, {name="default:lava_source"})
+ load=load-1;
+ load=set_RE_item_load(load,lava_can_max_load)
+ item["wear"]=tostring(load)
+ itemstack:replace(item)
+ return itemstack
+ end
+
+ n = minetest.env:get_node(pointed_thing.above)
+ if n.name == "air" then
+ minetest.env:add_node(pointed_thing.above, {name="default:lava_source"})
+ load=load-1;
+ load=set_RE_item_load(load,lava_can_max_load)
+ item["wear"]=tostring(load)
+ itemstack:replace(item)
+ return itemstack
+ end
+ end,
+})
--- /dev/null
+chainsaw_max_charge=30000
+
+minetest.register_tool("technic:chainsaw", {
+ description = "Chainsaw",
+ inventory_image = "technic_chainsaw.png",
+ stack_max = 1,
+ on_use = function(itemstack, user, pointed_thing)
+ if pointed_thing.type=="node" then
+ item=itemstack:to_table()
+ if item["metadata"]=="" or item["metadata"]=="0" then return end --tool not charged
+ charge=tonumber(item["metadata"])
+ charge_to_take=600;
+ if charge-charge_to_take>0 then
+ charge_to_take=chainsaw_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,charge_to_take)
+ charge=charge-charge_to_take;
+ set_RE_wear(item,charge,chainsaw_max_charge)
+ item["metadata"]=tostring(charge)
+ itemstack:replace(item)
+ return itemstack
+ end
+ end
+ end,
+})
+
+minetest.register_craft({
+ output = 'technic:chainsaw',
+ recipe = {
+ {'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:battery'},
+ {'technic:stainless_steel_ingot', 'technic:motor', 'technic:battery'},
+ {'','','moreores:copper_ingot'},
+ }
+})
+
+
+
+
+timber_nodenames={"default:jungletree", "default:papyrus", "default:cactus", "default:tree"}
+
+function chainsaw_dig_it (pos, player,charge_to_take)
+ charge_to_take=0
+ local node=minetest.env:get_node(pos)
+ local i=1
+ while timber_nodenames[i]~=nil do
+ if node.name==timber_nodenames[i] then
+ charge_to_take=600
+ np={x=pos.x, y=pos.y, z=pos.z}
+ while minetest.env:get_node(np).name==timber_nodenames[i] do
+ minetest.env:remove_node(np)
+ minetest.env:add_item(np, timber_nodenames[i])
+ np={x=np.x, y=np.y+1, z=np.z}
+ end
+ minetest.sound_play("chainsaw", {pos = pos, gain = 1.0, max_hear_distance = 10,})
+ return charge_to_take
+ end
+ i=i+1
+ end
+
+return charge_to_take
+end
\ No newline at end of file
--- /dev/null
+
+minetest.register_craft({
+ output = 'technic:rebar 6',
+ recipe = {
+ {'','', 'default:steel_ingot'},
+ {'','default:steel_ingot',''},
+ {'default:steel_ingot', '', ''},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:concrete 5',
+ recipe = {
+ {'default:stone','technic:rebar','default:stone'},
+ {'technic:rebar','default:stone','technic:rebar'},
+ {'default:stone','technic:rebar','default:stone'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:concrete_post 4',
+ recipe = {
+ {'default:stone','technic:rebar','default:stone'},
+ {'default:stone','technic:rebar','default:stone'},
+ {'default:stone','technic:rebar','default:stone'},
+}
+})
+
+minetest.register_craftitem("technic:rebar", {
+ description = "Rebar",
+ inventory_image = "technic_rebar.png",
+ stack_max = 99,
+})
+
+minetest.register_craftitem("technic:concrete", {
+ description = "Concrete Block",
+ inventory_image = "technic_concrete_block.png",
+ stack_max = 99,
+})
+
+minetest.register_craftitem("technic:concrete_post", {
+ description = "Concrete Post",
+ inventory_image = "technic_concrete_post.png",
+ stack_max = 99,
+})
+
+
+
+-- NODES:
+
+minetest.register_node("technic:concrete", {
+ description = "Concrete Block",
+ tile_images = {"technic_concrete_block.png",},
+ is_ground_content = true,
+ groups = {cracky=1},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("technic:concrete_post", {
+ description = "Concrete Post",
+ drawtype = "fencelike",
+ tiles = {"technic_concrete_block.png"},
+ inventory_image = "default_fence.png",
+ wield_image = "default_fence.png",
+ paramtype = "light",
+ is_ground_content = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
+ },
+
+ groups = {cracky=1},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+stairsplus.register_stair_and_slab_and_panel_and_micro("concrete", "technic:concrete",
+ {cracky=3},
+ {"technic_concrete_block.png"},
+ "Concrete Stairs",
+ "Concrete Slab",
+ "Concrete Panel",
+ "Concrete Microblock",
+ "concrete")
--- /dev/null
+enable_item_drop=false
+enable_item_pickup=true
+enable_technic_inventory=true
+enable_mining_drill=true
+enable_mining_laser=true
+enable_flashlight=true
+enable_rubber_tree_generation=true
+enable_marble_generation=true
+enable_granite_generation=true
+enable_obsidian_generation=true
--- /dev/null
+
+minetest.register_craft({
+ type = "shapeless",
+ output = 'technic:constructor_mk1_off 1',
+ recipe = {'technic:nodebreaker_off', 'technic:deployer_off'},
+
+})
+minetest.register_craft({
+ type = "shapeless",
+ output = 'technic:constructor_mk2_off 1',
+ recipe = {'technic:constructor_mk1_off', 'technic:constructor_mk1_off'},
+
+})
+
+minetest.register_craft({
+ type = "shapeless",
+ output = 'technic:constructor_mk3_off 1',
+ recipe = {'technic:constructor_mk2_off', 'technic:constructor_mk2_off'},
+
+})
+
+minetest.register_node("technic:constructor_mk1_off", {
+ description = "Constructor MK1",
+ tile_images = {"technic_constructor_mk1_top_off.png","technic_constructor_mk1_bottom_off.png","technic_constructor_mk1_side2_off.png","technic_constructor_mk1_side1_off.png",
+ "technic_constructor_back.png","technic_constructor_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(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "label[0,0;Constructor MK1]"..
+ "label[5,0;Slot 1]"..
+ "list[current_name;slot1;6,0;1,1;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Constructor MK1")
+ local inv = meta:get_inventory()
+ inv:set_size("slot1", 1)
+ end,
+
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos)
+ local inv = meta:get_inventory()
+ return inv:is_empty("slot1")
+ end,
+})
+
+minetest.register_node("technic:constructor_mk1_on", {
+ description = "Constructor MK1",
+ tile_images = {"technic_constructor_mk1_top_on.png","technic_constructor_mk1_bottom_on.png","technic_constructor_mk1_side2_on.png","technic_constructor_mk1_side1_on.png",
+ "technic_constructor_back.png","technic_constructor_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,not_in_creative_inventory=1},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+mesecon:register_on_signal_on(function(pos, node)
+ local meta = minetest.env:get_meta(pos)
+ local inv = meta:get_inventory()
+ local pos1={}
+ pos1.x=pos.x
+ pos1.y=pos.y
+ pos1.z=pos.z
+ if node.param2==3 then pos1.x=pos1.x+1 end
+ if node.param2==2 then pos1.z=pos1.z+1 end
+ if node.param2==1 then pos1.x=pos1.x-1 end
+ if node.param2==0 then pos1.z=pos1.z-1 end
+
+ if node.name == "technic:constructor_mk1_off" then
+ hacky_swap_node(pos,"technic:constructor_mk1_on")
+ nodeupdate(pos)
+ local node1=minetest.env:get_node(pos1)
+ deploy_node (inv,"slot1",pos1,node1,node)
+ end
+
+end)
+
+mesecon:register_on_signal_off(function(pos, node)
+ if node.name == "technic:constructor_mk1_on" then
+ hacky_swap_node(pos,"technic:constructor_mk1_off")
+ nodeupdate(pos)
+ end
+end)
+
+mesecon:register_effector("technic:constructor_mk1_on", "technic:constructor_mk1_off")
+
+minetest.register_node("technic:constructor_mk2_off", {
+ description = "Constructor MK2",
+ tile_images = {"technic_constructor_mk2_top_off.png","technic_constructor_mk2_bottom_off.png","technic_constructor_mk2_side2_off.png","technic_constructor_mk2_side1_off.png",
+ "technic_constructor_back.png","technic_constructor_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(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "label[0,0;Constructor MK2]"..
+ "label[5,0;Slot 1]"..
+ "list[current_name;slot1;6,0;1,1;]"..
+ "label[5,1;Slot 2]"..
+ "list[current_name;slot2;6,1;1,1;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Constructor MK2")
+ local inv = meta:get_inventory()
+ inv:set_size("slot1", 1)
+ inv:set_size("slot2", 1)
+ end,
+
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos)
+ local inv = meta:get_inventory()
+ if inv:is_empty("slot1")==false or inv:is_empty("slot2")==false then return false end
+ return true
+ end,
+})
+
+minetest.register_node("technic:constructor_mk2_on", {
+ description = "Constructor MK2",
+ tile_images = {"technic_constructor_mk2_top_on.png","technic_constructor_mk2_bottom_on.png","technic_constructor_mk2_side2_on.png","technic_constructor_mk2_side1_on.png",
+ "technic_constructor_back.png","technic_constructor_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,not_in_creative_inventory=1},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+mesecon:register_on_signal_on(function(pos, node)
+ local meta = minetest.env:get_meta(pos)
+ local inv = meta:get_inventory()
+ 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
+ if node.param2==3 then pos1.x=pos1.x+1 pos2.x=pos2.x+2 end
+ if node.param2==2 then pos1.z=pos1.z+1 pos2.z=pos2.z+2 end
+ if node.param2==1 then pos1.x=pos1.x-1 pos2.x=pos2.x-2 end
+ if node.param2==0 then pos1.z=pos1.z-1 pos2.z=pos2.z-2 end
+
+ if node.name == "technic:constructor_mk2_off" then
+ hacky_swap_node(pos,"technic:constructor_mk2_on")
+ nodeupdate(pos)
+ local node1=minetest.env:get_node(pos1)
+ deploy_node (inv,"slot1",pos1,node1,node)
+ local node1=minetest.env:get_node(pos2)
+ deploy_node (inv,"slot2",pos2,node1,node)
+ end
+
+end)
+
+
+mesecon:register_on_signal_off(function(pos, node)
+ if node.name == "technic:constructor_mk2_on" then
+ hacky_swap_node(pos,"technic:constructor_mk2_off")
+ nodeupdate(pos)
+ end
+end)
+
+mesecon:register_effector("technic:constructor_mk2_on", "technic:constructor_mk2_off")
+
+minetest.register_node("technic:constructor_mk3_off", {
+ description = "Constructor MK3",
+ tile_images = {"technic_constructor_mk3_top_off.png","technic_constructor_mk3_bottom_off.png","technic_constructor_mk3_side2_off.png","technic_constructor_mk3_side1_off.png",
+ "technic_constructor_back.png","technic_constructor_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(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "label[0,0;Constructor MK2]"..
+ "label[5,0;Slot 1]"..
+ "list[current_name;slot1;6,0;1,1;]"..
+ "label[5,1;Slot 2]"..
+ "list[current_name;slot2;6,1;1,1;]"..
+ "label[5,2;Slot 3]"..
+ "list[current_name;slot3;6,2;1,1;]"..
+ "label[5,3;Slot 4]"..
+ "list[current_name;slot4;6,3;1,1;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Constructor MK3")
+ local inv = meta:get_inventory()
+ inv:set_size("slot1", 1)
+ inv:set_size("slot2", 1)
+ inv:set_size("slot3", 1)
+ inv:set_size("slot4", 1)
+
+ end,
+
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos)
+ local inv = meta:get_inventory()
+ if inv:is_empty("slot1")==false or inv:is_empty("slot2")==false or inv:is_empty("slot3")==false or inv:is_empty("slot4")==false then return false end
+ return true
+ end,
+})
+
+minetest.register_node("technic:constructor_mk3_on", {
+ description = "Constructor MK3",
+ tile_images = {"technic_constructor_mk3_top_on.png","technic_constructor_mk3_bottom_on.png","technic_constructor_mk3_side2_on.png","technic_constructor_mk3_side1_on.png",
+ "technic_constructor_back.png","technic_constructor_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,not_in_creative_inventory=1},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+mesecon:register_on_signal_on(function(pos, node)
+ local meta = minetest.env:get_meta(pos)
+ local inv = meta:get_inventory()
+
+ local pos1={}
+ local pos2={}
+ local pos3={}
+ local pos4={}
+
+ pos1.x=pos.x
+ pos1.y=pos.y
+ pos1.z=pos.z
+
+ pos2.x=pos.x
+ pos2.y=pos.y
+ pos2.z=pos.z
+
+ pos3.x=pos.x
+ pos3.y=pos.y
+ pos3.z=pos.z
+
+ pos4.x=pos.x
+ pos4.y=pos.y
+ pos4.z=pos.z
+
+ if node.param2==3 then pos1.x=pos1.x+1 pos2.x=pos2.x+2 pos3.x=pos3.x+3 pos4.x=pos4.x+4 end
+ if node.param2==2 then pos1.z=pos1.z+1 pos2.z=pos2.z+2 pos3.z=pos3.z+3 pos4.z=pos4.z+4 end
+ if node.param2==1 then pos1.x=pos1.x-1 pos2.x=pos2.x-2 pos3.x=pos3.x-3 pos4.x=pos4.x-4 end
+ if node.param2==0 then pos1.z=pos1.z-1 pos2.z=pos2.z-2 pos3.z=pos3.z-3 pos4.z=pos4.z-4 end
+
+ if node.name == "technic:constructor_mk3_off" then
+ hacky_swap_node(pos,"technic:constructor_mk3_on")
+ nodeupdate(pos)
+ local node1=minetest.env:get_node(pos1)
+ deploy_node (inv,"slot1",pos1,node1,node)
+ local node1=minetest.env:get_node(pos2)
+ deploy_node (inv,"slot2",pos2,node1,node)
+ local node1=minetest.env:get_node(pos3)
+ deploy_node (inv,"slot3",pos3,node1,node)
+ local node1=minetest.env:get_node(pos4)
+ deploy_node (inv,"slot4",pos4,node1,node)
+ end
+
+end)
+
+
+mesecon:register_on_signal_off(function(pos, node)
+ if node.name == "technic:constructor_mk3_on" then
+ hacky_swap_node(pos,"technic:constructor_mk3_off")
+ nodeupdate(pos)
+ end
+end)
+
+mesecon:register_effector("technic:constructor_mk3_on", "technic:constructor_mk3_off")
+
+
+deploy_node =function (inv, slot_name, pos1, node1, node)
+if node1.name == "air" then
+ if not inv:is_empty(slot_name) then
+ stack1=inv:get_list(slot_name)
+ node_to_be_placed={name=stack1[1]:get_name(), param1=0, param2=node.param2}
+ minetest.env:set_node(pos1,node_to_be_placed)
+ stack1[1]:take_item()
+ inv:set_stack(slot_name, 1, stack1[1])
+ return
+ end
+ return
+ end
+ if node1.name == "ignore" or
+ node1.name == "default:lava_source" or
+ node1.name == "default:lava_flowing" or
+ node1.name == "default:water_source" or
+ node1.name == "default:water_flowing"
+ then return end
+ if inv:room_for_item(slot_name,node1) then
+ inv:add_item(slot_name,node1)
+ minetest.env:remove_node(pos1)
+ end
+
+end
\ No newline at end of file
--- /dev/null
+minetest.register_craft({
+ output = 'technic:copper_chest 1',
+ recipe = {
+ {'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'},
+ {'moreores:copper_ingot','technic:iron_chest','moreores:copper_ingot'},
+ {'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:copper_locked_chest 1',
+ recipe = {
+ {'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'},
+ {'moreores:copper_ingot','technic:iron_locked_chest','moreores:copper_ingot'},
+ {'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:copper_locked_chest 1',
+ recipe = {
+ {'default:steel_ingot'},
+ {'technic:copper_chest'},
+ }
+})
+
+minetest.register_craftitem("technic:copper_chest", {
+ description = "Copper Chest",
+ stack_max = 99,
+})
+minetest.register_craftitem("technic:copper_locked_chest", {
+ description = "Copper Locked Chest",
+ stack_max = 99,
+})
+
+minetest.register_node("technic:copper_chest", {
+ description = "Copper Chest",
+ tiles = {"technic_copper_chest_top.png", "technic_copper_chest_top.png", "technic_copper_chest_side.png",
+ "technic_copper_chest_side.png", "technic_copper_chest_side.png", "technic_copper_chest_front.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[10,9;]"..
+ "list[current_name;main;0,0;10,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Copper Chest")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 10*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+
+ on_metadata_inventory_move = function(pos, from_list, from_index,
+ to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_move_allow_all(
+ pos, from_list, from_index, to_list, to_index, count, player)
+ end,
+ on_metadata_inventory_offer = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_offer_allow_all(
+ pos, listname, index, stack, player)
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from chest at "..minetest.pos_to_string(pos))
+ end,
+})
+
+
+local function has_locked_chest_privilege(meta, player)
+ if player:get_player_name() ~= meta:get_string("owner") then
+ return false
+ end
+ return true
+end
+
+minetest.register_node("technic:copper_locked_chest", {
+ description = "Copper Locked Chest",
+ tiles = {"technic_copper_chest_top.png", "technic_copper_chest_top.png", "technic_copper_chest_side.png",
+ "technic_copper_chest_side.png", "technic_copper_chest_side.png", "technic_copper_chest_locked.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ after_place_node = function(pos, placer)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("owner", placer:get_player_name() or "")
+ meta:set_string("infotext", "Copper Locked Chest (owned by "..
+ meta:get_string("owner")..")")
+ end,
+on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[10,9;]"..
+ "list[current_name;main;0,0;10,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Copper Locked Chest")
+ meta:set_string("owner", "")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 10*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+ allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return count
+ end,
+ allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ allow_metadata_inventory_take = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_put = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from locked chest at "..minetest.pos_to_string(pos))
+ end,
+})
--- /dev/null
+technic.creative_inventory_size = 0
+technic.creative_list = {}
+
+-- Create detached creative inventory after loading all mods
+minetest.after(0, function()
+ local inv = minetest.create_detached_inventory("technic_creative", {})
+ technic.creative_list = {}
+ for name,def in pairs(minetest.registered_items) do
+ if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0)
+ and def.description and def.description ~= "" then
+ table.insert(technic.creative_list, name)
+ end
+ end
+ table.sort(technic.creative_list)
+ --inv:set_size("main", #technic.creative_list)
+ --for _,itemstring in ipairs(technic.creative_list) do
+ -- local stack = ItemStack(itemstring)
+ -- inv:add_item("main", stack)
+ --end
+ --technic.creative_inventory_size = #technic.creative_list
+end)
--- /dev/null
+moreores
+flowers
+pipeworks
+mesecons
+stairsplus
--- /dev/null
+minetest.register_craft({
+ output = 'technic:deployer_off 1',
+ recipe = {
+ {'default:wood', 'default:chest','default:wood'},
+ {'default:stone', 'mesecons:piston','default:stone'},
+ {'default:stone', 'mesecons:mesecon','default:stone'},
+
+ }
+})
+
+minetest.register_node("technic:deployer_off", {
+ description = "Deployer",
+ tile_images = {"technic_deployer_top.png","technic_deployer_bottom.png","technic_deployer_side2.png","technic_deployer_side1.png",
+ "technic_deployer_back.png","technic_deployer_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,tubedevice=1},
+ sounds = default.node_sound_stone_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "label[0,0;Deployer]"..
+ "list[current_name;main;4,1;3,3;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Deployer")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 3*3)
+ end,
+
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("main") then
+ return false
+ end
+ return true
+ end,
+
+})
+
+minetest.register_node("technic:deployer_on", {
+ description = "Deployer",
+ tile_images = {"technic_deployer_top.png","technic_deployer_bottom.png","technic_deployer_side2.png","technic_deployer_side1.png",
+ "technic_deployer_back.png","technic_deployer_front_on.png"},
+ is_ground_content = true,
+ paramtype2 = "facedir",
+ tubelike=1,
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2,tubedevice=1,not_in_creative_inventory=1},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+mesecon:register_on_signal_on(function(pos, node)
+ local pos1={}
+ pos1.x=pos.x
+ pos1.y=pos.y
+ pos1.z=pos.z
+ if node.param2==3 then pos1.x=pos1.x+1 end
+ if node.param2==2 then pos1.z=pos1.z+1 end
+ if node.param2==1 then pos1.x=pos1.x-1 end
+ if node.param2==0 then pos1.z=pos1.z-1 end
+
+ if node.name == "technic:deployer_off" then
+ hacky_swap_node(pos,"technic:deployer_on")
+ nodeupdate(pos)
+ local meta = minetest.env:get_meta(pos);
+
+ local inv = meta:get_inventory()
+ print (dump(inv))
+ for _,stack in ipairs(inv:get_list("main")) do
+ print (dump(stack:get_name()))
+
+ if stack:get_name() ~=nil then
+ node1={name=stack:get_name(), param1=0, param2=node.param2}
+ minetest.env:place_node(pos1,node1)
+ return
+ end
+ end
+ end
+end)
+
+mesecon:register_on_signal_off(function(pos, node)
+ if node.name == "technic:deployer_on" then
+ hacky_swap_node(pos,"technic:deployer_off")
+ nodeupdate(pos)
+ end
+end)
+
+mesecon:register_effector("technic:deployer_on", "technic:deployer_off")
+
+
--- /dev/null
+power_tools ={}
+
+registered_power_tools_count=1
+
+function register_power_tool (string1,max_charge)
+power_tools[registered_power_tools_count]={}
+power_tools[registered_power_tools_count].tool_name=string1
+power_tools[registered_power_tools_count].max_charge=max_charge
+registered_power_tools_count=registered_power_tools_count+1
+end
+
+register_power_tool ("technic:mining_drill",60000)
+register_power_tool ("technic:laser_mk1",40000)
+register_power_tool ("technic:battery",10000)
+
+minetest.register_alias("battery", "technic:battery")
+minetest.register_alias("battery_box", "technic:battery_box")
+minetest.register_alias("electric_furnace", "technic:electric_furnace")
+
+
+minetest.register_craft({
+ output = 'technic:battery 1',
+ recipe = {
+ {'default:wood', 'moreores:copper_ingot', 'default:wood'},
+ {'default:wood', 'moreores:tin_ingot', 'default:wood'},
+ {'default:wood', 'moreores:copper_ingot', 'default:wood'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:battery_box 1',
+ recipe = {
+ {'technic:battery', 'default:wood', 'technic:battery'},
+ {'technic:battery', 'moreores:copper_ingot', 'technic:battery'},
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:electric_furnace',
+ recipe = {
+ {'default:brick', 'default:brick', 'default:brick'},
+ {'default:brick', '', 'default:brick'},
+ {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
+ }
+})
+
+
+minetest.register_tool("technic:battery",
+{description = "RE Battery",
+inventory_image = "technic_battery.png",
+energy_charge = 0,
+tool_capabilities = {max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}})
+
+minetest.register_craftitem("technic:battery_box", {
+ description = "Battery box",
+ stack_max = 99,
+})
+
+
+
+battery_box_formspec =
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "image[4,1;1,1;technic_battery_reload.png]"..
+ "list[current_name;dst;5,1;1,1;]"..
+ "label[0,0;Battery box]"..
+ "label[3,0;Charge]"..
+ "label[5,0;Discharge]"..
+ "label[1,3;Power level]"..
+ "list[current_player;main;0,5;8,4;]"
+
+minetest.register_node("technic:battery_box", {
+ description = "Battery box",
+ tiles = {"technic_battery_box_top.png", "technic_battery_box_bottom.png", "technic_battery_box_side.png",
+ "technic_battery_box_side.png", "technic_battery_box_side.png", "technic_battery_box_side.png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ sounds = default.node_sound_wood_defaults(),
+ technic_power_machine=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("infotext", "Battery box")
+ meta:set_float("technic_power_machine", 1)
+ meta:set_string("formspec", battery_box_formspec)
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 1)
+ battery_charge = 0
+ max_charge = 60000
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+electric_furnace_formspec =
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]"..
+ "label[0,0;Electric Furnace]"..
+ "label[1,3;Power level]"
+
+minetest.register_node("technic:electric_furnace", {
+ description = "Electric furnace",
+ tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
+ "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front.png"},
+ paramtype2 = "facedir",
+ groups = {cracky=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_stone_defaults(),
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ interal_EU_buffer_size=2000;
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_float("technic_power_machine", 1)
+ meta:set_string("formspec", electric_furnace_formspec)
+ meta:set_string("infotext", "Electric furnace")
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 4)
+ local EU_used = 0
+ local furnace_is_cookin = 0
+ local cooked = nil
+ meta:set_float("internal_EU_buffer",0)
+ meta:set_float("internal_EU_buffer_size",2000)
+
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+minetest.register_node("technic:electric_furnace_active", {
+ description = "Electric Furnace",
+ tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
+ "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front_active.png"},
+ paramtype2 = "facedir",
+ light_source = 8,
+ drop = "technic:electric_furnace",
+ groups = {cracky=2, not_in_creative_inventory=1},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_stone_defaults(),
+ internal_EU_buffer=0;
+ interal_EU_buffer_size=2000;
+ technic_power_machine=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_float("technic_power_machine", 1)
+ meta:set_string("formspec", electric_furnace_formspec)
+ meta:set_string("infotext", "Electric furnace");
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 4)
+ local EU_used = 0
+ local furnace_is_cookin = 0
+ local cooked = nil
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+minetest.register_abm({
+ nodenames = {"technic:electric_furnace","technic:electric_furnace_active"},
+ interval = 1,
+ chance = 1,
+
+ action = function(pos, node, active_object_count, active_object_count_wider)
+
+ local meta = minetest.env:get_meta(pos)
+ internal_EU_buffer=meta:get_float("internal_EU_buffer")
+ internal_EU_buffer_size=meta:get_float("internal_EU_buffer")
+ local load = math.floor(internal_EU_buffer/2000 * 100)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]"..
+ "label[0,0;Electric Furnace]"..
+ "label[1,3;Power level]")
+
+ local inv = meta:get_inventory()
+
+ local furnace_is_cookin = meta:get_float("furnace_is_cookin")
+
+
+ local srclist = inv:get_list("src")
+ local cooked=nil
+
+ if srclist then
+ cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
+ end
+
+
+ if (furnace_is_cookin == 1) then
+ if internal_EU_buffer>=150 then
+ internal_EU_buffer=internal_EU_buffer-150;
+ meta:set_float("internal_EU_buffer",internal_EU_buffer)
+ meta:set_float("src_time", meta:get_float("src_time") + 3)
+ if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
+ -- check if there's room for output in "dst" list
+ if inv:room_for_item("dst",cooked.item) then
+ -- Put result in "dst" list
+ inv:add_item("dst", cooked.item)
+ -- take stuff from "src" list
+ srcstack = inv:get_stack("src", 1)
+ srcstack:take_item()
+ inv:set_stack("src", 1, srcstack)
+ else
+ print("Furnace inventory full!")
+ end
+ meta:set_string("src_time", 0)
+ end
+ end
+ end
+
+
+
+
+ if srclist then
+ cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
+ if cooked.time>0 then
+ hacky_swap_node(pos,"technic:electric_furnace_active")
+ meta:set_string("infotext","Furnace active")
+ meta:set_string("furnace_is_cookin",1)
+ -- meta:set_string("formspec", electric_furnace_formspec)
+ meta:set_string("src_time", 0)
+ return
+ end
+
+ end
+
+ hacky_swap_node(pos,"technic:electric_furnace")
+ meta:set_string("infotext","Furnace inactive")
+ meta:set_string("furnace_is_cookin",0)
+ -- meta:set_string("formspec", electric_furnace_formspec)
+ meta:set_string("src_time", 0)
+
+
+end,
+})
\ No newline at end of file
--- /dev/null
+minetest.register_alias("electric_furnace", "technic:electric_furnace")
+
+minetest.register_craft({
+ output = 'technic:electric_furnace',
+ recipe = {
+ {'default:cobble', 'default:cobble', 'default:cobble'},
+ {'default:cobble', '', 'default:cobble'},
+ {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
+ }
+})
+
+
+electric_furnace_formspec =
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]"..
+ "label[0,0;Electric Furnace]"..
+ "label[1,3;Power level]"
+
+minetest.register_node("technic:electric_furnace", {
+ description = "Electric furnace",
+ tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
+ "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front.png"},
+ paramtype2 = "facedir",
+ groups = {cracky=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_stone_defaults(),
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ interal_EU_buffer_size=2000;
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_float("technic_power_machine", 1)
+ meta:set_string("formspec", electric_furnace_formspec)
+ meta:set_string("infotext", "Electric furnace")
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 4)
+ local EU_used = 0
+ local furnace_is_cookin = 0
+ local cooked = nil
+ meta:set_float("internal_EU_buffer",0)
+ meta:set_float("internal_EU_buffer_size",2000)
+
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+minetest.register_node("technic:electric_furnace_active", {
+ description = "Electric Furnace",
+ tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
+ "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front_active.png"},
+ paramtype2 = "facedir",
+ light_source = 8,
+ drop = "technic:electric_furnace",
+ groups = {cracky=2, not_in_creative_inventory=1},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_stone_defaults(),
+ internal_EU_buffer=0;
+ interal_EU_buffer_size=2000;
+ technic_power_machine=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_float("technic_power_machine", 1)
+ meta:set_string("formspec", electric_furnace_formspec)
+ meta:set_string("infotext", "Electric furnace");
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 4)
+ local EU_used = 0
+ local furnace_is_cookin = 0
+ local cooked = nil
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+minetest.register_abm({
+ nodenames = {"technic:electric_furnace","technic:electric_furnace_active"},
+ interval = 1,
+ chance = 1,
+
+ action = function(pos, node, active_object_count, active_object_count_wider)
+
+ local meta = minetest.env:get_meta(pos)
+ internal_EU_buffer=meta:get_float("internal_EU_buffer")
+ internal_EU_buffer_size=meta:get_float("internal_EU_buffer")
+ local load = math.floor(internal_EU_buffer/2000 * 100)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "background[-1,-1;10,11;technic_electric_furnace_GUI.png]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]"..
+ "label[0,0;Electric Furnace]"..
+ "label[1,3;Power level]")
+
+ local inv = meta:get_inventory()
+
+ local furnace_is_cookin = meta:get_float("furnace_is_cookin")
+
+
+ local srclist = inv:get_list("src")
+ local cooked=nil
+
+ if srclist then
+ cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
+ end
+
+
+ if (furnace_is_cookin == 1) then
+ if internal_EU_buffer>=150 then
+ internal_EU_buffer=internal_EU_buffer-150;
+ meta:set_float("internal_EU_buffer",internal_EU_buffer)
+ meta:set_float("src_time", meta:get_float("src_time") + 3)
+ if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
+ -- check if there's room for output in "dst" list
+ if inv:room_for_item("dst",cooked.item) then
+ -- Put result in "dst" list
+ inv:add_item("dst", cooked.item)
+ -- take stuff from "src" list
+ srcstack = inv:get_stack("src", 1)
+ srcstack:take_item()
+ inv:set_stack("src", 1, srcstack)
+ else
+ print("Furnace inventory full!")
+ end
+ meta:set_string("src_time", 0)
+ end
+ end
+ end
+
+
+
+
+ if srclist then
+ cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
+ if cooked.time>0 then
+ hacky_swap_node(pos,"technic:electric_furnace_active")
+ meta:set_string("infotext","Furnace active")
+ meta:set_string("furnace_is_cookin",1)
+ -- meta:set_string("formspec", electric_furnace_formspec)
+ meta:set_string("src_time", 0)
+ return
+ end
+
+ end
+
+ hacky_swap_node(pos,"technic:electric_furnace")
+ meta:set_string("infotext","Furnace inactive")
+ meta:set_string("furnace_is_cookin",0)
+ -- meta:set_string("formspec", electric_furnace_formspec)
+ meta:set_string("src_time", 0)
+
+
+end,
+})
--- /dev/null
+-- original code comes from walkin_light mod by Echo http://minetest.net/forum/viewtopic.php?id=2621
+
+flashlight_max_charge=30000
+
+ minetest.register_tool("technic:flashlight", {
+ description = "Flashlight",
+ inventory_image = "technic_flashlight.png",
+ stack_max = 1,
+ on_use = function(itemstack, user, pointed_thing)
+ end,
+ })
+
+ minetest.register_craft({
+ output = "technic:flashlight",
+ recipe = {
+ {"technic:rubber","glass","technic:rubber"},
+ {"technic:stainless_steel_ingot","technic:battery","technic:stainless_steel_ingot"},
+ {"","technic:battery",""}
+ }
+ })
+local players = {}
+local player_positions = {}
+local last_wielded = {}
+
+function round(num)
+ return math.floor(num + 0.5)
+end
+
+minetest.register_on_joinplayer(function(player)
+ local player_name = player:get_player_name()
+ table.insert(players, player_name)
+ local pos = player:getpos()
+ local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
+ player_positions[player_name] = {}
+ player_positions[player_name]["x"] = rounded_pos.x;
+ player_positions[player_name]["y"] = rounded_pos.y;
+ player_positions[player_name]["z"] = rounded_pos.z;
+end)
+
+minetest.register_on_leaveplayer(function(player)
+ local player_name = player:get_player_name()
+ for i,v in ipairs(players) do
+ if v == player_name then
+ table.remove(players, i)
+ last_wielded[player_name] = nil
+ -- Neuberechnung des Lichts erzwingen
+ local pos = player:getpos()
+ local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
+ minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"})
+ minetest.env:add_node(rounded_pos,{type="node",name="air"})
+ player_positions[player_name]["x"] = nil
+ player_positions[player_name]["y"] = nil
+ player_positions[player_name]["z"] = nil
+ player_positions[player_name]["m"] = nil
+ player_positions[player_name] = nil
+ end
+ end
+end)
+
+minetest.register_globalstep(function(dtime)
+ for i,player_name in ipairs(players) do
+ local player = minetest.env:get_player_by_name(player_name)
+ flashlight_weared=check_for_flashlight(player)
+ local pos = player:getpos()
+ local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
+ local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]}
+
+ if last_wielded[player_name] and not flashlight_weared then --remove light, flashlight weared out or was removed from hotbar
+ local node=minetest.env:get_node_or_nil(old_pos)
+ if node then
+ if node.name=="technic:light" then
+ minetest.env:add_node(old_pos,{type="node",name="technic:light_off"})
+ minetest.env:add_node(old_pos,{type="node",name="air"})
+ last_wielded[player_name]=false
+ end
+ end
+ end
+
+ player_moved=not(old_pos.x==rounded_pos.x and old_pos.y==rounded_pos.y and old_pos.z==rounded_pos.z)
+ if player_moved and last_wielded[player_name] and flashlight_weared then
+
+ local node=minetest.env:get_node_or_nil(rounded_pos)
+ if node then
+ if node.name=="air" then
+ minetest.env:add_node(rounded_pos,{type="node",name="technic:light"})
+ end
+ end
+ local node=minetest.env:get_node_or_nil(old_pos)
+ if node then
+ if node.name=="technic:light" then
+ minetest.env:add_node(old_pos,{type="node",name="technic:light_off"})
+ minetest.env:add_node(old_pos,{type="node",name="air"})
+ end
+ end
+ player_positions[player_name]["x"] = rounded_pos.x
+ player_positions[player_name]["y"] = rounded_pos.y
+ player_positions[player_name]["z"] = rounded_pos.z
+
+ else if not last_wielded[player_name] and flashlight_weared then
+ local node=minetest.env:get_node_or_nil(rounded_pos)
+ if node then
+ if node.name=="air" then
+ minetest.env:add_node(rounded_pos,{type="node",name="technic:light"})
+ end
+ end
+ player_positions[player_name]["x"] = rounded_pos.x
+ player_positions[player_name]["y"] = rounded_pos.y
+ player_positions[player_name]["z"] = rounded_pos.z
+ last_wielded[player_name]=true
+ end
+
+ end
+ end
+end)
+
+minetest.register_node("technic:light", {
+ drawtype = "glasslike",
+ tile_images = {"technic_light.png"},
+ paramtype = "light",
+ walkable = false,
+ buildable_to = true,
+ is_ground_content = true,
+ light_propagates = true,
+ sunlight_propagates = true,
+ light_source = 15,
+ selection_box = {
+ type = "fixed",
+ fixed = {0, 0, 0, 0, 0, 0},
+ },
+})
+minetest.register_node("technic:light_off", {
+ drawtype = "glasslike",
+ tile_images = {"technic_light.png"},
+ paramtype = "light",
+ walkable = false,
+ buildable_to = true,
+ is_ground_content = true,
+ light_propagates = true,
+ sunlight_propagates = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {0, 0, 0, 0, 0, 0},
+ },
+})
+
+function check_for_flashlight (player)
+if player==nil then return false end
+local inv = player:get_inventory()
+local hotbar=inv:get_list("main")
+ for i=1,8,1 do
+
+ if hotbar[i]:get_name() == "technic:flashlight" then
+ item=hotbar[i]:to_table()
+ if item["metadata"]=="" or item["metadata"]=="0" then return false end --flashlight not charghed
+ charge=tonumber(item["metadata"])
+ if charge-2>0 then
+ charge =charge-2;
+ set_RE_wear(item,charge,flashlight_max_charge)
+ item["metadata"]=tostring(charge)
+ hotbar[i]:replace(item)
+ inv:set_stack("main",i,hotbar[i])
+ return true
+ end
+ end
+ end
+return false
+end
\ No newline at end of file
--- /dev/null
+-- original code comes from walkin_light mod by Echo http://minetest.net/forum/viewtopic.php?id=2621
+
+flashlight_max_charge=30000
+
+ minetest.register_tool("technic:flashlight", {
+ description = "Flashlight",
+ inventory_image = "technic_flashlight.png",
+ stack_max = 1,
+ on_use = function(itemstack, user, pointed_thing)
+ end,
+ })
+
+ minetest.register_craft({
+ output = "technic:flashlight",
+ recipe = {
+ {"glass","glass","glass"},
+ {"technic:stainless_steel_ingot","technic:battery","technic:stainless_steel_ingot"},
+ {"","technic:battery",""}
+ }
+ })
+local players = {}
+local player_positions = {}
+local last_wielded = {}
+
+function round(num)
+ return math.floor(num + 0.5)
+end
+
+minetest.register_on_joinplayer(function(player)
+ local player_name = player:get_player_name()
+ table.insert(players, player_name)
+ last_wielded[player_name] = flashlight_weared(player)
+ local pos = player:getpos()
+ local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
+ local wielded_item = player:get_wielded_item():get_name()
+ if flashlight_weared(player)==true then
+ -- Neuberechnung des Lichts erzwingen
+ minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"})
+ minetest.env:add_node(rounded_pos,{type="node",name="air"})
+ end
+ player_positions[player_name] = {}
+ player_positions[player_name]["x"] = rounded_pos.x;
+ player_positions[player_name]["y"] = rounded_pos.y;
+ player_positions[player_name]["z"] = rounded_pos.z;
+end)
+
+minetest.register_on_leaveplayer(function(player)
+ local player_name = player:get_player_name()
+ for i,v in ipairs(players) do
+ if v == player_name then
+ table.remove(players, i)
+ last_wielded[player_name] = nil
+ -- Neuberechnung des Lichts erzwingen
+ local pos = player:getpos()
+ local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
+ minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"})
+ minetest.env:add_node(rounded_pos,{type="node",name="air"})
+ player_positions[player_name]["x"] = nil
+ player_positions[player_name]["y"] = nil
+ player_positions[player_name]["z"] = nil
+ player_positions[player_name]["m"] = nil
+ player_positions[player_name] = nil
+ end
+ end
+end)
+
+minetest.register_globalstep(function(dtime)
+ for i,player_name in ipairs(players) do
+ local player = minetest.env:get_player_by_name(player_name)
+ if flashlight_weared(player)==true then
+ -- Fackel ist in der Hand
+ local pos = player:getpos()
+ local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
+ if (last_wielded[player_name] ~= true) or (player_positions[player_name]["x"] ~= rounded_pos.x or player_positions[player_name]["y"] ~= rounded_pos.y or player_positions[player_name]["z"] ~= rounded_pos.z) then
+ -- Fackel gerade in die Hand genommen oder zu neuem Node bewegt
+ local is_air = minetest.env:get_node_or_nil(rounded_pos)
+ if is_air == nil or (is_air ~= nil and (is_air.name == "air" or is_air.name == "technic:light")) then
+ -- wenn an aktueller Position "air" ist, Fackellicht setzen
+ minetest.env:add_node(rounded_pos,{type="node",name="technic:light"})
+ end
+ if (player_positions[player_name]["x"] ~= rounded_pos.x or player_positions[player_name]["y"] ~= rounded_pos.y or player_positions[player_name]["z"] ~= rounded_pos.z) then
+ -- wenn Position geänder, dann altes Licht löschen
+ local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]}
+ -- Neuberechnung des Lichts erzwingen
+ local is_light = minetest.env:get_node_or_nil(old_pos)
+ if is_light ~= nil and is_light.name == "technic:light" then
+ minetest.env:add_node(old_pos,{type="node",name="technic:light_off"})
+ minetest.env:add_node(old_pos,{type="node",name="air"})
+ end
+ end
+ -- gemerkte Position ist nun die gerundete neue Position
+ player_positions[player_name]["x"] = rounded_pos.x
+ player_positions[player_name]["y"] = rounded_pos.y
+ player_positions[player_name]["z"] = rounded_pos.z
+ end
+
+ last_wielded[player_name] = true;
+ elseif last_wielded[player_name] == true then
+ -- Fackel nicht in der Hand, aber beim letzten Durchgang war die Fackel noch in der Hand
+ local pos = player:getpos()
+ local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)}
+ repeat
+ local is_light = minetest.env:get_node_or_nil(rounded_pos)
+ if is_light ~= nil and is_light.name == "technic:light" then
+ -- minetest.env:remove_node(rounded_pos)
+ -- Erzwinge Neuberechnung des Lichts
+ minetest.env:add_node(rounded_pos,{type="node",name="technic:light_off"})
+ minetest.env:add_node(rounded_pos,{type="node",name="air"})
+ end
+ until minetest.env:get_node_or_nil(rounded_pos) ~= "technic:light"
+ local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]}
+ repeat
+ is_light = minetest.env:get_node_or_nil(old_pos)
+ if is_light ~= nil and is_light.name == "technic:light" then
+ -- minetest.env:remove_node(old_pos)
+ -- Erzwinge Neuberechnung des Lichts
+ minetest.env:add_node(old_pos,{type="node",name="technic:light_off"})
+ minetest.env:add_node(old_pos,{type="node",name="air"})
+ end
+ until minetest.env:get_node_or_nil(old_pos) ~= "technic:light"
+ last_wielded[player_name] = true
+ end
+ end
+end)
+
+minetest.register_node("technic:light", {
+ drawtype = "glasslike",
+ tile_images = {"technic_light.png"},
+ paramtype = "light",
+ walkable = false,
+ is_ground_content = true,
+ light_propagates = true,
+ sunlight_propagates = true,
+ light_source = 15,
+ selection_box = {
+ type = "fixed",
+ fixed = {0, 0, 0, 0, 0, 0},
+ },
+})
+minetest.register_node("technic:light_off", {
+ drawtype = "glasslike",
+ tile_images = {"technic_light.png"},
+ paramtype = "light",
+ walkable = false,
+ is_ground_content = true,
+ light_propagates = true,
+ sunlight_propagates = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {0, 0, 0, 0, 0, 0},
+ },
+})
+
+function flashlight_weared (player)
+flashlight_on=false
+local inv = player:get_inventory()
+local hotbar=inv:get_list("main")
+ for i=1,8,1 do
+
+ if hotbar[i]:get_name() == "technic:flashlight" then
+ item=hotbar[i]:to_table()
+ if item["metadata"]=="" or item["metadata"]=="0" then return flashlight_on end --flashlight not charghed
+ charge=tonumber(item["metadata"])
+ if charge-2>0 then
+ flashlight_on=true
+ charge =charge-2;
+ set_RE_wear(item,charge,flashlight_max_charge)
+ item["metadata"]=tostring(charge)
+ hotbar[i]:replace(item)
+ inv:set_stack("main",i,hotbar[i])
+ return true
+ end
+ end
+ end
+return flashlight_on
+end
\ No newline at end of file
--- /dev/null
+minetest.register_alias("generator", "technic:generator")
+minetest.register_alias("generator", "technic:generator_active")
+
+minetest.register_craft({
+ output = 'technic:generator',
+ recipe = {
+ {'default:stone', 'default:stone', 'default:stone'},
+ {'default:stone', '', 'default:stone'},
+ {'default:stone', 'moreores:copper_ingot', 'default:stone'},
+ }
+})
+
+minetest.register_craftitem("technic:generator", {
+ description = "Coal Driven Generator",
+ stack_max = 99,
+})
+
+generator_formspec =
+ "invsize[8,9;]"..
+ "image[0,0;5,5;technic_generator_menu.png]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+-- "label[0,0;Generator]"..
+ "label[1,3;Power level]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "image[4,1;1,1;default_furnace_fire_bg.png]"..
+ "list[current_player;main;0,5;8,4;]"
+
+
+minetest.register_node("technic:generator", {
+ description = "Coal Driven Generator",
+ tiles = {"technic_generator_top.png", "technic_machine_bottom.png", "technic_generator_side.png",
+ "technic_generator_side.png", "technic_generator_side.png", "technic_generator_front.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ internal_EU_buffer_size=5000;
+ burn_time=0;
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("infotext", "Generator")
+ meta:set_float("technic_power_machine", 1)
+ meta:set_float("internal_EU_buffer", 0)
+ meta:set_float("internal_EU_buffer_size", 5000)
+ meta:set_string("formspec", generator_formspec)
+ meta:set_float("burn_time", 0)
+
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+
+})
+
+minetest.register_node("technic:generator_active", {
+ description = "Coal Driven Generator",
+ tiles = {"technic_generator_top.png", "technic_machine_bottom.png", "technic_generator_side.png",
+ "technic_generator_side.png", "technic_generator_side.png", "technic_generator_front_active.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ drop="technic:generator",
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ internal_EU_buffer_size=0;
+ burn_time=0;
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+
+})
+minetest.register_abm({
+ nodenames = {"technic:generator","technic:generator_active"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+
+ local meta = minetest.env:get_meta(pos)
+ local burn_time= meta:get_float("burn_time")
+ local charge= meta:get_float("internal_EU_buffer")
+ local max_charge= meta:get_float("internal_EU_buffer_size")
+ local burn_charge=200
+
+ if burn_time>0 then
+ if charge+burn_charge>max_charge then
+ burn_charge=max_charge-charge
+ end
+ if burn_charge>0 then
+ burn_time=burn_time-1
+ meta:set_float("burn_time",burn_time)
+ charge=charge+burn_charge
+ meta:set_float("internal_EU_buffer",charge)
+ end
+
+ end
+ if burn_time==0 then
+ local inv = meta:get_inventory()
+ if inv:is_empty("src")==false then
+ local srcstack = inv:get_stack("src", 1)
+ src_item=srcstack:to_table()
+ if src_item["name"]== "default:coal_lump" then
+ srcstack:take_item()
+ inv:set_stack("src", 1, srcstack)
+ burn_time=16
+ meta:set_float("burn_time",burn_time)
+ hacky_swap_node (pos,"technic:generator_active")
+ end
+ end
+ end
+
+ local load = math.floor((charge/max_charge)*100)
+ local percent = math.floor((burn_time/16)*100)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "label[0,0;Generator]"..
+ "label[1,3;Power level]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "image[4,1;1,1;default_furnace_fire_bg.png^[lowpart:"..
+ (percent)..":default_furnace_fire_fg.png]"..
+ "list[current_player;main;0,5;8,4;]"
+ )
+
+ if burn_time==0 then
+ hacky_swap_node (pos,"technic:generator")
+ end
+
+
+ end
+})
+
--- /dev/null
+minetest.register_alias("geothermal", "technic:geothermal")
+
+minetest.register_craft({
+ output = 'technic:geothermal',
+ recipe = {
+ {'default:stone', 'default:stone', 'default:stone'},
+ {'moreores:copper_ingot', 'technic:diamond', 'moreores:copper_ingot'},
+ {'default:stone', 'moreores:copper_ingot', 'default:stone'},
+ }
+})
+
+minetest.register_craftitem("technic:geothermal", {
+ description = "Geothermal Generator",
+ stack_max = 99,
+})
+
+geothermal_formspec =
+ "invsize[8,4;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "label[0,0;Geothermal Generator]"..
+ "label[1,3;Power level]"..
+ "list[current_player;main;0,5;8,4;]"
+
+
+minetest.register_node("technic:geothermal", {
+ description = "Geothermal Generator",
+ tiles = {"technic_geothermal_top.png", "technic_machine_bottom.png", "technic_geothermal_side.png",
+ "technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ internal_EU_buffer_size=5000;
+ burn_time=0;
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("infotext", "Geothermal Generator")
+ meta:set_float("technic_power_machine", 1)
+ meta:set_float("internal_EU_buffer", 0)
+ meta:set_float("internal_EU_buffer_size", 2000)
+ meta:set_string("formspec", geothermal_formspec)
+ end,
+
+})
+
+minetest.register_node("technic:geothermal_active", {
+ description = "Geothermal Generator",
+ tiles = {"technic_geothermal_top_active.png", "technic_machine_bottom.png", "technic_geothermal_side.png",
+ "technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ drop="technic:geothermal",
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ internal_EU_buffer_size=0;
+})
+
+minetest.register_abm({
+ nodenames = {"technic:geothermal","technic:geothermal_active"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+
+ local meta = minetest.env:get_meta(pos)
+ local charge= meta:get_float("internal_EU_buffer")
+ local max_charge= meta:get_float("internal_EU_buffer_size")
+ local water_nodes = 0
+ local lava_nodes = 0
+ local production_level=0
+ local load_step=0
+
+ pos.x=pos.x+1
+ local check=check_node_around (pos)
+ if check==1 then water_nodes=water_nodes+1 end
+ if check==2 then lava_nodes=lava_nodes+1 end
+ pos.x=pos.x-2
+ check=check_node_around (pos)
+ if check==1 then water_nodes=water_nodes+1 end
+ if check==2 then lava_nodes=lava_nodes+1 end
+ pos.x=pos.x+1
+ pos.z=pos.z+1
+ check=check_node_around (pos)
+ if check==1 then water_nodes=water_nodes+1 end
+ if check==2 then lava_nodes=lava_nodes+1 end
+ pos.z=pos.z-2
+ check=check_node_around (pos)
+ if check==1 then water_nodes=water_nodes+1 end
+ if check==2 then lava_nodes=lava_nodes+1 end
+ pos.z=pos.z+1
+
+ if water_nodes==1 and lava_nodes==1 then production_level=50 load_step=30 end
+ if water_nodes==2 and lava_nodes==1 then production_level=75 load_step=45 end
+ if water_nodes==1 and lava_nodes==2 then production_level=75 load_step=45 end
+ if water_nodes==2 and lava_nodes==2 then production_level=100 load_step=60 end
+ if water_nodes==3 and lava_nodes==1 then production_level=25 load_step=15 end
+ if water_nodes==1 and lava_nodes==3 then production_level=25 load_step=15 end
+
+ if production_level>0 then
+ if charge+load_step>max_charge then
+ load_step=max_charge-charge
+ end
+ if load_step>0 then
+ charge=charge+load_step
+ meta:set_float("internal_EU_buffer",charge)
+ end
+ end
+
+ local load = math.floor((charge/max_charge)*100)
+ meta:set_string("formspec",
+ "invsize[8,4;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "label[0,0;Geothermal Generator]"..
+ "label[1,3;Power level]"..
+ "label[4,0;Production at "..tostring(production_level).."%]"
+ )
+
+ if production_level>0 and minetest.env:get_node(pos).name=="technic:geothermal" then
+ hacky_swap_node (pos,"technic:geothermal_active")
+ return
+ end
+ if production_level==0 then hacky_swap_node (pos,"technic:geothermal") end
+end
+})
+
+function check_node_around (pos)
+local node=minetest.env:get_node(pos)
+if node.name=="default:water_source" or node.name=="default:water_flowing" then return 1 end
+if node.name=="default:lava_source" or node.name=="default:lava_flowing" then return 2 end
+return 0
+end
\ No newline at end of file
--- /dev/null
+local chest_mark_colors = {
+ '_black',
+ '_blue',
+ '_brown',
+ '_cyan',
+ '_dark_green',
+ '_dark_grey',
+ '_green',
+ '_grey',
+ '_magenta',
+ '_orange',
+ '_pink',
+ '_red',
+ '_violet',
+ '_white',
+ '_yellow',
+}
+
+minetest.register_craft({
+ output = 'technic:gold_chest 1',
+ recipe = {
+ {'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'},
+ {'moreores:gold_ingot','technic:silver_chest','moreores:gold_ingot'},
+ {'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:gold_locked_chest 1',
+ recipe = {
+ {'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'},
+ {'moreores:gold_ingot','technic:silver_locked_chest','moreores:gold_ingot'},
+ {'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:gold_locked_chest 1',
+ recipe = {
+ {'default:steel_ingot'},
+ {'technic:gold_chest'},
+ }
+})
+
+minetest.register_craftitem("technic:gold_chest", {
+ description = "Gold Chest",
+ stack_max = 99,
+})
+minetest.register_craftitem("technic:gold_locked_chest", {
+ description = "Gold Locked Chest",
+ stack_max = 99,
+})
+
+minetest.register_node("technic:gold_chest", {
+ description = "Gold Chest",
+ tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
+ "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_front.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[12,9;]"..
+ "list[current_name;main;0,0;12,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Gold Chest")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 12*4)
+ end,
+
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+
+ on_punch = function (pos, node, puncher)
+ chest_punched (pos,node,puncher);
+ end,
+
+ on_receive_fields = function(pos, formname, fields, sender)
+ local meta = minetest.env:get_meta(pos);
+ fields.text = fields.text or ""
+ meta:set_string("text", fields.text)
+ meta:set_string("infotext", '"'..fields.text..'"')
+
+ meta:set_string("formspec",
+ "invsize[12,9;]"..
+ "list[current_name;main;0,0;12,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ end,
+
+ on_metadata_inventory_move = function(pos, from_list, from_index,
+ to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_move_allow_all(
+ pos, from_list, from_index, to_list, to_index, count, player)
+ end,
+ on_metadata_inventory_offer = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_offer_allow_all(
+ pos, listname, index, stack, player)
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from chest at "..minetest.pos_to_string(pos))
+ end,
+})
+
+for i, state in ipairs(chest_mark_colors) do
+minetest.register_node("technic:gold_chest".. state, {
+ description = "Gold Chest",
+ tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
+ "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_front"..state..".png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, not_in_creative_inventory=1,tubedevice=1,tubedevice_receiver=1},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ drop = "technic:gold_chest",
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[12,9;]"..
+ "list[current_name;main;0,0;12,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Gold Chest")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 12*4)
+ end,
+
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+
+ on_punch = function (pos, node, puncher)
+ chest_punched (pos,node,puncher);
+ end,
+
+ on_receive_fields = function(pos, formname, fields, sender)
+ local meta = minetest.env:get_meta(pos);
+ fields.text = fields.text or ""
+ meta:set_string("text", fields.text)
+ meta:set_string("infotext", '"'..fields.text..'"')
+
+ meta:set_string("formspec",
+ "invsize[12,9;]"..
+ "list[current_name;main;0,0;12,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ end,
+
+ on_metadata_inventory_move = function(pos, from_list, from_index,
+ to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_move_allow_all(
+ pos, from_list, from_index, to_list, to_index, count, player)
+ end,
+ on_metadata_inventory_offer = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_offer_allow_all(
+ pos, listname, index, stack, player)
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from chest at "..minetest.pos_to_string(pos))
+ end,
+})
+end
+
+
+local function has_locked_chest_privilege(meta, player)
+ if player:get_player_name() ~= meta:get_string("owner") then
+ return false
+ end
+ return true
+end
+
+minetest.register_node("technic:gold_locked_chest", {
+ description = "Gold Locked Chest",
+ tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
+ "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_locked.png"},
+ paramtype2 = "facedir",
+ drop = "technic:gold_locked_chest",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ after_place_node = function(pos, placer)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("owner", placer:get_player_name() or "")
+ meta:set_string("infotext", "Gold Locked Chest (owned by "..
+ meta:get_string("owner")..")")
+ end,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[12,9;]"..
+ "list[current_name;main;0,0;12,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Gold Locked Chest")
+ meta:set_string("owner", "")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 12*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+
+ on_punch = function (pos, node, puncher)
+ local meta = minetest.env:get_meta(pos);
+ if (has_locked_chest_privilege(meta, puncher)) then
+ locked_chest_punched (pos,node,puncher);
+ end
+ end,
+
+ on_receive_fields = function(pos, formname, fields, sender)
+ local meta = minetest.env:get_meta(pos);
+ fields.text = fields.text or ""
+ meta:set_string("text", fields.text)
+ meta:set_string("infotext", '"'..fields.text..'"')
+
+ meta:set_string("formspec",
+ "invsize[12,9;]"..
+ "list[current_name;main;0,0;12,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ end,
+
+ allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return count
+ end,
+ allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ allow_metadata_inventory_take = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_put = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from locked chest at "..minetest.pos_to_string(pos))
+ end,
+})
+
+for i, state in ipairs(chest_mark_colors) do
+minetest.register_node("technic:gold_locked_chest".. state, {
+ description = "Gold Locked Chest",
+ tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png",
+ "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_locked"..state..".png"},
+ paramtype2 = "facedir",
+ drop = "technic:gold_locked_chest",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, not_in_creative_inventory=1,tubedevice=1,tubedevice_receiver=1},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ after_place_node = function(pos, placer)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("owner", placer:get_player_name() or "")
+ meta:set_string("infotext", "Gold Locked Chest (owned by "..
+ meta:get_string("owner")..")")
+ end,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[12,9;]"..
+ "list[current_name;main;0,0;12,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Gold Locked Chest")
+ meta:set_string("owner", "")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 12*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+
+ on_punch = function (pos, node, puncher)
+ local meta = minetest.env:get_meta(pos);
+ if (has_locked_chest_privilege(meta, puncher)) then
+ locked_chest_punched (pos,node,puncher);
+ end
+ end,
+
+ on_receive_fields = function(pos, formname, fields, sender)
+ local meta = minetest.env:get_meta(pos);
+ fields.text = fields.text or ""
+ meta:set_string("text", fields.text)
+ meta:set_string("infotext", '"'..fields.text..'"')
+
+ meta:set_string("formspec",
+ "invsize[12,9;]"..
+ "list[current_name;main;0,0;12,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ end,
+
+ allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return count
+ end,
+ allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ allow_metadata_inventory_take = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_put = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from locked chest at "..minetest.pos_to_string(pos))
+ end,
+})
+end
+
+function chest_punched (pos,node,puncher)
+
+ local player_tool = puncher:get_wielded_item();
+ local item=player_tool:get_name();
+ if item == "dye:black" then
+ if (hacky_swap_node(pos,"technic:gold_chest_black")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:blue" then
+ if (hacky_swap_node(pos,"technic:gold_chest_blue")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:brown" then
+ if (hacky_swap_node(pos,"technic:gold_chest_brown")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:cyan" then
+ if (hacky_swap_node(pos,"technic:gold_chest_cyan")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:dark_green" then
+ if (hacky_swap_node(pos,"technic:gold_chest_dark_green")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:dark_grey" then
+ if (hacky_swap_node(pos,"technic:gold_chest_dark_grey")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:green" then
+ if (hacky_swap_node(pos,"technic:gold_chest_green")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:grey" then
+ if (hacky_swap_node(pos,"technic:gold_chest_grey")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:magenta" then
+ if (hacky_swap_node(pos,"technic:gold_chest_magenta")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:orange" then
+ if (hacky_swap_node(pos,"technic:gold_chest_orange")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:pink" then
+ if (hacky_swap_node(pos,"technic:gold_chest_pink")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:red" then
+ if (hacky_swap_node(pos,"technic:gold_chest_red")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:violet" then
+ if (hacky_swap_node(pos,"technic:gold_chest_violet")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:white" then
+ if (hacky_swap_node(pos,"technic:gold_chest_white")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:yellow" then
+ if (hacky_swap_node(pos,"technic:gold_chest_yellow")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+
+ local meta = minetest.env:get_meta(pos);
+ meta:set_string("formspec", "hack:sign_text_input")
+ end
+
+
+function locked_chest_punched (pos,node,puncher)
+
+ local player_tool = puncher:get_wielded_item();
+ local item=player_tool:get_name();
+ if item == "dye:black" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_black")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:blue" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_blue")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:brown" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_brown")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:cyan" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_cyan")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:dark_green" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_dark_green")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:dark_grey" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_dark_grey")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:green" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_green")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:grey" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_grey")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:magenta" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_magenta")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:orange" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_orange")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:pink" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_pink")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:red" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_red")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:violet" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_violet")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:white" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_white")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+ if item == "dye:yellow" then
+ if (hacky_swap_node(pos,"technic:gold_locked_chest_yellow")) then
+ player_tool:take_item(1);
+ puncher:set_wielded_item(player_tool);
+ return
+ end
+ end
+
+ local meta = minetest.env:get_meta(pos);
+ meta:set_string("formspec", "hack:sign_text_input")
+ end
+
\ No newline at end of file
--- /dev/null
+grinder_recipes ={}
+
+registered_grinder_recipes_count=1
+
+function register_grinder_recipe (string1,string2)
+grinder_recipes[registered_grinder_recipes_count]={}
+grinder_recipes[registered_grinder_recipes_count].src_name=string1
+grinder_recipes[registered_grinder_recipes_count].dst_name=string2
+registered_grinder_recipes_count=registered_grinder_recipes_count+1
+if UI_recipes_hook then
+ minetest.register_craft({
+ type = "grinding",
+ output = string2,
+ recipe = string1,
+ })
+ end
+end
+
+register_grinder_recipe("default:stone","default:sand")
+register_grinder_recipe("default:cobble","default:gravel")
+register_grinder_recipe("default:gravel","default:dirt")
+register_grinder_recipe("default:desert_stone","default:desert_sand")
+register_grinder_recipe("default:iron_lump","technic:iron_dust 2")
+register_grinder_recipe("default:coal_lump","technic:coal_dust 2")
+register_grinder_recipe("moreores:copper_lump","technic:copper_dust 2")
+register_grinder_recipe("moreores:tin_lump","technic:tin_dust 2")
+register_grinder_recipe("moreores:silver_lump","technic:silver_dust 2")
+register_grinder_recipe("moreores:gold_lump","technic:gold_dust 2")
+register_grinder_recipe("moreores:mithril_lump","technic:mithril_dust 2")
+register_grinder_recipe("technic:chromium_lump","technic:chromium_dust 2")
+register_grinder_recipe("technic:zinc_lump","technic:zinc_dust 2")
+register_grinder_recipe("technic:coal_dust","dye:black 2")
+register_grinder_recipe("default:cactus","dye:green 2")
+register_grinder_recipe("default:dry_shrub","dye:brown 2")
+register_grinder_recipe("flowers:flower_geranium","dye:blue 2")
+register_grinder_recipe("flowers:flower_dandelion_white","dye:white 2")
+register_grinder_recipe("flowers:flower_dandelion_yellow","dye:yellow 2")
+register_grinder_recipe("flowers:flower_tulip","dye:orange 2")
+register_grinder_recipe("flowers:flower_rose","dye:red 2")
+register_grinder_recipe("flowers:flower_viola","dye:violet 2")
+
+minetest.register_craftitem( "technic:coal_dust", {
+ description = "Coal Dust",
+ inventory_image = "technic_coal_dust.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+ })
+
+minetest.register_craftitem( "technic:iron_dust", {
+ description = "Iron Dust",
+ inventory_image = "technic_iron_dust.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+ })
+
+minetest.register_craft({
+ type = "cooking",
+ output = "default:steel_ingot",
+ recipe = "technic:iron_dust",
+})
+
+minetest.register_craftitem( "technic:copper_dust", {
+ description = "Copper Dust",
+ inventory_image = "technic_copper_dust.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+ })
+minetest.register_craft({
+ type = "cooking",
+ output = "moreores:copper_ingot",
+ recipe = "technic:copper_dust",
+})
+
+minetest.register_craftitem( "technic:tin_dust", {
+ description = "Tin Dust",
+ inventory_image = "technic_tin_dust.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+ })
+minetest.register_craft({
+ type = "cooking",
+ output = "moreores:tin_ingot",
+ recipe = "technic:tin_dust",
+})
+
+minetest.register_craftitem( "technic:silver_dust", {
+ description = "Silver Dust",
+ inventory_image = "technic_silver_dust.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+ })
+minetest.register_craft({
+ type = "cooking",
+ output = "moreores:silver_ingot",
+ recipe = "technic:silver_dust",
+})
+
+minetest.register_craftitem( "technic:gold_dust", {
+ description = "Gold Dust",
+ inventory_image = "technic_gold_dust.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+ })
+minetest.register_craft({
+ type = "cooking",
+ output = "moreores:gold_ingot",
+ recipe = "technic:gold_dust",
+})
+
+minetest.register_craftitem( "technic:mithril_dust", {
+ description = "Mithril Dust",
+ inventory_image = "technic_mithril_dust.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+ })
+minetest.register_craft({
+ type = "cooking",
+ output = "moreores:mithril_ingot",
+ recipe = "technic:mithril_dust",
+})
+
+minetest.register_craftitem( "technic:chromium_dust", {
+ description = "Chromium Dust",
+ inventory_image = "technic_chromium_dust.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+ })
+minetest.register_craft({
+ type = "cooking",
+ output = "technic:chromium_ingot",
+ recipe = "technic:chromium_dust",
+})
+
+minetest.register_craftitem( "technic:bronze_dust", {
+ description = "Bronze Dust",
+ inventory_image = "technic_bronze_dust.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+ })
+minetest.register_craft({
+ type = "cooking",
+ output = "moreores:bronze_ingot",
+ recipe = "technic:bronze_dust",
+})
+
+minetest.register_craftitem( "technic:brass_dust", {
+ description = "Brass Dust",
+ inventory_image = "technic_brass_dust.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+ })
+minetest.register_craft({
+ type = "cooking",
+ output = "technic:brass_ingot",
+ recipe = "technic:brass_dust",
+})
+
+minetest.register_craftitem( "technic:stainless_steel_dust", {
+ description = "Stainless Steel Dust",
+ inventory_image = "technic_stainless_steel_dust.png",
+ })
+
+minetest.register_craft({
+ type = "cooking",
+ output = "technic:stainless_steel_ingot",
+ recipe = "technic:stainless_steel_dust",
+})
+
+minetest.register_craftitem( "technic:zinc_dust", {
+ description = "Zinc Dust",
+ inventory_image = "technic_zinc_dust.png",
+ })
+
+minetest.register_craft({
+ type = "cooking",
+ output = "technic:zinc_ingot",
+ recipe = "technic:zinc_dust",
+})
+
+minetest.register_alias("grinder", "technic:grinder")
+minetest.register_craft({
+ output = 'technic:grinder',
+ recipe = {
+ {'default:desert_stone', 'default:desert_stone', 'default:desert_stone'},
+ {'default:desert_stone', 'technic:diamond', 'default:desert_stone'},
+ {'default:stone', 'moreores:copper_ingot', 'default:stone'},
+ }
+})
+
+minetest.register_craftitem("technic:grinder", {
+ description = "Grinder",
+ stack_max = 99,
+})
+
+grinder_formspec =
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "label[0,0;Grinder]"..
+ "label[1,3;Power level]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]"
+
+
+minetest.register_node("technic:grinder", {
+ description = "Grinder",
+ tiles = {"technic_grinder_top.png", "technic_machine_bottom.png", "technic_grinder_side.png",
+ "technic_grinder_side.png", "technic_grinder_side.png", "technic_grinder_front.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ internal_EU_buffer_size=5000;
+ grind_time=0;
+ grinded = nil;
+ src_time = 0;
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("infotext", "Grinder")
+ meta:set_float("technic_power_machine", 1)
+ meta:set_float("internal_EU_buffer", 0)
+ meta:set_float("internal_EU_buffer_size", 5000)
+ meta:set_string("formspec", grinder_formspec)
+ meta:set_float("grind_time", 0)
+
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 4)
+
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("src") then
+ return false
+ end
+ if not inv:is_empty("dst") then
+ return false
+ end
+
+ return true
+ end,
+
+})
+
+minetest.register_abm({
+ nodenames = {"technic:grinder"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+
+ local meta = minetest.env:get_meta(pos)
+ local charge= meta:get_float("internal_EU_buffer")
+ local max_charge= meta:get_float("internal_EU_buffer_size")
+ local grind_cost=200
+
+ local load = math.floor((charge/max_charge)*100)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "label[0,0;Grinder]"..
+ "label[1,3;Power level]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]"
+ )
+
+
+
+ local inv = meta:get_inventory()
+
+-- local grinder_on = meta:get_float("grinder_on")
+
+
+ local srclist = inv:get_list("src")
+ if inv:is_empty("src") then meta:set_float("grinder_on",0) end
+
+
+ if (meta:get_float("grinder_on") == 1) then
+ if charge>=grind_cost then
+ charge=charge-grind_cost;
+ meta:set_float("internal_EU_buffer",charge)
+ meta:set_float("src_time", meta:get_float("src_time") + 1)
+ if meta:get_float("src_time") >= meta:get_float("grind_time") then
+ -- check if there's room for output in "dst" list
+ grinded = get_grinded_item (inv:get_stack("src", 1))
+ if inv:room_for_item("dst",grinded) then
+ -- Put result in "dst" list
+ inv:add_item("dst", grinded)
+ -- take stuff from "src" list
+ srcstack = inv:get_stack("src", 1)
+ srcstack:take_item()
+ inv:set_stack("src", 1, srcstack)
+ if inv:is_empty("src") then meta:set_float("grinder_on",0) end
+
+
+
+ else
+ print("Grinder inventory full!")
+ end
+ meta:set_float("src_time", 0)
+ end
+ end
+ end
+
+ if (meta:get_float("grinder_on")==0) then
+ local grinded=nil
+ if not inv:is_empty("src") then
+ grinded = get_grinded_item (inv:get_stack("src", 1))
+ if grinded then meta:set_float("grinder_on",1) end
+ grind_time=4
+ meta:set_float("grind_time",grind_time)
+ meta:set_float("src_time", 0)
+ return
+ end
+ end
+
+
+ end
+})
+
+function get_grinded_item (items)
+new_item =nil
+src_item=items:to_table()
+item_name=src_item["name"]
+
+local counter=registered_grinder_recipes_count-1
+for i=1, counter,1 do
+if grinder_recipes[i].src_name==item_name then return ItemStack(grinder_recipes[i].dst_name) end
+end
+return nil
+
+end
--- /dev/null
+register_grinder_recipe("gloopores:alatro_lump","technic:alatro_dust 2")
+register_grinder_recipe("gloopores:kalite_lump","technic:kalite_dust 2")
+register_grinder_recipe("gloopores:arol_lump","technic:arol_dust 2")
+register_grinder_recipe("gloopores:talinite_lump","technic:talinite_dust 2")
+register_grinder_recipe("gloopores:akalin_lump","technic:akalin_dust 2")
+Â
+minetest.register_craftitem("technic:alatro_dust", {
+Â Â Â Â description = "Alatro Dust",
+Â Â Â Â inventory_image = "technic_alatro_dust.png",
+})
+Â
+minetest.register_craft({
+Â Â type = "cooking",
+Â Â output = "gloopores:alatro_ingot",
+Â Â recipe = "technic:alatro_dust",
+})
+Â
+minetest.register_craftitem("technicplus:arol_dust", {
+Â Â Â Â description = "Arol Dust",
+Â Â Â Â inventory_image = "technic_arol_dust.png",
+})
+Â
+minetest.register_craft({
+Â Â type = "cooking",
+Â Â output = "gloopores:arol_ingot",
+Â Â recipe = "technic:arol_dust",
+})
+Â
+minetest.register_craftitem("technic:talinite_dust", {
+Â Â Â Â description = "Talinite Dust",
+Â Â Â Â inventory_image = "technic_talinite_dust.png",
+})
+Â
+minetest.register_craft({
+Â Â type = "cooking",
+Â Â output = "gloopores:talinite_ingot",
+Â Â recipe = "technic:talinite_dust",
+})
+Â
+minetest.register_craftitem("technic:akalin_dust", {
+Â Â Â Â description = "Akalin Dust",
+Â Â Â Â inventory_image = "technic_akalin_dust.png",
+})
+Â
+minetest.register_craft({
+Â Â type = "cooking",
+Â Â output = "gloopores:akalin_ingot",
+Â Â recipe = "technic:akalin_dust",
+})
+Â
+minetest.register_craftitem("technic:kalite_dust", {
+Â Â Â Â description = "Kalite Dust",
+Â Â Â Â inventory_image = "technic_kalite_dust.png",
+Â Â Â Â on_use = minetest.item_eat(2)
+})
--- /dev/null
+-- Minetest 0.4.4 : technic
+
+minetest.register_alias("rebar", "technic:rebar")
+minetest.register_alias("concrete", "technic:concrete")
+minetest.register_alias("concrete_post", "technic:concrete_post")
+minetest.register_alias("iron_chest", "technic:iron_chest")
+minetest.register_alias("iron_locked_chest", "technic:iron_locked_chest")
+minetest.register_alias("copper_chest", "technic:copper_chest")
+minetest.register_alias("copper_locked_chest", "technic:copper_locked_chest")
+minetest.register_alias("silver_chest", "technic:silver_chest")
+minetest.register_alias("silver_locked_chest", "technic:silver_locked_chest")
+minetest.register_alias("gold_chest", "technic:gold_chest")
+minetest.register_alias("gold_locked_chest", "technic:gold_locked_chest")
+minetest.register_alias("mithril_chest", "technic:mithril_chest")
+minetest.register_alias("mithril_locked_chest", "technic:mithril_locked_chest")
+
+
+modpath=minetest.get_modpath("technic")
+
+--Read technic config file
+dofile(modpath.."/config.lua")
+
+-- world gen
+dofile(modpath.."/ores.lua")
+if enable_rubber_tree_generation==true then dofile(modpath.."/rubber.lua") end
+
+-- chests
+dofile(modpath.."/iron_chest.lua")
+dofile(modpath.."/copper_chest.lua")
+dofile(modpath.."/silver_chest.lua")
+dofile(modpath.."/gold_chest.lua")
+dofile(modpath.."/mithril_chest.lua")
+
+--items
+dofile(modpath.."/concrete.lua")
+dofile(modpath.."/items.lua")
+
+--LV machines
+dofile(modpath.."/alloy_furnace.lua")
+dofile(modpath.."/solar_panel.lua")
+dofile(modpath.."/geothermal.lua")
+dofile(modpath.."/water_mill.lua")
+dofile(modpath.."/electric_furnace.lua")
+dofile(modpath.."/battery_box.lua")
+dofile(modpath.."/wires.lua")
+dofile(modpath.."/tool_workshop.lua")
+dofile(modpath.."/music_player.lua")
+dofile(modpath.."/generator.lua")
+dofile(modpath.."/grinder.lua")
+
+--MV machines
+dofile(modpath.."/wires_mv.lua")
+dofile(modpath.."/solar_panel_mv.lua")
+dofile(modpath.."/battery_box_mv.lua")
+
+--Tools
+if enable_mining_dril==true then dofile(modpath.."/mining_drill.lua") end
+if enable_mining_laser==true then dofile(modpath.."/mining_laser_mk1.lua") end
+if enable_flashlight==true then dofile(modpath.."/flashlight.lua") end
+dofile(modpath.."/cans.lua")
+dofile(modpath.."/chainsaw.lua")
+dofile(modpath.."/tree_tap.lua")
+dofile(modpath.."/screwdriver.lua")
+dofile(modpath.."/sonic_screwdriver.lua")
+
+-- mesecons and tubes related
+dofile(modpath.."/injector.lua")
+dofile(modpath.."/node_breaker.lua")
+dofile(modpath.."/deployer.lua")
+dofile(modpath.."/constructor.lua")
+
+if enable_item_drop then dofile(modpath.."/item_drop.lua") end
+if enable_item_pickup then dofile(modpath.."/item_pickup.lua") end
+
+function has_locked_chest_privilege(meta, player)
+ if player:get_player_name() ~= meta:get_string("owner") then
+ return false
+ end
+ return true
+end
+
+
+function hacky_swap_node(pos,name)
+ local node = minetest.env:get_node(pos)
+ local meta = minetest.env:get_meta(pos)
+ local meta0 = meta:to_table()
+ if node.name == name then
+ return nil
+ end
+ node.name = name
+ local meta0 = meta:to_table()
+ minetest.env:set_node(pos,node)
+ meta = minetest.env:get_meta(pos)
+ meta:from_table(meta0)
+ return 1
+end
--- /dev/null
+minetest.register_craftitem("technic:injector", {
+ description = "Injector",
+ stack_max = 99,
+})
+
+minetest.register_node("technic:injector", {
+ description = "Injector",
+ tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png",
+ "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_front.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[9,9;]"..
+ "list[current_name;main;0,2;8,2;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Injector")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 8*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+ on_punch = function (pos, node, puncher)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ for _,stack in ipairs(inv:get_list("main")) do
+ if stack:get_name() ~="" then
+ inv:remove_item("main",stack)
+ pos1=pos
+ pos1.y=pos1.y
+ local x=pos1.x+1.5
+ local z=pos1.z
+ item1=tube_item({x=pos1.x,y=pos1.y,z=pos1.z},stack)
+ item1:get_luaentity().start_pos = {x=pos1.x,y=pos1.y,z=pos1.z}
+ item1:setvelocity({x=1, y=0, z=0})
+ item1:setacceleration({x=0, y=0, z=0})
+ return
+ end
+ end
+end,
+})
+
+
+function tube_item(pos, item)
+ local TUBE_nodes = {}
+ local CHEST_nodes = {}
+
+ TUBE_nodes[1]={}
+ TUBE_nodes[1].x=pos.x
+ TUBE_nodes[1].y=pos.y
+ TUBE_nodes[1].z=pos.z
+
+
+table_index=1
+ repeat
+ check_TUBE_node (TUBE_nodes,CHEST_nodes,table_index)
+ table_index=table_index+1
+ if TUBE_nodes[table_index]==nil then break end
+ until false
+found=table_index-1
+
+
+print("Found "..found.." tubes connected")
+print(dump(CHEST_nodes))
+ -- Take item in any format
+ local stack = ItemStack(item)
+ local obj = minetest.env:add_entity(pos, "technic:tubed_item")
+ obj:get_luaentity():set_item(stack:to_string())
+ return obj
+end
+
+minetest.register_entity("technic:tubed_item", {
+ initial_properties = {
+ hp_max = 1,
+ physical = false,
+ collisionbox = {0,0,0,0,0,0},
+ visual = "sprite",
+ visual_size = {x=0.5, y=0.5},
+ textures = {""},
+ spritediv = {x=1, y=1},
+ initial_sprite_basepos = {x=0, y=0},
+ is_visible = false,
+ start_pos={},
+ route={}
+ },
+
+ itemstring = '',
+ physical_state = false,
+
+ set_item = function(self, itemstring)
+ self.itemstring = itemstring
+ local stack = ItemStack(itemstring)
+ local itemtable = stack:to_table()
+ local itemname = nil
+ if itemtable then
+ itemname = stack:to_table().name
+ end
+ local item_texture = nil
+ local item_type = ""
+ if minetest.registered_items[itemname] then
+ item_texture = minetest.registered_items[itemname].inventory_image
+ item_type = minetest.registered_items[itemname].type
+ end
+ prop = {
+ is_visible = true,
+ visual = "sprite",
+ textures = {"unknown_item.png"}
+ }
+ if item_texture and item_texture ~= "" then
+ prop.visual = "sprite"
+ prop.textures = {item_texture}
+ prop.visual_size = {x=0.3, y=0.3}
+ else
+ prop.visual = "wielditem"
+ prop.textures = {itemname}
+ prop.visual_size = {x=0.15, y=0.15}
+ end
+ self.object:set_properties(prop)
+ end,
+
+ get_staticdata = function(self)
+
+ return minetest.serialize({
+ itemstring=self.itemstring,
+ velocity=self.object:getvelocity(),
+ start_pos=self.start_pos
+ })
+ end,
+
+ on_activate = function(self, staticdata)
+-- print (dump(staticdata))
+ if staticdata=="" or staticdata==nil then return end
+ local item = minetest.deserialize(staticdata)
+ local stack = ItemStack(item.itemstring)
+ local itemtable = stack:to_table()
+ local itemname = nil
+ if itemtable then
+ itemname = stack:to_table().name
+ end
+
+ if itemname then
+ self.start_pos=item.start_pos
+ self.object:setvelocity(item.velocity)
+ self.object:setacceleration({x=0, y=0, z=0})
+ self.object:setpos(item.start_pos)
+ end
+ self:set_item(item.itemstring)
+ end,
+
+ on_step = function(self, dtime)
+ if self.start_pos then
+ local pos = self.object:getpos()
+ local node = minetest.env:get_node(pos)
+ local meta = minetest.env:get_meta(pos)
+ tubelike=meta:get_int("tubelike")
+ local stack = ItemStack(self.itemstring)
+ local drop_pos=nil
+
+ local velocity=self.object:getvelocity()
+
+ if velocity==nil then print ("wypadl") return end
+
+ if math.abs(velocity.x)==1 then
+ local next_node=math.abs(pos.x-self.start_pos.x)
+ if next_node >= 1 then
+ self.start_pos.x=self.start_pos.x+velocity.x
+ if check_pos_vector (self.start_pos, velocity)==0 then
+ if check_next_step (self.start_pos, velocity)==0 then
+ drop_pos=minetest.env:find_node_near({x=self.start_pos.x,y=self.start_pos.y,z=self.start_pos.z+velocity.x}, 1, "air")
+ if drop_pos then minetest.item_drop(stack, "", drop_pos) end
+ self.object:remove()
+ end
+ self.object:setpos(self.start_pos)
+ self.object:setvelocity(velocity)
+ return
+ end
+ end
+ end
+
+ if math.abs(velocity.y)==1 then
+ local next_node=math.abs(pos.y-self.start_pos.y)
+ if next_node >= 1 then
+ self.start_pos.y=self.start_pos.y+velocity.y
+ if check_pos_vector (self.start_pos, velocity)==0 then
+ if check_next_step (self.start_pos, velocity)==0 then
+ drop_pos=minetest.env:find_node_near({x=self.start_pos.x+velocity.x,y=self.start_pos.y+velocity.y,z=self.start_pos.z+velocity.z}, 1, "air")
+ if drop_pos then minetest.item_drop(stack, "", drop_pos) end
+ self.object:remove()
+ end
+ self.object:setpos(self.start_pos)
+ self.object:setvelocity(velocity)
+ return
+ end
+ end
+ end
+
+ if math.abs(velocity.z)==1 then
+ local next_node=math.abs(pos.z-self.start_pos.z)
+ if next_node >= 1 then
+ self.start_pos.z=self.start_pos.z+velocity.z
+ if check_pos_vector (self.start_pos, velocity)==0 then
+ if check_next_step (self.start_pos, velocity)==0 then
+ drop_pos=minetest.env:find_node_near({x=self.start_pos.x+velocity.x,y=self.start_pos.y+velocity.y,z=self.start_pos.z+velocity.z}, 1, "air")
+ if drop_pos then minetest.item_drop(stack, "", drop_pos) end
+ self.object:remove()
+ end
+ self.object:setpos(self.start_pos)
+ self.object:setvelocity(velocity)
+ return
+ end
+ end
+ end
+ end
+
+end
+})
+
+
+function check_next_step (pos,velocity)
+local meta
+local tubelike
+
+if velocity.x==0 then
+meta = minetest.env:get_meta({x=pos.x-1,y=pos.y,z=pos.z})
+tubelike=meta:get_int("tubelike")
+if tubelike==1 then velocity.x=-1 velocity.y=0 velocity.z=0 return 1 end
+meta = minetest.env:get_meta({x=pos.x+1,y=pos.y,z=pos.z})
+tubelike=meta:get_int("tubelike")
+if tubelike==1 then velocity.x=1 velocity.y=0 velocity.z=0 return 1 end
+end
+
+if velocity.z==0 then
+meta = minetest.env:get_meta({x=pos.x,y=pos.y,z=pos.z+1})
+tubelike=meta:get_int("tubelike")
+if tubelike==1 then velocity.x=0 velocity.y=0 velocity.z=1 return 1 end
+meta = minetest.env:get_meta({x=pos.x,y=pos.y,z=pos.z-1})
+tubelike=meta:get_int("tubelike")
+if tubelike==1 then velocity.x=0 velocity.y=0 velocity.z=-1 return 1 end
+end
+
+if velocity.y==0 then
+meta = minetest.env:get_meta({x=pos.x,y=pos.y+1,z=pos.z})
+tubelike=meta:get_int("tubelike")
+if tubelike==1 then velocity.x=0 velocity.y=1 velocity.z=0 return 1 end
+meta = minetest.env:get_meta({x=pos.x,y=pos.y-1,z=pos.z})
+tubelike=meta:get_int("tubelike")
+if tubelike==1 then velocity.x=0 velocity.y=-1 velocity.z=0 return 1 end
+end
+
+print ("spadl")
+return 0
+end
+
+function check_pos_vector (pos,velocity)
+added={}
+added.x=pos.x+velocity.x
+added.y=pos.y+velocity.y
+added.z=pos.z+velocity.z
+local meta=minetest.env:get_meta(added)
+--print(dump(added).." : "..tubelike)
+if meta:get_int("tubelike")==1 then return 1 end
+return 0
+end
+
+function add_new_TUBE_node (TUBE_nodes,pos1,parent)
+local i=1
+ repeat
+ if TUBE_nodes[i]==nil then break end
+ if pos1.x==TUBE_nodes[i].x and pos1.y==TUBE_nodes[i].y and pos1.z==TUBE_nodes[i].z then return false end
+ i=i+1
+ until false
+TUBE_nodes[i]={}
+TUBE_nodes[i].x=pos1.x
+TUBE_nodes[i].y=pos1.y
+TUBE_nodes[i].z=pos1.z
+TUBE_nodes[i].parent_x=parent.x
+TUBE_nodes[i].parent_y=parent.y
+TUBE_nodes[i].parent_z=parent.z
+
+return true
+end
+
+function check_TUBE_node (TUBE_nodes,CHEST_nodes,i)
+ local pos1={}
+ local parent={}
+ pos1.x=TUBE_nodes[i].x
+ pos1.y=TUBE_nodes[i].y
+ pos1.z=TUBE_nodes[i].z
+ parent.x=pos1.x
+ parent.y=pos1.y
+ parent.z=pos1.z
+ new_node_added=false
+
+ pos1.x=pos1.x+1
+ check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+ pos1.x=pos1.x-2
+ check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+ pos1.x=pos1.x+1
+
+ pos1.y=pos1.y+1
+ check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+ pos1.y=pos1.y-2
+ check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+ pos1.y=pos1.y+1
+
+ pos1.z=pos1.z+1
+ check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+ pos1.z=pos1.z-2
+ check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+ pos1.z=pos1.z+1
+return new_node_added
+end
+
+function check_TUBE_node_subp (TUBE_nodes,CHEST_nodes,pos1,parent)
+meta = minetest.env:get_meta(pos1)
+if meta:get_float("tubelike")==1 then add_new_TUBE_node(TUBE_nodes,pos1,parent) return end
+nctr = minetest.env:get_node(pos1)
+if minetest.get_item_group(nctr.name, "tubedevice_receiver") == 1 then add_new_TUBE_node(CHEST_nodes,pos1,parent) return end
+end
\ No newline at end of file
--- /dev/null
+minetest.register_craftitem("technic:injector", {
+ description = "Injector",
+ stack_max = 99,
+})
+
+minetest.register_node("technic:injector", {
+ description = "Injector",
+ tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png",
+ "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_front.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[9,9;]"..
+ "list[current_name;main;0,2;8,2;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Injector")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 8*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+ on_punch = function (pos, node, puncher)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ for _,stack in ipairs(inv:get_list("main")) do
+ if stack:get_name() ~="" then
+ inv:remove_item("main",stack)
+ item1=tube_item({x=pos.x+.5,y=pos.y,z=pos.z},stack)
+ return
+ end
+ end
+end,
+})
+
+
+function tube_item(pos, item)
+ -- Take item in any format
+ local stack = ItemStack(item)
+ local obj = minetest.env:add_entity(pos, "technic:tubed_item")
+ obj:get_luaentity():set_item(stack:to_string())
+ obj:get_luaentity().start_pos = {x=pos.x,y=pos.y,z=pos.z}
+ obj:setacceleration({x=0, y=0, z=0})
+ pos.x=pos.x+1
+ local meta = minetest.env:get_meta(pos)
+ if meta:get_int("tubelike")==1 then obj:setvelocity({x=1, y=0, z=0}) return obj end
+ pos.x=pos.x-2
+ meta = minetest.env:get_meta(pos)
+ if meta:get_int("tubelike")==1 then obj:setvelocity({x=-1, y=0, z=0}) return obj end
+ pos.x=pos.x+1
+ pos.z=pos.z+1
+ meta = minetest.env:get_meta(pos)
+ if meta:get_int("tubelike")==1 then obj:setvelocity({x=0, y=0, z=1}) return obj end
+ pos.z=pos.z-2
+ meta = minetest.env:get_meta(pos)
+ if meta:get_int("tubelike")==1 then obj:setvelocity({x=0, y=0, z=-1}) return obj end
+ pos.z=pos.z+1
+ pos.y=pos.y+1
+ meta = minetest.env:get_meta(pos)
+ if meta:get_int("tubelike")==1 then obj:setvelocity({x=0, y=1, z=0}) return obj end
+ pos.y=pos.y-2
+ meta = minetest.env:get_meta(pos)
+ if meta:get_int("tubelike")==1 then obj:setvelocity({x=0, y=-2, z=0}) return obj end
+ pos.y=pos.y+1
+ return obj
+end
+
+minetest.register_entity("technic:tubed_item", {
+ initial_properties = {
+ hp_max = 1,
+ physical = false,
+ collisionbox = {0,0,0,0,0,0},
+ visual = "sprite",
+ visual_size = {x=0.5, y=0.5},
+ textures = {""},
+ spritediv = {x=1, y=1},
+ initial_sprite_basepos = {x=0, y=0},
+ is_visible = false,
+ start_pos={}
+ },
+
+ itemstring = '',
+ physical_state = false,
+
+ set_item = function(self, itemstring)
+ self.itemstring = itemstring
+ local stack = ItemStack(itemstring)
+ local itemtable = stack:to_table()
+ local itemname = nil
+ if itemtable then
+ itemname = stack:to_table().name
+ end
+ local item_texture = nil
+ local item_type = ""
+ if minetest.registered_items[itemname] then
+ item_texture = minetest.registered_items[itemname].inventory_image
+ item_type = minetest.registered_items[itemname].type
+ end
+ prop = {
+ is_visible = true,
+ visual = "sprite",
+ textures = {"unknown_item.png"}
+ }
+ if item_texture and item_texture ~= "" then
+ prop.visual = "sprite"
+ prop.textures = {item_texture}
+ prop.visual_size = {x=0.3, y=0.3}
+ else
+ prop.visual = "wielditem"
+ prop.textures = {itemname}
+ prop.visual_size = {x=0.15, y=0.15}
+ end
+ self.object:set_properties(prop)
+ end,
+
+ get_staticdata = function(self)
+
+ return minetest.serialize({
+ itemstring=self.itemstring,
+ velocity=self.object:getvelocity(),
+ start_pos=self.start_pos
+ })
+ end,
+
+ on_activate = function(self, staticdata)
+ if staticdata=="" or staticdata==nil then return end
+ local item = minetest.deserialize(staticdata)
+ local stack = ItemStack(item.itemstring)
+ local itemtable = stack:to_table()
+ local itemname = nil
+ if itemtable then
+ itemname = stack:to_table().name
+ end
+
+ if itemname then
+ self.start_pos=item.start_pos
+ self.object:setvelocity(item.velocity)
+ self.object:setacceleration({x=0, y=0, z=0})
+ self.object:setpos(item.start_pos)
+ end
+ self:set_item(item.itemstring)
+ end,
+
+ on_step = function(self, dtime)
+ if self.start_pos then
+ local pos = self.object:getpos()
+ local node = minetest.env:get_node(pos)
+ local meta = minetest.env:get_meta(pos)
+ tubelike=meta:get_int("tubelike")
+ local velocity=self.object:getvelocity()
+
+ if not velocity then return end
+
+ if math.abs(velocity.x)==1 then
+ local next_node=math.abs(pos.x-self.start_pos.x)
+ if next_node >= 1 then
+ self.start_pos.x=self.start_pos.x+velocity.x
+ if check_pos_vector (self.start_pos, velocity)==0 then
+ check_next_step (self.start_pos, velocity)
+ self.object:setpos(self.start_pos)
+ self.object:setvelocity(velocity)
+ return
+ end
+ end
+ end
+
+ if math.abs(velocity.y)==1 then
+ local next_node=math.abs(pos.y-self.start_pos.y)
+ if next_node >= 1 then
+ self.start_pos.y=self.start_pos.y+velocity.y
+ if check_pos_vector (self.start_pos, velocity)==0 then
+ check_next_step (self.start_pos, velocity)
+ self.object:setpos(self.start_pos)
+ self.object:setvelocity(velocity)
+ return
+ end
+ end
+ end
+
+ if math.abs(velocity.z)==1 then
+ local next_node=math.abs(pos.z-self.start_pos.z)
+ if next_node >= 1 then
+ self.start_pos.z=self.start_pos.z+velocity.z
+ if check_pos_vector (self.start_pos, velocity)==0 then
+ check_next_step (self.start_pos, velocity)
+ self.object:setpos(self.start_pos)
+ self.object:setvelocity(velocity)
+ return
+ end
+ end
+ end
+ end
+end
+})
+
+
+function check_next_step (pos,velocity)
+local meta
+local tubelike
+
+if velocity.x==0 then
+meta = minetest.env:get_meta({x=pos.x-1,y=pos.y,z=pos.z})
+tubelike=meta:get_int("tubelike")
+if tubelike==1 then velocity.x=-1 velocity.y=0 velocity.z=0 return end
+meta = minetest.env:get_meta({x=pos.x+1,y=pos.y,z=pos.z})
+tubelike=meta:get_int("tubelike")
+if tubelike==1 then velocity.x=1 velocity.y=0 velocity.z=0 return end
+end
+
+if velocity.z==0 then
+meta = minetest.env:get_meta({x=pos.x,y=pos.y,z=pos.z+1})
+tubelike=meta:get_int("tubelike")
+if tubelike==1 then velocity.x=0 velocity.y=0 velocity.z=1 return end
+meta = minetest.env:get_meta({x=pos.x,y=pos.y,z=pos.z-1})
+tubelike=meta:get_int("tubelike")
+if tubelike==1 then velocity.x=0 velocity.y=0 velocity.z=-1 return end
+end
+
+if velocity.y==0 then
+meta = minetest.env:get_meta({x=pos.x,y=pos.y+1,z=pos.z})
+tubelike=meta:get_int("tubelike")
+if tubelike==1 then velocity.x=0 velocity.y=1 velocity.z=0 return end
+meta = minetest.env:get_meta({x=pos.x,y=pos.y-1,z=pos.z})
+tubelike=meta:get_int("tubelike")
+if tubelike==1 then velocity.x=0 velocity.y=-1 velocity.z=0 return end
+end
+
+--velocity.x=0
+--velocity.y=0
+--velocity.z=0
+end
+
+function check_pos_vector (pos,velocity)
+added={}
+added.x=pos.x+velocity.x
+added.y=pos.y+velocity.y
+added.z=pos.z+velocity.z
+local meta=minetest.env:get_meta(added)
+--print(dump(added).." : "..tubelike)
+if meta:get_int("tubelike")==1 then return 1 end
+return 0
+end
--- /dev/null
+minetest.register_craft({
+ output = 'technic:iron_chest 1',
+ recipe = {
+ {'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
+ {'default:steel_ingot','default:chest','default:steel_ingot'},
+ {'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:iron_locked_chest 1',
+ recipe = {
+ {'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
+ {'default:steel_ingot','default:chest_locked','default:steel_ingot'},
+ {'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:iron_locked_chest 1',
+ recipe = {
+ {'default:steel_ingot'},
+ {'technic:iron_chest'},
+ }
+})
+
+
+minetest.register_craftitem("technic:iron_chest", {
+ description = "Iron Chest",
+ stack_max = 99,
+})
+minetest.register_craftitem("technic:iron_locked_chest", {
+ description = "Iron Locked Chest",
+ stack_max = 99,
+})
+
+minetest.register_alias("blabla", "technic:iron_chest")
+
+minetest.register_node("technic:iron_chest", {
+ description = "Iron Chest",
+ tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png",
+ "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_front.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[9,9;]"..
+ "list[current_name;main;0,0;9,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Iron Chest")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 9*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+ on_metadata_inventory_move = function(pos, from_list, from_index,
+ to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_move_allow_all(
+ pos, from_list, from_index, to_list, to_index, count, player)
+ end,
+ on_metadata_inventory_offer = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_offer_allow_all(
+ pos, listname, index, stack, player)
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from chest at "..minetest.pos_to_string(pos))
+ end,
+})
+
+local function has_locked_chest_privilege(meta, player)
+ if player:get_player_name() ~= meta:get_string("owner") then
+ return false
+ end
+ return true
+end
+
+minetest.register_node("technic:iron_locked_chest", {
+ description = "Iron Locked Chest",
+ tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png",
+ "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_locked.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ after_place_node = function(pos, placer)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("owner", placer:get_player_name() or "")
+ meta:set_string("infotext", "Locked Iron Chest (owned by "..
+ meta:get_string("owner")..")")
+ end,
+on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[9,9;]"..
+ "list[current_name;main;0,0;9,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Iron Locked Chest")
+ meta:set_string("owner", "")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 9*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+ allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return count
+ end,
+ allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ allow_metadata_inventory_take = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_put = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from locked chest at "..minetest.pos_to_string(pos))
+ end,
+})
--- /dev/null
+-- This part written by PilzAdam (item_drop mod)
+
+minetest.register_globalstep(function(dtime)
+ for _,player in ipairs(minetest.get_connected_players()) do
+ local pos = player:getpos()
+ pos.y = pos.y+0.5
+ local inv = player:get_inventory()
+
+ for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do
+ if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
+ if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
+ inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
+ if object:get_luaentity().itemstring ~= "" then
+ minetest.sound_play("item_drop_pickup", {
+ to_player = player:get_player_name(),
+ })
+ end
+ object:get_luaentity().itemstring = ""
+ object:remove()
+ end
+ end
+ end
+
+ for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 2)) do
+ if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
+ if object:get_luaentity().collect then
+ if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
+ local pos1 = pos
+ pos1.y = pos1.y+0.2
+ local pos2 = object:getpos()
+ local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z}
+ vec.x = vec.x*3
+ vec.y = vec.y*3
+ vec.z = vec.z*3
+ object:setvelocity(vec)
+
+ minetest.after(1, function(args)
+ local lua = object:get_luaentity()
+ if object == nil or lua == nil or lua.itemstring == nil then
+ return
+ end
+ if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
+ inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
+ if object:get_luaentity().itemstring ~= "" then
+ minetest.sound_play("item_drop_pickup", {
+ to_player = player:get_player_name(),
+ })
+ end
+ object:get_luaentity().itemstring = ""
+ object:remove()
+ else
+ object:setvelocity({x=0,y=0,z=0})
+ end
+ end, {player, object})
+
+ end
+ end
+ end
+ end
+ end
+end)
+
+function minetest.handle_node_drops(pos, drops, digger)
+ for _,item in ipairs(drops) do
+ local count, name
+ if type(item) == "string" then
+ count = 1
+ name = item
+ else
+ count = item:get_count()
+ name = item:get_name()
+ end
+ for i=1,count do
+ local obj = minetest.env:add_item(pos, name)
+ if obj ~= nil then
+ obj:get_luaentity().collect = true
+ local x = math.random(1, 5)
+ if math.random(1,2) == 1 then
+ x = -x
+ end
+ local z = math.random(1, 5)
+ if math.random(1,2) == 1 then
+ z = -z
+ end
+ obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z})
+
+ -- FIXME this doesnt work for deactiveted objects
+ if minetest.setting_get("remove_items") and tonumber(minetest.setting_get("remove_items")) then
+ minetest.after(tonumber(minetest.setting_get("remove_items")), function(obj)
+ obj:remove()
+ end, obj)
+ end
+ end
+ end
+ end
+end
+
+if minetest.setting_get("log_mods") then
+ minetest.log("action", "item_drop loaded")
+end
--- /dev/null
+minetest.register_globalstep(function(dtime)
+ for _,player in ipairs(minetest.get_connected_players()) do
+ local pos = player:getpos()
+ pos.y = pos.y+0.5
+ local inv = player:get_inventory()
+
+ for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do
+ if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
+ if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
+ inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
+ if object:get_luaentity().itemstring ~= "" then
+ minetest.sound_play("item_drop_pickup", {
+ to_player = player:get_player_name(),
+ })
+ end
+ object:get_luaentity().itemstring = ""
+ object:remove()
+ end
+ end
+ end
+
+ for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, 2)) do
+ if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
+ if object:get_luaentity().collect then
+ if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
+ local pos1 = pos
+ pos1.y = pos1.y+0.2
+ local pos2 = object:getpos()
+ local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z}
+ vec.x = vec.x*3
+ vec.y = vec.y*3
+ vec.z = vec.z*3
+ object:setvelocity(vec)
+
+ minetest.after(1, function(args)
+ local lua = object:get_luaentity()
+ if object == nil or lua == nil or lua.itemstring == nil then
+ return
+ end
+ if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
+ inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
+ if object:get_luaentity().itemstring ~= "" then
+ minetest.sound_play("item_drop_pickup", {
+ to_player = player:get_player_name(),
+ })
+ end
+ object:get_luaentity().itemstring = ""
+ object:remove()
+ else
+ object:setvelocity({x=0,y=0,z=0})
+ end
+ end, {player, object})
+
+ end
+ else
+ minetest.after(0.5, function(entity)
+ entity.collect = true
+ end, object:get_luaentity())
+ end
+ end
+ end
+ end
+end)
--- /dev/null
+minetest.register_craftitem( "technic:silicon_wafer", {
+ description = "Silicon Wafer",
+ inventory_image = "technic_silicon_wafer.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craftitem( "technic:doped_silicon_wafer", {
+ description = "Doped Silicon Wafer",
+ inventory_image = "technic_doped_silicon_wafer.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+ output = 'pipeworks:tube_000000 9',
+ recipe = {
+ {'technic:stainless_steel_ingot', 'default:glass', 'technic:stainless_steel_ingot'},
+ {'technic:stainless_steel_ingot', 'default:glass', 'technic:stainless_steel_ingot'},
+ {'technic:stainless_steel_ingot', 'default:glass', 'technic:stainless_steel_ingot'},
+ }
+})
+
+minetest.register_craftitem( "technic:diamond_drill_head", {
+ description = "Diamond Drill Head",
+ inventory_image = "technic_diamond_drill_head.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+ output = 'technic:diamond_drill_head',
+ recipe = {
+ {'technic:stainless_steel_ingot', 'technic:diamond', 'technic:stainless_steel_ingot'},
+ {'technic:diamond', '', 'technic:diamond'},
+ {'technic:stainless_steel_ingot', 'technic:diamond', 'technic:stainless_steel_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:diamond_block',
+ recipe = {
+ {'technic:diamond', 'technic:diamond', 'technic:diamond'},
+ {'technic:diamond', 'technic:diamond', 'technic:diamond'},
+ {'technic:diamond', 'technic:diamond', 'technic:diamond'},
+ }
+})
+
+minetest.register_node( "technic:diamond_block", {
+ description = "Diamond Block",
+ tiles = { "technic_diamond_block.png" },
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_stone_defaults(),
+ drop = 'craft "technic:diamond_block" 1',
+})
+
+minetest.register_craft({
+ output = 'technic:green_energy_crystal',
+ recipe = {
+ {'moreores:gold_ingot', 'technic:battery', 'dye:green'},
+ {'technic:battery', 'technic:red_energy_crystal', 'technic:battery'},
+ {'dye:green', 'technic:battery', 'moreores:gold_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:blue_energy_crystal',
+ recipe = {
+ {'moreores:gold_ingot', 'technic:battery', 'dye:blue'},
+ {'technic:battery', 'technic:green_energy_crystal', 'technic:battery'},
+ {'dye:blue', 'technic:battery', 'moreores:gold_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:red_energy_crystal',
+ recipe = {
+ {'moreores:gold_ingot', 'technic:battery', 'dye:red'},
+ {'technic:battery', 'technic:diamond_block', 'technic:battery'},
+ {'dye:red', 'technic:battery', 'moreores:gold_ingot'},
+ }
+})
+
+minetest.register_tool("technic:blue_energy_crystal",
+{description = "Blue Energy Crystal",
+inventory_image = minetest.inventorycube("technic_diamond_block_blue.png", "technic_diamond_block_blue.png", "technic_diamond_block_blue.png"),
+tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}})
+
+minetest.register_tool("technic:green_energy_crystal",
+{description = "Green Energy Crystal",
+inventory_image = minetest.inventorycube("technic_diamond_block_green.png", "technic_diamond_block_green.png", "technic_diamond_block_green.png"),
+tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}})
+
+minetest.register_tool("technic:red_energy_crystal",
+{description = "Red Energy Crystal",
+inventory_image = minetest.inventorycube("technic_diamond_block_red.png", "technic_diamond_block_red.png", "technic_diamond_block_red.png"),
+tool_capabilities = {load=0,max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}})
+
+
+minetest.register_craftitem( "technic:fine_copper_wire", {
+ description = "Fine Copper Wire",
+ inventory_image = "technic_fine_copper_wire.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+ output = 'technic:fine_copper_wire 2',
+ recipe = {
+ {'', 'moreores:copper_ingot', ''},
+ {'', 'moreores:copper_ingot', ''},
+ {'', 'moreores:copper_ingot', ''},
+ }
+})
+
+minetest.register_craftitem( "technic:copper_coil", {
+ description = "Copper Coil",
+ inventory_image = "technic_copper_coil.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+ output = 'technic:copper_coil 1',
+ recipe = {
+ {'technic:fine_copper_wire', 'default:steel_ingot', 'technic:fine_copper_wire'},
+ {'default:steel_ingot', '', 'default:steel_ingot'},
+ {'technic:fine_copper_wire', 'default:steel_ingot', 'technic:fine_copper_wire'},
+ }
+})
+
+minetest.register_craftitem( "technic:motor", {
+ description = "Electric Motor",
+ inventory_image = "technic_motor.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+ output = 'technic:motor',
+ recipe = {
+ {'default:steel_ingot', 'technic:copper_coil', 'default:steel_ingot'},
+ {'default:steel_ingot', 'technic:copper_coil', 'default:steel_ingot'},
+ {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
+ }
+})
+
+minetest.register_craftitem( "technic:mv_transformer", {
+ description = "Medium Voltage Transformer",
+ inventory_image = "technic_mv_transformer.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+ output = 'technic:mv_transformer',
+ recipe = {
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+ {'technic:copper_coil', 'default:steel_ingot', 'technic:copper_coil'},
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+ }
+})
+
--- /dev/null
+mining_drill_max_charge=60000
+
+minetest.register_tool("technic:mining_drill", {
+ description = "Mining Drill",
+ inventory_image = "technic_mining_drill.png",
+ stack_max = 1,
+ on_use = function(itemstack, user, pointed_thing)
+ if pointed_thing.type=="node" then
+ item=itemstack:to_table()
+ if item["metadata"]=="" or item["metadata"]=="0" then return end --tool not charged
+ charge=tonumber(item["metadata"])
+ if charge-200>0 then
+ drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user)
+ charge =charge-200;
+ item["metadata"]=tostring(charge)
+ set_RE_wear(item,charge,mining_drill_max_charge)
+ itemstack:replace(item)
+ end
+ return itemstack
+ end
+ end,
+})
+
+minetest.register_craft({
+ output = 'technic:mining_drill',
+ recipe = {
+ {'technic:stainless_steel_ingot', 'technic:diamond_drill_head', 'technic:stainless_steel_ingot'},
+ {'technic:stainless_steel_ingot', 'technic:motor', 'technic:stainless_steel_ingot'},
+ {'', 'technic:red_energy_crystal', 'moreores:copper_ingot'},
+ }
+})
+
+
+
+
+
+
+function drill_dig_it (pos, player)
+ local node=minetest.env:get_node(pos)
+ if node.name == "air" or node.name == "ignore" then return end
+ if node.name == "default:lava_source" then return end
+ if node.name == "default:lava_flowing" then return end
+ if node.name == "default:water_source" then minetest.env:remove_node(pos) return end
+ if node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end
+
+ minetest.sound_play("mining_drill", {pos = pos, gain = 1.0, max_hear_distance = 10,})
+ minetest.node_dig(pos,node,player)
+
+end
\ No newline at end of file
--- /dev/null
+laser_mk1_max_charge=40000
+local laser_shoot = function(itemstack, player, pointed_thing)
+ local laser_straight_mode=0
+ local playerpos=player:getpos()
+ local dir=player:get_look_dir()
+ if pointed_thing.type=="node" then
+ pos=minetest.get_pointed_thing_position(pointed_thing, above)
+ local node = minetest.env:get_node(pos)
+ if node.name~="ignore" then
+ minetest.node_dig(pos,node,player)
+ end
+ laser_straight_mode=1
+ end
+
+ direction_y=math.abs(math.floor(dir.y*100))
+ if direction_y>50 then entity_name="technic:laser_beam_entityV"
+ else entity_name="technic:laser_beam_entity" end
+
+ if laser_straight_mode==1 then
+ pos1=minetest.get_pointed_thing_position(pointed_thing, under)
+ pos1.x=math.floor(pos1.x)
+ pos1.y=math.floor(pos1.y)
+ pos1.z=math.floor(pos1.z)
+ obj=minetest.env:add_entity(pos1,entity_name)
+ else
+ obj=minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.6,z=playerpos.z},entity_name)
+ end
+ if obj:get_luaentity().player == nil then
+ obj:get_luaentity().player = player
+ end
+ if laser_straight_mode==1 and direction_y<50 then
+ obj:setvelocity({x=dir.x*8, y=0, z=dir.z*8})
+ else if laser_straight_mode==1 and direction_y>50 then
+ obj:setvelocity({x=0, y=dir.y*8, z=dir.z*8})
+ end
+ end
+ if laser_straight_mode==0 then
+ obj:setvelocity({x=dir.x*8, y=dir.y*8, z=dir.z*8})
+ end
+ obj:setacceleration({x=0, y=0, z=0})
+ obj:setyaw(player:get_look_yaw()+math.pi)
+ if obj:get_luaentity().player == nil then
+ obj:get_luaentity().player = player
+ end
+ --obj:get_luaentity().node = player:get_inventory():get_stack("main", 1):get_name()
+ minetest.sound_play("technic_laser", {pos = playerpos, gain = 1.0, max_hear_distance = 10,})
+ return true
+end
+
+
+minetest.register_tool("technic:laser_mk1", {
+ description = "Mining Laser MK1",
+ inventory_image = "technic_mining_laser_mk1.png",
+ stack_max = 1,
+ on_use = function(itemstack, user, pointed_thing)
+ item=itemstack:to_table()
+ if item["metadata"]=="" or item["metadata"]=="0" then return end
+ local charge=tonumber((item["metadata"]))
+ if charge-400>0 then
+ laser_shoot(item, user, pointed_thing)
+ charge =charge-400;
+ item["metadata"]=tostring(charge)
+ charge=set_RE_wear(item,charge,laser_mk1_max_charge)
+ itemstack:replace(item)
+ end
+ return itemstack
+ end,
+})
+
+minetest.register_craft({
+ output = 'technic:laser_mk1',
+ recipe = {
+ {'technic:diamond', 'default:steel_ingot', 'technic:battery'},
+ {'', 'default:steel_ingot', 'technic:battery'},
+ {'', '', 'moreores:copper_ingot'},
+ }
+})
+
+
+
+minetest.register_node("technic:laser_beam_box", {
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ { -0.5 , -0.1, -0.1 , 0.1 , 0.1 , 0.1 },
+ { -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1 },
+ }
+ },
+ tiles = {"technic_laser_beam.png"},
+ groups = {not_in_creative_inventory=1},
+})
+
+minetest.register_node("technic:laser_beam_boxV", {
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ { -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1 },
+ { -0.1 , -0.5, -0.1 , 0.1 , 0.1 , 0.1 },
+
+ }
+ },
+ tiles = {"technic_laser_beam.png"},
+ groups = {not_in_creative_inventory=1},
+})
+
+LASER_BEAM_ENTITY={
+ physical = false,
+ timer=0,
+ visual = "wielditem",
+ visual_size = {x=0.2, y=0.2},
+ textures = {"technic:laser_beam_box"},
+ lastpos={},
+ max_range=10,
+ count=0,
+-- digger=nil,
+ collisionbox = {0,0,0,0,0,0},
+}
+
+LASER_BEAM_ENTITY.on_step = function(self, dtime)
+ self.timer=self.timer+dtime
+ local pos = self.object:getpos()
+ if self.player~=nil then if self.lastpos.x~=nil then lazer_it (pos, self.player) end end
+ if self.lastpos.x ~=nil and self.lastpos.y ~=nil and self.lastpos.y ~=nil then
+ temp1={x=math.floor(self.lastpos.x),y=math.floor(self.lastpos.y),z=math.floor(self.lastpos.z)}
+ temp2={x=math.floor(pos.x),y=math.floor(pos.y),z=math.floor(pos.z)}
+ if temp1.x==temp2.x and temp1.y==temp2.y and temp1.z==temp2.z then return end
+ end
+ self.lastpos={x=pos.x, y=pos.y, z=pos.z}
+ self.count=self.count+1
+ if self.count==self.max_range then self.object:remove() end
+end
+
+LASER_BEAM_ENTITYV={
+ physical = false,
+ timer=0,
+ visual = "wielditem",
+ visual_size = {x=0.2, y=0.2},
+ textures = {"technic:laser_beam_boxV"},
+ lastpos={},
+ max_range=15,
+ count=0,
+ collisionbox = {0,0,0,0,0,0},
+}
+
+LASER_BEAM_ENTITYV.on_step = function(self, dtime)
+ self.timer=self.timer+dtime
+ local pos = self.object:getpos()
+ if self.player~=nil then if self.lastpos.x~=nil then lazer_it (pos, self.player) end end
+ if self.lastpos.x ~=nil and self.lastpos.y ~=nil and self.lastpos.y ~=nil then
+ temp1={x=math.floor(self.lastpos.x),y=math.floor(self.lastpos.y),z=math.floor(self.lastpos.z)}
+ temp2={x=math.floor(pos.x),y=math.floor(pos.y),z=math.floor(pos.z)}
+ if temp1.x==temp2.x and temp1.y==temp2.y and temp1.z==temp2.z then return end
+ end
+ self.lastpos={x=pos.x, y=pos.y, z=pos.z}
+ self.count=self.count+1
+ if self.count==self.max_range then self.object:remove() end
+end
+
+
+minetest.register_entity("technic:laser_beam_entity", LASER_BEAM_ENTITY)
+minetest.register_entity("technic:laser_beam_entityV", LASER_BEAM_ENTITYV)
+
+function lazer_it (pos, player)
+ local pos1={}
+-- pos1.x=math.floor(pos.x)
+-- pos1.y=math.floor(pos.y)
+-- pos1.z=math.floor(pos.z)
+ local node = minetest.env:get_node(pos)
+ if node.name == "air" or node.name == "ignore" or node.name == "default:lava_source" or node.name == "default:lava_flowing" then return end
+ if node.name == "default:water_source" or node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end
+ if player then minetest.node_dig(pos,node,player) end
+end
\ No newline at end of file
--- /dev/null
+minetest.register_craft({
+ output = 'technic:mithril_chest 1',
+ recipe = {
+ {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+ {'moreores:mithril_ingot','technic:gold_chest','moreores:mithril_ingot'},
+ {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:mithril_locked_chest 1',
+ recipe = {
+ {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+ {'moreores:mithril_ingot','technic:gold_locked_chest','moreores:mithril_ingot'},
+ {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:mithril_locked_chest 1',
+ recipe = {
+ {'default:steel_ingot'},
+ {'technic:mithril_chest'},
+ }
+})
+
+minetest.register_node("technic:mithril_chest", {
+ description = "Mithril Chest",
+ tiles = {"technic_mithril_chest_top.png", "technic_mithril_chest_top.png", "technic_mithril_chest_side.png",
+ "technic_mithril_chest_side.png", "technic_mithril_chest_side.png", "technic_mithril_chest_front.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[13,9;]"..
+ "list[current_name;main;0,0;13,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Mithril Chest")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 13*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+
+ on_metadata_inventory_move = function(pos, from_list, from_index,
+ to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_move_allow_all(
+ pos, from_list, from_index, to_list, to_index, count, player)
+ end,
+ on_metadata_inventory_offer = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_offer_allow_all(
+ pos, listname, index, stack, player)
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from chest at "..minetest.pos_to_string(pos))
+ end,
+})
+
+minetest.register_node("technic:mithril_locked_chest", {
+ description = "Mithril Locked Chest",
+ tiles = {"technic_mithril_chest_top.png", "technic_mithril_chest_top.png", "technic_mithril_chest_side.png",
+ "technic_mithril_chest_side.png", "technic_mithril_chest_side.png", "technic_mithril_chest_locked.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ after_place_node = function(pos, placer)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("owner", placer:get_player_name() or "")
+ meta:set_string("infotext", "Mithril Locked Chest (owned by "..
+ meta:get_string("owner")..")")
+ end,
+on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[13,9;]"..
+ "list[current_name;main;0,0;13,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Mithril Locked Chest")
+ meta:set_string("owner", "")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 13*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+ allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return count
+ end,
+ allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ allow_metadata_inventory_take = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_put = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from locked chest at "..minetest.pos_to_string(pos))
+ end,
+})
--- /dev/null
+minetest.register_craft({
+ output = 'technic:mithril_chest 1',
+ recipe = {
+ {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+ {'moreores:mithril_ingot','technic:gold_chest','moreores:mithril_ingot'},
+ {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:mithril_locked_chest 1',
+ recipe = {
+ {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+ {'moreores:mithril_ingot','technic:gold_locked_chest','moreores:mithril_ingot'},
+ {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:mithril_locked_chest 1',
+ recipe = {
+ {'default:steel_ingot'},
+ {'technic:mithril_chest'},
+ }
+})
+
+minetest.register_node("technic:mithril_chest", {
+ description = "Mithril Chest",
+ tiles = {"technic_mithril_chest_top.png", "technic_mithril_chest_top.png", "technic_mithril_chest_side.png",
+ "technic_mithril_chest_side.png", "technic_mithril_chest_side.png", "technic_mithril_chest_front.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[13,9;]"..
+ "list[current_name;main;0,0;13,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Mithril Chest")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 13*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+
+ on_metadata_inventory_move = function(pos, from_list, from_index,
+ to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_move_allow_all(
+ pos, from_list, from_index, to_list, to_index, count, player)
+ end,
+ on_metadata_inventory_offer = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_offer_allow_all(
+ pos, listname, index, stack, player)
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from chest at "..minetest.pos_to_string(pos))
+ end,
+})
+
+minetest.register_node("technic:mithril_locked_chest", {
+ description = "Mithril Locked Chest",
+ tiles = {"technic_mithril_chest_top.png", "technic_mithril_chest_top.png", "technic_mithril_chest_side.png",
+ "technic_mithril_chest_side.png", "technic_mithril_chest_side.png", "technic_mithril_chest_locked.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ after_place_node = function(pos, placer)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("owner", placer:get_player_name() or "")
+ meta:set_string("infotext", "Mithril Locked Chest (owned by "..
+ meta:get_string("owner")..")")
+ end,
+on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[13,9;]"..
+ "list[current_name;main;0,0;13,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Mithril Locked Chest")
+ meta:set_string("owner", "")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 13*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+ allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return count
+ end,
+ allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ allow_metadata_inventory_take = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_put = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from locked chest at "..minetest.pos_to_string(pos))
+ end,
+})
--- /dev/null
+minetest.register_alias("music_player", "technic:music_player")
+minetest.register_craft({
+ output = 'technic:music_player',
+ recipe = {
+ {'default:wood', 'default:wood', 'default:wood'},
+ {'technic:diamond', 'technic:diamond', 'technic:diamond'},
+ {'default:stone', 'moreores:copper_ingot', 'default:stone'},
+ }
+})
+
+minetest.register_craftitem("technic:music_player", {
+ description = "Music Player",
+ stack_max = 99,
+})
+
+music_player_formspec =
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "label[0,0;Music Player]"..
+ "label[1,3;Power level]"..
+ "button[5,2;1,1;track1;1]"..
+ "button[6,2;1,1;track2;2]"
+
+
+minetest.register_node("technic:music_player", {
+ description = "Music Player",
+ tiles = {"technic_music_player_top.png", "technic_machine_bottom.png", "technic_music_player_side.png",
+ "technic_music_player_side.png", "technic_music_player_side.png", "technic_music_player_side.png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ sounds = default.node_sound_wood_defaults(),
+ technic_power_machine=1,
+ internal_EU_buffer=0,
+ internal_EU_buffer_size=5000,
+ music_player_on=0,
+ music_playing =0,
+ music_handle = 0,
+ music_player_current_track =1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("infotext", "Music Player")
+ meta:set_float("technic_power_machine", 1)
+ meta:set_float("internal_EU_buffer", 1)
+ meta:set_float("internal_EU_buffer_size", 5000)
+ meta:set_string("formspec", music_player_formspec)
+ meta:set_float("music_player_on", 0)
+ meta:set_float("music_player_current_track", 1)
+ end,
+
+ on_receive_fields = function(pos, formanme, fields, sender)
+
+ local meta = minetest.env:get_meta(pos)
+ player_on=meta:get_float("music_player_on")
+ music_handle=meta:get_float("music_handle")
+ music_player_current_track=meta:get_float("music_player_current_track")
+ if fields.track1 then music_player_current_track=1 end
+ if fields.track2 then music_player_current_track=2 end
+ if fields.track3 then music_player_current_track=3 end
+ if fields.track4 then music_player_current_track=4 end
+ if fields.track5 then music_player_current_track=5 end
+ if fields.track6 then music_player_current_track=6 end
+ if fields.track7 then music_player_current_track=7 end
+ if fields.track8 then music_player_current_track=8 end
+ if fields.track9 then music_player_current_track=9 end
+ meta:set_float("music_player_current_track",music_player_current_track)
+ if fields.play and player_on==1 then
+ if music_handle then minetest.sound_stop(music_handle) end
+ music_handle=minetest.sound_play("technic_track"..music_player_current_track, {pos = pos, gain = 1.0,loop = true, max_hear_distance = 72,})
+ meta:set_float("music_playing",1)
+ end
+ if fields.stop then
+ meta:set_float("music_playing",0)
+ if music_handle then minetest.sound_stop(music_handle) end
+ end
+ meta:set_float("music_handle",music_handle)
+ end,
+})
+
+minetest.register_abm({
+ nodenames = {"technic:music_player"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+ local meta = minetest.env:get_meta(pos)
+ local charge= meta:get_float("internal_EU_buffer")
+ local max_charge= meta:get_float("internal_EU_buffer_size")
+ player_on=meta:get_float("music_player_on")
+ music_player_current_track=meta:get_float("music_player_current_track")
+ local play_cost=80
+
+ if charge>play_cost then
+ if meta:get_float("music_playing")==1 then charge=charge-play_cost end
+ meta:set_float("internal_EU_buffer",charge)
+ meta:set_float("music_player_on",1)
+ else
+ meta:set_float("music_playing",0)
+ meta:set_float("music_player_on",0)
+ if music_handle then minetest.sound_stop(music_handle) end
+ end
+ local load = math.floor((charge/max_charge)*100)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "label[0,0;Music Player]"..
+ "label[1,3;Power level]"..
+ "button[4,1;1,1;track1;1]"..
+ "button[5,1;1,1;track2;2]"..
+ "button[6,1;1,1;track3;3]"..
+ "button[4,2;1,1;track4;4]"..
+ "button[5,2;1,1;track5;5]"..
+ "button[6,2;1,1;track6;6]"..
+ "button[4,3;1,1;track7;7]"..
+ "button[5,3;1,1;track8;8]"..
+ "button[6,3;1,1;track9;9]"..
+ "button[4,4;1,2;play;Play]"..
+ "button[6,4;1,2;stop;Stop]"..
+ "label[4,0;Current track "..tostring(music_player_current_track).."]"
+
+ )
+
+
+
+
+ end
+})
+
--- /dev/null
+minetest.register_craft({
+ output = 'technic:nodebreaker_off 1',
+ recipe = {
+ {'default:wood', 'default:pick_mese','default:wood'},
+ {'default:stone', 'mesecons:piston','default:stone'},
+ {'default:stone', 'mesecons:mesecon','default:stone'},
+
+ }
+})
+
+minetest.register_node("technic:nodebreaker_off", {
+ description = "Node Breaker",
+ tile_images = {"technic_nodebreaker_top_off.png","technic_nodebreaker_bottom_off.png","technic_nodebreaker_side2_off.png","technic_nodebreaker_side1_off.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,tubedevice=1},
+ sounds = default.node_sound_stone_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ end,
+
+})
+
+minetest.register_node("technic:nodebreaker_on", {
+ description = "Node Breaker",
+ tile_images = {"technic_nodebreaker_top_on.png","technic_nodebreaker_bottom_on.png","technic_nodebreaker_side2_on.png","technic_nodebreaker_side1_on.png",
+ "technic_nodebreaker_back.png","technic_nodebreaker_front_on.png"},
+ is_ground_content = true,
+ paramtype2 = "facedir",
+ tubelike=1,
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2,tubedevice=1,not_in_creative_inventory=1},
+ 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-
+ local x_velocity=0
+ local z_velocity=0
+
+ if n_param==3 then pos2.x=pos2.x+1 pos1.x=pos1.x-1 x_velocity=-1 end
+ if n_param==2 then pos2.z=pos2.z+1 pos1.z=pos1.z-1 z_velocity=-1 end
+ if n_param==1 then pos2.x=pos2.x-1 pos1.x=pos1.x+1 x_velocity=1 end
+ if n_param==0 then pos2.z=pos2.z-1 pos1.x=pos1.z+1 z_velocity=1 end
+
+ local node=minetest.env:get_node(pos2)
+ local meta = minetest.env:get_meta(pos1)
+ tubelike=meta:get_int("tubelike")
+ --if tubelike==1 then
+ 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
+ local item1=tube_item({x=pos.x,y=pos.y,z=pos.z},dropped_item)
+ item1:get_luaentity().start_pos = {x=pos.x,y=pos.y,z=pos.z}
+ item1:setvelocity({x=x_velocity, y=0, z=z_velocity})
+ item1:setacceleration({x=0, y=0, z=0})
+-- minetest.item_drop(dropped_item, "", pos1)
+ end
+ minetest.env:remove_node(pos2)
+ --end
+end
+
--- /dev/null
+minetest.register_node( "technic:marble", {
+ description = "Marble",
+ tiles = { "technic_marble.png" },
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node( "technic:marble_bricks", {
+ description = "Marble Bricks",
+ tiles = { "technic_marble_bricks.png" },
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_craft({
+ output = 'technic:marble_bricks 4',
+ recipe = {
+ {'technic:marble','technic:marble'},
+ {'technic:marble','technic:marble'}
+ }
+})
+
+minetest.register_node( "technic:granite", {
+ description = "Granite",
+ tiles = { "technic_granite.png" },
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node( "technic:obsidian", {
+ description = "Obsidian",
+ tiles = { "technic_obsidian.png" },
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+stairsplus.register_stair_and_slab_and_panel_and_micro("marble", "technic:marble",
+ {cracky=3},
+ {"technic_marble.png"},
+ "Marble Stairs",
+ "Marble Slab",
+ "Marble Panel",
+ "Marble Microblock",
+ "marble")
+stairsplus.register_stair_and_slab_and_panel_and_micro("marble_bricks", "technic:marble_bricks",
+ {cracky=3},
+ {"technic_marble_bricks.png"},
+ "Marble Bricks Stairs",
+ "Marble Bricks Slab",
+ "Marble Bricks Panel",
+ "Marble Bricks Microblock",
+ "marble_bricks")
+stairsplus.register_stair_and_slab_and_panel_and_micro("granite", "technic:granite",
+ {cracky=3},
+ {"technic_granite.png"},
+ "Granite Stairs",
+ "Granite Slab",
+ "Granite Panel",
+ "Granite Microblock",
+ "granite")
+stairsplus.register_stair_and_slab_and_panel_and_micro("obsidian", "technic:obsidian",
+ {cracky=3},
+ {"technic_obsidian.png"},
+ "Obsidian Stairs",
+ "Obsidian Slab",
+ "Obsidian Panel",
+ "Obsidian Microblock",
+ "obsidian")
+
+minetest.register_node( "technic:mineral_diamond", {
+ description = "Diamond Ore",
+ tiles = { "default_stone.png^technic_mineral_diamond.png" },
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_stone_defaults(),
+ drop = 'craft "technic:diamond" 1',
+})
+
+minetest.register_craftitem( "technic:diamond", {
+ description = "Diamond",
+ inventory_image = "technic_diamond.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_node( "technic:mineral_uranium", {
+ description = "Uranium Ore",
+ tiles = { "default_stone.png^technic_mineral_uranium.png" },
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_stone_defaults(),
+ drop = 'craft "technic:uranium" 1',
+})
+
+minetest.register_craftitem( "technic:uranium", {
+ description = "Uranium",
+ inventory_image = "technic_uranium.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_node( "technic:mineral_chromium", {
+ description = "Chromium Ore",
+ tiles = { "default_stone.png^technic_mineral_chromium.png" },
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_stone_defaults(),
+ drop = 'craft "technic:chromium_lump" 1',
+})
+
+minetest.register_craftitem( "technic:chromium_lump", {
+ description = "Chromium Lump",
+ inventory_image = "technic_chromium_lump.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craftitem( "technic:chromium_ingot", {
+ description = "Chromium Ingot",
+ inventory_image = "technic_chromium_ingot.png",
+ on_place_on_ground = minetest.craftitem_place_item,
+})
+
+minetest.register_craft({
+ type = 'cooking',
+ output = "technic:chromium_ingot",
+ recipe = "technic:chromium_lump"
+ })
+
+
+minetest.register_node( "technic:mineral_zinc", {
+ description = "Zinc Ore",
+ tile_images = { "default_stone.png^technic_mineral_zinc.png" },
+ is_ground_content = true,
+ groups = {cracky=3},
+ sounds = default.node_sound_stone_defaults(),
+ drop = 'craft "technic:zinc_lump" 1',
+})
+
+minetest.register_craftitem( "technic:zinc_lump", {
+ description = "Zinc Lump",
+ inventory_image = "technic_zinc_lump.png",
+})
+
+minetest.register_craftitem( "technic:zinc_ingot", {
+ description = "Zinc Ingot",
+ inventory_image = "technic_zinc_ingot.png",
+})
+
+minetest.register_craftitem( "technic:stainless_steel_ingot", {
+ description = "Stainless Steel Ingot",
+ inventory_image = "technic_stainless_steel_ingot.png",
+})
+
+minetest.register_craftitem( "technic:brass_ingot", {
+ description = "Brass Ingot",
+ inventory_image = "technic_brass_ingot.png",
+})
+
+minetest.register_craft({
+ type = 'cooking',
+ output = "technic:zinc_ingot",
+ recipe = "technic:zinc_lump"
+ })
+
+
+local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, ore_per_chunk, height_min, height_max)
+ if maxp.y < height_min or minp.y > height_max then
+ return
+ end
+ local y_min = math.max(minp.y, height_min)
+ local y_max = math.min(maxp.y, height_max)
+ local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1)
+ local pr = PseudoRandom(seed)
+ local num_chunks = math.floor(chunks_per_volume * volume)
+ local chunk_size = 3
+ if ore_per_chunk <= 4 then
+ chunk_size = 2
+ end
+ local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk)
+ --print("generate_ore num_chunks: "..dump(num_chunks))
+ for i=1,num_chunks do
+ if (y_max-chunk_size+1 <= y_min) then return end
+ local y0 = pr:next(y_min, y_max-chunk_size+1)
+ if y0 >= height_min and y0 <= height_max then
+ local x0 = pr:next(minp.x, maxp.x-chunk_size+1)
+ local z0 = pr:next(minp.z, maxp.z-chunk_size+1)
+ local p0 = {x=x0, y=y0, z=z0}
+ for x1=0,chunk_size-1 do
+ for y1=0,chunk_size-1 do
+ for z1=0,chunk_size-1 do
+ if pr:next(1,inverse_chance) == 1 then
+ local x2 = x0+x1
+ local y2 = y0+y1
+ local z2 = z0+z1
+ local p2 = {x=x2, y=y2, z=z2}
+ if minetest.env:get_node(p2).name == wherein then
+ minetest.env:set_node(p2, {name=name})
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ --print("generate_ore done")
+end
+
+minetest.register_on_generated(function(minp, maxp, seed)
+generate_ore("technic:mineral_diamond", "default:stone", minp, maxp, seed+21, 1/11/11/11, 4, -31000, -450)
+generate_ore("technic:mineral_uranium", "default:stone", minp, maxp, seed+22, 1/10/10/10, 3, -300, -80)
+generate_ore("technic:mineral_chromium", "default:stone", minp, maxp, seed+23, 1/10/10/10, 2, -31000, -100)
+generate_ore("technic:mineral_zinc", "default:stone", minp, maxp, seed+24, 1/9/9/9, 4, -31000, 2)
+generate_ore("technic:marble", "default:stone", minp, maxp, seed+25, 1/128, 20, -100, -32)
+generate_ore("technic:granite", "default:stone", minp, maxp, seed+25, 1/128, 15, -190, -90)
+generate_stratus("technic:obsidian",
+ {"default:stone"},
+ {"default:lava_source"},{"default:air"},
+ minp, maxp, seed+4, 10, 25, 7, -450, -31000, -450)
+end)
+
+function generate_stratus(name, wherein, ceilin, ceil, minp, maxp, seed, stratus_chance, radius, radius_y, deep, height_min, height_max)
+ if maxp.y < height_min or minp.y > height_max then
+ return
+ end
+ -- it will be only generate a stratus for every 100 m of area
+ local stratus_per_volume=1
+ local area=45
+ local y_min = math.max(minp.y, height_min)
+ local y_max = math.min(maxp.y, height_max)
+ local volume = ((maxp.x-minp.x+1)/area)*((y_max-y_min+1)/area)*((maxp.z-minp.z+1)/area)
+ local pr = PseudoRandom(seed)
+ local blocks = math.floor(stratus_per_volume*volume)
+ print(" <<"..dump(name)..">>");
+ if blocks == 0 then
+ blocks = 1
+ end
+ print(" blocks: "..dump(blocks).." in vol: "..dump(volume).." ("..dump(maxp.x-minp.x+1)..","..dump(y_max-y_min+1)..","..dump(maxp.z-minp.z+1)..")")
+ for i=1,blocks do
+ local x = pr:next(1,stratus_chance)
+ if x == 1 then
+ -- TODO deep
+ local y0=y_max-radius_y+1
+ if y0 < y_min then
+ y0=y_min
+ else
+ y0=pr:next(y_min, y0)
+ end
+ local x0 = maxp.x-radius+1
+ if x0 < minp.x then
+ x0 = minp.x
+ else
+ x0 = pr:next(minp.x, x0)
+ end
+ local z0 = maxp.z-radius+1
+ if z0 < minp.z then
+ x0 = minp.z
+ else
+ z0 = pr:next(minp.z, z0)
+ end
+ local p0 = {x=x0, y=y0, z=z0}
+ local n = minetest.env:get_node(p0).name
+ local i = 0
+ --print(" upper node "..n)
+ x = 0
+ for k, v in ipairs(ceilin) do
+ if n == v then
+ x = 1
+ break
+ end
+ end
+ if x == 1 then
+ -- search for the node to replace
+ --print(" Searching nodes to replace from "..dump(y0-1).." to "..dump(y_min))
+ for y1=y0-1,y_min,-1 do
+ p0.y=y1
+ n = minetest.env:get_node(p0).name
+ x = 0
+ for k, v in ipairs(wherein) do
+ if n == v then
+ x = 1
+ break
+ end
+ end
+ if x == 1 then
+ y0=y1-deep
+ if y0 < y_min then
+ y0 = y_min
+ end
+ break
+ end
+ end
+ local rx=pr:next(radius/2,radius)+1
+ local rz=pr:next(radius/2,radius)+1
+ local ry=pr:next(radius_y/2,radius_y)+1
+ --print(" area of generation ("..dump(rx)..","..dump(rz)..","..dump(ry)..")")
+ for x1=0,rx do
+ rz = rz + 3 - pr:next(1,6)
+ if rz < 1 then
+ rz = 1
+ end
+ for z1=pr:next(1,3),rz do
+ local ry0=ry+ pr:next(1,3)
+ for y1=pr:next(1,3),ry0 do
+ local x2 = x0+x1
+ local y2 = y0+y1
+ local z2 = z0+z1
+ local p2 = {x=x2, y=y2, z=z2}
+ n = minetest.env:get_node(p2).name
+ x = 0
+ for k, v in ipairs(wherein) do
+ if n == v then
+ x = 1
+ break
+ end
+ end
+ if x == 1 then
+ if ceil == nil then
+ minetest.env:set_node(p2, {name=name})
+ i = i +1
+ else
+ local p3 = {p2.x,p2.y+1,p2}
+ if minetest.env:get_node(p3).name == ceil then
+ minetest.env:set_node(p2, {name=name})
+ i = i +1
+ end
+ end
+ end
+ end
+ end
+ end
+ print(" generated "..dump(i).." blocks in ("..dump(x0)..","..dump(y0)..","..dump(z0)..")")
+ end
+
+ end
+ end
+ --print("generate_ore done")
+end
\ No newline at end of file
--- /dev/null
+minetest.register_craft({
+ output = 'technic:project_table 1',
+ recipe = {
+ {'default:wood','default:wood','default:wood'},
+ {'default:wood','default:chest','default:wood'},
+ {'default:stone','default:stone','default:stone'},
+ }
+})
+
+
+minetest.register_craftitem("technic:project_table", {
+ description = "Project Table",
+ stack_max = 99,
+})
+
+minetest.register_node("technic:project_table", {
+ description = "Project Table",
+ tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png",
+ "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_front.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[9,9;]"..
+ "list[current_name;main;0,2;8,2;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Iron Chest")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 8*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+})
\ No newline at end of file
--- /dev/null
+-- Code of rubber tree by PilzAdam
+
+minetest.register_node("technic:rubber_sapling", {
+ description = "Rubber Tree Sapling",
+ drawtype = "plantlike",
+ tiles = {"technic_rubber_sapling.png"},
+ inventory_image = "technic_rubber_sapling.png",
+ wield_image = "technic_rubber_sapling.png",
+ paramtype = "light",
+ walkable = false,
+ groups = {dig_immediate=3,flammable=2},
+ sounds = default.node_sound_defaults(),
+})
+
+minetest.register_node("technic:rubber_tree_full", {
+ description = "Rubber Tree",
+ tiles = {"default_tree_top.png", "default_tree_top.png", "technic_rubber_tree_full.png"},
+ groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
+ drop = "default:tree",
+ sounds = default.node_sound_wood_defaults(),
+
+ on_dig = function(pos, node, digger)
+ minetest.node_dig(pos, node, digger)
+ minetest.env:remove_node(pos)
+ end,
+
+ after_destruct = function(pos, oldnode)
+ oldnode.name = "technic:rubber_tree_empty"
+ minetest.env:set_node(pos, oldnode)
+ end
+})
+
+
+minetest.register_node("technic:rubber_tree_empty", {
+ tiles = {"default_tree_top.png", "default_tree_top.png", "technic_rubber_tree_empty.png"},
+ groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2, not_in_creative_inventory=1},
+ drop = "default:tree",
+ sounds = default.node_sound_wood_defaults(),
+})
+
+minetest.register_abm({
+ nodenames = {"technic:rubber_tree_empty"},
+ interval = 60,
+ chance = 15,
+ action = function(pos, node)
+ node.name = "technic:rubber_tree_full"
+ minetest.env:set_node(pos, node)
+ end
+})
+
+minetest.register_node("technic:rubber_leaves", {
+ drawtype = "allfaces_optional",
+ visual_scale = 1.3,
+ tiles = {"default_leaves.png"},
+ paramtype = "light",
+ groups = {snappy=3, leafdecay=3, flammable=2, not_in_creative_inventory=1},
+ drop = {
+ max_items = 1,
+ items = {
+ {
+ items = {'technic:rubber_sapling'},
+ rarity = 20,
+ },
+ }
+ },
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+minetest.register_abm({
+ nodenames = {"technic:rubber_sapling"},
+ interval = 60,
+ chance = 20,
+ action = function(pos, node)
+ generate_tree(pos, "technic:rubber_tree_full", "technic:rubber_leaves", {"default:dirt", "default:dirt_with_grass"})
+ end
+})
+
+minetest.register_on_generated(function(minp, maxp, blockseed)
+ if math.random(1, 100) > 5 then
+ return
+ end
+ local tmp = {x=(maxp.x-minp.x)/2+minp.x, y=(maxp.y-minp.y)/2+minp.y, z=(maxp.z-minp.z)/2+minp.z}
+ local pos = minetest.env:find_node_near(tmp, maxp.x-minp.x, {"default:dirt_with_grass"})
+ if pos ~= nil then
+ generate_tree({x=pos.x, y=pos.y+1, z=pos.z}, "technic:rubber_tree_full", "technic:rubber_leaves", {"default:dirt", "default:dirt_with_grass"})
+ end
+end)
+
+
+-- ========= FUEL =========
+minetest.register_craft({
+ type = "fuel",
+ recipe = "technic:rubber_sapling",
+ burntime = 10
+})
+
+function generate_tree(pos, trunk, leaves, underground, replacements)
+ pos.y = pos.y-1
+ local nodename = minetest.env:get_node(pos).name
+ local ret = true
+ for _,name in ipairs(underground) do
+ if nodename == name then
+ ret = false
+ break
+ end
+ end
+ pos.y = pos.y+1
+ if ret or minetest.env:get_node_light(pos) < 8 then
+ return
+ end
+
+ node = {name = ""}
+ for dy=1,4 do
+ pos.y = pos.y+dy
+ if minetest.env:get_node(pos).name ~= "air" then
+ return
+ end
+ pos.y = pos.y-dy
+ end
+ node.name = trunk
+ for dy=0,4 do
+ pos.y = pos.y+dy
+ minetest.env:set_node(pos, node)
+ pos.y = pos.y-dy
+ end
+
+ if not replacements then
+ replacements = {}
+ end
+
+ node.name = leaves
+ pos.y = pos.y+3
+ for dx=-2,2 do
+ for dz=-2,2 do
+ for dy=0,3 do
+ pos.x = pos.x+dx
+ pos.y = pos.y+dy
+ pos.z = pos.z+dz
+
+ if dx == 0 and dz == 0 and dy==3 then
+ if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
+ minetest.env:set_node(pos, node)
+ for name,rarity in pairs(replacements) do
+ if math.random(1, rarity) == 1 then
+ minetest.env:set_node(pos, {name=name})
+ end
+ end
+ end
+ elseif dx == 0 and dz == 0 and dy==4 then
+ if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
+ minetest.env:set_node(pos, node)
+ for name,rarity in pairs(replacements) do
+ if math.random(1, rarity) == 1 then
+ minetest.env:set_node(pos, {name=name})
+ end
+ end
+ end
+ elseif math.abs(dx) ~= 2 and math.abs(dz) ~= 2 then
+ if minetest.env:get_node(pos).name == "air" then
+ minetest.env:set_node(pos, node)
+ for name,rarity in pairs(replacements) do
+ if math.random(1, rarity) == 1 then
+ minetest.env:set_node(pos, {name=name})
+ end
+ end
+ end
+ else
+ if math.abs(dx) ~= 2 or math.abs(dz) ~= 2 then
+ if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
+ minetest.env:set_node(pos, node)
+ for name,rarity in pairs(replacements) do
+ if math.random(1, rarity) == 1 then
+ minetest.env:set_node(pos, {name=name})
+ end
+ end
+ end
+ end
+ end
+
+ pos.x = pos.x-dx
+ pos.y = pos.y-dy
+ pos.z = pos.z-dz
+ end
+ end
+ end
+end
--- /dev/null
+ 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 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)
+ 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
+ else
+ return itemstack
+ end
+ end,
+ })
+
+ minetest.register_craft({
+ output = "technic:screwdriver",
+ recipe = {
+ {"technic:stainless_steel_ingot"},
+ {"default:stick"}
+ }
+ })
--- /dev/null
+minetest.register_craft({
+ output = 'technic:silver_chest 1',
+ recipe = {
+ {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
+ {'moreores:silver_ingot','technic:copper_chest','moreores:silver_ingot'},
+ {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:silver_locked_chest 1',
+ recipe = {
+ {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
+ {'moreores:silver_ingot','technic:copper_locked_chest','moreores:silver_ingot'},
+ {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:silver_locked_chest 1',
+ recipe = {
+ {'default:steel_ingot'},
+ {'technic:silver_chest'},
+ }
+})
+
+minetest.register_craftitem("technic:silver_chest", {
+ description = "Silver Chest",
+ stack_max = 99,
+})
+minetest.register_craftitem("technic:silver_locked_chest", {
+ description = "Silver Locked Chest",
+ stack_max = 99,
+})
+
+minetest.register_node("technic:silver_chest", {
+ description = "Silver Chest",
+ tiles = {"technic_silver_chest_top.png", "technic_silver_chest_top.png", "technic_silver_chest_side.png",
+ "technic_silver_chest_side.png", "technic_silver_chest_side.png", "technic_silver_chest_front.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[11,9;]"..
+ "list[current_name;main;0,0;11,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Silver Chest")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 11*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+
+ on_punch = function (pos, node, puncher)
+ local meta = minetest.env:get_meta(pos);
+ meta:set_string("formspec", "hack:sign_text_input")
+ end,
+
+ on_receive_fields = function(pos, formname, fields, sender)
+ local meta = minetest.env:get_meta(pos);
+ fields.text = fields.text or ""
+ meta:set_string("text", fields.text)
+ meta:set_string("infotext", '"'..fields.text..'"')
+
+ meta:set_string("formspec",
+ "invsize[11,9;]"..
+ "list[current_name;main;0,0;11,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ end,
+
+ on_metadata_inventory_move = function(pos, from_list, from_index,
+ to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_move_allow_all(
+ pos, from_list, from_index, to_list, to_index, count, player)
+ end,
+ on_metadata_inventory_offer = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to chest at "..minetest.pos_to_string(pos))
+ return minetest.node_metadata_inventory_offer_allow_all(
+ pos, listname, index, stack, player)
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from chest at "..minetest.pos_to_string(pos))
+ end,
+
+})
+
+local function has_locked_chest_privilege(meta, player)
+ if player:get_player_name() ~= meta:get_string("owner") then
+ return false
+ end
+ return true
+end
+
+minetest.register_node("technic:silver_locked_chest", {
+ description = "Silver Locked Chest",
+ tiles = {"technic_silver_chest_top.png", "technic_silver_chest_top.png", "technic_silver_chest_side.png",
+ "technic_silver_chest_side.png", "technic_silver_chest_side.png", "technic_silver_chest_locked.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ after_place_node = function(pos, placer)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("owner", placer:get_player_name() or "")
+ meta:set_string("infotext", "Silver Locked Chest (owned by "..
+ meta:get_string("owner")..")")
+ end,
+on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("formspec",
+ "invsize[11,9;]"..
+ "list[current_name;main;0,0;11,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ meta:set_string("infotext", "Silver Locked Chest")
+ meta:set_string("owner", "")
+ local inv = meta:get_inventory()
+ inv:set_size("main", 11*4)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ return inv:is_empty("main")
+ end,
+
+ on_punch = function (pos, node, puncher)
+ local meta = minetest.env:get_meta(pos);
+ meta:set_string("formspec", "hack:sign_text_input")
+ end,
+
+ on_receive_fields = function(pos, formname, fields, sender)
+ local meta = minetest.env:get_meta(pos);
+ fields.text = fields.text or ""
+ meta:set_string("text", fields.text)
+ meta:set_string("infotext", '"'..fields.text..'"')
+
+ meta:set_string("formspec",
+ "invsize[11,9;]"..
+ "list[current_name;main;0,0;11,4;]"..
+ "list[current_player;main;0,5;8,4;]")
+ end,
+
+ allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return count
+ end,
+ allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ allow_metadata_inventory_take = function(pos, listname, index, stack, player)
+ local meta = minetest.env:get_meta(pos)
+ if not has_locked_chest_privilege(meta, player) then
+ minetest.log("action", player:get_player_name()..
+ " tried to access a locked chest belonging to "..
+ meta:get_string("owner").." at "..
+ minetest.pos_to_string(pos))
+ return 0
+ end
+ return stack:get_count()
+ end,
+ on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff in locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_put = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " moves stuff to locked chest at "..minetest.pos_to_string(pos))
+ end,
+ on_metadata_inventory_take = function(pos, listname, index, stack, player)
+ minetest.log("action", player:get_player_name()..
+ " takes stuff from locked chest at "..minetest.pos_to_string(pos))
+ end,
+})
--- /dev/null
+minetest.register_node("technic:solar_panel", {
+ tiles = {"technic_solar_panel_top.png", "technic_solar_panel_bottom.png", "technic_solar_panel_side.png",
+ "technic_solar_panel_side.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ sounds = default.node_sound_wood_defaults(),
+ description="Solar Panel",
+ active = false,
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ internal_EU_buffer_size=1000;
+ drawtype = "nodebox",
+ paramtype = "light",
+ is_ground_content = true,
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+ },
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_float("technic_power_machine", 1)
+ meta:set_float("internal_EU_buffer", 0)
+ meta:set_float("internal_EU_buffer_size", 1000)
+
+ meta:set_string("infotext", "Solar Panel")
+ meta:set_float("active", false)
+ end,
+})
+
+minetest.register_craft({
+ output = 'technic:solar_panel 1',
+ recipe = {
+ {'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer','technic:doped_silicon_wafer'},
+ {'technic:doped_silicon_wafer', 'moreores:copper_ingot','technic:doped_silicon_wafer'},
+ {'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer','technic:doped_silicon_wafer'},
+
+ }
+})
+
+minetest.register_abm(
+ {nodenames = {"technic:solar_panel"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+
+ local pos1={}
+ pos1.y=pos.y+1
+ pos1.x=pos.x
+ pos1.z=pos.z
+
+ local light = minetest.env:get_node_light(pos1, nil)
+ local meta = minetest.env:get_meta(pos)
+ if light == nil then light = 0 end
+ if light >= 12 then
+ meta:set_string("infotext", "Solar Panel is active ")
+ meta:set_float("active",1)
+ local internal_EU_buffer=meta:get_float("internal_EU_buffer")
+ local internal_EU_buffer_size=meta:get_float("internal_EU_buffer_size")
+ local charge_to_give=40+(pos1.y/250*40) -- make solar energy depending on height
+ if charge_to_give<0 then charge_to_give=0 end
+ if charge_to_give>160 then charge_to_give=160 end
+ if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
+ charge_to_give=internal_EU_buffer_size-internal_EU_buffer
+ end
+ internal_EU_buffer=internal_EU_buffer+charge_to_give
+ meta:set_float("internal_EU_buffer",internal_EU_buffer)
+
+ else
+ meta:set_string("infotext", "Solar Panel is inactive");
+ meta:set_float("active",0)
+ end
+ end,
+})
\ No newline at end of file
--- /dev/null
+minetest.register_node("technic:solar_panel_mv", {
+ tiles = {"technic_mv_solar_panel_top.png", "technic_mv_solar_panel_bottom.png", "technic_mv_solar_panel_side.png",
+ "technic_mv_solar_panel_side.png", "technic_mv_solar_panel_side.png", "technic_mv_solar_panel_side.png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ sounds = default.node_sound_wood_defaults(),
+ description="MV Solar Panel",
+ active = false,
+ technic_mv_power_machine=1,
+ internal_EU_buffer=0;
+ internal_EU_buffer_size=10000;
+ drawtype = "nodebox",
+ paramtype = "light",
+ is_ground_content = true,
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+ },
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_float("technic_mv_power_machine", 1)
+ meta:set_float("internal_EU_buffer", 0)
+ meta:set_float("internal_EU_buffer_size", 10000)
+
+ meta:set_string("infotext", "MV Solar Panel")
+ meta:set_float("active", false)
+ end,
+})
+
+minetest.register_craft({
+ output = 'technic:solar_panel_mv 1',
+ recipe = {
+ {'technic:solar_panel', 'technic:solar_panel','technic:solar_panel'},
+ {'technic:solar_panel', 'technic:mv_transformer','technic:solar_panel'},
+ {'', 'technic:mv_cable',''},
+
+ }
+})
+
+minetest.register_abm(
+ {nodenames = {"technic:solar_panel_mv"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+
+ local pos1={}
+ pos1.y=pos.y+1
+ pos1.x=pos.x
+ pos1.z=pos.z
+
+ local light = minetest.env:get_node_light(pos1, nil)
+ local meta = minetest.env:get_meta(pos)
+ if light == nil then light = 0 end
+ if light >= 14 then
+ meta:set_string("infotext", "Solar Panel is active ")
+ meta:set_float("active",1)
+ local internal_EU_buffer=meta:get_float("internal_EU_buffer")
+ local internal_EU_buffer_size=meta:get_float("internal_EU_buffer_size")
+ local charge_to_give=300+(pos1.y/250*300) -- make solar energy depending on height
+ if charge_to_give<0 then charge_to_give=0 end
+ if charge_to_give>600 then charge_to_give=600 end
+ if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
+ charge_to_give=internal_EU_buffer_size-internal_EU_buffer
+ end
+ internal_EU_buffer=internal_EU_buffer+charge_to_give
+ meta:set_float("internal_EU_buffer",internal_EU_buffer)
+
+ else
+ meta:set_string("infotext", "Solar Panel is inactive");
+ meta:set_float("active",0)
+ end
+ end,
+})
\ No newline at end of file
--- /dev/null
+sonic_screwdriver_max_charge=15000
+
+ 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 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()
+ if item["metadata"]=="" or item["metadata"]=="0" then return end
+ local charge=tonumber((item["metadata"]))
+ if charge-100>0 then
+ minetest.sound_play("technic_sonic_screwdriver", {pos = pos, gain = 0.3, 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;
+ item["metadata"]=tostring(charge)
+ set_RE_wear(item,charge,sonic_screwdriver_max_charge)
+ itemstack:replace(item)
+ end
+ return itemstack
+ else
+ return itemstack
+ end
+ end,
+
+ })
+
+ minetest.register_craft({
+ output = "technic:sonic_screwdriver",
+ recipe = {
+ {"technic:diamond"},
+ {"technic:battery"},
+ {"technic:stainless_steel_ingot"}
+ }
+ })
--- /dev/null
+minetest.register_node("technic:tetris_machine_node1", {
+ tiles = {"tetris_machine_top.png", "technic_mv_battery_box_bottom.png", "tetris_machine_front1.png",
+ "tetris_machine_side1B.png", "tetris_machine_side1P.png", "tetris_machine_side1L.png"},
+ tile_images = {"technic_tetris_machine.png",},
+ is_ground_content = true,
+ groups = {cracky=1},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("technic:tetris_machine_node2", {
+ tiles = {"tetris_machine_top.png", "technic_mv_battery_box_bottom.png", "tetris_machine_front2.png",
+ "tetris_machine_side2B.png", "tetris_machine_side2P.png", "tetris_machine_side2L.png"},
+ tile_images = {"technic_tetris_machine.png",},
+ is_ground_content = true,
+ groups = {cracky=1},
+ sounds = default.node_sound_stone_defaults(),
+})
--- /dev/null
+minetest.register_alias("tool_workshop", "technic:tool_workshop")
+minetest.register_craft({
+ output = 'technic:tool_workshop',
+ recipe = {
+ {'default:wood', 'default:wood', 'default:wood'},
+ {'default:wood', 'technic:diamond', 'default:wood'},
+ {'default:stone', 'moreores:copper_ingot', 'default:stone'},
+ }
+})
+
+minetest.register_craftitem("technic:tool_workshop", {
+ description = "Tool Workshop",
+ stack_max = 99,
+})
+
+workshop_formspec =
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "label[0,0;Tool Workshop]"..
+ "label[1,3;Power level]"..
+ "list[current_player;main;0,5;8,4;]"
+
+minetest.register_node("technic:tool_workshop", {
+ description = "Tool Workshop",
+ tiles = {"technic_workshop_top.png", "technic_machine_bottom.png", "technic_workshop_side.png",
+ "technic_workshop_side.png", "technic_workshop_side.png", "technic_workshop_side.png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ sounds = default.node_sound_wood_defaults(),
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ internal_EU_buffer_size=2000;
+
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("infotext", "Tool Workshop")
+ meta:set_float("technic_power_machine", 1)
+ meta:set_float("internal_EU_buffer", 1)
+ meta:set_float("internal_EU_buffer_size", 2000)
+ meta:set_string("formspec", workshop_formspec)
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+minetest.register_abm({
+ nodenames = {"technic:tool_workshop"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+ local meta = minetest.env:get_meta(pos)
+ local charge= meta:get_float("internal_EU_buffer")
+ local max_charge= meta:get_float("internal_EU_buffer_size")
+ local load_step=2000
+ local load_cost=200
+ local inv = meta:get_inventory()
+ if inv:is_empty("src")==false then
+ srcstack = inv:get_stack("src", 1)
+ src_item=srcstack:to_table()
+ local load1=tonumber((src_item["wear"]))
+ if charge>load_cost then
+ if load1>1 then
+ if load1-load_step<0 then load_step=load1 load1=1
+ else load1=load1-load_step end
+ charge=charge-load_cost
+ src_item["wear"]=tostring(load1)
+ inv:set_stack("src", 1, src_item)
+ end
+ end
+ end
+
+ meta:set_float("internal_EU_buffer",charge)
+
+
+ local load = math.floor((charge/max_charge)*100)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "label[0,0;Tool Workshop]"..
+ "label[1,3;Power level]"..
+ "list[current_player;main;0,5;8,4;]")
+ end
+})
\ No newline at end of file
--- /dev/null
+ minetest.register_tool("technic:treetap", {
+ description = "Tree Tap",
+ inventory_image = "technic_tree_tap.png",
+ on_use = function(itemstack,user,pointed_thing)
+ if pointed_thing.type~="node" then return end
+ if user:get_inventory():room_for_item("main",ItemStack("technic:raw_latex")) then
+ local pos=minetest.get_pointed_thing_position(pointed_thing,above)
+ local node=minetest.env:get_node(pos)
+ local node_name=node.name
+ if node_name == "farming_plus:rubber_tree_full" or node_name == "farming:rubber_tree_full" or node_name == "technic:rubber_tree_full" then
+ user:get_inventory():add_item("main",ItemStack("technic:raw_latex"))
+ minetest.env:set_node(pos,node)
+ 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
+ else return end
+ end,
+ })
+
+ minetest.register_craft({
+ output = "technic:treetap",
+ recipe = {
+ {"pipeworks:tube", "default:wood", "default:stick"},
+ {"", "default:stick", "default:stick"}
+ },
+ })
+
+ minetest.register_craftitem("technic:raw_latex", {
+ description = "Raw Latex",
+ inventory_image = "technic_raw_latex.png",
+ })
+
+ minetest.register_craft({
+ type = "cooking",
+ output = "technic:rubber",
+ recipe = "technic:raw_latex",
+ })
+
+ minetest.register_craftitem("technic:rubber", {
+ description = "Rubber Fiber",
+ inventory_image = "technic_rubber.png",
+ })
--- /dev/null
+minetest.register_alias("battery", "technic:battery")
+minetest.register_alias("battery_box", "technic:battery_box")
+minetest.register_alias("electric_furnace", "technic:electric_furnace")
+
+
+minetest.register_craft({
+ output = 'technic:battery 1',
+ recipe = {
+ {'default:wood', 'moreores:copper_ingot', 'default:wood'},
+ {'default:wood', 'moreores:tin_ingot', 'default:wood'},
+ {'default:wood', 'moreores:copper_ingot', 'default:wood'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:battery_box 1',
+ recipe = {
+ {'technic:battery', 'default:wood', 'technic:battery'},
+ {'technic:battery', 'moreores:copper_ingot', 'technic:battery'},
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+ }
+})
+
+minetest.register_craft({
+ output = 'technic:electric_furnace',
+ recipe = {
+ {'default:brick', 'default:brick', 'default:brick'},
+ {'default:brick', '', 'default:brick'},
+ {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
+ }
+})
+
+
+--minetest.register_craftitem("technic:battery", {
+-- description = "Recharcheable battery",
+-- inventory_image = "technic_battery.png",
+-- stack_max = 1,
+--})
+
+minetest.register_tool("technic:battery",
+{description = "RE Battery",
+inventory_image = "technic_battery.png",
+energy_charge = 0,
+tool_capabilities = {max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}})
+
+minetest.register_craftitem("technic:battery_box", {
+ description = "Battery box",
+ stack_max = 99,
+})
+
+
+
+battery_box_formspec =
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "image[4,1;1,1;technic_battery_reload.png]"..
+ "list[current_name;dst;5,1;1,1;]"..
+ "label[0,0;Battery box]"..
+ "label[3,0;Charge]"..
+ "label[5,0;Discharge]"..
+ "label[1,3;Power level]"..
+ "list[current_player;main;0,5;8,4;]"
+
+minetest.register_node("technic:battery_box", {
+ description = "Battery box",
+ tiles = {"technic_battery_box_top.png", "technic_battery_box_bottom.png", "technic_battery_box_side.png",
+ "technic_battery_box_side.png", "technic_battery_box_side.png", "technic_battery_box_side.png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ sounds = default.node_sound_wood_defaults(),
+ technic_power_machine=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("infotext", "Battery box")
+ meta:set_float("technic_power_machine", 1)
+ meta:set_string("formspec", battery_box_formspec)
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 1)
+ battery_charge = 0
+ max_charge = 60000
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+electric_furnace_formspec =
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]"..
+ "label[0,0;Electric Furnace]"..
+ "label[1,3;Power level]"
+
+minetest.register_node("technic:electric_furnace", {
+ description = "Electric furnace",
+ tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
+ "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front.png"},
+ paramtype2 = "facedir",
+ groups = {cracky=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_stone_defaults(),
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ interal_EU_buffer_size=2000;
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_float("technic_power_machine", 1)
+ meta:set_string("formspec", electric_furnace_formspec)
+ meta:set_string("infotext", "Electric furnace")
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 4)
+ local EU_used = 0
+ local furnace_is_cookin = 0
+ local cooked = nil
+ meta:set_float("internal_EU_buffer",0)
+ meta:set_float("internal_EU_buffer_size",2000)
+
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+minetest.register_node("technic:electric_furnace_active", {
+ description = "Electric Furnace",
+ tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
+ "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front_active.png"},
+ paramtype2 = "facedir",
+ light_source = 8,
+ drop = "technic:electric_furnace",
+ groups = {cracky=2, not_in_creative_inventory=1},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_stone_defaults(),
+ internal_EU_buffer=0;
+ interal_EU_buffer_size=2000;
+ technic_power_machine=1,
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_float("technic_power_machine", 1)
+ meta:set_string("formspec", electric_furnace_formspec)
+ meta:set_string("infotext", "Electric furnace");
+ local inv = meta:get_inventory()
+ inv:set_size("src", 1)
+ inv:set_size("dst", 4)
+ local EU_used = 0
+ local furnace_is_cookin = 0
+ local cooked = nil
+ end,
+ can_dig = function(pos,player)
+ local meta = minetest.env:get_meta(pos);
+ local inv = meta:get_inventory()
+ if not inv:is_empty("dst") then
+ return false
+ elseif not inv:is_empty("src") then
+ return false
+ end
+ return true
+ end,
+})
+
+minetest.register_abm({
+ nodenames = {"technic:electric_furnace","technic:electric_furnace_active"},
+ interval = 1,
+ chance = 1,
+
+ action = function(pos, node, active_object_count, active_object_count_wider)
+
+ local meta = minetest.env:get_meta(pos)
+ internal_EU_buffer=meta:get_float("internal_EU_buffer")
+ internal_EU_buffer_size=meta:get_float("internal_EU_buffer")
+ local load = math.floor(internal_EU_buffer/2000 * 100)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "list[current_name;dst;5,1;2,2;]"..
+ "list[current_player;main;0,5;8,4;]"..
+ "label[0,0;Electric Furnace]"..
+ "label[1,3;Power level]")
+
+ local inv = meta:get_inventory()
+
+ local furnace_is_cookin = meta:get_float("furnace_is_cookin")
+
+
+ local srclist = inv:get_list("src")
+ local cooked=nil
+
+ if srclist then
+ cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
+ end
+
+
+ if (furnace_is_cookin == 1) then
+ if internal_EU_buffer>=150 then
+ internal_EU_buffer=internal_EU_buffer-150;
+ meta:set_float("internal_EU_buffer",internal_EU_buffer)
+ meta:set_float("src_time", meta:get_float("src_time") + 3)
+ if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
+ -- check if there's room for output in "dst" list
+ if inv:room_for_item("dst",cooked.item) then
+ -- Put result in "dst" list
+ inv:add_item("dst", cooked.item)
+ -- take stuff from "src" list
+ srcstack = inv:get_stack("src", 1)
+ srcstack:take_item()
+ inv:set_stack("src", 1, srcstack)
+ else
+ print("Furnace inventory full!")
+ end
+ meta:set_string("src_time", 0)
+ end
+ end
+ end
+
+
+
+
+ if srclist then
+ cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
+ if cooked.time>0 then
+ hacky_swap_node(pos,"technic:electric_furnace_active")
+ meta:set_string("infotext","Furnace active")
+ meta:set_string("furnace_is_cookin",1)
+ -- meta:set_string("formspec", electric_furnace_formspec)
+ meta:set_string("src_time", 0)
+ return
+ end
+
+ end
+
+ hacky_swap_node(pos,"technic:electric_furnace")
+ meta:set_string("infotext","Furnace inactive")
+ meta:set_string("furnace_is_cookin",0)
+ -- meta:set_string("formspec", electric_furnace_formspec)
+ meta:set_string("src_time", 0)
+
+
+end,
+})
+
+
+
+
+function take_EU_from_net(pos, EU_to_take)
+ local meta = minetest.env:get_meta(pos)
+ local pos1=pos
+ pos1.z=pos1.z +1
+ local meta1 = minetest.env:get_meta(pos1)
+ charge=meta1:get_float("battery_charge")
+ charge=charge - EU_to_take
+ meta1:set_float("battery_charge",charge)
+end
+
+ LV_nodes_visited = {}
+
+function get_RE_item_load (load1,max_load)
+if load1==0 then load1=65535 end
+local temp = 65536-load1
+temp= temp/65535*max_load
+return math.floor(temp + 0.5)
+end
+
+function set_RE_item_load (load1,max_load)
+if load1 == 0 then return 65535 end
+local temp=load1/max_load*65535
+temp=65536-temp
+return math.floor(temp)
+end
+
+minetest.register_abm({
+ nodenames = {"technic:battery_box"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+ local meta = minetest.env:get_meta(pos)
+ charge= meta:get_float("battery_charge")
+ max_charge= 60000
+
+ local inv = meta:get_inventory()
+ if inv:is_empty("src")==false then
+ srcstack = inv:get_stack("src", 1)
+ src_item=srcstack:to_table()
+ if src_item["name"]== "technic:battery" then
+ local load1=tonumber((src_item["wear"]))
+ load1=get_RE_item_load(load1,10000)
+ load_step=1000
+ if load1<10000 and charge>0 then
+ if charge-load_step<0 then load_step=charge end
+ if load1+load_step>10000 then load_step=10000-load1 end
+ load1=load1+load_step
+ charge=charge-load_step
+
+ load1=set_RE_item_load(load1,10000)
+ src_item["wear"]=tostring(load1)
+ inv:set_stack("src", 1, src_item)
+ end
+ end
+ end
+ meta:set_float("battery_charge",charge)
+
+
+ if inv:is_empty("src")==false then
+ srcstack = inv:get_stack("src", 1)
+ src_item=srcstack:to_table()
+ if src_item["name"]== "technic:laser_mk1" then
+ local load1=tonumber((src_item["wear"]))
+ load1=get_RE_item_load(load1,40000)
+ load_step=1000
+ if load1<40000 and charge>0 then
+ if charge-load_step<0 then load_step=charge end
+ if load1+load_step>40000 then load_step=40000-load1 end
+ load1=load1+load_step
+ charge=charge-load_step
+ load1=set_RE_item_load(load1,40000)
+ src_item["wear"]=tostring(load1)
+ inv:set_stack("src", 1, src_item)
+ end
+ end
+ end
+ meta:set_float("battery_charge",charge)
+
+
+ if inv:is_empty("dst") == false then
+ srcstack = inv:get_stack("dst", 1)
+ src_item=srcstack:to_table()
+ if src_item["name"]== "technic:battery" then
+ local load1=tonumber((src_item["wear"]))
+ load1=get_RE_item_load(load1,10000)
+ load_step=1000
+ if load1>0 and charge<max_charge then
+ if charge+load_step>max_charge then load_step=max_charge-charge end
+ if load1-load_step<0 then load_step=load1 end
+ load1=load1-load_step
+ charge=charge+load_step
+
+ load1=set_RE_item_load(load1,10000)
+ src_item["wear"]=tostring(load1)
+ inv:set_stack("dst", 1, src_item)
+ end
+ end
+ end
+
+
+ meta:set_float("battery_charge",charge)
+ meta:set_string("infotext", "Battery box: "..charge.."/"..max_charge);
+
+ local load = math.floor(charge/60000 * 100)
+ meta:set_string("formspec",
+ "invsize[8,9;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "list[current_name;src;3,1;1,1;]"..
+ "image[4,1;1,1;technic_battery_reload.png]"..
+ "list[current_name;dst;5,1;1,1;]"..
+ "label[0,0;Battery box]"..
+ "label[3,0;Charge]"..
+ "label[5,0;Discharge]"..
+ "label[1,3;Power level]"..
+ "list[current_player;main;0,5;8,4;]")
+
+ local pos1={}
+
+ pos1.y=pos.y-1
+ pos1.x=pos.x
+ pos1.z=pos.z
+
+
+ meta1 = minetest.env:get_meta(pos1)
+ if meta1:get_float("cablelike")~=1 then return end
+
+ local LV_nodes = {}
+ local PR_nodes = {}
+ local RE_nodes = {}
+
+ LV_nodes[1]={}
+ LV_nodes[1].x=pos1.x
+ LV_nodes[1].y=pos1.y
+ LV_nodes[1].z=pos1.z
+ LV_nodes[1].visited=false
+
+
+table_index=1
+ repeat
+ check_LV_node (PR_nodes,RE_nodes,LV_nodes,table_index)
+ table_index=table_index+1
+ if LV_nodes[table_index]==nil then break end
+ until false
+
+
+local pos1={}
+i=1
+ repeat
+ if PR_nodes[i]==nil then break end
+ pos1.x=PR_nodes[i].x
+ pos1.y=PR_nodes[i].y
+ pos1.z=PR_nodes[i].z
+ local meta1 = minetest.env:get_meta(pos1)
+ local active=meta1:get_float("active")
+ if active==1 then charge=charge+80 end
+ i=i+1
+ until false
+
+if charge>max_charge then charge=max_charge end
+
+i=1
+ repeat
+ if RE_nodes[i]==nil then break end
+ pos1.x=RE_nodes[i].x -- loading all conected machines buffers
+ pos1.y=RE_nodes[i].y
+ pos1.z=RE_nodes[i].z
+ local meta1 = minetest.env:get_meta(pos1)
+ local internal_EU_buffer=meta1:get_float("internal_EU_buffer")
+ local internal_EU_buffer_size=meta1:get_float("internal_EU_buffer_size")
+
+ local charge_to_give=200
+ if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then
+ charge_to_give=internal_EU_buffer_size-internal_EU_buffer
+ end
+ if charge-charge_to_give<0 then charge_to_give=charge end
+
+ internal_EU_buffer=internal_EU_buffer+charge_to_give
+ meta1:set_float("internal_EU_buffer",internal_EU_buffer)
+ charge=charge-charge_to_give;
+
+ i=i+1
+ until false
+
+ meta:set_float("battery_charge",charge)
+ meta:set_string("infotext", "Battery box: "..charge.."/"..max_charge);
+
+
+end
+})
+
+function add_new_cable_node (LV_nodes,pos1)
+local i=1
+ repeat
+ if LV_nodes[i]==nil then break end
+ if pos1.x==LV_nodes[i].x and pos1.y==LV_nodes[i].y and pos1.z==LV_nodes[i].z then return false end
+ i=i+1
+ until false
+LV_nodes[i]={}
+LV_nodes[i].x=pos1.x
+LV_nodes[i].y=pos1.y
+LV_nodes[i].z=pos1.z
+LV_nodes[i].visited=false
+return true
+end
+
+function check_LV_node (PR_nodes,RE_nodes,LV_nodes,i)
+ local pos1={}
+ pos1.x=LV_nodes[i].x
+ pos1.y=LV_nodes[i].y
+ pos1.z=LV_nodes[i].z
+ LV_nodes[i].visited=true
+ new_node_added=false
+
+ pos1.x=pos1.x+1
+ check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+ pos1.x=pos1.x-2
+ check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+ pos1.x=pos1.x+1
+
+ pos1.y=pos1.y+1
+ check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+ pos1.y=pos1.y-2
+ check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+ pos1.y=pos1.y+1
+
+ pos1.z=pos1.z+1
+ check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+ pos1.z=pos1.z-2
+ check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+ pos1.z=pos1.z+1
+return new_node_added
+end
+
+function check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1)
+meta = minetest.env:get_meta(pos1)
+if meta:get_float("cablelike")==1 then new_node_added=add_new_cable_node(LV_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:solar_panel" then new_node_added=add_new_cable_node(PR_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:electric_furnace" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:electric_furnace_active" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:tool_workshop" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:music_player" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
+if minetest.env:get_node(pos1).name == "technic:grinder" then new_node_added=add_new_cable_node(RE_nodes,pos1) end
+end
+
+
+function get_connected_charge (charge,pos1)
+ local charge1=0
+ local meta={}
+ if minetest.env:get_node(pos1).name == "technic:battery_box" then
+ print ("found batbox")
+ meta = minetest.env:get_meta(pos1)
+ return meta:get_float("cable_OUT")
+ end
+
+ if minetest.env:get_node(pos1).name == "technic:lv_cable" then
+ meta = minetest.env:get_meta(pos1)
+ charge1=meta:get_float("cable_OUT")
+ if charge1>charge then
+ charge=charge1
+ end
+ end
+return charge
+end
+
+minetest.register_node("technic:solar_panel", {
+ tiles = {"technic_solar_panel_top.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png",
+ "technic_solar_panel_side.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ sounds = default.node_sound_wood_defaults(),
+ description="Solar Panel",
+ active = false,
+ technic_power_machine=1,
+ drawtype = "nodebox",
+ paramtype = "light",
+ is_ground_content = true,
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+ },
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_float("technic_power_machine", 1)
+ meta:set_string("infotext", "Solar Panel")
+ meta:set_float("active", false)
+ end,
+})
+
+minetest.register_craft({
+ output = 'technic:solar_panel 1',
+ recipe = {
+ {'default:sand', 'default:sand','default:sand'},
+ {'default:sand', 'moreores:copper_ingot','default:sand'},
+ {'default:sand', 'default:sand','default:sand'},
+
+ }
+})
+
+minetest.register_abm(
+ {nodenames = {"technic:solar_panel"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+
+ local pos1={}
+ pos1.y=pos.y+1
+ pos1.x=pos.x
+ pos1.z=pos.z
+
+ local light = minetest.env:get_node_light(pos1, nil)
+ local meta = minetest.env:get_meta(pos)
+ if light == nil then light = 0 end
+ if light >= 12 then
+ meta:set_string("infotext", "Solar Panel is active ")
+ meta:set_float("active",1)
+ else
+ meta:set_string("infotext", "Solar Panel is inactive");
+ meta:set_float("active",0)
+ end
+ end,
+})
\ No newline at end of file
--- /dev/null
+minetest.register_alias("water_mill", "technic:water_mill")
+
+minetest.register_craft({
+ output = 'technic:water_mill',
+ recipe = {
+ {'default:stone', 'default:stone', 'default:stone'},
+ {'default:wood', 'technic:diamond', 'default:wood'},
+ {'default:stone', 'moreores:copper_ingot', 'default:stone'},
+ }
+})
+
+minetest.register_craftitem("technic:water_mill", {
+ description = "Water Mill",
+ stack_max = 99,
+})
+
+water_mill_formspec =
+ "invsize[8,4;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png]"..
+ "label[0,0;Water Mill]"..
+ "label[1,3;Power level]"..
+ "list[current_player;main;0,5;8,4;]"
+
+
+minetest.register_node("technic:water_mill", {
+ description = "Water Mill",
+ tiles = {"technic_water_mill_top.png", "technic_machine_bottom.png", "technic_water_mill_side.png",
+ "technic_water_mill_side.png", "technic_water_mill_side.png", "technic_water_mill_side.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ internal_EU_buffer_size=5000;
+ burn_time=0;
+ on_construct = function(pos)
+ local meta = minetest.env:get_meta(pos)
+ meta:set_string("infotext", "Water Mill")
+ meta:set_float("technic_power_machine", 1)
+ meta:set_float("internal_EU_buffer", 0)
+ meta:set_float("internal_EU_buffer_size", 3000)
+ meta:set_string("formspec", water_mill_formspec)
+ end,
+
+})
+
+minetest.register_node("technic:water_mill_active", {
+ description = "Water Mill",
+ tiles = {"technic_water_mill_top_active.png", "technic_machine_bottom.png", "technic_water_mill_side.png",
+ "technic_water_mill_side.png", "technic_water_mill_side.png", "technic_water_mill_side.png"},
+ paramtype2 = "facedir",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+ legacy_facedir_simple = true,
+ sounds = default.node_sound_wood_defaults(),
+ drop="technic:water_mill",
+ technic_power_machine=1,
+ internal_EU_buffer=0;
+ internal_EU_buffer_size=0;
+})
+
+minetest.register_abm({
+ nodenames = {"technic:water_mill","technic:water_mill_active"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node, active_object_count, active_object_count_wider)
+
+ local meta = minetest.env:get_meta(pos)
+ local charge= meta:get_float("internal_EU_buffer")
+ local max_charge= meta:get_float("internal_EU_buffer_size")
+ local water_nodes = 0
+ local lava_nodes = 0
+ local production_level=0
+ local load_step=0
+
+ pos.x=pos.x+1
+ local check=check_node_around_mill (pos)
+ if check==1 then water_nodes=water_nodes+1 end
+ pos.x=pos.x-2
+ check=check_node_around_mill (pos)
+ if check==1 then water_nodes=water_nodes+1 end
+ pos.x=pos.x+1
+ pos.z=pos.z+1
+ check=check_node_around_mill (pos)
+ if check==1 then water_nodes=water_nodes+1 end
+ pos.z=pos.z-2
+ check=check_node_around_mill (pos)
+ if check==1 then water_nodes=water_nodes+1 end
+ pos.z=pos.z+1
+
+ if water_nodes==1 then production_level=25 load_step=30 end
+ if water_nodes==2 then production_level=50 load_step=60 end
+ if water_nodes==3 then production_level=75 load_step=90 end
+ if water_nodes==4 then production_level=100 load_step=120 end
+
+ if production_level>0 then
+ if charge+load_step>max_charge then
+ load_step=max_charge-charge
+ end
+ if load_step>0 then
+ charge=charge+load_step
+ meta:set_float("internal_EU_buffer",charge)
+ end
+ end
+
+ local load = math.floor((charge/max_charge)*100)
+ meta:set_string("formspec",
+ "invsize[8,4;]"..
+ "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+ (load)..":technic_power_meter_fg.png]"..
+ "label[0,0;Water Mill]"..
+ "label[1,3;Power level]"..
+ "label[4,0;Production at "..tostring(production_level).."%]"
+ )
+
+ if production_level>0 and minetest.env:get_node(pos).name=="technic:water_mill" then
+ hacky_swap_node (pos,"technic:water_mill_active")
+ return
+ end
+ if production_level==0 then hacky_swap_node (pos,"technic:water_mill") end
+end
+})
+
+function check_node_around_mill (pos)
+local node=minetest.env:get_node(pos)
+if node.name=="default:water_flowing" then return 1 end
+return 0
+end
\ No newline at end of file
--- /dev/null
+--LV cable node boxes
+
+
+minetest.register_alias("lv_cable", "technic:lv_cable")
+
+minetest.register_craft({
+ output = 'technic:lv_cable 6',
+ recipe = {
+ {'moreores:copper_ingot', 'moreores:copper_ingot', 'moreores:copper_ingot'},
+ }
+})
+
+minetest.register_craftitem("technic:lv_cable", {
+ description = "Low Voltage Copper Cable",
+ stack_max = 99,
+})
+
+minetest.register_node("technic:lv_cable", {
+ description = "Low Voltage Copper Cable",
+ tiles = {"technic_lv_cable.png"},
+ inventory_image = "technic_lv_cable_wield.png",
+ wield_image = "technic_lv_cable_wield.png",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ sounds = default.node_sound_wood_defaults(),
+ drop = "technic:lv_cable",
+ cablelike=1,
+ rules_x1=0,
+ rules_x2=0,
+ rules_y1=0,
+ rules_y2=0,
+ rules_z1=0,
+ rules_z2=0,
+ paramtype = "light",
+ drawtype = "nodebox",
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ { -0.1 , -0.1 , -0.1 , 0.1 , 0.1 , 0.1 },
+ }},
+ node_box = {
+ type = "fixed",
+ fixed = {
+ { -0.1 , -0.1 , -0.1 , 0.1 , 0.1 , 0.1 },
+ }},
+ on_construct = function(pos)
+ meta=minetest.env:get_meta(pos)
+ meta:set_float("cablelike",1)
+ meta:set_float("x1",0)
+ meta:set_float("x2",0)
+ meta:set_float("y1",0)
+ meta:set_float("y2",0)
+ meta:set_float("z1",0)
+ meta:set_float("z2",0)
+ check_connections (pos)
+ end,
+
+ after_dig_node = function (pos, oldnode, oldmetadata, digger)
+ check_connections_on_destroy (pos)
+ end,
+
+})
+
+
+str_y1= { -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1 } --0 y+
+str_x1= { -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1 } --0 x+
+str_z1= { -0.1 , -0.1 , 0.1 , 0.1 , 0.1 , 0.5 } --0 z+
+str_z2= { -0.1 , -0.1, -0.5 , 0.1 , 0.1 , 0.1 } --0 z-
+str_y2= { -0.1 , -0.5, -0.1 , 0.1 , 0.1 , 0.1 } --0 y-
+str_x2= { -0.5 , -0.1, -0.1 , 0.1 , 0.1 , 0.1 } --0 x-
+
+
+
+local x1,x2,y1,y2,z1,z2
+local count=0
+
+for x1 = 0, 1, 1 do --x-
+for x2 = 0, 1, 1 do --x+
+for y1 = 0, 1, 1 do --y-
+for y2 = 0, 1, 1 do --y-
+for z1 = 0, 1, 1 do --z-
+for z2 = 0, 1, 1 do --z+
+
+temp_x1={} temp_x2={} temp_y1={} temp_y2={} temp_z1={} temp_z2={}
+
+if x1==1 then temp_x1=str_x1 end
+if x2==1 then temp_x2=str_x2 end
+if y1==1 then temp_y1=str_y1 end
+if y2==1 then temp_y2=str_y2 end
+if z1==1 then temp_z1=str_z1 end
+if z2==1 then temp_z2=str_z2 end
+
+
+minetest.register_node("technic:lv_cable"..count, {
+ description = "Low Voltage Copper Cable",
+ tiles = {"technic_lv_cable.png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+ sounds = default.node_sound_wood_defaults(),
+ drop = "technic:lv_cable",
+ rules_x1=0,
+ rules_x2=0,
+ rules_y1=0,
+ rules_y2=0,
+ rules_z1=0,
+ rules_z2=0,
+ cablelike=1,
+ paramtype = "light",
+ drawtype = "nodebox",
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
+ }},
+
+ node_box = {
+ type = "fixed",
+ fixed = {
+ temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
+ }},
+
+ after_dig_node = function (pos, oldnode, oldmetadata, digger)
+ check_connections_on_destroy (pos)
+ end,
+
+})
+
+count=count+1 end end end end end end
+
+check_connections = function(pos)
+ local pos1={}
+ pos1.x=pos.x
+ pos1.y=pos.y
+ pos1.z=pos.z
+
+ pos1.x=pos1.x+1
+ if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+ x2=1
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos1,"technic:lv_cable"..rule)
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("x2",x2)
+ meta=minetest.env:get_meta(pos)
+ x1=1
+ x2=minetest.env:get_meta(pos):get_float("x2")
+ y1=minetest.env:get_meta(pos):get_float("y1")
+ y2=minetest.env:get_meta(pos):get_float("y2")
+ z1=minetest.env:get_meta(pos):get_float("z1")
+ z2=minetest.env:get_meta(pos):get_float("z2")
+ meta:set_float("x1",x1)
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:lv_cable"..rule)
+ end
+
+ pos1.x=pos1.x-2
+ if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+ x1=1
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos1,"technic:lv_cable"..rule)
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("x1",x1)
+ meta=minetest.env:get_meta(pos)
+ x2=1
+ x1=minetest.env:get_meta(pos):get_float("x1")
+ y1=minetest.env:get_meta(pos):get_float("y1")
+ y2=minetest.env:get_meta(pos):get_float("y2")
+ z1=minetest.env:get_meta(pos):get_float("z1")
+ z2=minetest.env:get_meta(pos):get_float("z2")
+ meta:set_float("x2",x2)
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:lv_cable"..rule)
+ end
+
+ pos1.x=pos1.x+1
+
+ pos1.y=pos1.y+1
+ if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+ y2=1
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos1,"technic:lv_cable"..rule)
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("y2",y2)
+ meta=minetest.env:get_meta(pos)
+ y1=1
+ x1=minetest.env:get_meta(pos):get_float("x1")
+ x2=minetest.env:get_meta(pos):get_float("x2")
+ y2=minetest.env:get_meta(pos):get_float("y2")
+ z1=minetest.env:get_meta(pos):get_float("z1")
+ z2=minetest.env:get_meta(pos):get_float("z2")
+ meta:set_float("y1",y1)
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:lv_cable"..rule)
+ end
+
+ if minetest.env:get_meta(pos1):get_float("technic_power_machine")==1 then
+ y1=1
+ x1=minetest.env:get_meta(pos):get_float("x1")
+ x2=minetest.env:get_meta(pos):get_float("x2")
+ y2=minetest.env:get_meta(pos):get_float("y2")
+ z1=minetest.env:get_meta(pos):get_float("z1")
+ z2=minetest.env:get_meta(pos):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:lv_cable"..rule)
+ meta=minetest.env:get_meta(pos)
+ meta:set_float("y1",y1)
+ end
+
+
+ pos1.y=pos1.y-2
+ if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+ y1=1
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos1,"technic:lv_cable"..rule)
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("y1",y1)
+ meta=minetest.env:get_meta(pos)
+ y2=1
+ x1=minetest.env:get_meta(pos):get_float("x1")
+ x2=minetest.env:get_meta(pos):get_float("x2")
+ y1=minetest.env:get_meta(pos):get_float("y1")
+ z1=minetest.env:get_meta(pos):get_float("z1")
+ z2=minetest.env:get_meta(pos):get_float("z2")
+ meta:set_float("y2",y2)
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:lv_cable"..rule)
+ end
+ pos1.y=pos1.y+1
+
+ pos1.z=pos1.z+1
+ if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+ z2=1
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos1,"technic:lv_cable"..rule)
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("z2",z2)
+ meta=minetest.env:get_meta(pos)
+ z1=1
+ x1=minetest.env:get_meta(pos):get_float("x1")
+ x2=minetest.env:get_meta(pos):get_float("x2")
+ y1=minetest.env:get_meta(pos):get_float("y1")
+ y2=minetest.env:get_meta(pos):get_float("y2")
+ z2=minetest.env:get_meta(pos):get_float("z2")
+ meta:set_float("z1",z1)
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:lv_cable"..rule)
+ end
+ pos1.z=pos1.z-2
+ if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+ z1=1
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos1,"technic:lv_cable"..rule)
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("z1",z1)
+ meta=minetest.env:get_meta(pos)
+ z2=1
+ x1=minetest.env:get_meta(pos):get_float("x1")
+ x2=minetest.env:get_meta(pos):get_float("x2")
+ y1=minetest.env:get_meta(pos):get_float("y1")
+ y2=minetest.env:get_meta(pos):get_float("y2")
+ z1=minetest.env:get_meta(pos):get_float("z1")
+ meta:set_float("z2",z2)
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:lv_cable"..rule)
+ end
+ pos1.z=pos1.z+1
+end
+
+function make_rule_number (x1,x2,y1,y2,z1,z2)
+local temp= z2+z1*2+y2*4+y1*8+x2*16+x1*32
+return temp
+end
+
+check_connections_on_destroy = function(pos)
+ local pos1={}
+ pos1.x=pos.x
+ pos1.y=pos.y
+ pos1.z=pos.z
+
+ pos1.x=pos1.x+1
+ if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+ x2=0
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
+ if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("x2",x2)
+ end
+
+ pos1.x=pos1.x-2
+ if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+ x1=0
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
+ if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("x1",x1)
+ end
+ pos1.x=pos1.x+1
+
+ pos1.y=pos1.y+1
+ if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+ y2=0
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
+ if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("y2",y2)
+ end
+
+ pos1.y=pos1.y-2
+ if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+ y1=0
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
+ if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("y1",y1)
+ end
+ pos1.y=pos1.y+1
+
+ pos1.z=pos1.z+1
+ if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+ z2=0
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
+ if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("z2",z2)
+ end
+
+ pos1.z=pos1.z-2
+ if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
+ z1=0
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
+ if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("z1",z1)
+ end
+ pos1.y=pos1.y+1
+
+end
+
--- /dev/null
+--MV cable node boxes
+
+
+minetest.register_alias("mv_cable", "technic:mv_cable")
+
+minetest.register_craft({
+ output = 'technic:mv_cable 3',
+ recipe ={
+ {'technic:rubber','technic:rubber','technic:rubber'},
+ {'technic:lv_cable','technic:lv_cable','technic:lv_cable'},
+ {'technic:rubber','technic:rubber','technic:rubber'},
+ }
+})
+
+
+minetest.register_craftitem("technic:mv_cable", {
+ description = "Medium Voltage Copper Cable",
+ stack_max = 99,
+})
+
+minetest.register_node("technic:mv_cable", {
+ description = "Medium Voltage Copper Cable",
+ tiles = {"technic_mv_cable.png"},
+ inventory_image = "technic_mv_cable_wield.png",
+ wield_image = "technic_mv_cable_wield.png",
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+ sounds = default.node_sound_wood_defaults(),
+ drop = "technic:mv_cable",
+ mv_cablelike=1,
+ rules_x1=0,
+ rules_x2=0,
+ rules_y1=0,
+ rules_y2=0,
+ rules_z1=0,
+ rules_z2=0,
+ paramtype = "light",
+ drawtype = "nodebox",
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ { -0.1 , -0.1 , -0.1 , 0.1 , 0.1 , 0.1 },
+ }},
+ node_box = {
+ type = "fixed",
+ fixed = {
+ { -0.1 , -0.1 , -0.1 , 0.1 , 0.1 , 0.1 },
+ }},
+ on_construct = function(pos)
+ meta=minetest.env:get_meta(pos)
+ meta:set_float("mv_cablelike",1)
+ meta:set_float("x1",0)
+ meta:set_float("x2",0)
+ meta:set_float("y1",0)
+ meta:set_float("y2",0)
+ meta:set_float("z1",0)
+ meta:set_float("z2",0)
+ MV_check_connections (pos)
+ end,
+
+ after_dig_node = function (pos, oldnode, oldmetadata, digger)
+ MV_check_connections_on_destroy (pos)
+ end,
+
+})
+
+
+str_y1= { -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1 } --0 y+
+str_x1= { -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1 } --0 x+
+str_z1= { -0.1 , -0.1 , 0.1 , 0.1 , 0.1 , 0.5 } --0 z+
+str_z2= { -0.1 , -0.1, -0.5 , 0.1 , 0.1 , 0.1 } --0 z-
+str_y2= { -0.1 , -0.5, -0.1 , 0.1 , 0.1 , 0.1 } --0 y-
+str_x2= { -0.5 , -0.1, -0.1 , 0.1 , 0.1 , 0.1 } --0 x-
+
+
+
+local x1,x2,y1,y2,z1,z2
+local count=0
+
+for x1 = 0, 1, 1 do --x-
+for x2 = 0, 1, 1 do --x+
+for y1 = 0, 1, 1 do --y-
+for y2 = 0, 1, 1 do --y-
+for z1 = 0, 1, 1 do --z-
+for z2 = 0, 1, 1 do --z+
+
+temp_x1={} temp_x2={} temp_y1={} temp_y2={} temp_z1={} temp_z2={}
+
+if x1==1 then temp_x1=str_x1 end
+if x2==1 then temp_x2=str_x2 end
+if y1==1 then temp_y1=str_y1 end
+if y2==1 then temp_y2=str_y2 end
+if z1==1 then temp_z1=str_z1 end
+if z2==1 then temp_z2=str_z2 end
+
+
+minetest.register_node("technic:mv_cable"..count, {
+ description = "Medium Voltage Copper Cable",
+ tiles = {"technic_mv_cable.png"},
+ groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+ sounds = default.node_sound_wood_defaults(),
+ drop = "technic:mv_cable",
+ rules_x1=0,
+ rules_x2=0,
+ rules_y1=0,
+ rules_y2=0,
+ rules_z1=0,
+ rules_z2=0,
+ cablelike=1,
+ paramtype = "light",
+ drawtype = "nodebox",
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
+ }},
+
+ node_box = {
+ type = "fixed",
+ fixed = {
+ temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
+ }},
+
+ after_dig_node = function (pos, oldnode, oldmetadata, digger)
+ MV_check_connections_on_destroy (pos)
+ end,
+
+})
+
+count=count+1 end end end end end end
+
+MV_check_connections = function(pos)
+ local pos1={}
+ pos1.x=pos.x
+ pos1.y=pos.y
+ pos1.z=pos.z
+
+ pos1.x=pos1.x+1
+ if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+ x2=1
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos1,"technic:mv_cable"..rule)
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("x2",x2)
+ meta=minetest.env:get_meta(pos)
+ x1=1
+ x2=minetest.env:get_meta(pos):get_float("x2")
+ y1=minetest.env:get_meta(pos):get_float("y1")
+ y2=minetest.env:get_meta(pos):get_float("y2")
+ z1=minetest.env:get_meta(pos):get_float("z1")
+ z2=minetest.env:get_meta(pos):get_float("z2")
+ meta:set_float("x1",x1)
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:mv_cable"..rule)
+ end
+
+ pos1.x=pos1.x-2
+ if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+ x1=1
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos1,"technic:mv_cable"..rule)
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("x1",x1)
+ meta=minetest.env:get_meta(pos)
+ x2=1
+ x1=minetest.env:get_meta(pos):get_float("x1")
+ y1=minetest.env:get_meta(pos):get_float("y1")
+ y2=minetest.env:get_meta(pos):get_float("y2")
+ z1=minetest.env:get_meta(pos):get_float("z1")
+ z2=minetest.env:get_meta(pos):get_float("z2")
+ meta:set_float("x2",x2)
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:mv_cable"..rule)
+ end
+
+ pos1.x=pos1.x+1
+
+ pos1.y=pos1.y+1
+ if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+ y2=1
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos1,"technic:mv_cable"..rule)
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("y2",y2)
+ meta=minetest.env:get_meta(pos)
+ y1=1
+ x1=minetest.env:get_meta(pos):get_float("x1")
+ x2=minetest.env:get_meta(pos):get_float("x2")
+ y2=minetest.env:get_meta(pos):get_float("y2")
+ z1=minetest.env:get_meta(pos):get_float("z1")
+ z2=minetest.env:get_meta(pos):get_float("z2")
+ meta:set_float("y1",y1)
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:mv_cable"..rule)
+ end
+
+ if minetest.env:get_meta(pos1):get_float("technic_mv_power_machine")==1 then
+ y1=1
+ x1=minetest.env:get_meta(pos):get_float("x1")
+ x2=minetest.env:get_meta(pos):get_float("x2")
+ y2=minetest.env:get_meta(pos):get_float("y2")
+ z1=minetest.env:get_meta(pos):get_float("z1")
+ z2=minetest.env:get_meta(pos):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:mv_cable"..rule)
+ meta=minetest.env:get_meta(pos)
+ meta:set_float("y1",y1)
+ end
+
+
+ pos1.y=pos1.y-2
+ if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+ y1=1
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos1,"technic:mv_cable"..rule)
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("y1",y1)
+ meta=minetest.env:get_meta(pos)
+ y2=1
+ x1=minetest.env:get_meta(pos):get_float("x1")
+ x2=minetest.env:get_meta(pos):get_float("x2")
+ y1=minetest.env:get_meta(pos):get_float("y1")
+ z1=minetest.env:get_meta(pos):get_float("z1")
+ z2=minetest.env:get_meta(pos):get_float("z2")
+ meta:set_float("y2",y2)
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:mv_cable"..rule)
+ end
+ pos1.y=pos1.y+1
+
+ pos1.z=pos1.z+1
+ if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+ z2=1
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos1,"technic:mv_cable"..rule)
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("z2",z2)
+ meta=minetest.env:get_meta(pos)
+ z1=1
+ x1=minetest.env:get_meta(pos):get_float("x1")
+ x2=minetest.env:get_meta(pos):get_float("x2")
+ y1=minetest.env:get_meta(pos):get_float("y1")
+ y2=minetest.env:get_meta(pos):get_float("y2")
+ z2=minetest.env:get_meta(pos):get_float("z2")
+ meta:set_float("z1",z1)
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:mv_cable"..rule)
+ end
+ pos1.z=pos1.z-2
+ if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+ z1=1
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos1,"technic:mv_cable"..rule)
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("z1",z1)
+ meta=minetest.env:get_meta(pos)
+ z2=1
+ x1=minetest.env:get_meta(pos):get_float("x1")
+ x2=minetest.env:get_meta(pos):get_float("x2")
+ y1=minetest.env:get_meta(pos):get_float("y1")
+ y2=minetest.env:get_meta(pos):get_float("y2")
+ z1=minetest.env:get_meta(pos):get_float("z1")
+ meta:set_float("z2",z2)
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ hacky_swap_node(pos,"technic:mv_cable"..rule)
+ end
+ pos1.z=pos1.z+1
+end
+
+
+MV_check_connections_on_destroy = function(pos)
+ local pos1={}
+ pos1.x=pos.x
+ pos1.y=pos.y
+ pos1.z=pos.z
+
+ pos1.x=pos1.x+1
+ if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+ x2=0
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
+ if rule>0 then hacky_swap_node(pos1,"technic:mv_cable"..rule) end
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("x2",x2)
+ end
+
+ pos1.x=pos1.x-2
+ if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+ x1=0
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
+ if rule>0 then hacky_swap_node(pos1,"technic:mv_cable"..rule) end
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("x1",x1)
+ end
+ pos1.x=pos1.x+1
+
+ pos1.y=pos1.y+1
+ if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+ y2=0
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
+ if rule>0 then hacky_swap_node(pos1,"technic:mv_cable"..rule) end
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("y2",y2)
+ end
+
+ pos1.y=pos1.y-2
+ if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+ y1=0
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
+ if rule>0 then hacky_swap_node(pos1,"technic:mv_cable"..rule) end
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("y1",y1)
+ end
+ pos1.y=pos1.y+1
+
+ pos1.z=pos1.z+1
+ if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+ z2=0
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z1=minetest.env:get_meta(pos1):get_float("z1")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
+ if rule>0 then hacky_swap_node(pos1,"technic:mv_cable"..rule) end
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("z2",z2)
+ end
+
+ pos1.z=pos1.z-2
+ if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
+ z1=0
+ x1=minetest.env:get_meta(pos1):get_float("x1")
+ x2=minetest.env:get_meta(pos1):get_float("x2")
+ y1=minetest.env:get_meta(pos1):get_float("y1")
+ y2=minetest.env:get_meta(pos1):get_float("y2")
+ z2=minetest.env:get_meta(pos1):get_float("z2")
+ rule=make_rule_number(x1,x2,y1,y2,z1,z2)
+ if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
+ if rule>0 then hacky_swap_node(pos1,"technic:mv_cable"..rule) end
+ meta=minetest.env:get_meta(pos1)
+ meta:set_float("z1",z1)
+ end
+ pos1.y=pos1.y+1
+
+end
+
+++ /dev/null
-minetest.register_alias("tool_workshop", "technic:tool_workshop")
-minetest.register_craft({
- output = 'technic:tool_workshop',
- recipe = {
- {'default:wood', 'default:wood', 'default:wood'},
- {'default:wood', 'technic:diamond', 'default:wood'},
- {'default:stone', 'moreores:copper_ingot', 'default:stone'},
- }
-})
-
-minetest.register_craftitem("technic:tool_workshop", {
- description = "Tool Workshop",
- stack_max = 99,
-})
-
-workshop_formspec =
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "label[0,0;Tool Workshop]"..
- "label[1,3;Power level]"..
- "list[current_player;main;0,5;8,4;]"
-
-minetest.register_node("technic:tool_workshop", {
- description = "Tool Workshop",
- tiles = {"technic_workshop_top.png", "technic_machine_bottom.png", "technic_workshop_side.png",
- "technic_workshop_side.png", "technic_workshop_side.png", "technic_workshop_side.png"},
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
- technic_power_machine=1,
- internal_EU_buffer=0;
- internal_EU_buffer_size=2000;
-
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("infotext", "Tool Workshop")
- meta:set_float("technic_power_machine", 1)
- meta:set_float("internal_EU_buffer", 1)
- meta:set_float("internal_EU_buffer_size", 2000)
- meta:set_string("formspec", workshop_formspec)
- local inv = meta:get_inventory()
- inv:set_size("src", 1)
- end,
- can_dig = function(pos,player)
- local meta = minetest.env:get_meta(pos);
- local inv = meta:get_inventory()
- if not inv:is_empty("src") then
- return false
- end
- return true
- end,
-})
-
-minetest.register_abm({
- nodenames = {"technic:tool_workshop"},
- interval = 1,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
- local meta = minetest.env:get_meta(pos)
- local charge= meta:get_float("internal_EU_buffer")
- local max_charge= meta:get_float("internal_EU_buffer_size")
- local load_step=2000
- local load_cost=200
- local inv = meta:get_inventory()
- if inv:is_empty("src")==false then
- srcstack = inv:get_stack("src", 1)
- src_item=srcstack:to_table()
- local load1=tonumber((src_item["wear"]))
- if charge>load_cost then
- if load1>1 then
- if load1-load_step<0 then load_step=load1 load1=1
- else load1=load1-load_step end
- charge=charge-load_cost
- src_item["wear"]=tostring(load1)
- inv:set_stack("src", 1, src_item)
- end
- end
- end
-
- meta:set_float("internal_EU_buffer",charge)
-
-
- local load = math.floor((charge/max_charge)*100)
- meta:set_string("formspec",
- "invsize[8,9;]"..
- "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
- (load)..":technic_power_meter_fg.png]"..
- "list[current_name;src;3,1;1,1;]"..
- "label[0,0;Tool Workshop]"..
- "label[1,3;Power level]"..
- "list[current_player;main;0,5;8,4;]")
- end
-})
\ No newline at end of file
+++ /dev/null
- minetest.register_tool("technic:treetap", {
- description = "Tree Tap",
- inventory_image = "technic_tree_tap.png",
- on_use = function(itemstack,user,pointed_thing)
- if pointed_thing.type~="node" then return end
- if user:get_inventory():room_for_item("main",ItemStack("technic:raw_latex")) then
- local pos=minetest.get_pointed_thing_position(pointed_thing,above)
- local node=minetest.env:get_node(pos)
- local node_name=node.name
- if node_name == "farming_plus:rubber_tree_full" then
- user:get_inventory():add_item("main",ItemStack("technic:raw_latex"))
- minetest.env:set_node(pos,node)
- 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
- else return end
- end,
- })
-
- minetest.register_craft({
- output = "technic:treetap",
- recipe = {
- {"pipeworks:tube", "default:wood", "default:stick"},
- {"", "default:stick", "default:stick"}
- },
- })
-
- minetest.register_craftitem("technic:raw_latex", {
- description = "Raw Latex",
- inventory_image = "technic_raw_latex.png",
- })
-
- minetest.register_craft({
- type = "cooking",
- output = "technic:rubber",
- recipe = "technic:raw_latex",
- })
-
- minetest.register_craftitem("technic:rubber", {
- description = "Rubber Fiber",
- inventory_image = "technic_rubber.png",
- })
+++ /dev/null
-minetest.register_alias("water_mill", "technic:water_mill")
-
-minetest.register_craft({
- output = 'technic:water_mill',
- recipe = {
- {'default:stone', 'default:stone', 'default:stone'},
- {'default:wood', 'technic:diamond', 'default:wood'},
- {'default:stone', 'moreores:copper_ingot', 'default:stone'},
- }
-})
-
-minetest.register_craftitem("technic:water_mill", {
- description = "Water Mill",
- stack_max = 99,
-})
-
-water_mill_formspec =
- "invsize[8,4;]"..
- "image[1,1;1,2;technic_power_meter_bg.png]"..
- "label[0,0;Water Mill]"..
- "label[1,3;Power level]"..
- "list[current_player;main;0,5;8,4;]"
-
-
-minetest.register_node("technic:water_mill", {
- description = "Water Mill",
- tiles = {"technic_water_mill_top.png", "technic_machine_bottom.png", "technic_water_mill_side.png",
- "technic_water_mill_side.png", "technic_water_mill_side.png", "technic_water_mill_side.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- technic_power_machine=1,
- internal_EU_buffer=0;
- internal_EU_buffer_size=5000;
- burn_time=0;
- on_construct = function(pos)
- local meta = minetest.env:get_meta(pos)
- meta:set_string("infotext", "Water Mill")
- meta:set_float("technic_power_machine", 1)
- meta:set_float("internal_EU_buffer", 0)
- meta:set_float("internal_EU_buffer_size", 3000)
- meta:set_string("formspec", water_mill_formspec)
- end,
-
-})
-
-minetest.register_node("technic:water_mill_active", {
- description = "Water Mill",
- tiles = {"technic_water_mill_top_active.png", "technic_machine_bottom.png", "technic_water_mill_side.png",
- "technic_water_mill_side.png", "technic_water_mill_side.png", "technic_water_mill_side.png"},
- paramtype2 = "facedir",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
- legacy_facedir_simple = true,
- sounds = default.node_sound_wood_defaults(),
- drop="technic:water_mill",
- technic_power_machine=1,
- internal_EU_buffer=0;
- internal_EU_buffer_size=0;
-})
-
-minetest.register_abm({
- nodenames = {"technic:water_mill","technic:water_mill_active"},
- interval = 1,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
-
- local meta = minetest.env:get_meta(pos)
- local charge= meta:get_float("internal_EU_buffer")
- local max_charge= meta:get_float("internal_EU_buffer_size")
- local water_nodes = 0
- local lava_nodes = 0
- local production_level=0
- local load_step=0
-
- pos.x=pos.x+1
- local check=check_node_around_mill (pos)
- if check==1 then water_nodes=water_nodes+1 end
- pos.x=pos.x-2
- check=check_node_around_mill (pos)
- if check==1 then water_nodes=water_nodes+1 end
- pos.x=pos.x+1
- pos.z=pos.z+1
- check=check_node_around_mill (pos)
- if check==1 then water_nodes=water_nodes+1 end
- pos.z=pos.z-2
- check=check_node_around_mill (pos)
- if check==1 then water_nodes=water_nodes+1 end
- pos.z=pos.z+1
-
- if water_nodes==1 then production_level=25 load_step=30 end
- if water_nodes==2 then production_level=50 load_step=60 end
- if water_nodes==3 then production_level=75 load_step=90 end
- if water_nodes==4 then production_level=100 load_step=120 end
-
- if production_level>0 then
- if charge+load_step>max_charge then
- load_step=max_charge-charge
- end
- if load_step>0 then
- charge=charge+load_step
- meta:set_float("internal_EU_buffer",charge)
- end
- end
-
- local load = math.floor((charge/max_charge)*100)
- meta:set_string("formspec",
- "invsize[8,4;]"..
- "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
- (load)..":technic_power_meter_fg.png]"..
- "label[0,0;Water Mill]"..
- "label[1,3;Power level]"..
- "label[4,0;Production at "..tostring(production_level).."%]"
- )
-
- if production_level>0 and minetest.env:get_node(pos).name=="technic:water_mill" then
- hacky_swap_node (pos,"technic:water_mill_active")
- return
- end
- if production_level==0 then hacky_swap_node (pos,"technic:water_mill") end
-end
-})
-
-function check_node_around_mill (pos)
-local node=minetest.env:get_node(pos)
-if node.name=="default:water_flowing" then return 1 end
-return 0
-end
\ No newline at end of file
+++ /dev/null
---LV cable node boxes
-
-
-minetest.register_alias("lv_cable", "technic:lv_cable")
-
-minetest.register_craft({
- output = 'technic:lv_cable 6',
- recipe = {
- {'moreores:copper_ingot', 'moreores:copper_ingot', 'moreores:copper_ingot'},
- }
-})
-
-minetest.register_craftitem("technic:lv_cable", {
- description = "Low Voltage Copper Cable",
- stack_max = 99,
-})
-
-minetest.register_node("technic:lv_cable", {
- description = "Low Voltage Copper Cable",
- tiles = {"technic_lv_cable.png"},
- inventory_image = "technic_lv_cable_wield.png",
- wield_image = "technic_lv_cable_wield.png",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
- drop = "technic:lv_cable",
- cablelike=1,
- rules_x1=0,
- rules_x2=0,
- rules_y1=0,
- rules_y2=0,
- rules_z1=0,
- rules_z2=0,
- paramtype = "light",
- drawtype = "nodebox",
- selection_box = {
- type = "fixed",
- fixed = {
- { -0.1 , -0.1 , -0.1 , 0.1 , 0.1 , 0.1 },
- }},
- node_box = {
- type = "fixed",
- fixed = {
- { -0.1 , -0.1 , -0.1 , 0.1 , 0.1 , 0.1 },
- }},
- on_construct = function(pos)
- meta=minetest.env:get_meta(pos)
- meta:set_float("cablelike",1)
- meta:set_float("x1",0)
- meta:set_float("x2",0)
- meta:set_float("y1",0)
- meta:set_float("y2",0)
- meta:set_float("z1",0)
- meta:set_float("z2",0)
- check_connections (pos)
- end,
-
- after_dig_node = function (pos, oldnode, oldmetadata, digger)
- check_connections_on_destroy (pos)
- end,
-
-})
-
-
-str_y1= { -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1 } --0 y+
-str_x1= { -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1 } --0 x+
-str_z1= { -0.1 , -0.1 , 0.1 , 0.1 , 0.1 , 0.5 } --0 z+
-str_z2= { -0.1 , -0.1, -0.5 , 0.1 , 0.1 , 0.1 } --0 z-
-str_y2= { -0.1 , -0.5, -0.1 , 0.1 , 0.1 , 0.1 } --0 y-
-str_x2= { -0.5 , -0.1, -0.1 , 0.1 , 0.1 , 0.1 } --0 x-
-
-
-
-local x1,x2,y1,y2,z1,z2
-local count=0
-
-for x1 = 0, 1, 1 do --x-
-for x2 = 0, 1, 1 do --x+
-for y1 = 0, 1, 1 do --y-
-for y2 = 0, 1, 1 do --y-
-for z1 = 0, 1, 1 do --z-
-for z2 = 0, 1, 1 do --z+
-
-temp_x1={} temp_x2={} temp_y1={} temp_y2={} temp_z1={} temp_z2={}
-
-if x1==1 then temp_x1=str_x1 end
-if x2==1 then temp_x2=str_x2 end
-if y1==1 then temp_y1=str_y1 end
-if y2==1 then temp_y2=str_y2 end
-if z1==1 then temp_z1=str_z1 end
-if z2==1 then temp_z2=str_z2 end
-
-
-minetest.register_node("technic:lv_cable"..count, {
- description = "Low Voltage Copper Cable",
- tiles = {"technic_lv_cable.png"},
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
- sounds = default.node_sound_wood_defaults(),
- drop = "technic:lv_cable",
- rules_x1=0,
- rules_x2=0,
- rules_y1=0,
- rules_y2=0,
- rules_z1=0,
- rules_z2=0,
- cablelike=1,
- paramtype = "light",
- drawtype = "nodebox",
- selection_box = {
- type = "fixed",
- fixed = {
- temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
- }},
-
- node_box = {
- type = "fixed",
- fixed = {
- temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
- }},
-
- after_dig_node = function (pos, oldnode, oldmetadata, digger)
- check_connections_on_destroy (pos)
- end,
-
-})
-
-count=count+1 end end end end end end
-
-check_connections = function(pos)
- local pos1={}
- pos1.x=pos.x
- pos1.y=pos.y
- pos1.z=pos.z
-
- pos1.x=pos1.x+1
- if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
- x2=1
- x1=minetest.env:get_meta(pos1):get_float("x1")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos1,"technic:lv_cable"..rule)
- meta=minetest.env:get_meta(pos1)
- meta:set_float("x2",x2)
- meta=minetest.env:get_meta(pos)
- x1=1
- x2=minetest.env:get_meta(pos):get_float("x2")
- y1=minetest.env:get_meta(pos):get_float("y1")
- y2=minetest.env:get_meta(pos):get_float("y2")
- z1=minetest.env:get_meta(pos):get_float("z1")
- z2=minetest.env:get_meta(pos):get_float("z2")
- meta:set_float("x1",x1)
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:lv_cable"..rule)
- end
-
- pos1.x=pos1.x-2
- if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
- x1=1
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos1,"technic:lv_cable"..rule)
- meta=minetest.env:get_meta(pos1)
- meta:set_float("x1",x1)
- meta=minetest.env:get_meta(pos)
- x2=1
- x1=minetest.env:get_meta(pos):get_float("x1")
- y1=minetest.env:get_meta(pos):get_float("y1")
- y2=minetest.env:get_meta(pos):get_float("y2")
- z1=minetest.env:get_meta(pos):get_float("z1")
- z2=minetest.env:get_meta(pos):get_float("z2")
- meta:set_float("x2",x2)
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:lv_cable"..rule)
- end
-
- pos1.x=pos1.x+1
-
- pos1.y=pos1.y+1
- if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
- y2=1
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos1,"technic:lv_cable"..rule)
- meta=minetest.env:get_meta(pos1)
- meta:set_float("y2",y2)
- meta=minetest.env:get_meta(pos)
- y1=1
- x1=minetest.env:get_meta(pos):get_float("x1")
- x2=minetest.env:get_meta(pos):get_float("x2")
- y2=minetest.env:get_meta(pos):get_float("y2")
- z1=minetest.env:get_meta(pos):get_float("z1")
- z2=minetest.env:get_meta(pos):get_float("z2")
- meta:set_float("y1",y1)
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:lv_cable"..rule)
- end
-
- if minetest.env:get_meta(pos1):get_float("technic_power_machine")==1 then
- y1=1
- x1=minetest.env:get_meta(pos):get_float("x1")
- x2=minetest.env:get_meta(pos):get_float("x2")
- y2=minetest.env:get_meta(pos):get_float("y2")
- z1=minetest.env:get_meta(pos):get_float("z1")
- z2=minetest.env:get_meta(pos):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:lv_cable"..rule)
- meta=minetest.env:get_meta(pos)
- meta:set_float("y1",y1)
- end
-
-
- pos1.y=pos1.y-2
- if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
- y1=1
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos1,"technic:lv_cable"..rule)
- meta=minetest.env:get_meta(pos1)
- meta:set_float("y1",y1)
- meta=minetest.env:get_meta(pos)
- y2=1
- x1=minetest.env:get_meta(pos):get_float("x1")
- x2=minetest.env:get_meta(pos):get_float("x2")
- y1=minetest.env:get_meta(pos):get_float("y1")
- z1=minetest.env:get_meta(pos):get_float("z1")
- z2=minetest.env:get_meta(pos):get_float("z2")
- meta:set_float("y2",y2)
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:lv_cable"..rule)
- end
- pos1.y=pos1.y+1
-
- pos1.z=pos1.z+1
- if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
- z2=1
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos1,"technic:lv_cable"..rule)
- meta=minetest.env:get_meta(pos1)
- meta:set_float("z2",z2)
- meta=minetest.env:get_meta(pos)
- z1=1
- x1=minetest.env:get_meta(pos):get_float("x1")
- x2=minetest.env:get_meta(pos):get_float("x2")
- y1=minetest.env:get_meta(pos):get_float("y1")
- y2=minetest.env:get_meta(pos):get_float("y2")
- z2=minetest.env:get_meta(pos):get_float("z2")
- meta:set_float("z1",z1)
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:lv_cable"..rule)
- end
- pos1.z=pos1.z-2
- if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
- z1=1
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos1,"technic:lv_cable"..rule)
- meta=minetest.env:get_meta(pos1)
- meta:set_float("z1",z1)
- meta=minetest.env:get_meta(pos)
- z2=1
- x1=minetest.env:get_meta(pos):get_float("x1")
- x2=minetest.env:get_meta(pos):get_float("x2")
- y1=minetest.env:get_meta(pos):get_float("y1")
- y2=minetest.env:get_meta(pos):get_float("y2")
- z1=minetest.env:get_meta(pos):get_float("z1")
- meta:set_float("z2",z2)
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:lv_cable"..rule)
- end
- pos1.z=pos1.z+1
-end
-
-function make_rule_number (x1,x2,y1,y2,z1,z2)
-local temp= z2+z1*2+y2*4+y1*8+x2*16+x1*32
-return temp
-end
-
-check_connections_on_destroy = function(pos)
- local pos1={}
- pos1.x=pos.x
- pos1.y=pos.y
- pos1.z=pos.z
-
- pos1.x=pos1.x+1
- if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
- x2=0
- x1=minetest.env:get_meta(pos1):get_float("x1")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
- if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end
- meta=minetest.env:get_meta(pos1)
- meta:set_float("x2",x2)
- end
-
- pos1.x=pos1.x-2
- if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
- x1=0
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
- if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end
- meta=minetest.env:get_meta(pos1)
- meta:set_float("x1",x1)
- end
- pos1.x=pos1.x+1
-
- pos1.y=pos1.y+1
- if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
- y2=0
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
- if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end
- meta=minetest.env:get_meta(pos1)
- meta:set_float("y2",y2)
- end
-
- pos1.y=pos1.y-2
- if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
- y1=0
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
- if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end
- meta=minetest.env:get_meta(pos1)
- meta:set_float("y1",y1)
- end
- pos1.y=pos1.y+1
-
- pos1.z=pos1.z+1
- if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
- z2=0
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
- if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end
- meta=minetest.env:get_meta(pos1)
- meta:set_float("z2",z2)
- end
-
- pos1.z=pos1.z-2
- if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
- z1=0
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
- if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end
- meta=minetest.env:get_meta(pos1)
- meta:set_float("z1",z1)
- end
- pos1.y=pos1.y+1
-
-end
-
+++ /dev/null
---MV cable node boxes
-
-
-minetest.register_alias("mv_cable", "technic:mv_cable")
-
-minetest.register_craft({
- output = 'technic:mv_cable 3',
- recipe ={
- {'technic:rubber','technic:rubber','technic:rubber'},
- {'technic:lv_cable','technic:lv_cable','technic:lv_cable'},
- {'technic:rubber','technic:rubber','technic:rubber'},
- }
-})
-
-
-minetest.register_craftitem("technic:mv_cable", {
- description = "Medium Voltage Copper Cable",
- stack_max = 99,
-})
-
-minetest.register_node("technic:mv_cable", {
- description = "Medium Voltage Copper Cable",
- tiles = {"technic_mv_cable.png"},
- inventory_image = "technic_mv_cable_wield.png",
- wield_image = "technic_mv_cable_wield.png",
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
- sounds = default.node_sound_wood_defaults(),
- drop = "technic:mv_cable",
- mv_cablelike=1,
- rules_x1=0,
- rules_x2=0,
- rules_y1=0,
- rules_y2=0,
- rules_z1=0,
- rules_z2=0,
- paramtype = "light",
- drawtype = "nodebox",
- selection_box = {
- type = "fixed",
- fixed = {
- { -0.1 , -0.1 , -0.1 , 0.1 , 0.1 , 0.1 },
- }},
- node_box = {
- type = "fixed",
- fixed = {
- { -0.1 , -0.1 , -0.1 , 0.1 , 0.1 , 0.1 },
- }},
- on_construct = function(pos)
- meta=minetest.env:get_meta(pos)
- meta:set_float("mv_cablelike",1)
- meta:set_float("x1",0)
- meta:set_float("x2",0)
- meta:set_float("y1",0)
- meta:set_float("y2",0)
- meta:set_float("z1",0)
- meta:set_float("z2",0)
- MV_check_connections (pos)
- end,
-
- after_dig_node = function (pos, oldnode, oldmetadata, digger)
- MV_check_connections_on_destroy (pos)
- end,
-
-})
-
-
-str_y1= { -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1 } --0 y+
-str_x1= { -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1 } --0 x+
-str_z1= { -0.1 , -0.1 , 0.1 , 0.1 , 0.1 , 0.5 } --0 z+
-str_z2= { -0.1 , -0.1, -0.5 , 0.1 , 0.1 , 0.1 } --0 z-
-str_y2= { -0.1 , -0.5, -0.1 , 0.1 , 0.1 , 0.1 } --0 y-
-str_x2= { -0.5 , -0.1, -0.1 , 0.1 , 0.1 , 0.1 } --0 x-
-
-
-
-local x1,x2,y1,y2,z1,z2
-local count=0
-
-for x1 = 0, 1, 1 do --x-
-for x2 = 0, 1, 1 do --x+
-for y1 = 0, 1, 1 do --y-
-for y2 = 0, 1, 1 do --y-
-for z1 = 0, 1, 1 do --z-
-for z2 = 0, 1, 1 do --z+
-
-temp_x1={} temp_x2={} temp_y1={} temp_y2={} temp_z1={} temp_z2={}
-
-if x1==1 then temp_x1=str_x1 end
-if x2==1 then temp_x2=str_x2 end
-if y1==1 then temp_y1=str_y1 end
-if y2==1 then temp_y2=str_y2 end
-if z1==1 then temp_z1=str_z1 end
-if z2==1 then temp_z2=str_z2 end
-
-
-minetest.register_node("technic:mv_cable"..count, {
- description = "Medium Voltage Copper Cable",
- tiles = {"technic_mv_cable.png"},
- groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
- sounds = default.node_sound_wood_defaults(),
- drop = "technic:mv_cable",
- rules_x1=0,
- rules_x2=0,
- rules_y1=0,
- rules_y2=0,
- rules_z1=0,
- rules_z2=0,
- cablelike=1,
- paramtype = "light",
- drawtype = "nodebox",
- selection_box = {
- type = "fixed",
- fixed = {
- temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
- }},
-
- node_box = {
- type = "fixed",
- fixed = {
- temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
- }},
-
- after_dig_node = function (pos, oldnode, oldmetadata, digger)
- MV_check_connections_on_destroy (pos)
- end,
-
-})
-
-count=count+1 end end end end end end
-
-MV_check_connections = function(pos)
- local pos1={}
- pos1.x=pos.x
- pos1.y=pos.y
- pos1.z=pos.z
-
- pos1.x=pos1.x+1
- if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
- x2=1
- x1=minetest.env:get_meta(pos1):get_float("x1")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos1,"technic:mv_cable"..rule)
- meta=minetest.env:get_meta(pos1)
- meta:set_float("x2",x2)
- meta=minetest.env:get_meta(pos)
- x1=1
- x2=minetest.env:get_meta(pos):get_float("x2")
- y1=minetest.env:get_meta(pos):get_float("y1")
- y2=minetest.env:get_meta(pos):get_float("y2")
- z1=minetest.env:get_meta(pos):get_float("z1")
- z2=minetest.env:get_meta(pos):get_float("z2")
- meta:set_float("x1",x1)
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:mv_cable"..rule)
- end
-
- pos1.x=pos1.x-2
- if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
- x1=1
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos1,"technic:mv_cable"..rule)
- meta=minetest.env:get_meta(pos1)
- meta:set_float("x1",x1)
- meta=minetest.env:get_meta(pos)
- x2=1
- x1=minetest.env:get_meta(pos):get_float("x1")
- y1=minetest.env:get_meta(pos):get_float("y1")
- y2=minetest.env:get_meta(pos):get_float("y2")
- z1=minetest.env:get_meta(pos):get_float("z1")
- z2=minetest.env:get_meta(pos):get_float("z2")
- meta:set_float("x2",x2)
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:mv_cable"..rule)
- end
-
- pos1.x=pos1.x+1
-
- pos1.y=pos1.y+1
- if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
- y2=1
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos1,"technic:mv_cable"..rule)
- meta=minetest.env:get_meta(pos1)
- meta:set_float("y2",y2)
- meta=minetest.env:get_meta(pos)
- y1=1
- x1=minetest.env:get_meta(pos):get_float("x1")
- x2=minetest.env:get_meta(pos):get_float("x2")
- y2=minetest.env:get_meta(pos):get_float("y2")
- z1=minetest.env:get_meta(pos):get_float("z1")
- z2=minetest.env:get_meta(pos):get_float("z2")
- meta:set_float("y1",y1)
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:mv_cable"..rule)
- end
-
- if minetest.env:get_meta(pos1):get_float("technic_mv_power_machine")==1 then
- y1=1
- x1=minetest.env:get_meta(pos):get_float("x1")
- x2=minetest.env:get_meta(pos):get_float("x2")
- y2=minetest.env:get_meta(pos):get_float("y2")
- z1=minetest.env:get_meta(pos):get_float("z1")
- z2=minetest.env:get_meta(pos):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:mv_cable"..rule)
- meta=minetest.env:get_meta(pos)
- meta:set_float("y1",y1)
- end
-
-
- pos1.y=pos1.y-2
- if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
- y1=1
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos1,"technic:mv_cable"..rule)
- meta=minetest.env:get_meta(pos1)
- meta:set_float("y1",y1)
- meta=minetest.env:get_meta(pos)
- y2=1
- x1=minetest.env:get_meta(pos):get_float("x1")
- x2=minetest.env:get_meta(pos):get_float("x2")
- y1=minetest.env:get_meta(pos):get_float("y1")
- z1=minetest.env:get_meta(pos):get_float("z1")
- z2=minetest.env:get_meta(pos):get_float("z2")
- meta:set_float("y2",y2)
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:mv_cable"..rule)
- end
- pos1.y=pos1.y+1
-
- pos1.z=pos1.z+1
- if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
- z2=1
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos1,"technic:mv_cable"..rule)
- meta=minetest.env:get_meta(pos1)
- meta:set_float("z2",z2)
- meta=minetest.env:get_meta(pos)
- z1=1
- x1=minetest.env:get_meta(pos):get_float("x1")
- x2=minetest.env:get_meta(pos):get_float("x2")
- y1=minetest.env:get_meta(pos):get_float("y1")
- y2=minetest.env:get_meta(pos):get_float("y2")
- z2=minetest.env:get_meta(pos):get_float("z2")
- meta:set_float("z1",z1)
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:mv_cable"..rule)
- end
- pos1.z=pos1.z-2
- if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
- z1=1
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos1,"technic:mv_cable"..rule)
- meta=minetest.env:get_meta(pos1)
- meta:set_float("z1",z1)
- meta=minetest.env:get_meta(pos)
- z2=1
- x1=minetest.env:get_meta(pos):get_float("x1")
- x2=minetest.env:get_meta(pos):get_float("x2")
- y1=minetest.env:get_meta(pos):get_float("y1")
- y2=minetest.env:get_meta(pos):get_float("y2")
- z1=minetest.env:get_meta(pos):get_float("z1")
- meta:set_float("z2",z2)
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- hacky_swap_node(pos,"technic:mv_cable"..rule)
- end
- pos1.z=pos1.z+1
-end
-
-
-MV_check_connections_on_destroy = function(pos)
- local pos1={}
- pos1.x=pos.x
- pos1.y=pos.y
- pos1.z=pos.z
-
- pos1.x=pos1.x+1
- if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
- x2=0
- x1=minetest.env:get_meta(pos1):get_float("x1")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
- if rule>0 then hacky_swap_node(pos1,"technic:mv_cable"..rule) end
- meta=minetest.env:get_meta(pos1)
- meta:set_float("x2",x2)
- end
-
- pos1.x=pos1.x-2
- if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
- x1=0
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
- if rule>0 then hacky_swap_node(pos1,"technic:mv_cable"..rule) end
- meta=minetest.env:get_meta(pos1)
- meta:set_float("x1",x1)
- end
- pos1.x=pos1.x+1
-
- pos1.y=pos1.y+1
- if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
- y2=0
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
- if rule>0 then hacky_swap_node(pos1,"technic:mv_cable"..rule) end
- meta=minetest.env:get_meta(pos1)
- meta:set_float("y2",y2)
- end
-
- pos1.y=pos1.y-2
- if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
- y1=0
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
- if rule>0 then hacky_swap_node(pos1,"technic:mv_cable"..rule) end
- meta=minetest.env:get_meta(pos1)
- meta:set_float("y1",y1)
- end
- pos1.y=pos1.y+1
-
- pos1.z=pos1.z+1
- if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
- z2=0
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z1=minetest.env:get_meta(pos1):get_float("z1")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
- if rule>0 then hacky_swap_node(pos1,"technic:mv_cable"..rule) end
- meta=minetest.env:get_meta(pos1)
- meta:set_float("z2",z2)
- end
-
- pos1.z=pos1.z-2
- if minetest.env:get_meta(pos1):get_float("mv_cablelike")==1 then
- z1=0
- x1=minetest.env:get_meta(pos1):get_float("x1")
- x2=minetest.env:get_meta(pos1):get_float("x2")
- y1=minetest.env:get_meta(pos1):get_float("y1")
- y2=minetest.env:get_meta(pos1):get_float("y2")
- z2=minetest.env:get_meta(pos1):get_float("z2")
- rule=make_rule_number(x1,x2,y1,y2,z1,z2)
- if rule==0 then hacky_swap_node(pos1,"technic:mv_cable") end
- if rule>0 then hacky_swap_node(pos1,"technic:mv_cable"..rule) end
- meta=minetest.env:get_meta(pos1)
- meta:set_float("z1",z1)
- end
- pos1.y=pos1.y+1
-
-end
-