]> git.lizzy.rs Git - Crafter.git/blobdiff - mods/utility/furnace.lua
add lava cooling
[Crafter.git] / mods / utility / furnace.lua
index d15f62ac720ec8ea70731db92e1d451b00f959a2..5b235b96b5a3be7ea4f7b5d5c4f7da64a4246272 100644 (file)
@@ -2,6 +2,8 @@ local furnace = {}
 
 function furnace.get_furnace_active_formspec(fuel_percent, item_percent)
        return "size[9,8.75]"..
+               "background[-0.19,-0.25;9.41,9.49;gui_hb_bg.png]"..
+               "listcolors[#8b8a89;#c9c3c6;#3e3d3e;#000000;#FFFFFF]"..
                "list[context;src;2.75,0.5;1,1;]"..
                "list[context;fuel;2.75,2.5;1,1;]"..
                "image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
@@ -10,7 +12,7 @@ function furnace.get_furnace_active_formspec(fuel_percent, item_percent)
                (item_percent)..":gui_furnace_arrow_fg.png^[transformR270]"..
                "list[context;dst;4.75,0.96;2,2;]"..
                "list[current_player;main;0,4.5;9,1;]".. --hotbar
-               "list[current_player;main;0,6;9,3;8]".. --inventory
+               "list[current_player;main;0,6;9,3;9]".. --inventory
                
                "listring[context;dst]"..
                "listring[current_player;main]"..
@@ -23,13 +25,15 @@ end
 
 function furnace.get_furnace_inactive_formspec()
        return "size[9,8.75]"..
+               "background[-0.19,-0.25;9.41,9.49;gui_hb_bg.png]"..
+               "listcolors[#8b8a89;#c9c3c6;#3e3d3e;#000000;#FFFFFF]"..
                "list[context;src;2.75,0.5;1,1;]"..
                "list[context;fuel;2.75,2.5;1,1;]"..
                "image[2.75,1.5;1,1;default_furnace_fire_bg.png]"..
                "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]"..
                "list[context;dst;4.75,0.96;2,2;]"..
                "list[current_player;main;0,4.5;9,1;]"..
-               "list[current_player;main;0,6;9,3;8]"..
+               "list[current_player;main;0,6;9,3;9]"..
                "listring[context;dst]"..
                "listring[current_player;main]"..
                "listring[context;src]"..
@@ -43,11 +47,13 @@ end
 -- Node callback functions that are the same for active and inactive furnace
 --
 
+--[[
 local function can_dig(pos, player)
        local meta = minetest.get_meta(pos);
        local inv = meta:get_inventory()
        return inv:is_empty("fuel") and inv:is_empty("dst") and inv:is_empty("src")
 end
+]]--
 
 local function allow_metadata_inventory_put(pos, listname, index, stack, player)
        if minetest.is_protected(pos, player:get_player_name()) then
@@ -262,6 +268,19 @@ local function furnace_node_timer(pos, elapsed)
 
        return result
 end
+--throw all items in furnace out on destroy
+local function destroy_furnace(pos)
+       local meta = minetest.get_meta(pos)
+       local inv = meta:get_inventory()
+       local lists = inv:get_lists()
+       for listname,_ in pairs(lists) do
+               local size = inv:get_size(listname)
+               for i = 1,size do
+                       local stack = inv:get_stack(listname, i)
+                       minetest.add_item(pos, stack)
+               end
+       end
+end
 
 --
 -- Node definitions
@@ -280,7 +299,7 @@ minetest.register_node("utility:furnace", {
        is_ground_content = false,
        sounds = main.stoneSound(),
 
-       can_dig = can_dig,
+       --can_dig = can_dig,
 
        on_timer = furnace_node_timer,
 
@@ -294,12 +313,19 @@ minetest.register_node("utility:furnace", {
        end,
 
        on_metadata_inventory_move = function(pos)
-               minetest.get_node_timer(pos):start(1.0)
+               local timer = minetest.get_node_timer(pos)
+               if timer:is_started() == false then
+                       timer:start(1.0)
+               end
        end,
        on_metadata_inventory_put = function(pos)
                -- start timer function, it will sort out whether furnace can burn or not.
-               minetest.get_node_timer(pos):start(1.0)
+               local timer = minetest.get_node_timer(pos)
+               if timer:is_started() == false then
+                       timer:start(1.0)
+               end
        end,
+       --[[
        on_blast = function(pos)
                local drops = {}
                furnace.get_inventory_drops(pos, "src", drops)
@@ -309,7 +335,10 @@ minetest.register_node("utility:furnace", {
                minetest.remove_node(pos)
                return drops
        end,
-
+       ]]--
+       on_destruct = function(pos)
+               destroy_furnace(pos)
+       end,
        allow_metadata_inventory_put = allow_metadata_inventory_put,
        allow_metadata_inventory_move = allow_metadata_inventory_move,
        allow_metadata_inventory_take = allow_metadata_inventory_take,
@@ -341,11 +370,14 @@ minetest.register_node("utility:furnace_active", {
        sounds = main.stoneSound(),
        on_timer = furnace_node_timer,
 
-       can_dig = can_dig,
+       --can_dig = can_dig,
 
        allow_metadata_inventory_put = allow_metadata_inventory_put,
        allow_metadata_inventory_move = allow_metadata_inventory_move,
        allow_metadata_inventory_take = allow_metadata_inventory_take,
+       on_destruct = function(pos)
+               destroy_furnace(pos)
+       end,
 })
 
 minetest.register_craft({