Add grass seed
parent
8924cb564b
commit
55d10a48d2
|
@ -19,6 +19,7 @@ Node identities:
|
|||
* `simple_bush`: Bush
|
||||
|
||||
* `seed`: Seed
|
||||
* `seed_farming`: Seed from the `hades_farming` mod
|
||||
* `wheat`: Wheat plant
|
||||
* `strawberry` Strawberry plant
|
||||
* `tomato` Tomato plant
|
||||
|
|
|
@ -186,7 +186,7 @@ minetest.register_abm({
|
|||
-- Takes a node name and if it's capable of being covered by grass,
|
||||
-- returns the node name of the next level of "grassiness",
|
||||
-- otherwise it returns nil
|
||||
local function get_next_grass_cover_level(nodename)
|
||||
function hades_core.get_next_grass_cover_level(nodename)
|
||||
if nodename == "hades_core:dirt" then
|
||||
return "hades_core:dirt_with_grass_l1"
|
||||
elseif nodename == "hades_core:dirt_with_grass_l1" then
|
||||
|
@ -195,15 +195,13 @@ local function get_next_grass_cover_level(nodename)
|
|||
return "hades_core:dirt_with_grass_l3"
|
||||
elseif nodename == "hades_core:dirt_with_grass_l3" then
|
||||
return "hades_core:dirt_with_grass"
|
||||
else
|
||||
return nodename
|
||||
end
|
||||
end
|
||||
|
||||
-- Dirt ABMs
|
||||
-- Dirt-with-Grass ABMs
|
||||
minetest.register_abm({
|
||||
label = "Grow grass on dirt under bright light",
|
||||
nodenames = {"group:dirt"},
|
||||
label = "Increase Dirt-with-Grass grass level on Dirt-with-Grass under bright light",
|
||||
nodenames = {"group:dirt_with_grass"},
|
||||
interval = 2,
|
||||
chance = 200,
|
||||
action = function(pos, node)
|
||||
|
@ -213,7 +211,7 @@ minetest.register_abm({
|
|||
if nodedef and (nodedef.sunlight_propagates or nodedef.paramtype == "light")
|
||||
and nodedef.liquidtype == "none"
|
||||
and (minetest.get_node_light(above) or 0) >= 13 then
|
||||
local nextnode = get_next_grass_cover_level(node.name)
|
||||
local nextnode = hades_core.get_next_grass_cover_level(node.name)
|
||||
if nextnode then
|
||||
minetest.set_node(pos, {name = nextnode, param2 = node.param2})
|
||||
end
|
||||
|
@ -222,15 +220,15 @@ minetest.register_abm({
|
|||
})
|
||||
|
||||
minetest.register_abm({
|
||||
label = "Grow grass on dirt under air in faint light",
|
||||
nodenames = {"group:dirt"},
|
||||
label = "Increase Dirt-with-Grass level on Dirt-with-Grass under air in faint light",
|
||||
nodenames = {"group:dirt_with_grass"},
|
||||
interval = 50,
|
||||
chance = 20,
|
||||
action = function(pos, node)
|
||||
local name = minetest.get_node(pos).name
|
||||
local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
if node.name == "air" and (minetest.get_node_light(pos) or 0) >= 8 then
|
||||
local nextnode = get_next_grass_cover_level(node.name)
|
||||
local nextnode = hades_core.get_next_grass_cover_level(node.name)
|
||||
if nextnode then
|
||||
minetest.set_node(pos, {name = nextnode, param2 = node.param2})
|
||||
end
|
||||
|
|
|
@ -145,6 +145,8 @@ hades_farming.register_plant = function(name, def)
|
|||
for k, v in pairs(def.fertility) do
|
||||
g[v] = 1
|
||||
end
|
||||
-- Extra group to distinguish from other seeds
|
||||
g["seed_farming"] = 1
|
||||
|
||||
local surface_check = function(node)
|
||||
return minetest.get_item_group(node.name, "soil") >= 2
|
||||
|
@ -153,7 +155,7 @@ hades_farming.register_plant = function(name, def)
|
|||
hades_seeds.register_seed(":" .. mname .. ":seed_" .. pname, {
|
||||
description = def.description_seed,
|
||||
_tt_help = def._tt_help,
|
||||
inventory_image = def.inventory_image,
|
||||
image = def.inventory_image,
|
||||
place_param2 = def.place_param2,
|
||||
surface_check = surface_check,
|
||||
extra_groups = g,
|
||||
|
@ -214,7 +216,7 @@ hades_farming.register_plant = function(name, def)
|
|||
-- Growing ABM
|
||||
minetest.register_abm({
|
||||
label = "Grow farming seeds and plants: "..pname,
|
||||
nodenames = {"group:" .. pname, "group:seed"},
|
||||
nodenames = {"group:" .. pname, "group:seed_farming"},
|
||||
neighbors = {"group:soil"},
|
||||
interval = 93,
|
||||
chance = 12,
|
||||
|
@ -235,7 +237,7 @@ hades_farming.register_plant = function(name, def)
|
|||
local node_def = minetest.registered_items[node.name] or nil
|
||||
|
||||
-- grow seed
|
||||
if minetest.get_item_group(node.name, "seed") ~= 0 and node_def.fertility then
|
||||
if minetest.get_item_group(node.name, "seed_farming") ~= 0 and node_def.fertility then
|
||||
local can_grow = false
|
||||
local soil_node = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z})
|
||||
if not soil_node then
|
||||
|
|
|
@ -121,9 +121,10 @@ for i = 1, 5 do
|
|||
drop = {
|
||||
max_items = 1,
|
||||
items = {
|
||||
{items = {'hades_farming:seed_wheat'},rarity = 10},
|
||||
{items = {'hades_farming:seed_spice'},rarity = 10},
|
||||
{items = {'hades_farming:seed_strawberry'},rarity = 10},
|
||||
{items = {'hades_farming:seed_wheat'},rarity = 13},
|
||||
{items = {'hades_farming:seed_spice'},rarity = 13},
|
||||
{items = {'hades_farming:seed_strawberry'},rarity = 13},
|
||||
{items = {'hades_grass:seed_grass'},rarity = 13},
|
||||
{items = {'hades_grass:grass_1'}},
|
||||
}
|
||||
},
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
local S = minetest.get_translator("hades_grass")
|
||||
|
||||
local grass_drop = {
|
||||
items = {
|
||||
{ items = { "hades_grass:grass_1" }, rarity = 1 },
|
||||
{ items = { "hades_grass:grass_seed" }, rarity = 8 },
|
||||
}
|
||||
}
|
||||
|
||||
minetest.register_node("hades_grass:grass_1", {
|
||||
description = S("Grass Clump"),
|
||||
drawtype = "plantlike",
|
||||
|
@ -16,6 +23,7 @@ minetest.register_node("hades_grass:grass_1", {
|
|||
is_ground_content = true,
|
||||
buildable_to = true,
|
||||
floodable = true,
|
||||
drop = grass_drop,
|
||||
groups = {snappy=3,flammable=3,flora=1,grass_clump=1,grass=1,attached_node=1},
|
||||
sounds = hades_sounds.node_sound_grass_defaults(),
|
||||
selection_box = {
|
||||
|
@ -30,7 +38,6 @@ minetest.register_node("hades_grass:grass_1", {
|
|||
end,
|
||||
})
|
||||
|
||||
local drop_counts = { 1, 1, 2, 2, 3 }
|
||||
for i=2,5 do
|
||||
minetest.register_node("hades_grass:grass_"..i, {
|
||||
description = S("Grass Clump (Stage @1)", i),
|
||||
|
@ -47,7 +54,7 @@ for i=2,5 do
|
|||
buildable_to = true,
|
||||
floodable = true,
|
||||
is_ground_content = true,
|
||||
drop = "hades_grass:grass_1 " .. drop_counts[i],
|
||||
drop = grass_drop,
|
||||
groups = {snappy=3,flammable=3,flora=1,grass=1,grass_clump=1,attached_node=1,not_in_creative_inventory=1},
|
||||
sounds = hades_sounds.node_sound_grass_defaults(),
|
||||
selection_box = {
|
||||
|
@ -57,6 +64,51 @@ for i=2,5 do
|
|||
})
|
||||
end
|
||||
|
||||
hades_seeds.register_seed("hades_grass:seed_grass", {
|
||||
description = S("Grass Seed"),
|
||||
image = "hades_grass_grass_seed.png",
|
||||
surface_check = function(node)
|
||||
return minetest.get_item_group(node.name, "dirt") > 0 or minetest.get_item_group(node.name, "soil") > 0
|
||||
end,
|
||||
_tt_help = S("Grows on Dirt, Dirt with Grass, Soil and Wet Soil in light"),
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
label = "Grow grass seeds in light",
|
||||
nodenames = {"hades_grass:seed_grass"},
|
||||
interval = 10,
|
||||
chance = 25,
|
||||
action = function(pos, node)
|
||||
local light = minetest.get_node_light(pos)
|
||||
if light < 8 then
|
||||
return
|
||||
end
|
||||
local param2 = hades_core.get_seasonal_grass_color_param2()
|
||||
local below = {x=pos.x, y=pos.y-1, z=pos.z}
|
||||
local bnode = minetest.get_node(below)
|
||||
-- Growth behavior depends on node below ...
|
||||
if bnode.name == "hades_core:dirt_with_grass" then
|
||||
-- grow grass clump on (full) dirt with grass
|
||||
minetest.set_node(pos, {name = "hades_grass:grass_"..math.random(1,5)})
|
||||
elseif minetest.get_item_group(bnode.name, "dirt") >= 1 or minetest.get_item_group(bnode.name, "soil") > 1 then
|
||||
-- Turn dirt and soil into dirt-with-grass;
|
||||
-- For an intermediate dirt-with-grass stage,
|
||||
-- increase grass cover level by 1
|
||||
local next_node = hades_core.get_next_grass_cover_level(bnode.name)
|
||||
if not next_node then
|
||||
next_node = "hades_core:dirt_with_grass_l1"
|
||||
end
|
||||
minetest.remove_node(pos)
|
||||
minetest.set_node(below, {name = next_node, param2 = param2})
|
||||
else
|
||||
-- Seeds are on wrong node, let's kill them!
|
||||
minetest.remove_node(pos)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_node("hades_grass:junglegrass", {
|
||||
description = S("Tropical Grass"),
|
||||
drawtype = "plantlike",
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 281 B |
|
@ -1,20 +1,26 @@
|
|||
# Hades Seeds API
|
||||
|
||||
You can register seeds and that's it. Seeds do now grow on their own, you are
|
||||
supposed to implement that yourselves, e.g. with ABMs.
|
||||
You can register seeds and that's it. All seeds start with the groups
|
||||
`seed=1`, `snappy=3`, `attached_node=1`.
|
||||
|
||||
Seeds do now grow on their own, you are supposed to implement that yourselves,
|
||||
e.g. with ABMs.
|
||||
|
||||
## `hades_seeds.register_seed(name, def)`
|
||||
Register a seed node.
|
||||
|
||||
* `name`: Full itemstring of seed node
|
||||
* `name`: Full itemstring of seed node. MUST be of the form
|
||||
`<your_modname>:seed_<your_identifier>`,
|
||||
e.g. `hades_farming:seed_wheat`
|
||||
* `def`: Definition table:
|
||||
* `description`: Same as for normal node def
|
||||
* `inventory_image`: Same as for normal node def
|
||||
* `_tt_help`: Tooltip extension (for 'tt' mod)
|
||||
* `image`: Node texture, inventory and wield image
|
||||
* `place_param2`: Same as for normal node def
|
||||
* `surface_check`: Function that takes the node on which the seed is
|
||||
placed as argument, must return true if seed is allowed
|
||||
to be placed here and false otherwise
|
||||
* `_tt_help`: Tooltip extension (for 'tt' mod)
|
||||
* `extra_groups`: Optional table of groups to add to the default seed node groups
|
||||
* `fertilty`: internal argument required for `hades_farming` plants only
|
||||
ignore this otherwise
|
||||
|
||||
|
|
|
@ -72,12 +72,15 @@ hades_seeds.register_seed = function(name, def)
|
|||
placename = string.sub(name, 2)
|
||||
end
|
||||
-- Check def table
|
||||
if not def.inventory_image then
|
||||
def.inventory_image = "unknown_item.png"
|
||||
if not def.image then
|
||||
def.image = "unknown_item.png"
|
||||
end
|
||||
if def.meshoptions then
|
||||
def.place_param2 = def.meshoptions
|
||||
end
|
||||
if not def.extra_groups then
|
||||
def.extra_groups = {}
|
||||
end
|
||||
|
||||
-- Register seed
|
||||
local g = {seed = 1, snappy = 3, attached_node = 1}
|
||||
|
@ -87,10 +90,10 @@ hades_seeds.register_seed = function(name, def)
|
|||
minetest.register_node(name, {
|
||||
description = def.description,
|
||||
_tt_help = def._tt_help,
|
||||
tiles = {def.inventory_image, def.inventory_image, "blank.png"},
|
||||
tiles = {def.image, def.image, "blank.png"},
|
||||
use_texture_alpha = "clip",
|
||||
inventory_image = def.inventory_image,
|
||||
wield_image = def.inventory_image,
|
||||
inventory_image = def.image,
|
||||
wield_image = def.image,
|
||||
drawtype = "nodebox",
|
||||
groups = g,
|
||||
fertility = def.fertility,
|
||||
|
|
Loading…
Reference in New Issue