icemachine/init.lua
2017-04-12 01:26:40 -05:00

151 lines
4.2 KiB
Lua

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