mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-25 12:01:06 +01:00
#11 Spawn buds
This commit is contained in:
parent
d3dfd13f78
commit
69e83d5c0a
2 changed files with 42 additions and 37 deletions
|
@ -1,49 +1,54 @@
|
|||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
function mcl_amethyst.grow_amethyst_bud(pos, ignore_budding_amethyst)
|
||||
local node = minetest.get_node(pos)
|
||||
local interval = 10
|
||||
local chance = 5
|
||||
|
||||
local function grow(pos, node)
|
||||
local def = minetest.registered_nodes[node.name]
|
||||
if not (def and def.groups and def.groups.amethyst_buds) then return end
|
||||
local next_gen = def._mcl_amethyst_next_grade
|
||||
if not next_gen then return end
|
||||
|
||||
-- Check Budding Amethyst
|
||||
if not ignore_budding_amethyst then
|
||||
local dir = minetest.wallmounted_to_dir(node.param2)
|
||||
local ba_pos = vector.add(pos, dir)
|
||||
local ba_node = minetest.get_node(ba_pos)
|
||||
if ba_node.name ~= "mcl_amethyst:budding_amethyst_block" then return end
|
||||
end
|
||||
local dir = minetest.wallmounted_to_dir(node.param2)
|
||||
local ba_pos = vector.add(pos, dir)
|
||||
local ba_node = minetest.get_node(ba_pos)
|
||||
if ba_node.name ~= "mcl_amethyst:budding_amethyst_block" then return end
|
||||
|
||||
local swap_result = table.copy(node)
|
||||
swap_result.name = next_gen
|
||||
minetest.swap_node(pos, swap_result)
|
||||
return true
|
||||
end
|
||||
|
||||
local function get_growing_tool_handle(ignore)
|
||||
return function(itemstack, user, pointed_thing)
|
||||
if not user:is_player() then return end
|
||||
local name = user:get_player_name()
|
||||
local pos = minetest.get_pointed_thing_position(pointed_thing)
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
minetest.chat_send_player(name, S("Not allowed to use Amethyst Growing Tool in a protected area!"))
|
||||
return
|
||||
end
|
||||
if not mcl_amethyst.grow_amethyst_bud(pos, ignore) then
|
||||
minetest.chat_send_player(name, S("Growing Failed"))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_tool("mcl_amethyst:growing_tool",{
|
||||
description = S("Amethyst Growing Tool"),
|
||||
on_use = get_growing_tool_handle(true),
|
||||
on_place = get_growing_tool_handle(false),
|
||||
inventory_image = "amethyst_cluster.png^amethyst_shard.png",
|
||||
groups = {
|
||||
tool = 1,
|
||||
},
|
||||
minetest.register_abm({
|
||||
label = "Amethyst Bud Growth",
|
||||
nodenames = {"group:amethyst_buds"},
|
||||
neighbors = {"mcl_amethyst:budding_amethyst_block"},
|
||||
interval = interval,
|
||||
chance = chance,
|
||||
action = grow,
|
||||
})
|
||||
|
||||
mcl_wip.register_experimental_item("mcl_amethyst:growing_tool")
|
||||
local all_directions = {
|
||||
vector.new(1,0,0),
|
||||
vector.new(0,1,0),
|
||||
vector.new(0,0,1),
|
||||
vector.new(-1,0,0),
|
||||
vector.new(0,-1,0),
|
||||
vector.new(0,0,-1),
|
||||
}
|
||||
|
||||
minetest.register_abm({
|
||||
label = "Spawn Amethyst Bud",
|
||||
nodenames = {"mcl_amethyst:budding_amethyst_block"},
|
||||
neighbors = {"air", "group:water"},
|
||||
interval = 20,
|
||||
chance = 2,
|
||||
action = function(pos)
|
||||
local check_pos = vector.add(all_directions[math.random(1, #all_directions)], pos)
|
||||
local check_node = minetest.get_node(check_pos)
|
||||
local check_node_name = check_node.name
|
||||
if check_node_name ~= "air" and minetest.get_item_group(check_node_name, "water") == 0 then return end
|
||||
local param2 = minetest.dir_to_wallmounted(vector.subtract(pos, check_pos))
|
||||
local new_node = {name = "mcl_amethyst:medium_amethyst_bud", param2 = param2}
|
||||
minetest.swap_node(check_pos, new_node)
|
||||
end,
|
||||
})
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
name = mcl_amethyst
|
||||
author = Emojiminetest
|
||||
author = Emojiminetest, kay27
|
||||
description = Amethyst related stuff for MCL5
|
||||
depends = mcl_init, mcl_core, mcl_wip
|
||||
optional_depends = mcl_spyglass, mcl_copper
|
||||
|
|
Loading…
Reference in a new issue