wine/init.lua

204 lines
5.0 KiB
Lua

--[[ wine glass
minetest.register_craftitem("wine:glass_wine", {
description = "Glass of Wine",
inventory_image = "wine.png",
on_use = minetest.item_eat(2),
})]]
minetest.register_node("wine:glass_wine", {
description = "Glass of Wine",
drawtype = "plantlike",
visual_scale = 0.8,
tiles = {"wine.png"},
inventory_image = "wine.png",
wield_image = "wine.png",
paramtype = "light",
is_ground_content = false,
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.2, -0.5, -0.2, 0.2, 0.3, 0.2}
},
groups = {vessel = 1, dig_immediate = 3, attached_node = 1},
sounds = default.node_sound_glass_defaults(),
on_use = minetest.item_eat(2),
})
-- bottle of wine
minetest.register_node("wine:bottle_wine", {
description = "Bottle of Wine",
drawtype = "plantlike",
tiles = {"bottle_wine.png"},
inventory_image = "bottle_wine.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = { -0.15, -0.5, -0.15, 0.15, 0.25, 0.15 }
},
groups = {dig_immediate = 3, attached_node = 1},
sounds = default.node_sound_defaults(),
})
minetest.register_craft({
output = "wine:bottle_wine",
recipe = {
{"wine:glass_wine", "wine:glass_wine", "wine:glass_wine"},
{"wine:glass_wine", "wine:glass_wine", "wine:glass_wine"},
{"wine:glass_wine", "wine:glass_wine", "wine:glass_wine"},
},
})
minetest.register_craft({
type = "shapeless",
output = "wine:glass_wine 9",
recipe = {"wine:bottle_wine"},
})
-- Wine barrel
winebarrel_formspec = "size[8,9]"
.. default.gui_bg..default.gui_bg_img..default.gui_slots
.. "list[current_name;src;2,1;1,1;]"
.. "list[current_name;dst;5,1;2,2;]"
.. "list[current_player;main;0,5;8,4;]"
.. "listring[current_name;dst]"
.. "listring[current_player;main]"
.. "listring[current_name;src]"
.. "listring[current_player;main]"
minetest.register_node("wine:wine_barrel", {
description = "Winebarrel",
-- tiles = {"barrel_side.png", "barrel_side.png", "barrel_side.png^[transformR90",
-- "barrel_side.png^[transformR90", "barrel_bottom.png", "barrel_front.png"},
tiles = {"wine_barrel.png" },
drawtype = "mesh",
mesh = "wine_barrel.obj",
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy = 2, oddly_breakable_by_hand = 1},
legacy_facedir_simple = true,
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", winebarrel_formspec)
meta:set_string("infotext", "Wine Barrel")
meta:set_float("status", 0.0)
local inv = meta:get_inventory()
inv:set_size("src", 1)
inv:set_size("dst", 4)
end,
can_dig = function(pos,player)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if not inv:is_empty("dst")
or not inv:is_empty("src") then
return false
end
return true
end,
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
if minetest.is_protected(pos, player:get_player_name()) then
return 0
end
return stack:get_count()
end,
allow_metadata_inventory_put = function(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,
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, 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()
local stack = inv:get_stack(from_list, from_index)
if to_list == "src" then
return count
elseif to_list == "dst" then
return 0
end
end,
})
minetest.register_craft({
output = "wine:wine_barrel",
recipe = {
{"group:wood", "group:wood", "group:wood"},
{"default:steel_ingot", "", "default:steel_ingot"},
{"group:wood", "group:wood", "group:wood"},
},
})
-- Wine barrel abm
minetest.register_abm({
nodenames = {"wine:wine_barrel"},
interval = 5.0,
chance = 1,
catch_up = false,
action = function(pos, node)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
-- make sure only grapes are fermented in barrel
if not inv:contains_item("src", ItemStack("farming:grapes"))
and not inv:is_empty("src") then
return
end
-- is barrel full
if not inv:room_for_item("dst", "farming:grapes") then
meta:set_string("infotext", "Wine Barrel (FULL)")
return
end
-- do we have any grapes to ferment?
if not inv:is_empty("src") then
local status = meta:get_float("status")
-- fermenting (change status)
if status < 100 then
meta:set_string("infotext", "Wine Barrel (fermented: " .. status .. "%)")
meta:set_float("status", status + 5)
else --fermented (take grapes and add glass of wine)
inv:remove_item("src", "farming:grapes")
inv:add_item("dst", "wine:glass_wine")
meta:set_float("status", 0.0)
end
else
meta:set_string("infotext", "Wine Barrel")
end
end,
})
print ("[MOD] Wine mod loaded")