local function set_formspec(meta,enabled,full) local status if enabled then if full then status = "Full Bin" else status = "Making Ice" end else status = "Off" end local fs = "size[3,2]".. "box[-0.15,0;3,1.5;#0000FF]".. "label[0.2,0.3;"..status.."]".. "button[0.5,1.5;2,1;power;Power]" meta:set_string("formspec",fs) end local function update_status(pos,meta,ice) local timer = minetest.get_node_timer(pos) local enabled = meta:get_int("enabled")==1 if not enabled then timer:stop() set_formspec(meta,false) else local binpos = vector.add(pos,vector.new(0,-1,0)) local binnode = minetest.get_node(binpos) local binmeta = minetest.get_meta(binpos) local bininv = binmeta:get_inventory() if binnode.name ~= "icemachine:bin" or not bininv:room_for_item("ice","icemachine:cube") then timer:stop() set_formspec(meta,true,true) else if not timer:is_started() then timer:start(30) end if ice then bininv:add_item("ice","icemachine:cube 9") end set_formspec(meta,true,false) end end end minetest.register_node("icemachine:machine",{ description = "Ice Machine", paramtype2 = "facedir", groups = {cracky=3}, tiles = { "default_steel_block.png", "default_steel_block.png", "default_steel_block.png^icemachine_machine_sides.png", "default_steel_block.png^icemachine_machine_sides.png", "default_steel_block.png", "default_steel_block.png^icemachine_machine_front.png", }, on_construct = function(pos) local meta = minetest.get_meta(pos) update_status(pos,meta) end, on_receive_fields = function(pos,_,fields) local meta = minetest.get_meta(pos) if fields.power then meta:set_int("enabled",math.abs(meta:get_int("enabled")-1)) update_status(pos,meta) end end, on_timer = function(pos) local meta = minetest.get_meta(pos) update_status(pos,meta,true) end, }) minetest.register_node("icemachine:bin",{ description = "Ice Bin", paramtype2 = "facedir", groups = {cracky=3}, tiles = { "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png", "default_steel_block.png^icemachine_bin_front.png", }, tube = {input_inventory="ice"}, on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() inv:set_size("ice",8*3) meta:set_string("formspec", "size[8,9]".. "list[context;ice;0,0;8,4;]".. "list[current_player;main;0,5;8,4;]".. "listring[]") end, allow_metadata_inventory_put = function(_,_,_,stack) if stack:get_name() == "icemachine:cube" then return(stack:get_count()) else return(0) end end, on_metadata_inventory_take = function(pos) local machinepos = vector.add(pos,vector.new(0,1,0)) local machinemeta = minetest.get_meta(machinepos) update_status(machinepos,machinemeta) end, can_dig = function(pos) return(minetest.get_meta(pos):get_inventory():is_empty("ice")) end, }) minetest.register_craftitem("icemachine:cube",{ description = "Ice Cube", inventory_image = "icemachine_cube.png", }) minetest.register_craft({ output = "icemachine:machine", recipe = { {"default:steel_ingot", "bucket:bucket_water", "default:steel_ingot"}, {"default:steel_ingot", "homedecor:fence_chainlink", "homedecor:motor"}, {"default:steel_ingot", "bucket:bucket_empty", "homedecor:ic"}, }, }) minetest.register_craft({ output = "icemachine:bin", recipe = { {"homedecor:plastic_sheeting", "", "homedecor:plastic_sheeting"}, {"homedecor:plastic_sheeting", "", "homedecor:plastic_sheeting"}, {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, }, }) minetest.register_craft({ output = "default:ice", recipe = { {"icemachine:cube", "icemachine:cube", "icemachine:cube"}, {"icemachine:cube", "icemachine:cube", "icemachine:cube"}, {"icemachine:cube", "icemachine:cube", "icemachine:cube"}, }, }) minetest.register_craft({ type = "shapeless", output = "icemachine:cube 9", recipe = {"default:ice"}, }) if minetest.get_modpath("technic") then technic.register_grinder_recipe({input={"default:ice 1"},output="default:snowblock 1"}) end