missing callbacks for farmables

This commit is contained in:
FaceDeer 2022-08-21 01:54:41 -06:00
parent dd962f04a1
commit c74e9316ef
2 changed files with 50 additions and 0 deletions

View File

@ -93,6 +93,15 @@ df_farming.plant_timer = function(pos, plantname, elapsed)
end end
end end
local function copy_pointed_thing(pointed_thing)
return {
type = pointed_thing.type,
above = pointed_thing.above and vector.copy(pointed_thing.above),
under = pointed_thing.under and vector.copy(pointed_thing.under),
ref = pointed_thing.ref,
}
end
local place_seed = function(itemstack, placer, pointed_thing, plantname) local place_seed = function(itemstack, placer, pointed_thing, plantname)
local pt = pointed_thing local pt = pointed_thing
-- check if pointing at a node -- check if pointing at a node
@ -134,13 +143,30 @@ local place_seed = function(itemstack, placer, pointed_thing, plantname)
end end
-- add the node and remove 1 item from the itemstack -- add the node and remove 1 item from the itemstack
local newnode= {name = itemstack:get_name(), param2 = 1, param1=0}
local oldnode= minetest.get_node(pt.above)
minetest.add_node(pt.above, {name = plantname, param2 = 1}) minetest.add_node(pt.above, {name = plantname, param2 = 1})
local growth_permitted_function = df_farming.growth_permitted[plantname] local growth_permitted_function = df_farming.growth_permitted[plantname]
if not growth_permitted_function or growth_permitted_function(pt.above) then if not growth_permitted_function or growth_permitted_function(pt.above) then
df_farming.plant_timer(pt.above, plantname) df_farming.plant_timer(pt.above, plantname)
else else
minetest.get_node_timer(pt.above):stop() -- make sure no old timers are running on this node minetest.get_node_timer(pt.above):stop() -- make sure no old timers are running on this node
end end
-- Run script hook
local take_item = true
for _, callback in ipairs(core.registered_on_placenodes) do
-- Deepcopy pos, node and pointed_thing because callback can modify them
local place_to_copy = vector.copy(pt.above)
local newnode_copy = {name=newnode.name, param1=newnode.param1, param2=newnode.param2}
local oldnode_copy = {name=oldnode.name, param1=oldnode.param1, param2=oldnode.param2}
local pointed_thing_copy = copy_pointed_thing(pointed_thing)
if callback(place_to_copy, newnode_copy, placer, oldnode_copy, itemstack, pointed_thing_copy) then
take_item = false
end
end
if not minetest.settings:get_bool("creative_mode", false) then if not minetest.settings:get_bool("creative_mode", false) then
itemstack:take_item() itemstack:take_item()
end end

View File

@ -5,6 +5,15 @@ local displace_z = 0.125
local plump_helmet_grow_time = df_farming.config.plant_growth_time * df_farming.config.plump_helmet_delay_multiplier / 4 local plump_helmet_grow_time = df_farming.config.plant_growth_time * df_farming.config.plump_helmet_delay_multiplier / 4
local function copy_pointed_thing(pointed_thing)
return {
type = pointed_thing.type,
above = pointed_thing.above and vector.copy(pointed_thing.above),
under = pointed_thing.under and vector.copy(pointed_thing.under),
ref = pointed_thing.ref,
}
end
local plump_helmet_on_place = function(itemstack, placer, pointed_thing, plantname) local plump_helmet_on_place = function(itemstack, placer, pointed_thing, plantname)
local pt = pointed_thing local pt = pointed_thing
-- check if pointing at a node -- check if pointing at a node
@ -46,6 +55,8 @@ local plump_helmet_on_place = function(itemstack, placer, pointed_thing, plantn
end end
-- add the node and remove 1 item from the itemstack -- add the node and remove 1 item from the itemstack
local newnode= {name = itemstack:get_name(), param2 = new_param2, param1=0}
local oldnode= minetest.get_node(pt.above)
minetest.add_node(pt.above, {name = plantname, param2 = math.random(0,3)}) minetest.add_node(pt.above, {name = plantname, param2 = math.random(0,3)})
local growth_permitted_function = df_farming.growth_permitted["df_farming:plump_helmet_spawn"] -- use the same permitted function for all plump helmets local growth_permitted_function = df_farming.growth_permitted["df_farming:plump_helmet_spawn"] -- use the same permitted function for all plump helmets
@ -53,6 +64,19 @@ local plump_helmet_on_place = function(itemstack, placer, pointed_thing, plantn
df_farming.plant_timer(pt.above, plantname) df_farming.plant_timer(pt.above, plantname)
end end
-- Run script hook
local take_item = true
for _, callback in ipairs(core.registered_on_placenodes) do
-- Deepcopy pos, node and pointed_thing because callback can modify them
local place_to_copy = vector.copy(pt.above)
local newnode_copy = {name=newnode.name, param1=newnode.param1, param2=newnode.param2}
local oldnode_copy = {name=oldnode.name, param1=oldnode.param1, param2=oldnode.param2}
local pointed_thing_copy = copy_pointed_thing(pointed_thing)
if callback(place_to_copy, newnode_copy, placer, oldnode_copy, itemstack, pointed_thing_copy) then
take_item = false
end
end
if not minetest.settings:get_bool("creative_mode", false) then if not minetest.settings:get_bool("creative_mode", false) then
itemstack:take_item() itemstack:take_item()
end end