156 lines
3.4 KiB
Lua
156 lines
3.4 KiB
Lua
|
|
-- check available mods for default sound and sand node
|
|
local def = minetest.get_modpath("default")
|
|
local sand = "default:desert_sand"
|
|
local snd_l = def and default.node_sound_leaves_defaults()
|
|
|
|
if minetest.get_modpath("mcl_core") then
|
|
sand = "mcl_core:sand"
|
|
snd_l = mcl_sounds.node_sound_leaves_defaults()
|
|
end
|
|
|
|
local S = wine.S
|
|
|
|
|
|
-- blue agave
|
|
minetest.register_node("wine:blue_agave", {
|
|
description = S("Blue Agave"),
|
|
drawtype = "plantlike",
|
|
visual_scale = 0.8,
|
|
tiles = {"wine_blue_agave.png"},
|
|
inventory_image = "wine_blue_agave.png",
|
|
wield_image = "wine_blue_agave.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 = {snappy = 3, attached_node = 1, plant = 1},
|
|
sounds = snd_l,
|
|
|
|
on_use = minetest.item_eat(2),
|
|
|
|
on_construct = function(pos)
|
|
minetest.get_node_timer(pos):start(17)
|
|
end,
|
|
|
|
on_timer = function(pos)
|
|
|
|
local light = minetest.get_node_light(pos)
|
|
|
|
if not light or light < 13 or math.random() > 1/76 then
|
|
return true -- go to next iteration
|
|
end
|
|
|
|
local n = minetest.find_nodes_in_area_under_air(
|
|
{x = pos.x + 2, y = pos.y + 1, z = pos.z + 2},
|
|
{x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, {"wine:blue_agave"})
|
|
|
|
-- too crowded, we'll wait for another iteration
|
|
if n and #n > 2 then
|
|
return true
|
|
end
|
|
|
|
-- find desert sand with air above (grow across and down only)
|
|
n = minetest.find_nodes_in_area_under_air(
|
|
{x = pos.x + 1, y = pos.y - 1, z = pos.z + 1},
|
|
{x = pos.x - 1, y = pos.y - 2, z = pos.z - 1}, {sand})
|
|
|
|
-- place blue agave
|
|
if n and #n > 0 then
|
|
|
|
local new_pos = n[math.random(#n)]
|
|
|
|
new_pos.y = new_pos.y + 1
|
|
|
|
minetest.set_node(new_pos, {name = "wine:blue_agave"})
|
|
end
|
|
|
|
return true
|
|
end
|
|
})
|
|
|
|
wine.add_eatable("wine:blue_agave", 2)
|
|
|
|
-- blue agave into cyan dye
|
|
if minetest.get_modpath("mcl_dye") then
|
|
|
|
minetest.register_craft( {
|
|
output = "mcl_dye:cyan 4",
|
|
recipe = {{"wine:blue_agave"}}
|
|
})
|
|
|
|
elseif minetest.get_modpath("dye") then
|
|
|
|
minetest.register_craft( {
|
|
output = "dye:cyan 4",
|
|
recipe = {{"wine:blue_agave"}}
|
|
})
|
|
end
|
|
|
|
-- blue agave as fuel
|
|
minetest.register_craft({
|
|
type = "fuel",
|
|
recipe = "wine:blue_agave",
|
|
burntime = 10
|
|
})
|
|
|
|
-- cook blue agave into a sugar syrup
|
|
minetest.register_craftitem("wine:agave_syrup", {
|
|
description = S("Agave Syrup"),
|
|
inventory_image = "wine_agave_syrup.png",
|
|
groups = {food_sugar = 1, vessel = 1, flammable = 3}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
type = "cooking",
|
|
cooktime = 7,
|
|
output = "wine:agave_syrup 2",
|
|
recipe = "wine:blue_agave"
|
|
})
|
|
|
|
-- blue agave into paper
|
|
minetest.register_craft( {
|
|
output = "default:paper 3",
|
|
recipe = {
|
|
{"wine:blue_agave", "wine:blue_agave", "wine:blue_agave"}
|
|
}
|
|
})
|
|
|
|
|
|
-- register blue agave on mapgen
|
|
minetest.register_decoration({
|
|
deco_type = "simple",
|
|
place_on = {sand},
|
|
sidelen = 16,
|
|
fill_ratio = 0.001,
|
|
biomes = {"desert"},
|
|
decoration = {"wine:blue_agave"},
|
|
y_min = 15,
|
|
y_max = 50,
|
|
spawn_by = sand,
|
|
num_spawn_by = 6
|
|
})
|
|
|
|
|
|
-- add lbm to start agave timers
|
|
minetest.register_lbm({
|
|
name = "wine:agave_timer_init",
|
|
nodenames = {"wine:blue_agave"},
|
|
run_at_every_load = false,
|
|
action = function(pos)
|
|
minetest.get_node_timer(pos):start(17)
|
|
end
|
|
})
|
|
|
|
|
|
-- add to bonemeal as decoration if available
|
|
if minetest.get_modpath("bonemeal") then
|
|
|
|
bonemeal:add_deco({
|
|
{sand, {}, {"default:dry_shrub", "wine:blue_agave", "", ""}}
|
|
})
|
|
end
|