mirror of
https://cheapiesystems.com/git/icemachine
synced 2024-11-22 07:13:52 +01:00
151 lines
4.2 KiB
Lua
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
|