forked from VoxeLibre/VoxeLibre
Autom. make grass/fern dry if placed on dry grass
This commit is contained in:
parent
4083432770
commit
6b2c06934a
|
@ -411,10 +411,12 @@ end
|
||||||
mcl_util.clock_works = mcl_util.compass_works
|
mcl_util.clock_works = mcl_util.compass_works
|
||||||
|
|
||||||
-- Returns a on_place function for plants
|
-- Returns a on_place function for plants
|
||||||
-- * condition: function(pos, node)
|
-- * condition: function(pos, node, itemstack)
|
||||||
-- * A function which is called by the on_place function to check if the node can be placed
|
-- * A function which is called by the on_place function to check if the node can be placed
|
||||||
-- * Must return true, if placement is allowed, false otherwise
|
-- * Must return true, if placement is allowed, false otherwise.
|
||||||
|
-- * If it returns a string, placement is allowed, but will place this itemstring as a node instead
|
||||||
-- * pos, node: Position and node table of plant node
|
-- * pos, node: Position and node table of plant node
|
||||||
|
-- * itemstack: Itemstack to place
|
||||||
function mcl_util.generate_on_place_plant_function(condition)
|
function mcl_util.generate_on_place_plant_function(condition)
|
||||||
return function(itemstack, placer, pointed_thing)
|
return function(itemstack, placer, pointed_thing)
|
||||||
if pointed_thing.type ~= "node" then
|
if pointed_thing.type ~= "node" then
|
||||||
|
@ -445,9 +447,20 @@ function mcl_util.generate_on_place_plant_function(condition)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Check placement rules
|
-- Check placement rules
|
||||||
if (condition(place_pos, node) == true) then
|
local result = condition(place_pos, node, itemstack)
|
||||||
local idef = itemstack:get_definition()
|
if result == true or type(result) == "string" then
|
||||||
local new_itemstack, success = minetest.item_place_node(itemstack, placer, pointed_thing)
|
local itemstack_place
|
||||||
|
if type(result) == "string" then
|
||||||
|
-- Let's pretend we place a different item
|
||||||
|
itemstack_place = ItemStack(itemstack)
|
||||||
|
itemstack_place:set_name(result)
|
||||||
|
else
|
||||||
|
itemstack_place = itemstack
|
||||||
|
end
|
||||||
|
local idef = itemstack_place:get_definition()
|
||||||
|
local new_itemstack, success = minetest.item_place_node(itemstack_place, placer, pointed_thing)
|
||||||
|
-- Restore old itemstack name
|
||||||
|
new_itemstack:set_name(itemstack:get_name())
|
||||||
|
|
||||||
if success then
|
if success then
|
||||||
if idef.sounds and idef.sounds.place then
|
if idef.sounds and idef.sounds.place then
|
||||||
|
|
|
@ -7,11 +7,17 @@ local smallflowerlongdesc = "This is a small flower. Small flowers are mainly us
|
||||||
local flowerusagehelp = "It can only be placed on a block on which it would also survive."
|
local flowerusagehelp = "It can only be placed on a block on which it would also survive."
|
||||||
|
|
||||||
-- on_place function for flowers
|
-- on_place function for flowers
|
||||||
local on_place_flower = mcl_util.generate_on_place_plant_function(function(pos, node)
|
local on_place_flower = mcl_util.generate_on_place_plant_function(function(pos, node, itemstack)
|
||||||
local below = {x=pos.x, y=pos.y-1, z=pos.z}
|
local below = {x=pos.x, y=pos.y-1, z=pos.z}
|
||||||
local soil_node = minetest.get_node_or_nil(below)
|
local soil_node = minetest.get_node_or_nil(below)
|
||||||
if not soil_node then return false end
|
if not soil_node then return false end
|
||||||
|
|
||||||
|
local dry = minetest.registered_nodes[itemstack:get_name()]._mcl_dry_override
|
||||||
|
local replace
|
||||||
|
if dry and (soil_node.name == "mcl_core:dirt_with_dry_grass" or soil_node.name == "mcl_core:dirt_with_dry_grass_snow") then
|
||||||
|
replace = dry
|
||||||
|
end
|
||||||
|
|
||||||
--[[ Placement requirements:
|
--[[ Placement requirements:
|
||||||
* Dirt or grass block
|
* Dirt or grass block
|
||||||
* Light level >= 8 at any time or exposed to sunlight at day
|
* Light level >= 8 at any time or exposed to sunlight at day
|
||||||
|
@ -22,7 +28,11 @@ local on_place_flower = mcl_util.generate_on_place_plant_function(function(pos,
|
||||||
if (light_night and light_night >= 8) or (light_day and light_day >= minetest.LIGHT_MAX) then
|
if (light_night and light_night >= 8) or (light_day and light_day >= minetest.LIGHT_MAX) then
|
||||||
light_ok = true
|
light_ok = true
|
||||||
end
|
end
|
||||||
return (soil_node.name == "mcl_core:dirt" or minetest.get_item_group(soil_node.name, "grass_block") == 1 or soil_node.name == "mcl_core:coarse_dirt" or soil_node.name == "mcl_core:podzol" or soil_node.name == "mcl_core:podzol_snow") and light_ok
|
local ok = (soil_node.name == "mcl_core:dirt" or minetest.get_item_group(soil_node.name, "grass_block") == 1 or soil_node.name == "mcl_core:coarse_dirt" or soil_node.name == "mcl_core:podzol" or soil_node.name == "mcl_core:podzol_snow") and light_ok
|
||||||
|
if ok and replace then
|
||||||
|
return replace
|
||||||
|
end
|
||||||
|
return ok
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local function add_simple_flower(name, desc, image, simple_selection_box)
|
local function add_simple_flower(name, desc, image, simple_selection_box)
|
||||||
|
@ -121,6 +131,7 @@ for i=1,2 do
|
||||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||||
drop = wheat_seed_drop,
|
drop = wheat_seed_drop,
|
||||||
_mcl_shears_drop = shears_drop,
|
_mcl_shears_drop = shears_drop,
|
||||||
|
_mcl_dry_override = "mcl_flowers:tallgrass_dry",
|
||||||
node_placement_prediction = "",
|
node_placement_prediction = "",
|
||||||
on_place = on_place_flower,
|
on_place = on_place_flower,
|
||||||
_mcl_blast_resistance = 0,
|
_mcl_blast_resistance = 0,
|
||||||
|
@ -149,6 +160,7 @@ for i=1,2 do
|
||||||
on_place = on_place_flower,
|
on_place = on_place_flower,
|
||||||
drop = wheat_seed_drop,
|
drop = wheat_seed_drop,
|
||||||
_mcl_shears_drop = shears_drop_fern,
|
_mcl_shears_drop = shears_drop_fern,
|
||||||
|
_mcl_dry_override = "mcl_flowers:fern_dry",
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -4/16, -0.5, -4/16, 4/16, 7/16, 4/16 },
|
fixed = { -4/16, -0.5, -4/16, 4/16, 7/16, 4/16 },
|
||||||
|
@ -159,7 +171,7 @@ end
|
||||||
doc.add_entry_alias("nodes", "mcl_flowers:tallgrass", "nodes", "mcl_flowers:tallgrass_dry")
|
doc.add_entry_alias("nodes", "mcl_flowers:tallgrass", "nodes", "mcl_flowers:tallgrass_dry")
|
||||||
doc.add_entry_alias("nodes", "mcl_flowers:fern", "nodes", "mcl_flowers:fern_dry")
|
doc.add_entry_alias("nodes", "mcl_flowers:fern", "nodes", "mcl_flowers:fern_dry")
|
||||||
|
|
||||||
local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_img, selbox_radius, selbox_top_height, drop, shears_drop, is_flower)
|
local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_img, selbox_radius, selbox_top_height, drop, shears_drop, is_flower, dry_override)
|
||||||
if not inv_img then
|
if not inv_img then
|
||||||
inv_img = top_img
|
inv_img = top_img
|
||||||
end
|
end
|
||||||
|
@ -199,6 +211,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
drop = drop_bottom,
|
drop = drop_bottom,
|
||||||
_mcl_shears_drop = shears_drop,
|
_mcl_shears_drop = shears_drop,
|
||||||
|
_mcl_dry_override = dry_override,
|
||||||
node_placement_prediction = "",
|
node_placement_prediction = "",
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
|
@ -207,9 +220,11 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
-- We can only place on nodes
|
-- We can only place on nodes
|
||||||
if pointed_thing.type ~= "node" then
|
if pointed_thing.type ~= "node" then
|
||||||
--return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local itemstring = "mcl_flowers:"..name
|
||||||
|
|
||||||
-- Call on_rightclick if the pointed node defines it
|
-- Call on_rightclick if the pointed node defines it
|
||||||
local node = minetest.get_node(pointed_thing.under)
|
local node = minetest.get_node(pointed_thing.under)
|
||||||
if placer and not placer:get_player_control().sneak then
|
if placer and not placer:get_player_control().sneak then
|
||||||
|
@ -252,10 +267,14 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
||||||
-- * Only with light level >= 8
|
-- * Only with light level >= 8
|
||||||
-- * Only if two enough space
|
-- * Only if two enough space
|
||||||
if (floorname == "mcl_core:dirt" or minetest.get_item_group(floorname, "grass_block") == 1 or floorname == "mcl_core:coarse_dirt" or floorname == "mcl_core:podzol" or floorname == "mcl_core:podzol_snow") and bottom_buildable and top_buildable and light_ok then
|
if (floorname == "mcl_core:dirt" or minetest.get_item_group(floorname, "grass_block") == 1 or floorname == "mcl_core:coarse_dirt" or floorname == "mcl_core:podzol" or floorname == "mcl_core:podzol_snow") and bottom_buildable and top_buildable and light_ok then
|
||||||
|
local dry_override = minetest.registered_nodes[itemstring]._mcl_dry_override
|
||||||
|
if dry_override and (floorname == "mcl_core:dirt_with_dry_grass" or floorname == "mcl_core:dirt_with_dry_grass_snow") then
|
||||||
|
itemstring = dry_override
|
||||||
|
end
|
||||||
-- Success! We can now place the flower
|
-- Success! We can now place the flower
|
||||||
minetest.sound_play(minetest.registered_nodes["mcl_flowers:"..name].sounds.place, {pos = bottom, gain=1})
|
minetest.sound_play(minetest.registered_nodes[itemstring].sounds.place, {pos = bottom, gain=1})
|
||||||
minetest.set_node(bottom, {name="mcl_flowers:"..name})
|
minetest.set_node(bottom, {name=itemstring})
|
||||||
minetest.set_node(top, {name="mcl_flowers:"..name.."_top"})
|
minetest.set_node(top, {name=itemstring.."_top"})
|
||||||
if not minetest.settings:get_bool("creative_mode") then
|
if not minetest.settings:get_bool("creative_mode") then
|
||||||
itemstack:take_item()
|
itemstack:take_item()
|
||||||
end
|
end
|
||||||
|
@ -317,17 +336,19 @@ add_large_plant("lilac", "Lilac", "A lilac is a large plant which occupies two b
|
||||||
add_large_plant("sunflower", "Sunflower", "A sunflower is a large plant which occupies two blocks. It is mainly used in dye production.", "mcl_flowers_double_plant_sunflower_bottom.png", "mcl_flowers_double_plant_sunflower_top.png^mcl_flowers_double_plant_sunflower_front.png", "mcl_flowers_double_plant_sunflower_front.png", 3/16, 4/16)
|
add_large_plant("sunflower", "Sunflower", "A sunflower is a large plant which occupies two blocks. It is mainly used in dye production.", "mcl_flowers_double_plant_sunflower_bottom.png", "mcl_flowers_double_plant_sunflower_top.png^mcl_flowers_double_plant_sunflower_front.png", "mcl_flowers_double_plant_sunflower_front.png", 3/16, 4/16)
|
||||||
|
|
||||||
for i=1, 2 do
|
for i=1, 2 do
|
||||||
local longdesc_grass, longdesc_fern, dry
|
local longdesc_grass, longdesc_fern, dry, dry_override_grass, dry_override_fern
|
||||||
if i==1 then
|
if i==1 then
|
||||||
longdesc_grass = "Double tallgrass a variant of tall grass and occupies two blocks. It can be harvested for wheat seeds."
|
longdesc_grass = "Double tallgrass a variant of tall grass and occupies two blocks. It can be harvested for wheat seeds."
|
||||||
longdesc_fern = "Large fern is a variant of fern and occupies two blocks. It can be harvested for wheat seeds."
|
longdesc_fern = "Large fern is a variant of fern and occupies two blocks. It can be harvested for wheat seeds."
|
||||||
dry = ""
|
dry = ""
|
||||||
|
dry_override_grass = "mcl_flowers:double_grass_dry"
|
||||||
|
dry_override_fern = "mcl_flowers:double_fern_dry"
|
||||||
else
|
else
|
||||||
-- ID/texture name modifier
|
-- ID/texture name modifier
|
||||||
dry = "_dry"
|
dry = "_dry"
|
||||||
end
|
end
|
||||||
add_large_plant("double_grass"..dry, "Double Tallgrass", longdesc_grass, "mcl_flowers_double_plant_grass_bottom"..dry..".png", "mcl_flowers_double_plant_grass_top"..dry..".png", nil, 5/16, 7/16, wheat_seed_drop, {"mcl_flowers:tallgrass 2"}, false)
|
add_large_plant("double_grass"..dry, "Double Tallgrass", longdesc_grass, "mcl_flowers_double_plant_grass_bottom"..dry..".png", "mcl_flowers_double_plant_grass_top"..dry..".png", nil, 5/16, 7/16, wheat_seed_drop, {"mcl_flowers:tallgrass 2"}, false, dry_override_grass)
|
||||||
add_large_plant("double_fern"..dry, "Large Fern", longdesc_fern, "mcl_flowers_double_plant_fern_bottom"..dry..".png", "mcl_flowers_double_plant_fern_top"..dry..".png", nil, 6/16, 5/16, wheat_seed_drop, {"mcl_flowers:fern 2"}, false)
|
add_large_plant("double_fern"..dry, "Large Fern", longdesc_fern, "mcl_flowers_double_plant_fern_bottom"..dry..".png", "mcl_flowers_double_plant_fern_top"..dry..".png", nil, 6/16, 5/16, wheat_seed_drop, {"mcl_flowers:fern 2"}, false, dry_override_fern)
|
||||||
end
|
end
|
||||||
|
|
||||||
doc.add_entry_alias("nodes", "mcl_flowers:double_grass", "nodes", "mcl_flowers:double_grass_dry")
|
doc.add_entry_alias("nodes", "mcl_flowers:double_grass", "nodes", "mcl_flowers:double_grass_dry")
|
||||||
|
|
Loading…
Reference in New Issue