Added Alloy Furnace
authorMaciej Kasatkin <mk@realbadangel.pl>
Tue, 11 Sep 2012 10:56:38 +0000 (12:56 +0200)
committerMaciej Kasatkin <mk@realbadangel.pl>
Tue, 11 Sep 2012 10:56:38 +0000 (12:56 +0200)
24 files changed:
alloy_furnace.lua [new file with mode: 0644]
electric.lua
grinder.lua
init.lua
ores.lua
textures/technic_alloy_furnace_front.png [new file with mode: 0644]
textures/technic_alloy_furnace_front_active.png [new file with mode: 0644]
textures/technic_alloy_furnace_side.png [new file with mode: 0644]
textures/technic_alloy_furnace_top.png [new file with mode: 0644]
textures/technic_bronze_dust.png [new file with mode: 0644]
textures/technic_chromium_dust.png
textures/technic_chromium_ingot.png
textures/technic_copper_dust.png
textures/technic_generator_front.png
textures/technic_generator_front_active.png
textures/technic_generator_side.png
textures/technic_generator_top.png
textures/technic_gold_dust.png
textures/technic_iron_dust.png
textures/technic_mithril_dust.png
textures/technic_silver_dust.png
textures/technic_stainless_steel_dust.png [new file with mode: 0644]
textures/technic_stainless_steel_ingot.png [new file with mode: 0644]
textures/technic_tin_dust.png

diff --git a/alloy_furnace.lua b/alloy_furnace.lua
new file mode 100644 (file)
index 0000000..f1852f8
--- /dev/null
@@ -0,0 +1,237 @@
+alloy_recipes ={}
+
+registered_recipes_count=1
+
+function register_alloy_recipe (string1,count1, string2,count2, string3,count3)
+alloy_recipes[registered_recipes_count]={}
+alloy_recipes[registered_recipes_count].src1_name=string1
+alloy_recipes[registered_recipes_count].src1_count=count1
+alloy_recipes[registered_recipes_count].src2_name=string2
+alloy_recipes[registered_recipes_count].src2_count=count2
+alloy_recipes[registered_recipes_count].dst_name=string3
+alloy_recipes[registered_recipes_count].dst_count=count3
+registered_recipes_count=registered_recipes_count+1
+alloy_recipes[registered_recipes_count]={}
+alloy_recipes[registered_recipes_count].src1_name=string2
+alloy_recipes[registered_recipes_count].src1_count=count2
+alloy_recipes[registered_recipes_count].src2_name=string1
+alloy_recipes[registered_recipes_count].src2_count=count1
+alloy_recipes[registered_recipes_count].dst_name=string3
+alloy_recipes[registered_recipes_count].dst_count=count3
+registered_recipes_count=registered_recipes_count+1
+
+
+end
+
+register_alloy_recipe ("technic:copper_dust",3, "technic:tin_dust",1, "technic:bronze_dust",4)
+register_alloy_recipe ("moreores:copper_ingot",3, "moreores:tin_ingot",1, "moreores:bronze_ingot",4)
+register_alloy_recipe ("technic:iron_dust",3, "technic:chromium_dust",1, "technic:stainless_steel_dust",4)
+
+minetest.register_alias("alloy_furnace", "technic:alloy_furnace")
+
+
+minetest.register_craft({
+       output = 'technic:alloy_furnace',
+       recipe = {
+               {'default:stone', 'default:stone', 'default:stone'},
+               {'default:stone', '', 'default:stone'},
+               {'moreores:gold_ingot', 'moreores:copper_ingot', 'moreores:gold_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;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", "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,
+       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()
+               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;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","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","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
\ No newline at end of file
index 10e1e6cd840e6a891a81fc2f9e12ea38100963ce..b4c6ccad57c0b2eb7a0854fb6db97d82d795d0e8 100644 (file)
@@ -517,6 +517,8 @@ if minetest.env:get_node(pos1).name == "technic:water_mill" then    new_node_added
 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            
index b0c672237ea5249664dc7f5bd61f463a9a2c8f96..e214bdd6feeed022911f061a0e384d3111a9e890 100644 (file)
@@ -71,6 +71,40 @@ minetest.register_craft({
     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:stainless_steel_dust", {
+       description = "Stainless Steel Dust",
+       inventory_image = "technic_stainless_steel_dust.png",
+       on_place_on_ground = minetest.craftitem_place_item,
+       })
+
+minetest.register_craft({
+    type = "cooking",
+    output = "technic:stainless_steel_ingot",
+    recipe = "technic:stainless_steel_dust",
+}) 
+
 minetest.register_alias("grinder", "technic:grinder")
 minetest.register_craft({
        output = 'technic:grinder',
index fb7b8f6318173d8483c137ec06c4945f4c012432..6d60628d866777415a4b068a710846d955a24c4f 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -35,6 +35,7 @@ dofile(minetest.get_modpath("technic").."/generator.lua")
 dofile(minetest.get_modpath("technic").."/solar_panel.lua")
 dofile(minetest.get_modpath("technic").."/geothermal.lua")
 dofile(minetest.get_modpath("technic").."/water_mill.lua")
+dofile(minetest.get_modpath("technic").."/alloy_furnace.lua")
 
 
 function has_locked_chest_privilege(meta, player)
index d75a9addd095d7abf27ca13a099180bf28ec0923..66255b782af341530d52646d0358d7ec5d7e5c2f 100644 (file)
--- a/ores.lua
+++ b/ores.lua
@@ -84,6 +84,12 @@ minetest.register_craftitem( "technic:chromium_ingot", {
        on_place_on_ground = minetest.craftitem_place_item,
 })
 
+minetest.register_craftitem( "technic:stainless_steel_ingot", {
+       description = "Stainless Steel Ingot",
+       inventory_image = "technic_stainless_steel_ingot.png",
+       on_place_on_ground = minetest.craftitem_place_item,
+})
+
 minetest.register_craft({
                                type = 'cooking',
                                output = "technic:chromium_ingot",
diff --git a/textures/technic_alloy_furnace_front.png b/textures/technic_alloy_furnace_front.png
new file mode 100644 (file)
index 0000000..6699049
Binary files /dev/null and b/textures/technic_alloy_furnace_front.png differ
diff --git a/textures/technic_alloy_furnace_front_active.png b/textures/technic_alloy_furnace_front_active.png
new file mode 100644 (file)
index 0000000..6438518
Binary files /dev/null and b/textures/technic_alloy_furnace_front_active.png differ
diff --git a/textures/technic_alloy_furnace_side.png b/textures/technic_alloy_furnace_side.png
new file mode 100644 (file)
index 0000000..5352250
Binary files /dev/null and b/textures/technic_alloy_furnace_side.png differ
diff --git a/textures/technic_alloy_furnace_top.png b/textures/technic_alloy_furnace_top.png
new file mode 100644 (file)
index 0000000..df619ad
Binary files /dev/null and b/textures/technic_alloy_furnace_top.png differ
diff --git a/textures/technic_bronze_dust.png b/textures/technic_bronze_dust.png
new file mode 100644 (file)
index 0000000..0a2401e
Binary files /dev/null and b/textures/technic_bronze_dust.png differ
index 3c26862bc4931e0f312375684bfc43745c1611b6..a33358b80d43a9adcf255a374d299275c5503952 100644 (file)
Binary files a/textures/technic_chromium_dust.png and b/textures/technic_chromium_dust.png differ
index 96f35ff4e32070e79370b8ef0dd2bf86e62db81e..91d5b20e0268ad4a9f0e34832b5ff9aa9492a870 100644 (file)
Binary files a/textures/technic_chromium_ingot.png and b/textures/technic_chromium_ingot.png differ
index 9597a2ede6fb73867fba0607f9c8131b3e084838..68678ed0d031aa41a2910ad9d4b98aca89ff9138 100644 (file)
Binary files a/textures/technic_copper_dust.png and b/textures/technic_copper_dust.png differ
index 93ae6be77da537664b7a683fb2567770812baaca..2d64844f87cd18ff06ab508bad23ed43f7a87251 100644 (file)
Binary files a/textures/technic_generator_front.png and b/textures/technic_generator_front.png differ
index 40d25cf20f561a32ae48e857b7cc3614f7594364..4e57ca0b8ed546a6e8f20fc6e1844f5c59bf3110 100644 (file)
Binary files a/textures/technic_generator_front_active.png and b/textures/technic_generator_front_active.png differ
index 9cc14ec0dd5ade9d2a0ed825b6edb67ab479f4b0..5cbcbef813174fed2121f7008e227eb3a3882440 100644 (file)
Binary files a/textures/technic_generator_side.png and b/textures/technic_generator_side.png differ
index d5a8e88be812046106a88e5813f7e819c0ac2037..e2f3db3d82e50b0916a5b7d5302f51466ea821c3 100644 (file)
Binary files a/textures/technic_generator_top.png and b/textures/technic_generator_top.png differ
index 00c1a2fa976fabba58422b5db592fa2d445fac31..e545bb6c0e09a247e0e590df13320ff490cdf5ed 100644 (file)
Binary files a/textures/technic_gold_dust.png and b/textures/technic_gold_dust.png differ
index 6038df65e766b2d33fb3937fb79598c8188ae4ff..aaecd2bc8b0da30bdc7ccb964781c4716c92e0c9 100644 (file)
Binary files a/textures/technic_iron_dust.png and b/textures/technic_iron_dust.png differ
index 6afc44a274f5cf91346fcd8d8f01b6285209bc55..988e4492ff301186d1b36f6372a7d453a9fb42a8 100644 (file)
Binary files a/textures/technic_mithril_dust.png and b/textures/technic_mithril_dust.png differ
index 947e0592ec6db07cadf81fcb9f9d6a6c87d5e58a..9092c90dc29505a7c9b735f7da056578cc4fc34f 100644 (file)
Binary files a/textures/technic_silver_dust.png and b/textures/technic_silver_dust.png differ
diff --git a/textures/technic_stainless_steel_dust.png b/textures/technic_stainless_steel_dust.png
new file mode 100644 (file)
index 0000000..450e2bb
Binary files /dev/null and b/textures/technic_stainless_steel_dust.png differ
diff --git a/textures/technic_stainless_steel_ingot.png b/textures/technic_stainless_steel_ingot.png
new file mode 100644 (file)
index 0000000..46fa296
Binary files /dev/null and b/textures/technic_stainless_steel_ingot.png differ
index 9bdc2db269318a656a306264c03ad639dd2a1118..4e94e0021843202629247bbb058e4192ed7f90d1 100644 (file)
Binary files a/textures/technic_tin_dust.png and b/textures/technic_tin_dust.png differ