First commit
authorGabriel Pérez-Cerezo <gabriel@gpcf.eu>
Thu, 16 Jun 2016 12:57:32 +0000 (14:57 +0200)
committerGabriel Pérez-Cerezo <gabriel@gpcf.eu>
Thu, 16 Jun 2016 12:57:32 +0000 (14:57 +0200)
depends.txt [new file with mode: 0644]
init.lua [new file with mode: 0644]
textures/freezer_front.png [new file with mode: 0644]
textures/freezer_side.png [new file with mode: 0644]
textures/freezer_top.png [new file with mode: 0644]

diff --git a/depends.txt b/depends.txt
new file mode 100644 (file)
index 0000000..4ad96d5
--- /dev/null
@@ -0,0 +1 @@
+default
diff --git a/init.lua b/init.lua
new file mode 100644 (file)
index 0000000..2ad5831
--- /dev/null
+++ b/init.lua
@@ -0,0 +1,185 @@
+
+--
+-- Formspecs
+--
+
+local function active_formspec(fuel_percent, item_percent)
+       local formspec = 
+               "size[8,8.5]"..
+               default.gui_bg..
+               default.gui_bg_img..
+               default.gui_slots..
+               "list[current_name;src;2.75,0.5;1,1;]"..
+               "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:"..
+               (item_percent)..":gui_furnace_arrow_fg.png^[transformR270]"..
+               "list[current_name;dst;4.75,0.96;2,2;]"..
+               "list[current_player;main;0,4.25;8,1;]"..
+               "list[current_player;main;0,5.5;8,3;8]"..
+               "listring[current_name;dst]"..
+               "listring[current_player;main]"..
+               "listring[current_name;src]"..
+               "listring[current_player;main]"..
+               default.get_hotbar_bg(0, 4.25)
+       return formspec
+end
+
+local inactive_formspec =
+       "size[8,8.5]"..
+       default.gui_bg..
+       default.gui_bg_img..
+       default.gui_slots..
+       "list[current_name;src;2.75,0.5;1,1;]"..
+       "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]"..
+       "list[current_name;dst;4.75,0.96;2,2;]"..
+       "list[current_player;main;0,4.25;8,1;]"..
+       "list[current_player;main;0,5.5;8,3;8]"..
+       "listring[current_name;dst]"..
+       "listring[current_player;main]"..
+       "listring[current_name;src]"..
+       "listring[current_player;main]"..
+       default.get_hotbar_bg(0, 4.25)
+
+--
+-- 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("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
+               return 0
+       end
+       local meta = minetest.get_meta(pos)
+       local inv = meta:get_inventory()
+       if listname == "src" then
+               return stack:get_count()
+       elseif listname == "dst" then
+               return 0
+       end
+end
+
+local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player)
+       local meta = minetest.get_meta(pos)
+       local inv = meta:get_inventory()
+       local stack = inv:get_stack(from_list, from_index)
+       return allow_metadata_inventory_put(pos, to_list, to_index, stack, player)
+end
+
+local function allow_metadata_inventory_take(pos, listname, index, stack, player)
+       if minetest.is_protected(pos, player:get_player_name()) then
+               return 0
+       end
+       return stack:get_count()
+end
+
+local function swap_node(pos, name)
+       local node = minetest.get_node(pos)
+       if node.name == name then
+               return
+       end
+       node.name = name
+       minetest.swap_node(pos, node)
+end
+
+local function freezer_node_timer(pos, elapsed)
+       --
+       -- Inizialize metadata
+       --
+       local meta = minetest.get_meta(pos)
+
+       local src_time = meta:get_float("src_time") or 0
+
+
+       local inv = meta:get_inventory()
+       local srclist = inv:get_list("src")
+
+       local dstlist = inv:get_list("dst")
+
+       --
+       -- Cooking
+       --
+
+       if inv:contains_item("src", "bucket:bucket_water") then
+          inv:remove_item("src", "bucket:bucket_water")
+          inv:add_item("dst", "default:ice")
+          inv:add_item("src", "bucket:bucket_empty")
+       end
+          
+
+             
+
+       -- Check if we have cookable content
+       return
+end
+
+--
+-- Node definitions
+--
+
+minetest.register_node("freezer:freezer", {
+       description = "Freezer",
+       tiles = {
+               "freezer_top.png", "freezer_top.png",
+               "freezer_side.png", "freezer_side.png",
+               "freezer_side.png", "freezer_front.png"
+       },
+       paramtype2 = "facedir",
+       groups = {cracky=2},
+       legacy_facedir_simple = true,
+       is_ground_content = false,
+       sounds = default.node_sound_stone_defaults(),
+
+       can_dig = can_dig,
+
+       on_timer = freezer_node_timer,
+
+       on_construct = function(pos)
+               local meta = minetest.get_meta(pos)
+               meta:set_string("formspec", inactive_formspec)
+               local inv = meta:get_inventory()
+               inv:set_size('src', 1)
+               inv:set_size('dst', 4)
+       end,
+
+       on_metadata_inventory_move = function(pos)
+               local timer = minetest.get_node_timer(pos)
+               timer:start(1.0)
+       end,
+       on_metadata_inventory_put = function(pos)
+               -- start timer function, it will sort out whether furnace can burn or not.
+               local timer = minetest.get_node_timer(pos)
+               timer:start(1.0)
+       end,
+       on_blast = function(pos)
+               local drops = {}
+               default.get_inventory_drops(pos, "src", drops)
+               default.get_inventory_drops(pos, "dst", drops)
+               drops[#drops+1] = "freezer:freezer"
+               minetest.remove_node(pos)
+               return drops
+       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,
+})
+
+minetest.register_craft({
+       output = "freezer:freezer",
+       recipe = {
+               {"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"},
+               {"default:steel_ingot", "", "default:steel_ingot"},
+               {"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"}
+       }
+})
+minetest.register_craft({
+      output = "default:snowblock 3",
+      type = "shapeless",
+      recipe = {
+        "default:ice"
+      }
+})
diff --git a/textures/freezer_front.png b/textures/freezer_front.png
new file mode 100644 (file)
index 0000000..fc49062
Binary files /dev/null and b/textures/freezer_front.png differ
diff --git a/textures/freezer_side.png b/textures/freezer_side.png
new file mode 100644 (file)
index 0000000..334751a
Binary files /dev/null and b/textures/freezer_side.png differ
diff --git a/textures/freezer_top.png b/textures/freezer_top.png
new file mode 100644 (file)
index 0000000..d7b2609
Binary files /dev/null and b/textures/freezer_top.png differ