From 56f4c4a7ae2a9884ff3fafb3ea3c46c580be1949 Mon Sep 17 00:00:00 2001 From: ConfidentOwl Date: Fri, 27 Jan 2023 22:32:33 +0300 Subject: [PATCH] Add base electro --- electro_generator/base_steam_turbins.lua | 127 +++++++++++++++++++++++ electro_generator/init.lua | 5 + electro_wire/electro_wire.lua | 80 ++++++++++++++ electro_wire/init.lua | 6 ++ init.lua | 2 + lists_of_all.lua | 2 +- ore/node_register.lua | 38 ++++++- textures/owl_tech_base_wire.png | Bin 0 -> 5815 bytes textures/owl_tech_base_wire_metal.png | Bin 0 -> 5797 bytes textures/owl_tech_circuit_tire1.png | Bin 0 -> 5591 bytes textures/owl_tech_lamp_base.png | Bin 0 -> 5783 bytes textures/owl_tech_lamp_part.png | Bin 0 -> 5105 bytes 12 files changed, 258 insertions(+), 2 deletions(-) create mode 100644 electro_generator/base_steam_turbins.lua create mode 100644 electro_generator/init.lua create mode 100644 electro_wire/electro_wire.lua create mode 100644 electro_wire/init.lua create mode 100644 textures/owl_tech_base_wire.png create mode 100644 textures/owl_tech_base_wire_metal.png create mode 100644 textures/owl_tech_circuit_tire1.png create mode 100644 textures/owl_tech_lamp_base.png create mode 100644 textures/owl_tech_lamp_part.png diff --git a/electro_generator/base_steam_turbins.lua b/electro_generator/base_steam_turbins.lua new file mode 100644 index 0000000..6eae524 --- /dev/null +++ b/electro_generator/base_steam_turbins.lua @@ -0,0 +1,127 @@ +local S = minetest.get_translator(minetest.get_current_modname()) +local name = minetest.get_current_modname() +local path = minetest.get_modpath(name) + +local function set_formspect_base_steam_turbine(meta) + local fluid_1_name = owl_tech.get_pull_fluid_name(meta,1) + local fluid_1_volume = owl_tech.get_pull_volume(meta,1) + local max_charge = owl_tech:get_charge_max(meta) + local curent_charge = owl_tech:get_charge(meta) + local voltage = owl_tech:get_voltage(meta) + local formspec = "size[9,8.75]".. + "label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. + "list[current_player;main;0,4.5;9,3;9]".. + mcl_formspec.get_itemslot_bg(0,4.5,9,3).. + "list[current_player;main;0,7.74;9,1;]".. + mcl_formspec.get_itemslot_bg(0,7.74,9,1).. + "label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Base steam turbin"))).."]".. + "label[0,2.5;"..minetest.formspec_escape(minetest.colorize("#313131", (max_charge.."--"..curent_charge.."--"..voltage))).."]".. + "list[context;battari_slot;2.5,2.5;1,1;]".. + mcl_formspec.get_itemslot_bg(2.5,2.5,1,1).. + "label[0,1.5;"..minetest.formspec_escape(minetest.colorize("#313131", (fluid_1_name.."--"..fluid_1_volume))).."]".. + "listring[current_player;main]".. + "listring[context;battari_slot]".. + "listring[current_player;main]".. + "listring[current_player;main]" + meta:set_string("formspec", formspec) +end + + +minetest.register_node("owl_tech:base_steam_turbin", { + description = S("Base turbine"), + _doc_items_longdesc = S("First generate electro"), + tiles = { + "(owl_tech_base_meshanism_side.png^[colorize:#a35900:128)^owl_tech_steam_output.png", + "owl_tech_base_meshanism_side.png^[colorize:#a35900:128", + "owl_tech_base_meshanism_side.png^[colorize:#a35900:128", + "owl_tech_base_meshanism_side.png^[colorize:#a35900:128", + "owl_tech_base_meshanism_side.png^[colorize:#a35900:128", + "(owl_tech_base_meshanism_side.png^[colorize:#a35900:128)^owl_tech_boiler_face.png", + }, + is_ground_content = false, + stack_max = 64, + groups = {pickaxey=2, owl_tech_generator=1 ,fluid_in=1,fuel=1,dst=1 }, + sounds = mcl_sounds.node_sound_metal_defaults(), + paramtype2 = "facedir", + _mcl_blast_resistance = 6, + _mcl_hardness = 5, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + owl_tech.add_new_pull(meta,16000,1,0) --steam for input + owl_tech.set_pull_fluid_whitlist(meta,1,"owl_tech_steam") --whitlist for make input ONLY Water + owl_tech:add_electro(pos,32,16000) + owl_tech.update_fluid_pipe_around(pos) + set_formspect_base_steam_turbine(meta) + local timer =minetest.get_node_timer(pos) + local inv = meta:get_inventory() + inv:set_size("battari_slot", 1) ---Can charge items in slot WIP + + timer:start(0.2) + end, + --[[on_timer = function(pos, elapsed) + local timer = minetest.get_node_timer(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local fluid_its = inv:get_stack('fluid_in', 1) + local fuel_its = inv:get_stack('fuel', 1) + local dst_its = inv:get_stack('dst', 1) + if not fluid_its:is_empty() then --Load fluid from buckets + owl_tech.add_fluid_in_pull_from_itemslot(meta,fluid_its,inv,dst_its,'fluid_in','dst') + end + if owl_tech.get_fuel_time(meta)>0 then --burn process + owl_tech.fuel_burning(meta) + end + if owl_tech.get_curent_heat(meta)>0 and owl_tech.get_fuel_time(meta)==0 then --coling boiler if not burn + owl_tech.cooling_boiler(meta) + end + if owl_tech.get_curent_heat(meta)>100 + and owl_tech.get_pull_volume(meta,2)+owl_tech.get_water_in_steam(meta)*5<=owl_tech.get_pull_max_volume(meta,2) + and owl_tech.get_pull_volume(meta,1)-owl_tech.get_water_in_steam(meta)>=0 then --make steam + owl_tech.gen_steam_in_node_pull(meta,1,2,owl_tech.get_water_in_steam(meta)) + if owl_tech.get_pull_fluid_name(meta,2)~="owl_tech_steam" then + owl_tech.set_pull_fluid_name(meta,2,"owl_tech_steam") + end + end + if not fuel_its:is_empty() and owl_tech.get_fuel_time(meta)==0 then --Load fluid from buckets + local out_fuel= minetest.get_craft_result({method = "fuel", width = 1, items = {fuel_its}}) + if out_fuel.time>0 then + owl_tech.load_fuel_in_boiler(meta,inv,'fuel',out_fuel,fuel_its) + end + end + if minetest.get_item_group((minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})).name,"fluid_pipe") then --sand in pipe + local meta_up = minetest.get_meta({x=pos.x,y=pos.y+1,z=pos.z}) + local can_do ,inde_pull =owl_tech.test_add_fluid_in_any_pulls(meta_up,"owl_tech_steam",owl_tech.get_fluid_sand_in_tick(meta_up)) + local can_do2 ,inde_pull_2 , remove_amount =owl_tech.test_remove_fluid_in_any_pulls(meta,"owl_tech_steam",owl_tech.get_fluid_sand_in_tick(meta_up)) + if can_do and can_do2 then + owl_tech.add_fluid_in_node_pull(meta_up,"owl_tech_steam",remove_amount,inde_pull) + local pull_curent_volume = owl_tech.get_pull_volume(meta,2) + local difer = pull_curent_volume-remove_amount + owl_tech.set_pull_volume(meta,2,difer) + end + end + if minetest.get_item_group((minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})).name,"fluid_pipe") + and owl_tech.get_pull_fluid_name(minetest.get_meta({x=pos.x,y=pos.y-1,z=pos.z}),1)=="mcl_core:water_source" then --get from pipe water + local meta_up = minetest.get_meta({x=pos.x,y=pos.y-1,z=pos.z}) + local fluid_name_to_send = owl_tech.get_pull_fluid_name(meta_up,1) + local can_do ,inde_pull =owl_tech.test_add_fluid_in_any_pulls(meta,fluid_name_to_send,owl_tech.get_fluid_sand_in_tick(meta)) + local can_do2 ,inde_pull_2 , remove_amount =owl_tech.test_remove_fluid_in_any_pulls(meta_up,fluid_name_to_send,owl_tech.get_fluid_sand_in_tick(meta_up)) + if can_do and can_do2 then + owl_tech.add_fluid_in_node_pull(meta,fluid_name_to_send,remove_amount,inde_pull) + owl_tech.remove_fluid_in_node_pull(meta_up,remove_amount,inde_pull) + end + end + owl_tech.delit_name_fluid_if_0(meta) + set_formspect_base_boiler(meta) + timer:start(0.2) + end]] +}) +--Crafte bronze boiler +minetest.register_craft({ + type = "shaped", + output = "owl_tech:base_steam_turbin", + recipe = { + {"owl_tech:steel_plate","owl_tech:steel_plate","owl_tech:steel_plate"}, + {"owl_tech:steel_plate","owl_tech:steel_frames","owl_tech:steel_plate"}, + {"owl_tech:steel_plate","owl_tech:circuit_tire_1","owl_tech:steel_plate"} + } +}) diff --git a/electro_generator/init.lua b/electro_generator/init.lua new file mode 100644 index 0000000..b494c19 --- /dev/null +++ b/electro_generator/init.lua @@ -0,0 +1,5 @@ +local S = minetest.get_translator(minetest.get_current_modname()) +local name = minetest.get_current_modname() +local path = minetest.get_modpath(name) + +dofile(path .. "/electro_generator/base_steam_turbins.lua") \ No newline at end of file diff --git a/electro_wire/electro_wire.lua b/electro_wire/electro_wire.lua new file mode 100644 index 0000000..0d64968 --- /dev/null +++ b/electro_wire/electro_wire.lua @@ -0,0 +1,80 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +--Copper wire +minetest.register_node("owl_tech:copper_electro_wire",{ + description = "Copper electro wire tire 1", + _tt_help = S("Transport electro enegry"), + _doc_items_longdesc = S("Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates."), + _doc_items_usagehelp = S("Right-click the fence gate to open or close it."), + tiles = {"(owl_tech_base_fluid_pipe.png^[colorize:#ff5e00:128)^owl_tech_base_wire.png"}, + paramtype = "light", + is_ground_content = false, + stack_max = 64, + sunlight_propagates = true, + walkable = true, + groups = {owl_tech_electro_wire=1}, + drawtype = "nodebox", + node_box = { + type = "connected", + fixed = {-0.125,-0.125,-0.125,0.125,0.125,0.125} , + connect_top = {-0.125,-0.125,-0.125,0.125,0.5,0.125} , + connect_bottom = {-0.125,-0.5,-0.125,0.125,0.125,0.125} , + connect_front = {-0.125,-0.125,-0.5,0.125,0.125,0.125} , + connect_left = {-0.5,-0.125,-0.125,0.125,0.125,0.125} , + connect_back = {-0.125,-0.125,-0.125,0.125,0.125,0.5} , + connect_right = {-0.125,-0.125,-0.125,0.5,0.125,0.125} , + }, + connects_to = {"group:owl_tech_electro_wire","owl_tech_electro_mashine","owl_tech_electro_gen"}, + sounds = mcl_sounds.node_sound_wool_defaults(), + _mcl_hardness = 0.1, + _mcl_blast_resistance = 0.1, + on_construct = function(pos) + owl_tech:prepear_vire(pos,32) + local timer =minetest.get_node_timer(pos) + owl_tech:look_around_for_wire(pos) + --update wire around + if minetest.get_node_group(minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}),"group:owl_tech_electro_wire") then + owl_tech:look_around_for_wire({x=pos.x,y=pos.y+1,z=pos.z}) + end + if minetest.get_node_group(minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}),"group:owl_tech_electro_wire") then + owl_tech:look_around_for_wire({x=pos.x,y=pos.y-1,z=pos.z}) + end + if minetest.get_node_group(minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1}),"group:owl_tech_electro_wire") then + owl_tech:look_around_for_wire({x=pos.x,y=pos.y,z=pos.z+1}) + end + if minetest.get_node_group(minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1}),"group:owl_tech_electro_wire") then + owl_tech:look_around_for_wire({x=pos.x,y=pos.y,z=pos.z-1}) + end + if minetest.get_node_group(minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z}),"group:owl_tech_electro_wire") then + owl_tech:look_around_for_wire({x=pos.x+1,y=pos.y,z=pos.z}) + end + if minetest.get_node_group(minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z}),"group:owl_tech_electro_wire") then + owl_tech:look_around_for_wire({x=pos.x-1,y=pos.y,z=pos.z}) + end + -------------------- + + timer:start(0.2) + end, + on_timer = function (pos, elapsed) + local meta = minetest.get_meta(pos) + owl_tech:look_around_for_wire(pos) + + if meta:get_int("connect_amount")>0 then + owl_tech:send_to_side_electro(pos) + end + + + local timer =minetest.get_node_timer(pos) + timer:start(0.2) + end +}) +--Crafte iron fluid pipe +minetest.register_craft({ + type = "shaped", + output = "owl_tech:copper_electro_wire 4", + recipe = { + {"owl_tech:copper_plate","mcl_core:ruber_dust","owl_tech:copper_plate"}, + {"","",""}, + {"","",""} + } +}) \ No newline at end of file diff --git a/electro_wire/init.lua b/electro_wire/init.lua new file mode 100644 index 0000000..a49be86 --- /dev/null +++ b/electro_wire/init.lua @@ -0,0 +1,6 @@ +local S = minetest.get_translator(minetest.get_current_modname()) +local name = minetest.get_current_modname() +local path = minetest.get_modpath(name) + +dofile(path.."/electro_wire/electro_api.lua") +dofile(path.."/electro_wire/electro_wire.lua") \ No newline at end of file diff --git a/init.lua b/init.lua index 64bac7e..993be87 100755 --- a/init.lua +++ b/init.lua @@ -20,3 +20,5 @@ if i3_name~=nil then end dofile(path .. "/multiblocks/init.lua") --Multi-nodes dofile(path .. "/farming/init.lua") --Farming +dofile(path .. "/electro_wire/init.lua")--electro_vire electro_generator/init.lua +dofile(path .. "/electro_generator/init.lua")--electro generator \ No newline at end of file diff --git a/lists_of_all.lua b/lists_of_all.lua index 0df04ce..c0eab2d 100755 --- a/lists_of_all.lua +++ b/lists_of_all.lua @@ -72,7 +72,7 @@ FORGE_HAMMER_RECIPS={ } --List of all crops LIST_ALL_CROPS={ - "mcl_farming:wheat","mcl_farming:pumpkintige_unconnct","mcl_farming:beetroot","mcl_farming:melotige_unconnct","mcl_farming:carrot" + "mcl_farming:wheat","mcl_farming:pumpkintige_unconnct","mcl_farming:beetroot","mcl_farming:melotige_unconnct","mcl_farming:carrot","mcl_farming:potato_item" } --List all crops breed 1)time ,2)name new crop CROPS_BREED={ diff --git a/ore/node_register.lua b/ore/node_register.lua index ba3dacd..2a46a52 100755 --- a/ore/node_register.lua +++ b/ore/node_register.lua @@ -181,7 +181,7 @@ for i, value in ipairs(metals_ore_array) do cooktime = 10, }) end - --dust + --dust owl_tech_lamp_base.png owl_tech_lamp_part.png minetest.register_craftitem("owl_tech:"..metals_ore_array[i][1].."_dust", { description = S(metals_ore_array[i][2].. " dust"), _doc_items_longdesc = S(metals_ore_array[i][2].. " dust"), @@ -198,6 +198,24 @@ for i, value in ipairs(metals_ore_array) do {"owl_tech:work_mortar","owl_tech:work_mortar"}, } }) + --lamp + minetest.register_craftitem("owl_tech:"..metals_ore_array[i][1].."_lamp", { + description = S(metals_ore_array[i][2].. " lamp"), + _doc_items_longdesc = S("simple and reliable electrical circuit element"), + inventory_image = "owl_tech_lamp_base.png^(owl_tech_lamp_part.png^[colorize:"..metals_ore_array[i][5]..":128)", + stack_max = 64, + groups = { craftitem=1 }, + }) + --Cafte lamp + minetest.register_craft({ + type = "shaped", + output = "owl_tech:"..metals_ore_array[i][1].."_lamp 4", + recipe = { + {"mcl_core:glass","owl_tech:"..metals_ore_array[i][1].."_ingot","mcl_core:glass"}, + {"mcl_core:glass","owl_tech:"..metals_ore_array[i][1].."_ingot","mcl_core:glass",}, + {"","",""} + }, + }) --dirt dust minetest.register_craftitem("owl_tech:"..metals_ore_array[i][1].."_dirt_dust", { description = S(metals_ore_array[i][2].. " dirt dust"), @@ -980,4 +998,22 @@ minetest.register_craft({ {"mcl_core:stick", ""}, {"mcl_core:stick", ""} } +}) +--lamp +minetest.register_craftitem("owl_tech:circuit_tire_1", { + description = S("Circuit tire 1"), + _doc_items_longdesc = S("Simple lamp circuit"), + inventory_image = "owl_tech_circuit_tire1.png", + stack_max = 64, + groups = { craftitem=1 }, +}) +--Cafte lamp +minetest.register_craft({ + type = "shaped", + output = "owl_tech:circuit_tire_1 2", + recipe = { + {"owl_tech:tin_lamp","owl_tech:copper_electro_wire","owl_tech:tin_lamp"}, + {"owl_tech:iron_lamp","owl_tech:copper_electro_wire","owl_tech:iron_lamp",}, + {"owl_tech:copper_lamp","owl_tech:copper_electro_wire","owl_tech:copper_lamp"} + }, }) \ No newline at end of file diff --git a/textures/owl_tech_base_wire.png b/textures/owl_tech_base_wire.png new file mode 100644 index 0000000000000000000000000000000000000000..b57caf714a2ceee02d2df786178cda0dea2d575a GIT binary patch literal 5815 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
m3 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 literal 0 HcmV?d00001 diff --git a/textures/owl_tech_lamp_part.png b/textures/owl_tech_lamp_part.png new file mode 100644 index 0000000000000000000000000000000000000000..b62b365e26027481684da5605a2a1919f713dbb9 GIT binary patch literal 5105 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 literal 0 HcmV?d00001