New file |
| | |
| | | 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, |
| | | }) |
New file |
| | |
| | | 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 |
| | | |
New file |
| | |
| | | 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 |
| | | |
New file |
| | |
| | | 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, |
| | | }) |
New file |
| | |
| | | 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 |
New file |
| | |
| | | chest_groups1 = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1} |
| | | chest_groups2 = {snappy=2,choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1,not_in_creative_inventory=1} |
| | | |
| | | tubes_properties = {insert_object=function(pos,node,stack,direction) |
| | | local meta=minetest.env:get_meta(pos) |
| | | local inv=meta:get_inventory() |
| | | return inv:add_item("main",stack) |
| | | end, |
| | | can_insert=function(pos,node,stack,direction) |
| | | local meta=minetest.env:get_meta(pos) |
| | | local inv=meta:get_inventory() |
| | | return inv:room_for_item("main",stack) |
| | | end, |
| | | input_inventory="main"} |
| | | |
| | | chest_can_dig = function(pos,player) |
| | | local meta = minetest.env:get_meta(pos); |
| | | local inv = meta:get_inventory() |
| | | return inv:is_empty("main") |
| | | end |
| | | |
| | | def_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 |
| | | |
| | | def_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 |
| | | |
| | | def_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 |
| | | |
| | | def_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 |
| | | |
| | | def_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 |
| | | |
| | | def_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 has_locked_chest_privilege(meta, player) |
| | | if player:get_player_name() ~= meta:get_string("owner") then |
| | | return false |
| | | end |
| | | return true |
| | | end |
New file |
| | |
| | | |
| | | 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(":stairsplus", "concrete", "technic:concrete", |
| | | {cracky=3}, |
| | | {"technic_concrete_block.png"}, |
| | | "Concrete Stairs", |
| | | "Concrete Slab", |
| | | "Concrete Panel", |
| | | "Concrete Microblock", |
| | | "concrete") |
New file |
| | |
| | | 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 |
New file |
| | |
| | | |
| | | 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'}, |
| | | |
| | | }) |
| | | |
| | | mk1_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 |
| | | |
| | | mk1_off = function(pos, node) |
| | | if node.name == "technic:constructor_mk1_on" then |
| | | hacky_swap_node(pos,"technic:constructor_mk1_off") |
| | | nodeupdate(pos) |
| | | end |
| | | end |
| | | |
| | | |
| | | 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}, |
| | | mesecons= {effector={action_on=mk1_on}}, |
| | | 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 = 2,not_in_creative_inventory=1}, |
| | | mesecons= {effector={action_off=mk1_off}}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
| | | |
| | | |
| | | --Constructor MK2 |
| | | |
| | | mk2_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 |
| | | |
| | | mk2_off = function(pos, node) |
| | | if node.name == "technic:constructor_mk2_on" then |
| | | hacky_swap_node(pos,"technic:constructor_mk2_off") |
| | | nodeupdate(pos) |
| | | end |
| | | end |
| | | |
| | | 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 = 2}, |
| | | mesecons= {effector={action_on=mk2_on}}, |
| | | 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 = 2, not_in_creative_inventory=1}, |
| | | mesecons= {effector={action_off=mk2_off}}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
| | | |
| | | |
| | | -- Constructor MK3 |
| | | mk3_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 |
| | | |
| | | mk3_off = function(pos, node) |
| | | if node.name == "technic:constructor_mk3_on" then |
| | | hacky_swap_node(pos,"technic:constructor_mk3_off") |
| | | nodeupdate(pos) |
| | | end |
| | | end |
| | | |
| | | 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 = 2}, |
| | | mesecons= {effector={action_on=mk3_on}}, |
| | | 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 = 2,not_in_creative_inventory=1}, |
| | | mesecons= {effector={action_off=mk3_off}}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
| | | |
| | | |
| | | 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 |
New file |
| | |
| | | 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 = chest_groups1, |
| | | tube = tubes_properties,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 = chest_can_dig, |
| | | on_metadata_inventory_move = def_on_metadata_inventory_move, |
| | | on_metadata_inventory_put = def_on_metadata_inventory_put, |
| | | on_metadata_inventory_take = def_on_metadata_inventory_take |
| | | }) |
| | | |
| | | 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 = chest_groups1, |
| | | tube = tubes_properties,legacy_facedir_simple = true, |
| | | 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 = chest_can_dig, |
| | | allow_metadata_inventory_move = def_allow_metadata_inventory_move, |
| | | allow_metadata_inventory_put = def_allow_metadata_inventory_put, |
| | | allow_metadata_inventory_take = def_allow_metadata_inventory_take, |
| | | on_metadata_inventory_move = def_on_metadata_inventory_move, |
| | | on_metadata_inventory_put = def_on_metadata_inventory_put, |
| | | on_metadata_inventory_take = def_on_metadata_inventory_take |
| | | }) |
New file |
| | |
| | | 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) |
New file |
| | |
| | | moreores |
| | | pipeworks |
| | | mesecons |
| | | stairsplus |
New file |
| | |
| | | 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") |
| | | |
| | | |
New file |
| | |
| | | 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, |
| | | }) |
New file |
| | |
| | | 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, |
| | | }) |
New file |
| | |
| | | -- 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) |
| | | if player then |
| | | 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 |
| | | 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 |
New file |
| | |
| | | -- 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 |
New file |
| | |
| | | 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 |
| | | }) |
| | | |
New file |
| | |
| | | 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 |
New file |
| | |
| | | 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, |
| | | }) |
| | | |
| | | gold_chest_formspec = "invsize[12,9;]".. |
| | | "list[current_name;main;0,0;12,4;]".. |
| | | "list[current_player;main;0,5;8,4;]" |
| | | |
| | | gold_chest_inv_size = 12*4 |
| | | |
| | | 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 = chest_groups1, |
| | | tube = tubes_properties, |
| | | 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",gold_chest_formspec) |
| | | meta:set_string("infotext", "Gold Chest") |
| | | local inv = meta:get_inventory() |
| | | inv:set_size("main", gold_chest_inv_size) |
| | | end, |
| | | |
| | | can_dig = chest_can_dig, |
| | | |
| | | 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",gold_chest_formspec) |
| | | end, |
| | | |
| | | on_metadata_inventory_move = def_on_metadata_inventory_move, |
| | | on_metadata_inventory_put = def_on_metadata_inventory_put, |
| | | on_metadata_inventory_take = def_on_metadata_inventory_take |
| | | }) |
| | | |
| | | 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 = chest_groups2, |
| | | tube = tubes_properties, |
| | | 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",gold_chest_formspec) |
| | | meta:set_string("infotext", "Gold Chest") |
| | | local inv = meta:get_inventory() |
| | | inv:set_size("main", gold_chest_inv_size) |
| | | end, |
| | | |
| | | can_dig =chest_can_dig, |
| | | |
| | | 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",gold_chest_formspec) |
| | | end, |
| | | |
| | | on_metadata_inventory_move = def_on_metadata_inventory_move, |
| | | on_metadata_inventory_put = def_on_metadata_inventory_put, |
| | | on_metadata_inventory_take = def_on_metadata_inventory_take |
| | | }) |
| | | 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 = chest_groups1, |
| | | tube = tubes_properties, |
| | | 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",gold_chest_formspec) |
| | | meta:set_string("infotext", "Gold Locked Chest") |
| | | meta:set_string("owner", "") |
| | | local inv = meta:get_inventory() |
| | | inv:set_size("main", gold_chest_inv_size) |
| | | end, |
| | | |
| | | can_dig =chest_can_dig, |
| | | |
| | | 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",gold_chest_formspec) |
| | | end, |
| | | |
| | | allow_metadata_inventory_move = def_allow_metadata_inventory_move, |
| | | allow_metadata_inventory_put = def_allow_metadata_inventory_put, |
| | | allow_metadata_inventory_take = def_allow_metadata_inventory_take, |
| | | on_metadata_inventory_move = def_on_metadata_inventory_move, |
| | | on_metadata_inventory_put = def_on_metadata_inventory_put, |
| | | on_metadata_inventory_take = def_on_metadata_inventory_take |
| | | }) |
| | | |
| | | 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 = chest_groups2, |
| | | tube = tubes_properties, |
| | | 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",gold_chest_formspec) |
| | | meta:set_string("infotext", "Gold Locked Chest") |
| | | meta:set_string("owner", "") |
| | | local inv = meta:get_inventory() |
| | | inv:set_size("main", gold_chest_inv_size) |
| | | end, |
| | | |
| | | can_dig = chest_can_dig, |
| | | |
| | | 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",gold_chest_formspec) |
| | | end, |
| | | |
| | | allow_metadata_inventory_move = def_allow_metadata_inventory_move, |
| | | allow_metadata_inventory_put = def_allow_metadata_inventory_put, |
| | | allow_metadata_inventory_take = def_allow_metadata_inventory_take, |
| | | on_metadata_inventory_move = def_on_metadata_inventory_move, |
| | | on_metadata_inventory_put = def_on_metadata_inventory_put, |
| | | on_metadata_inventory_take = def_on_metadata_inventory_take |
| | | }) |
| | | 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 |
| | | |
New file |
| | |
| | | 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 |
New file |
| | |
| | | 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) |
| | | }) |
New file |
| | |
| | | -- Minetest 0.4.4 : technic |
| | | |
| | | 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.."/chest_commons.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") |
| | | |
| | | --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_drill==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 |
New file |
| | |
| | | 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 |
New file |
| | |
| | | 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 |
New file |
| | |
| | | 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 = chest_groups1, |
| | | tube = tubes_properties, |
| | | 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 = chest_can_dig, |
| | | on_metadata_inventory_move = def_on_metadata_inventory_move, |
| | | on_metadata_inventory_put = def_on_metadata_inventory_put, |
| | | on_metadata_inventory_take = def_on_metadata_inventory_take |
| | | }) |
| | | |
| | | 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 = chest_groups1, |
| | | tube = tubes_properties, |
| | | 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 = chest_can_dig, |
| | | allow_metadata_inventory_move = def_allow_metadata_inventory_move, |
| | | allow_metadata_inventory_put = def_allow_metadata_inventory_put, |
| | | allow_metadata_inventory_take = def_allow_metadata_inventory_take, |
| | | on_metadata_inventory_move = def_on_metadata_inventory_move, |
| | | on_metadata_inventory_put = def_on_metadata_inventory_put, |
| | | on_metadata_inventory_take = def_on_metadata_inventory_take |
| | | }) |
New file |
| | |
| | | -- 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 |
New file |
| | |
| | | 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) |
New file |
| | |
| | | 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'}, |
| | | } |
| | | }) |
| | | |
New file |
| | |
| | | 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 |
New file |
| | |
| | | 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 |
New file |
| | |
| | | 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, |
| | | }) |
New file |
| | |
| | | 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, |
| | | }) |
New file |
| | |
| | | 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 |
| | | }) |
| | | |
New file |
| | |
| | | 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'}, |
| | | |
| | | } |
| | | }) |
| | | |
| | | node_breaker_on = function(pos, node) |
| | | if node.name == "technic:nodebreaker_off" then |
| | | hacky_swap_node(pos,"technic:nodebreaker_on") |
| | | break_node (pos,node.param2) |
| | | nodeupdate(pos) |
| | | end |
| | | end |
| | | |
| | | node_breaker_off = function(pos, node) |
| | | if node.name == "technic:nodebreaker_on" then |
| | | hacky_swap_node(pos,"technic:nodebreaker_off") |
| | | nodeupdate(pos) |
| | | end |
| | | end |
| | | |
| | | 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 = 2,tubedevice=1}, |
| | | mesecons= {effector={action_on=node_breaker_on, action_off=node_breaker_off}}, |
| | | 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"}, |
| | | mesecons= {effector={action_on=node_breaker_on, action_off=node_breaker_off}}, |
| | | is_ground_content = true, |
| | | paramtype2 = "facedir", |
| | | groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1,not_in_creative_inventory=1}, |
| | | sounds = default.node_sound_stone_defaults(), |
| | | }) |
| | | |
| | | |
| | | 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) |
| | | 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}) |
| | | end |
| | | minetest.env:remove_node(pos2) |
| | | end |
| | | |
New file |
| | |
| | | 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(":stairsplus", "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(":stairsplus", "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(":stairsplus", "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(":stairsplus", "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 |
New file |
| | |
| | | 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, |
| | | }) |
New file |
| | |
| | | -- 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 = {"technic_rubber_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) |
| | | rubber_tree={ |
| | | axiom="FFFFA", |
| | | rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]", |
| | | rules_b="[&FFA]////[&FFA]////[&FFA]", |
| | | trunk="technic:rubber_tree_full", |
| | | leaves="technic:rubber_leaves", |
| | | angle=35, |
| | | iterations=3, |
| | | random_level=1, |
| | | thin_trunks=false; |
| | | fruit_tree=false, |
| | | fruit="" |
| | | } |
| | | minetest.env:spawn_tree(pos,rubber_tree) |
| | | 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 |
| | | rubber_tree={ |
| | | axiom="FFFFA", |
| | | rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]", |
| | | rules_b="[&FFA]////[&FFA]////[&FFA]", |
| | | trunk="technic:rubber_tree_full", |
| | | leaves="technic:rubber_leaves", |
| | | angle=35, |
| | | iterations=3, |
| | | random_level=1, |
| | | thin_trunks=false; |
| | | fruit_tree=false, |
| | | fruit="" |
| | | } |
| | | minetest.env:spawn_tree({x=pos.x, y=pos.y+1, z=pos.z},rubber_tree) |
| | | end |
| | | end) |
| | | |
| | | |
| | | -- ========= FUEL ========= |
| | | minetest.register_craft({ |
| | | type = "fuel", |
| | | recipe = "technic:rubber_sapling", |
| | | burntime = 10 |
| | | }) |
New file |
| | |
| | | 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"} |
| | | } |
| | | }) |
New file |
| | |
| | | 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 = chest_groups1, |
| | | tube = tubes_properties, |
| | | 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 = chest_can_dig, |
| | | |
| | | 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 = def_on_metadata_inventory_move, |
| | | on_metadata_inventory_put = def_on_metadata_inventory_put, |
| | | on_metadata_inventory_take = def_on_metadata_inventory_take |
| | | }) |
| | | |
| | | 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 = chest_groups2, |
| | | tube = tubes_properties, |
| | | 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 = chest_can_dig, |
| | | |
| | | 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 = def_allow_metadata_inventory_move, |
| | | allow_metadata_inventory_put = def_allow_metadata_inventory_put, |
| | | allow_metadata_inventory_take = def_allow_metadata_inventory_take, |
| | | on_metadata_inventory_move = def_on_metadata_inventory_move, |
| | | on_metadata_inventory_put = def_on_metadata_inventory_put, |
| | | on_metadata_inventory_take = def_on_metadata_inventory_take |
| | | }) |
New file |
| | |
| | | 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, |
| | | }) |
New file |
| | |
| | | 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, |
| | | }) |
New file |
| | |
| | | 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"} |
| | | } |
| | | }) |
New file |
| | |
| | | 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(), |
| | | }) |
New file |
| | |
| | | If you haven't modified the texture_path setting, you can copy textures of your texture packs into here. Folders are currently not supported. |
New file |
| | |
| | | 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() |
| | | if (src_item["name"]=="technic:water_can" or src_item["name"]=="technic:lava_can") then |
| | | load_step=0 |
| | | load_cost=0 |
| | | end |
| | | 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 |
| | | }) |
New file |
| | |
| | | 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", |
| | | }) |
New file |
| | |
| | | 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, |
| | | }) |
New file |
| | |
| | | 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 |
New file |
| | |
| | | --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 |
| | | |
New file |
| | |
| | | --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 |
| | | |