730 lines
18 KiB
Lua
730 lines
18 KiB
Lua
wine = {}
|
|
|
|
local path = minetest.get_modpath("wine")
|
|
local def = minetest.get_modpath("default")
|
|
local pipe = minetest.get_modpath("pipeworks")
|
|
local snd_d = def and default.node_sound_defaults()
|
|
local snd_g = def and default.node_sound_glass_defaults()
|
|
local glass_item = def and "default:glass"
|
|
local txt
|
|
local pipes_list = pipe and pipeworks.pipes_full_nodenames or {"default:river_water_source"}
|
|
|
|
|
|
-- check for MineClone2
|
|
local mcl = minetest.get_modpath("mcl_core")
|
|
|
|
if mcl then
|
|
snd_d = mcl_sounds.node_sound_glass_defaults()
|
|
snd_g = mcl_sounds.node_sound_defaults()
|
|
glass_item = "mcl_core:glass"
|
|
end
|
|
|
|
-- check for Unified Inventory
|
|
local is_uninv = minetest.global_exists("unified_inventory") or false
|
|
|
|
-- is thirsty mod active
|
|
local thirsty_mod = minetest.get_modpath("thirsty")
|
|
|
|
-- translation support
|
|
local S = minetest.get_translator("wine") ; wine.S = S
|
|
|
|
-- Unified Inventory hints
|
|
if is_uninv then
|
|
|
|
unified_inventory.register_craft_type("barrel", {
|
|
description = "Barrel",
|
|
icon = "wine_barrel.png",
|
|
width = 2,
|
|
height = 2
|
|
})
|
|
end
|
|
|
|
-- fermentation list (drinks added in drinks.lua)
|
|
local ferment = {}
|
|
|
|
|
|
-- add item and resulting beverage to list
|
|
function wine:add_item(list)
|
|
|
|
for n = 1, #list do
|
|
|
|
local item = list[n]
|
|
|
|
-- change old string recipe item into table
|
|
if type(item[1]) == "string" then
|
|
item = { {item[1], "vessels:drinking_glass"}, item[2] }
|
|
end
|
|
|
|
table.insert(ferment, item)
|
|
|
|
-- if ui mod found add recipe
|
|
if is_uninv then
|
|
|
|
unified_inventory.register_craft({
|
|
type = "barrel",
|
|
items = item[1],
|
|
output = item[2]
|
|
})
|
|
end
|
|
end
|
|
end
|
|
|
|
-- helper function
|
|
function wine.add_eatable(item, hp)
|
|
|
|
local def = minetest.registered_items[item]
|
|
|
|
if def then
|
|
|
|
local groups = table.copy(def.groups) or {}
|
|
|
|
groups.eatable = hp ; groups.flammable = 2
|
|
|
|
minetest.override_item(item, {groups = groups})
|
|
end
|
|
end
|
|
|
|
-- add drink with bottle
|
|
function wine:add_drink(name, desc, has_bottle, num_hunger, num_thirst, alcoholic)
|
|
|
|
-- glass
|
|
minetest.register_node("wine:glass_" .. name, {
|
|
description = S("Glass of " .. desc),
|
|
drawtype = "plantlike",
|
|
visual_scale = 0.5,
|
|
tiles = {"wine_" .. name .. "_glass.png"},
|
|
inventory_image = "wine_" .. name .. "_glass.png",
|
|
wield_image = "wine_" .. name .. "_glass.png",
|
|
paramtype = "light",
|
|
is_ground_content = false,
|
|
sunlight_propagates = true,
|
|
walkable = false,
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.15, -0.5, -0.15, 0.15, 0, 0.15}
|
|
},
|
|
groups = {
|
|
vessel = 1, dig_immediate = 3,
|
|
attached_node = 1, drink = 1, alcohol = alcoholic
|
|
},
|
|
sounds = snd_g,
|
|
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
|
|
if user then
|
|
|
|
if thirsty_mod then
|
|
thirsty.drink(user, num_thirst)
|
|
end
|
|
|
|
return minetest.do_item_eat(num_hunger, "vessels:drinking_glass",
|
|
itemstack, user, pointed_thing)
|
|
end
|
|
end
|
|
})
|
|
|
|
wine.add_eatable("wine:glass_" .. name, num_hunger)
|
|
|
|
-- bottle
|
|
if has_bottle then
|
|
|
|
minetest.register_node("wine:bottle_" .. name, {
|
|
description = S("Bottle of " .. desc),
|
|
drawtype = "plantlike",
|
|
visual_scale = 0.7,
|
|
tiles = {"wine_" .. name .. "_bottle.png"},
|
|
inventory_image = "wine_" .. name .. "_bottle.png",
|
|
paramtype = "light",
|
|
is_ground_content = false,
|
|
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, vessel = 1},
|
|
sounds = snd_d,
|
|
})
|
|
|
|
local glass = "wine:glass_" .. name
|
|
|
|
minetest.register_craft({
|
|
output = "wine:bottle_" .. name,
|
|
recipe = {
|
|
{glass, glass, glass},
|
|
{glass, glass, glass},
|
|
{glass, glass, glass}
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = glass .. " 9",
|
|
recipe = {{"wine:bottle_" .. name}}
|
|
})
|
|
end
|
|
end
|
|
|
|
|
|
-- Wine barrel formspec
|
|
local function winebarrel_formspec(item_percent, brewing, water_percent)
|
|
|
|
local mcl_bg = mcl and "listcolors[#9d9d9d;#FFF7;#474747]" or ""
|
|
|
|
return "size[8,9]" .. mcl_bg
|
|
|
|
-- images
|
|
.. "image[0,0;7,5;wine_barrel_fs_bg.png]"
|
|
.. "image[5.88,1.8;1,1;wine_barrel_icon_bg.png^[lowpart:"
|
|
.. item_percent .. ":wine_barrel_icon.png]"
|
|
.. "image[1.04,2.7;4.45,1.65;wine_barrel_water.png"
|
|
.. "^[colorize:#261c0e:175^[opacity:125"
|
|
.. "^[lowpart:" .. water_percent .. ":wine_barrel_water.png]"
|
|
|
|
-- inside barrel tinv
|
|
.. "list[current_name;src;1.9,0.7;2,2;]"
|
|
.. "list[current_name;src_b;2.4,2.95;1,1;0]"
|
|
|
|
-- outside barrel inv
|
|
.. "list[current_name;dst;7,1.8;1,1;]"
|
|
.. "list[current_player;main;0,5;8,4;]"
|
|
|
|
-- tooltips
|
|
.. "tooltip[5.88,1.8;1,1;" .. brewing .. "]"
|
|
.. "tooltip[1.05,2.7;3.495,1.45;" .. S("Water @1% Full", water_percent) .. "]"
|
|
|
|
-- shift-click
|
|
.. "listring[current_name;dst]"
|
|
.. "listring[current_player;main]"
|
|
.. "listring[current_name;src]"
|
|
.. "listring[current_player;main]"
|
|
end
|
|
|
|
|
|
-- list of buckets used to fill barrel
|
|
local bucket_list = {
|
|
{"bucket:bucket_water", "bucket:bucket_empty", 20},
|
|
{"bucket:bucket_river_water", "bucket:bucket_empty", 20},
|
|
{"wooden_bucket:bucket_wood_water", "wooden_bucket:bucket_wood_empty", 20},
|
|
{"wooden_bucket:bucket_wood_river_water", "wooden_bucket:bucket_wood_empty", 20},
|
|
{"bucket_wooden:bucket_water", "bucket_wooden:bucket_empty", 20},
|
|
{"bucket_wooden:bucket_river_water", "bucket_wooden:bucket_empty", 20},
|
|
{"mcl_buckets:bucket_water", "mcl_buckets:bucket_empty", 20},
|
|
{"farming:glass_water", "vessels:drinking_glass", 5},
|
|
{"default:water_source", "", 20},
|
|
{"default:river_water_source", "", 20},
|
|
{"mcl_core:water_source", "", 20},
|
|
{"bucket:bucket_water_uni_gold", "bucket:bucket_empty_gold", 20},
|
|
{"bucket:bucket_water_uni_mese", "bucket:bucket_empty_mese", 20},
|
|
{"bucket:bucket_water_uni_wood", "bucket:bucket_empty_wood", 20},
|
|
{"bucket:bucket_water_uni_steel", "bucket:bucket_empty_steel", 20},
|
|
{"bucket:bucket_water_uni_stone", "bucket:bucket_empty_stone", 20},
|
|
{"bucket:bucket_water_uni_bronze", "bucket:bucket_empty_bronze", 20},
|
|
{"bucket:bucket_water_uni_diamond", "bucket:bucket_empty_diamond", 20},
|
|
{"bucket:bucket_water_river_gold", "bucket:bucket_empty_gold", 20},
|
|
{"bucket:bucket_water_river_mese", "bucket:bucket_empty_mese", 20},
|
|
{"bucket:bucket_water_river_wood", "bucket:bucket_empty_wood", 20},
|
|
{"bucket:bucket_water_river_steel", "bucket:bucket_empty_steel", 20},
|
|
{"bucket:bucket_water_river_stone", "bucket:bucket_empty_stone", 20},
|
|
{"bucket:bucket_water_river_bronze", "bucket:bucket_empty_bronze", 20},
|
|
{"bucket:bucket_water_river_diamond", "bucket:bucket_empty_diamond", 20},
|
|
{"mesecraft_bucket:bucket_water", "mesecraft_bucket:bucket_empty", 20},
|
|
{"mesecraft_bucket:bucket_river_water", "mesecraft_bucket:bucket_empty", 20}
|
|
}
|
|
|
|
|
|
-- water item helper
|
|
local function water_check(item)
|
|
|
|
for n = 1, #bucket_list do
|
|
|
|
if bucket_list[n][1] == item then
|
|
return bucket_list[n]
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-- Wine barrel node
|
|
minetest.register_node("wine:wine_barrel", {
|
|
description = S("Fermenting Barrel"),
|
|
tiles = {"wine_barrel.png" },
|
|
drawtype = "mesh",
|
|
mesh = "wine_barrel.obj",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
is_ground_content = false,
|
|
groups = {
|
|
choppy = 2, oddly_breakable_by_hand = 1, flammable = 2,
|
|
tubedevice = 1, tubedevice_receiver = 1, axey = 1
|
|
},
|
|
legacy_facedir_simple = true,
|
|
|
|
on_place = minetest.rotate_node,
|
|
|
|
on_construct = function(pos)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
meta:set_string("formspec", winebarrel_formspec(0, "", 0))
|
|
meta:set_string("infotext", S("Fermenting Barrel"))
|
|
meta:set_float("status", 0)
|
|
|
|
local inv = meta:get_inventory()
|
|
|
|
inv:set_size("src", 4) -- ingredients
|
|
inv:set_size("src_b", 1) -- water bucket
|
|
inv:set_size("dst", 1) -- brewed item
|
|
end,
|
|
|
|
-- punch old barrel to change to new 4x slot variant and add a little water
|
|
on_punch = function(pos, node, puncher, pointed_thing)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta and meta:get_inventory()
|
|
local size = inv and inv:get_size("src")
|
|
|
|
if size and size < 4 then
|
|
|
|
inv:set_size("src", 4)
|
|
inv:set_size("src_b", 1)
|
|
|
|
meta:set_int("water", 50)
|
|
meta:set_string("formspec", winebarrel_formspec(0, "", 50))
|
|
end
|
|
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")
|
|
or not inv:is_empty("src_b") 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 == "src_b" then
|
|
|
|
local water = meta:get_int("water")
|
|
|
|
-- water full, return item
|
|
if water == 100 then
|
|
return 0
|
|
end
|
|
|
|
local is_bucket = stack:get_name()
|
|
local is_water = water_check(is_bucket)
|
|
|
|
if is_water then
|
|
return stack:get_count()
|
|
else
|
|
return 0
|
|
end
|
|
|
|
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
|
|
|
|
elseif to_list == "src_b" then
|
|
return 0
|
|
end
|
|
end,
|
|
|
|
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
|
|
|
if listname == "src_b" then
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
local is_bucket = inv:get_stack("src_b", 1):get_name()
|
|
local is_water = water_check(is_bucket)
|
|
|
|
if is_water then
|
|
|
|
local water = meta:get_int("water")
|
|
local amount = tonumber(is_water[3]) or 0
|
|
|
|
water = water + amount
|
|
|
|
if water > 100 then water = 100 end
|
|
|
|
inv:remove_item("src_b", is_water[1])
|
|
|
|
-- if replacement found then add to inventory
|
|
if is_water[2] ~= "" then
|
|
inv:add_item("src_b", is_water[2])
|
|
end
|
|
|
|
local status = meta:get_float("status")
|
|
|
|
meta:set_int("water", water)
|
|
meta:set_string("formspec",
|
|
winebarrel_formspec(status, S("Water Added"), water))
|
|
end
|
|
end
|
|
|
|
local timer = minetest.get_node_timer(pos)
|
|
|
|
if not timer:is_started() then
|
|
minetest.get_node_timer(pos):start(5)
|
|
end
|
|
end,
|
|
|
|
on_metadata_inventory_move = function(pos)
|
|
|
|
local timer = minetest.get_node_timer(pos)
|
|
|
|
if not timer:is_started() then
|
|
minetest.get_node_timer(pos):start(5)
|
|
end
|
|
end,
|
|
|
|
on_metadata_inventory_take = function(pos)
|
|
|
|
local timer = minetest.get_node_timer(pos)
|
|
|
|
if not timer:is_started() then
|
|
minetest.get_node_timer(pos):start(5)
|
|
end
|
|
end,
|
|
|
|
pipe_connections = {
|
|
left = 1, right = 1, front = 1, back = 1,
|
|
left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0
|
|
},
|
|
|
|
after_dig_node = function(pos)
|
|
|
|
if pipe then
|
|
pipeworks.scan_for_pipe_objects(pos)
|
|
end
|
|
end,
|
|
|
|
tube = (function() if pipe then return {
|
|
|
|
-- using a different stack from defaut when inserting
|
|
insert_object = function(pos, node, stack, direction)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
local timer = minetest.get_node_timer(pos)
|
|
|
|
if not timer:is_started() then
|
|
timer:start(5)
|
|
end
|
|
|
|
return inv:add_item("src", stack)
|
|
end,
|
|
|
|
can_insert = function(pos, node, stack, direction)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
|
|
return inv:room_for_item("src", stack)
|
|
end,
|
|
|
|
-- the default stack, from which objects will be taken
|
|
input_inventory = "dst",
|
|
|
|
connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
|
|
|
|
} end end)(),
|
|
|
|
on_timer = function(pos)
|
|
|
|
local meta = minetest.get_meta(pos) ; if not meta then return end
|
|
local inv = meta:get_inventory()
|
|
local water = meta:get_int("water") or 0
|
|
|
|
-- check for pipeworks water inlet or well block
|
|
if water < 100 then
|
|
|
|
if minetest.find_node_near(pos, 1, pipes_list) then
|
|
|
|
water = water + 20
|
|
|
|
if water > 100 then water = 100 end
|
|
|
|
meta:set_int("water", water)
|
|
end
|
|
end
|
|
|
|
-- is barrel empty?
|
|
if not inv or inv:is_empty("src") then
|
|
|
|
meta:set_float("status", 0)
|
|
meta:set_string("infotext", S("Fermenting Barrel"))
|
|
meta:set_string("formspec", winebarrel_formspec(0, "", water))
|
|
|
|
return false
|
|
end
|
|
|
|
-- check water level
|
|
if water < 5 then
|
|
|
|
txt = S("Fermenting Barrel") .. " " .. S("(Water Level Low)")
|
|
|
|
meta:set_string("infotext", txt)
|
|
meta:set_float("status", 0)
|
|
meta:set_string("formspec", winebarrel_formspec(0,
|
|
S("(Water Level Low)"), water))
|
|
|
|
return false
|
|
end
|
|
|
|
-- does it contain any of the source items on the list?
|
|
local has_items, recipe, item1, item2, item3, item4
|
|
|
|
for n = 1, #ferment do
|
|
|
|
recipe = ferment[n]
|
|
|
|
item1 = recipe[1][1] and ItemStack(recipe[1][1])
|
|
item2 = recipe[1][2] and ItemStack(recipe[1][2])
|
|
item3 = recipe[1][3] and ItemStack(recipe[1][3])
|
|
item4 = recipe[1][4] and ItemStack(recipe[1][4])
|
|
|
|
-- check for recipe items
|
|
if item1 then
|
|
|
|
has_items = inv:contains_item("src", item1)
|
|
|
|
if has_items and item2 then
|
|
|
|
has_items = inv:contains_item("src", item2)
|
|
|
|
if has_items and item3 then
|
|
|
|
has_items = inv:contains_item("src", item3)
|
|
|
|
if has_items and item4 then
|
|
has_items = inv:contains_item("src", item4)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- if we have all items in recipe break and continue
|
|
if has_items then
|
|
break
|
|
end
|
|
end
|
|
|
|
-- if we have a wrong recipe change status
|
|
if not has_items then
|
|
|
|
txt = S("Fermenting Barrel") .. " " .. S("(No Valid Recipe)")
|
|
|
|
meta:set_string("infotext", txt)
|
|
meta:set_float("status", 0)
|
|
meta:set_string("formspec",
|
|
winebarrel_formspec(0, S("(No Valid Recipe)"), water))
|
|
|
|
return false
|
|
end
|
|
|
|
-- is there room for additional fermentation?
|
|
if not inv:room_for_item("dst", recipe[2]) then
|
|
|
|
txt = S("Fermenting Barrel") .. " " .. S("(Output Full)")
|
|
|
|
meta:set_string("infotext", txt)
|
|
meta:set_string("formspec",
|
|
winebarrel_formspec(0, S("(Output Full)"), water))
|
|
|
|
return false
|
|
end
|
|
|
|
local status = meta:get_float("status")
|
|
|
|
-- fermenting (change status)
|
|
if status < 100 then
|
|
|
|
txt = S("Fermenting Barrel") .. " " .. S("(@1% Done)", status)
|
|
|
|
meta:set_string("infotext", txt)
|
|
meta:set_float("status", status + 5)
|
|
|
|
local d1 = recipe[2]:split(" ")[1]
|
|
local desc = minetest.registered_items[d1].description or ""
|
|
|
|
txt = S("Brewing: @1", desc) .. " " .. S("(@1% Done)", status)
|
|
|
|
meta:set_string("formspec", winebarrel_formspec(status, txt, water))
|
|
|
|
else -- when we hit 100% remove items needed and add beverage
|
|
|
|
if item1 then inv:remove_item("src", item1) end
|
|
if item2 then inv:remove_item("src", item2) end
|
|
if item3 then inv:remove_item("src", item3) end
|
|
if item4 then inv:remove_item("src", item4) end
|
|
|
|
inv:add_item("dst", recipe[2])
|
|
|
|
water = water - 5
|
|
|
|
meta:set_float("status", 0)
|
|
meta:set_int("water", water)
|
|
meta:set_string("formspec", winebarrel_formspec(0, "", water))
|
|
end
|
|
|
|
if inv:is_empty("src") then
|
|
meta:set_float("status", 0.0)
|
|
meta:set_string("infotext", S("Fermenting Barrel"))
|
|
end
|
|
|
|
return true
|
|
end
|
|
})
|
|
|
|
|
|
-- wine barrel craft recipe (with mineclone2 check)
|
|
local ingot = mcl and "mcl_core:iron_ingot" or "default:steel_ingot"
|
|
|
|
minetest.register_craft({
|
|
output = "wine:wine_barrel",
|
|
recipe = {
|
|
{"group:wood", "group:wood", "group:wood"},
|
|
{ingot, "", ingot},
|
|
{"group:wood", "group:wood", "group:wood"}
|
|
}
|
|
})
|
|
|
|
|
|
-- LBMs to start timers on existing, ABM-driven nodes
|
|
minetest.register_lbm({
|
|
name = "wine:barrel_timer_upgrade_init",
|
|
label = "upgrade old barrels and start timers",
|
|
nodenames = {"wine:wine_barrel"},
|
|
run_at_every_load = false,
|
|
|
|
action = function(pos)
|
|
|
|
-- convert any old 2x slot barrels into new 4x slot ones and add a little water
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta and meta:get_inventory()
|
|
local size = inv and inv:get_size("src")
|
|
|
|
if size and size < 4 then
|
|
|
|
inv:set_size("src", 4)
|
|
inv:set_size("src_b", 1)
|
|
|
|
meta:set_int("water", 50)
|
|
meta:set_string("formspec", winebarrel_formspec(0, "", 50))
|
|
end
|
|
|
|
-- Start barrel timer
|
|
minetest.get_node_timer(pos):start(5)
|
|
end
|
|
})
|
|
|
|
|
|
-- add agave plant and functions
|
|
dofile(path .. "/agave.lua")
|
|
|
|
-- add drink nodes and recipes
|
|
dofile(path .. "/drinks.lua")
|
|
|
|
-- add lucky blocks
|
|
if minetest.get_modpath("lucky_block") then
|
|
dofile(path .. "/lucky_block.lua")
|
|
end
|
|
|
|
|
|
-- mineclone2 doesn't have a drinking glass, so if none found add one
|
|
if not minetest.registered_items["vessels:drinking_glass"] then
|
|
|
|
minetest.register_node(":vessels:drinking_glass", {
|
|
description = S("Empty Drinking Glass"),
|
|
drawtype = "plantlike",
|
|
tiles = {"wine_drinking_glass.png"},
|
|
inventory_image = "wine_drinking_glass.png",
|
|
wield_image = "wine_drinking_glass.png",
|
|
paramtype = "light",
|
|
is_ground_content = false,
|
|
walkable = false,
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
|
|
},
|
|
groups = {vessel = 1, dig_immediate = 3, attached_node = 1},
|
|
sounds = snd_g,
|
|
})
|
|
|
|
minetest.register_craft( {
|
|
output = "vessels:drinking_glass 14",
|
|
recipe = {
|
|
{glass_item, "" , glass_item},
|
|
{glass_item, "" , glass_item},
|
|
{glass_item, glass_item, glass_item}
|
|
}
|
|
})
|
|
end
|
|
|
|
|
|
-- sort ferment table to fix recipe overlap (large to small)
|
|
minetest.after(0.2, function()
|
|
|
|
local tmp = {}
|
|
|
|
for l = 4, 1, -1 do
|
|
for n = 1, #ferment do
|
|
|
|
if #ferment[n][1] == l then
|
|
table.insert(tmp, ferment[n])
|
|
end
|
|
end
|
|
end
|
|
|
|
ferment = tmp
|
|
end)
|
|
|
|
|
|
print ("[MOD] Wine loaded")
|