Only consume bone meal if a _mcl_on_bonemealing callback is defined or the legacy API returns true, convert vines to use new bonemeal API

This commit is contained in:
teknomunk 2024-03-21 18:11:36 +00:00
parent 9e6d49dd38
commit 3c2f2593db
2 changed files with 15 additions and 10 deletions

View file

@ -81,13 +81,16 @@ mcl_bone_meal.use_bone_meal = function(itemstack, placer, pointed_thing)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
local ndef = minetest.registered_nodes[node.name] local ndef = minetest.registered_nodes[node.name]
local success = false local success = false
local consume
-- If the pointed node can be bonemealed, let it handle the processing. -- If the pointed node can be bonemealed, let it handle the processing.
if ndef and ndef._mcl_on_bonemealing then if ndef and ndef._mcl_on_bonemealing then
success = ndef._mcl_on_bonemealing(pointed_thing, placer) success = ndef._mcl_on_bonemealing(pointed_thing, placer)
consume = true
else else
-- Otherwise try the legacy API. -- Otherwise try the legacy API.
success = legacy_apply_bone_meal(pointed_thing, placer) success = legacy_apply_bone_meal(pointed_thing, placer)
consume = success
end end
-- Particle effects -- Particle effects
@ -96,7 +99,7 @@ mcl_bone_meal.use_bone_meal = function(itemstack, placer, pointed_thing)
end end
-- Take the item -- Take the item
if not placer or not minetest.is_creative_enabled(placer:get_player_name()) then if consume and ( not placer or not minetest.is_creative_enabled(placer:get_player_name()) ) then
itemstack:take_item() itemstack:take_item()
end end

View file

@ -28,9 +28,11 @@ function grow_vines(pos, moreontop ,vine, dir)
minetest.set_node(vector.offset(pos,0,i*dir,0),{name=vine}) minetest.set_node(vector.offset(pos,0,i*dir,0),{name=vine})
end end
end end
break return true
end end
until n.name ~= "air" and n.name ~= vine until n.name ~= "air" and n.name ~= vine
return false
end end
local nether_plants = { local nether_plants = {
@ -130,6 +132,9 @@ minetest.register_node("mcl_crimson:twisting_vines", {
fixed = { -3/16, -0.5, -3/16, 3/16, 0.5, 3/16 }, fixed = { -3/16, -0.5, -3/16, 3/16, 0.5, 3/16 },
}, },
node_placement_prediction = "", node_placement_prediction = "",
_mcl_on_bonemealing = function(pointed_thing, placer)
return grow_vines(pointed_thing.under, math.random(1, 3),"mcl_crimson:twisting_vines")
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local pn = clicker:get_player_name() local pn = clicker:get_player_name()
if clicker:is_player() and minetest.is_protected(vector.offset(pos,0,1,0), pn or "") then if clicker:is_player() and minetest.is_protected(vector.offset(pos,0,1,0), pn or "") then
@ -150,10 +155,7 @@ minetest.register_node("mcl_crimson:twisting_vines", {
end end
elseif clicker:get_wielded_item():get_name() == "mcl_bone_meal:bone_meal" then elseif clicker:get_wielded_item():get_name() == "mcl_bone_meal:bone_meal" then
if not minetest.is_creative_enabled(clicker:get_player_name()) then return mcl_bone_meal.use_bone_meal(itemstack, clicker, {under=pos})
itemstack:take_item()
end
grow_vines(pos, math.random(1, 3),"mcl_crimson:twisting_vines")
end end
return itemstack return itemstack
end, end,
@ -220,6 +222,9 @@ minetest.register_node("mcl_crimson:weeping_vines", {
fixed = { -3/16, -0.5, -3/16, 3/16, 0.5, 3/16 }, fixed = { -3/16, -0.5, -3/16, 3/16, 0.5, 3/16 },
}, },
node_placement_prediction = "", node_placement_prediction = "",
_mcl_on_bonemealing = function(pointed_thing, placer)
return grow_vines(pointed_thing.under, math.random(1, 3),"mcl_crimson:weeping_vines")
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local pn = clicker:get_player_name() local pn = clicker:get_player_name()
if clicker:is_player() and minetest.is_protected(vector.offset(pos,0,1,0), pn or "") then if clicker:is_player() and minetest.is_protected(vector.offset(pos,0,1,0), pn or "") then
@ -240,10 +245,7 @@ minetest.register_node("mcl_crimson:weeping_vines", {
end end
elseif clicker:get_wielded_item():get_name() == "mcl_bone_meal:bone_meal" then elseif clicker:get_wielded_item():get_name() == "mcl_bone_meal:bone_meal" then
if not minetest.is_creative_enabled(clicker:get_player_name()) then return mcl_bone_meal.use_bone_meal(itemstack, clicker, {under=pos})
itemstack:take_item()
end
grow_vines(pos, math.random(1, 3),"mcl_crimson:weeping_vines", -1)
end end
return itemstack return itemstack
end, end,