aboutsummaryrefslogtreecommitdiff
path: root/init.lua
diff options
context:
space:
mode:
authorGabriel Pérez-Cerezo <gabriel@gpcf.eu>2016-06-16 14:57:32 +0200
committerGabriel Pérez-Cerezo <gabriel@gpcf.eu>2016-06-16 14:57:32 +0200
commitb7aef6f605e3cc2f6abfdcfa52292e56399c82a3 (patch)
tree330a7d7cd712d71ecd1bc87e6b80620489a00eee /init.lua
downloadfreezer-b7aef6f605e3cc2f6abfdcfa52292e56399c82a3.tar.gz
freezer-b7aef6f605e3cc2f6abfdcfa52292e56399c82a3.tar.bz2
freezer-b7aef6f605e3cc2f6abfdcfa52292e56399c82a3.zip
First commit
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua185
1 files changed, 185 insertions, 0 deletions
diff --git a/init.lua b/init.lua
new file mode 100644
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"
+ }
+})