Added regular Alloy Furnace
authorMaciej Kasatkin <mk@realbadangel.pl>
Tue, 30 Oct 2012 02:50:49 +0000 (03:50 +0100)
committerMaciej Kasatkin <mk@realbadangel.pl>
Tue, 30 Oct 2012 02:50:49 +0000 (03:50 +0100)
18 files changed:
alloy_furnace.lua
textures/technic_alloy_furnace_front.png
textures/technic_alloy_furnace_front_active.png
textures/technic_alloy_furnace_side.png
textures/technic_alloy_furnace_top.png
textures/technic_battery.png
textures/technic_coal_alloy_furnace_bottom.png [new file with mode: 0644]
textures/technic_coal_alloy_furnace_front.png [new file with mode: 0644]
textures/technic_coal_alloy_furnace_front_active.png [new file with mode: 0644]
textures/technic_coal_alloy_furnace_side.png [new file with mode: 0644]
textures/technic_coal_alloy_furnace_top.png [new file with mode: 0644]
textures/technic_electric_furnace_bottom.png
textures/technic_electric_furnace_front.png
textures/technic_electric_furnace_front_active.png
textures/technic_electric_furnace_side.png
textures/technic_electric_furnace_top.png
textures/technic_mining_laser_mk1.png
textures/technic_sonic_screwdriver.png

index 160947d30bed947ca2d577d82950629f1fca8c36..fd0bc70348c1afdce39e89af188808d9c92a8b03 100644 (file)
@@ -30,8 +30,6 @@ register_alloy_recipe ("technic:copper_ingot",2, "technic:zinc_ingot",1, "techni
 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_alias("alloy_furnace", "technic:alloy_furnace")
-
 
 minetest.register_craft({
        output = 'technic:alloy_furnace',
@@ -50,7 +48,7 @@ alloy_furnace_formspec =
        "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;Alloy Furnace]"..
+       "label[0,0;Electric Alloy Furnace]"..
        "label[1,3;Power level]"
        
 minetest.register_node("technic:alloy_furnace", {
@@ -68,7 +66,7 @@ minetest.register_node("technic:alloy_furnace", {
                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", "Alloy furnace")
+               meta:set_string("infotext", "Electric Alloy furnace")
                local inv = meta:get_inventory()
                inv:set_size("src", 1)
                inv:set_size("src2", 1)
@@ -106,18 +104,6 @@ minetest.register_node("technic:alloy_furnace_active", {
        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", alloy_furnace_formspec)
-               meta:set_string("infotext", "Alloy 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()
@@ -149,7 +135,7 @@ minetest.register_abm({
                                "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;Alloy Furnace]"..
+                               "label[0,0;Electric Alloy Furnace]"..
                                "label[1,3;Power level]")
 
                local inv = meta:get_inventory()
@@ -210,7 +196,7 @@ minetest.register_abm({
                
                if dst_index and meta:get_int("furnace_is_cookin")==0 then
                        hacky_swap_node(pos,"technic:alloy_furnace_active")
-                       meta:set_string("infotext","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
@@ -219,7 +205,7 @@ minetest.register_abm({
                        
                if meta:get_int("furnace_is_cookin")==0 or dst_index==nil then
                        hacky_swap_node(pos,"technic:alloy_furnace")
-                       meta:set_string("infotext","Alloy Furnace inactive")
+                       meta:set_string("infotext","Electric Alloy Furnace inactive")
                        meta:set_int("furnace_is_cookin",0)
                        meta:set_string("src_time", 0)
                end
@@ -237,4 +223,202 @@ if        alloy_recipes[i].src1_name==src_item1["name"] and
        then return i end
 end
 return nil
-end
\ No newline at end of file
+end
+
+
+--coal driven alloy furnace:
+
+minetest.register_craft({
+       output = 'technic:coal_alloy_furnace',
+       recipe = {
+               {'default:brick', 'default:brick', 'default:brick'},
+               {'default:brick', '', 'default:brick'},
+               {'default:brick', 'default:brick', 'default:brick'},
+       }
+})
+
+
+coal_alloy_furnace_formspec =
+       "size[8,9]"..
+       "label[0,0;Alloy Furnace]"..
+       "image[2,2;1,1;default_furnace_fire_bg.png]"..
+       "list[current_name;fuel;2,3;1,1;]"..
+       "list[current_name;src;2,1;1,1;]"..
+       "list[current_name;src2;3,1;1,1;]"..
+       "list[current_name;dst;5,1;2,2;]"..
+       "list[current_player;main;0,5;8,4;]"
+       
+minetest.register_node("technic:coal_alloy_furnace", {
+       description = "Alloy Furnace",
+       tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", "technic_coal_alloy_furnace_side.png",
+               "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front.png"},
+       paramtype2 = "facedir",
+       groups = {cracky=2},
+       legacy_facedir_simple = true,
+       sounds = default.node_sound_stone_defaults(),
+       on_construct = function(pos)
+               local meta = minetest.env:get_meta(pos)
+               meta:set_string("formspec", coal_alloy_furnace_formspec)
+               meta:set_string("infotext", "Alloy Furnace")
+               local inv = meta:get_inventory()
+               inv:set_size("fuel", 1)
+               inv:set_size("src", 1)
+               inv:set_size("src2", 1)
+               inv:set_size("dst", 4)
+               local furnace_is_cookin = 0
+               local dst_index = nil
+
+       end,
+       can_dig = function(pos,player)
+               local meta = minetest.env:get_meta(pos);
+               local inv = meta:get_inventory()
+               if not (inv:is_empty("fuel") or inv:is_empty("dst") or inv:is_empty("src") or inv:is_empty("src2") )then
+                       return false
+                       end
+               return true
+       end,
+})
+
+minetest.register_node("technic:coal_alloy_furnace_active", {
+       description = "Alloy Furnace",
+       tiles = {"technic_coal_alloy_furnace_top.png", "technic_coal_alloy_furnace_bottom.png", "technic_coal_alloy_furnace_side.png",
+               "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_side.png", "technic_coal_alloy_furnace_front_active.png"},
+       paramtype2 = "facedir",
+       light_source = 8,
+       drop = "technic:coal_alloy_furnace",
+       groups = {cracky=2, not_in_creative_inventory=1},
+       legacy_facedir_simple = true,
+       sounds = default.node_sound_stone_defaults(),
+       can_dig = function(pos,player)
+               local meta = minetest.env:get_meta(pos);
+               local inv = meta:get_inventory()
+               if not (inv:is_empty("fuel") or inv:is_empty("dst") or inv:is_empty("src") or inv:is_empty("src2") )then
+                       return false
+                       end
+               return true
+       end,
+})
+
+minetest.register_abm({
+       nodenames = {"technic:coal_alloy_furnace","technic:coal_alloy_furnace_active"},
+       interval = 1,
+       chance = 1,
+       
+       action = function(pos, node, active_object_count, active_object_count_wider)
+               local meta = minetest.env:get_meta(pos)
+               for i, name in ipairs({
+                               "fuel_totaltime",
+                               "fuel_time",
+                               "src_totaltime",
+                               "src_time"
+               }) do
+                       if meta:get_string(name) == "" then
+                               meta:set_float(name, 0.0)
+                       end
+               end
+
+               local inv = meta:get_inventory()
+
+               srcstack = inv:get_stack("src", 1)
+               if srcstack then src_item1=srcstack:to_table() end
+               srcstack = inv:get_stack("src2", 1)
+               if srcstack then src_item2=srcstack:to_table() end
+               dst_index=nil
+
+               if src_item1 and src_item2 then 
+                               dst_index=get_cook_result(src_item1,src_item2) 
+                               end     
+               
+               local was_active = false
+               
+               if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
+                       was_active = true
+                       meta:set_float("fuel_time", meta:get_float("fuel_time") + 1)
+                       meta:set_float("src_time", meta:get_float("src_time") + 1)
+                       if dst_index and meta:get_float("src_time") >= 5 then
+                               -- check if there's room for output in "dst" list
+                               dst_stack={}
+                               dst_stack["name"]=alloy_recipes[dst_index].dst_name
+                               dst_stack["count"]=alloy_recipes[dst_index].dst_count                   
+                               if inv:room_for_item("dst",dst_stack) then
+                                       -- Put result in "dst" list
+                                       inv:add_item("dst", dst_stack)
+                                       -- take stuff from "src" list
+                                       for i=1,alloy_recipes[dst_index].src1_count,1 do
+                                               srcstack = inv:get_stack("src", 1)
+                                               srcstack:take_item()
+                                               inv:set_stack("src", 1, srcstack)
+                                               end
+                                       for i=1,alloy_recipes[dst_index].src2_count,1 do
+                                               srcstack = inv:get_stack("src2", 1)
+                                               srcstack:take_item()
+                                               inv:set_stack("src2", 1, srcstack)
+                                               end
+                               else
+                                       print("Furnace inventory full!")
+                               end
+                               meta:set_string("src_time", 0)
+                       end
+               end
+               
+               if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
+                       local percent = math.floor(meta:get_float("fuel_time") /
+                                       meta:get_float("fuel_totaltime") * 100)
+                       meta:set_string("infotext","Furnace active: "..percent.."%")
+                       hacky_swap_node(pos,"technic:coal_alloy_furnace_active")
+                       meta:set_string("formspec",
+                               "size[8,9]"..
+                               "label[0,0;Electric Alloy Furnace]"..
+                               "image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:"..
+                                               (100-percent)..":default_furnace_fire_fg.png]"..
+                               "list[current_name;fuel;2,3;1,1;]"..
+                               "list[current_name;src;2,1;1,1;]"..
+                               "list[current_name;src2;3,1;1,1;]"..
+                               "list[current_name;dst;5,1;2,2;]"..
+                               "list[current_player;main;0,5;8,4;]")
+                       return
+               end
+
+               local fuel = nil
+               local fuellist = inv:get_list("fuel")
+               
+               srcstack = inv:get_stack("src", 1)
+               if srcstack then src_item1=srcstack:to_table() end
+               srcstack = inv:get_stack("src2", 1)
+               if srcstack then src_item2=srcstack:to_table() end
+               dst_index=nil
+
+               if src_item1 and src_item2 then 
+                               dst_index=get_cook_result(src_item1,src_item2) 
+                               end
+               
+               
+               if fuellist then
+                       fuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
+               end
+
+               if fuel.time <= 0 then
+                       meta:set_string("infotext","Furnace out of fuel")
+                       hacky_swap_node(pos,"technic:coal_alloy_furnace")
+                       meta:set_string("formspec", coal_alloy_furnace_formspec)
+                       return
+               end
+
+               if dst_index==nil then
+                       if was_active then
+                               meta:set_string("infotext","Furnace is empty")
+                               hacky_swap_node(pos,"technic:coal_alloy_furnace")
+                               meta:set_string("formspec", coal_alloy_furnace_formspec)
+                       end
+                       return
+               end
+
+               meta:set_string("fuel_totaltime", fuel.time)
+               meta:set_string("fuel_time", 0)
+               
+               local stack = inv:get_stack("fuel", 1)
+               stack:take_item()
+               inv:set_stack("fuel", 1, stack)
+       
+end,           
+})
\ No newline at end of file
index 669904906f95718a12589b509a86307e7ac9a252..9123fb64272fcdb9b2fdbaa147b7f02211492e1e 100644 (file)
Binary files a/textures/technic_alloy_furnace_front.png and b/textures/technic_alloy_furnace_front.png differ
index 64385185759fccc1731608019903f889bbcc7969..4dda2e691f94e929ecf2377f1bd0d6455cdfd389 100644 (file)
Binary files a/textures/technic_alloy_furnace_front_active.png and b/textures/technic_alloy_furnace_front_active.png differ
index 5352250443d0e86d57eb3ca4321ed5eb120c9174..b5bd42812903a7ce40693c9f427da322fc20723a 100644 (file)
Binary files a/textures/technic_alloy_furnace_side.png and b/textures/technic_alloy_furnace_side.png differ
index df619ad9c4ba568ff68ce66c285cd27e6d5255d6..67ef4b7d00001c2d7d3d87a6de5e10dde1240e1a 100644 (file)
Binary files a/textures/technic_alloy_furnace_top.png and b/textures/technic_alloy_furnace_top.png differ
index 19086783e2ca353db3c17dc0099ad840eb4ed20e..ee83b7457cf72da58b2ede68a6b06e7f5664ec80 100644 (file)
Binary files a/textures/technic_battery.png and b/textures/technic_battery.png differ
diff --git a/textures/technic_coal_alloy_furnace_bottom.png b/textures/technic_coal_alloy_furnace_bottom.png
new file mode 100644 (file)
index 0000000..7a5eed7
Binary files /dev/null and b/textures/technic_coal_alloy_furnace_bottom.png differ
diff --git a/textures/technic_coal_alloy_furnace_front.png b/textures/technic_coal_alloy_furnace_front.png
new file mode 100644 (file)
index 0000000..b00bef3
Binary files /dev/null and b/textures/technic_coal_alloy_furnace_front.png differ
diff --git a/textures/technic_coal_alloy_furnace_front_active.png b/textures/technic_coal_alloy_furnace_front_active.png
new file mode 100644 (file)
index 0000000..b41f619
Binary files /dev/null and b/textures/technic_coal_alloy_furnace_front_active.png differ
diff --git a/textures/technic_coal_alloy_furnace_side.png b/textures/technic_coal_alloy_furnace_side.png
new file mode 100644 (file)
index 0000000..3db8daa
Binary files /dev/null and b/textures/technic_coal_alloy_furnace_side.png differ
diff --git a/textures/technic_coal_alloy_furnace_top.png b/textures/technic_coal_alloy_furnace_top.png
new file mode 100644 (file)
index 0000000..c648fe8
Binary files /dev/null and b/textures/technic_coal_alloy_furnace_top.png differ
index 15fa6defbc5115973d4e1043549feec371408ef5..d16ac4797be6c113721d1829ce62be95844d5aa7 100644 (file)
Binary files a/textures/technic_electric_furnace_bottom.png and b/textures/technic_electric_furnace_bottom.png differ
index 755aadf56d0eb99b769a037112def7982985a6a6..dfee6630c780087ae57d194d4e9db6bad7dfe5ec 100644 (file)
Binary files a/textures/technic_electric_furnace_front.png and b/textures/technic_electric_furnace_front.png differ
index de7f1f9d0b0a1f3ce7b4299d124d86c654b3be9f..038eec4cd2609ced3da9898d294833844f9132ee 100644 (file)
Binary files a/textures/technic_electric_furnace_front_active.png and b/textures/technic_electric_furnace_front_active.png differ
index 80cf742adfd5943da72c294a7f2a3c18973e59a9..cf345e73a37da9da02a2d564748a883ab3653d17 100644 (file)
Binary files a/textures/technic_electric_furnace_side.png and b/textures/technic_electric_furnace_side.png differ
index fbadd9ac94983864e335c69537d4210d1c72b89b..d3309ecf923c3f30cad31abd374e3cebf924ec40 100644 (file)
Binary files a/textures/technic_electric_furnace_top.png and b/textures/technic_electric_furnace_top.png differ
index 69dde8cee5d1f20961e92a215a771ba188fae731..acde392c99cb0912a28ec667c05edfb4f8355085 100644 (file)
Binary files a/textures/technic_mining_laser_mk1.png and b/textures/technic_mining_laser_mk1.png differ
index 4d6b1301861bd85008a2a07d92d72c2b021ea2e3..fb61d96190c7b4a23ba7395c816a72835c773389 100644 (file)
Binary files a/textures/technic_sonic_screwdriver.png and b/textures/technic_sonic_screwdriver.png differ