Add files via upload
parent
6e06e83da7
commit
816f2bb822
|
@ -0,0 +1 @@
|
|||
default
|
|
@ -0,0 +1,4 @@
|
|||
modern_ish = {}
|
||||
|
||||
modpathis=minetest.get_modpath("modern_ish_ovens")
|
||||
dofile(modpathis.."/oven.lua")
|
|
@ -0,0 +1,146 @@
|
|||
local oven_fs = "size[8,7]"
|
||||
.."image[3.5,1.5;1,1;default_furnace_fire_bg.png]"
|
||||
.."list[current_player;main;0,3;8,4;]"
|
||||
.."list[context;input;2,1.5;1,1;]"
|
||||
.."list[context;output;5,1.5;1,1;]"
|
||||
.."label[3,0.5;Oven]"
|
||||
.."label[1.5,1;Uncooked Food]"
|
||||
.."label[4.5,1;Cooked Food]"
|
||||
-- possibly add "fire" image?
|
||||
|
||||
local function get_active_oven_fs(item_percent)
|
||||
return "size[8,7]"
|
||||
.."image[3.5,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"
|
||||
..(item_percent)..":default_furnace_fire_fg.png]"
|
||||
.."list[current_player;main;0,3;8,4;]"
|
||||
.."list[context;input;2,1.5;1,1;]"
|
||||
.."list[context;output;5,1.5;1,1;]"
|
||||
.."label[3,0.5;Oven]"
|
||||
.."label[1.5,1;Uncooked Food]"
|
||||
.."label[4.5,1;Cooked Food]"
|
||||
-- possibly add "fire" image?
|
||||
end
|
||||
|
||||
--x,y;w,h
|
||||
|
||||
-- Adding recipe API so we don't end up hardcoding items
|
||||
modern_ish.oven = {}
|
||||
local oven = modern_ish.oven
|
||||
oven.recipes = {}
|
||||
function oven.register_recipe(input, output) oven.recipes[input] = output end
|
||||
|
||||
local function update_formspec(progress, goal, meta)
|
||||
local formspec
|
||||
|
||||
if progress > 0 and progress <= goal then
|
||||
local item_percent = math.floor(progress / goal * 100)
|
||||
formspec = get_active_oven_fs(item_percent)
|
||||
else
|
||||
formspec = oven_fs
|
||||
end
|
||||
|
||||
meta:set_string("formspec", formspec)
|
||||
end
|
||||
|
||||
local function recalculate(pos)
|
||||
local meta, timer = minetest.get_meta(pos), minetest.get_node_timer(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local stack = inv:get_stack("input", 1)
|
||||
|
||||
local k = oven.recipes[stack:get_name()]
|
||||
if not k then return end
|
||||
|
||||
timer:stop()
|
||||
update_formspec(0, 3, meta)
|
||||
timer:start(1)
|
||||
end
|
||||
|
||||
local function do_cook_single(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local food_uncooked = inv:get_stack("input", 1)
|
||||
food_uncooked:set_count(1)
|
||||
|
||||
--If the uncooked food wasn't removed mid-cooking, then cook it.
|
||||
if not oven.recipes[food_uncooked:get_name()] then
|
||||
minetest.chat_send_all("Oven cooked nothing because there was nothing to cook.")
|
||||
minetest.get_node_timer(pos):stop()
|
||||
update_formspec(0, 3, meta)
|
||||
else
|
||||
inv:remove_item("input", food_uncooked) -- Clear the slot
|
||||
local food_cooked = oven.recipes[food_uncooked:get_name()] -- Get the cooked food
|
||||
inv:add_item("output", food_cooked) -- Put the cooked food in the slot
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node("modern_ish_ovens:oven", {
|
||||
description = "Oven",
|
||||
tiles = {"modern_ish_oven_top.png","modern_ish_bottom_generic.png","modern_ish_side_generic_stainless.png", "modern_ish_side_generic_stainless.png", "modern_ish_back_generic.png", "modern_ish_oven_door.png"},
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky = 2, tubedevice = 1, tubedevice_receiver = 1},
|
||||
legacy_facedir_simple = true,
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("input") and inv:is_empty("output")
|
||||
end,
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local stack = meta:get_inventory():get_stack("input", 1)
|
||||
local cooking_time = meta:get_int("cooking_time") or 0
|
||||
cooking_time = cooking_time + 1
|
||||
|
||||
if cooking_time % 3 == 0 then
|
||||
do_cook_single(pos)
|
||||
end
|
||||
|
||||
update_formspec(cooking_time % 3, 3, meta)
|
||||
meta:set_int("cooking_time", cooking_time)
|
||||
|
||||
--Keep cooking until there is nothing left to cook.
|
||||
if not stack:is_empty() then
|
||||
return true
|
||||
else
|
||||
meta:set_int("cooking_time", 0)
|
||||
update_formspec(0, 3, meta)
|
||||
return false
|
||||
end
|
||||
end,
|
||||
|
||||
on_metadata_inventory_put = recalculate,
|
||||
on_metadata_inventory_take = recalculate,
|
||||
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", oven_fs)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("input", 1)
|
||||
inv:set_size("output", 1)
|
||||
end,
|
||||
|
||||
on_blast = function(pos)
|
||||
local drops = {}
|
||||
default.get_inventory_drops(pos, "input", drops)
|
||||
default.get_inventory_drops(pos, "output", drops)
|
||||
table.insert(drops, "modern_ish_ovens:oven")
|
||||
minetest.remove_node(pos)
|
||||
return drops
|
||||
end,
|
||||
|
||||
allow_metadata_inventory_put = function(pos, list, index, stack, player)
|
||||
return oven.recipes[stack:get_name()] and stack:get_count() or 0
|
||||
end,
|
||||
})
|
||||
|
||||
-- Recipe Registration
|
||||
oven.register_recipe("default:ice", "default:water_source")
|
||||
-- No milk bucket as this doesn't support substitutes for now
|
||||
oven.register_recipe("mobs_mc:chicken_raw", "test:chicken_cooked")
|
||||
--[[ We don't need to check mod existance when registering recipe
|
||||
Recipe won't even be executed if there is no raw chicken in input ]]--
|
||||
oven.register_recipe("mobs_mc:beef_raw", "test:beef_cooked")
|
||||
oven.register_recipe("farming:coffee_cup", "farming:coffee_cup_hot") -- What a crutch there was...
|
||||
-- Add needed recipes as you go, note that other mods can add more recipes too
|
Binary file not shown.
After Width: | Height: | Size: 353 B |
Binary file not shown.
After Width: | Height: | Size: 221 B |
Binary file not shown.
After Width: | Height: | Size: 371 B |
Loading…
Reference in New Issue