2022-08-03 19:38:40 +02:00
local S = minetest.get_translator ( minetest.get_current_modname ( ) )
2022-08-04 03:22:41 +02:00
if minetest.get_modpath ( " default " ) then
df_dependencies.register_leafdecay = default.register_leafdecay
df_dependencies.after_place_leaves = default.after_place_leaves
2022-08-04 04:43:31 +02:00
elseif ( " mcl_core " ) then
-- Mineclone does leaf decay differently, it uses the "leafdecay" group to require that leaves remain
-- within the group value distance of any node of group "tree".
-- make sure to add place_param2 = 1 to leaves to prevent decay of player-placed leaves
df_dependencies.register_leafdecay = function ( ) end
df_dependencies.after_place_leaves = function ( ) end
2022-08-04 03:22:41 +02:00
end
2022-08-03 19:38:40 +02:00
2022-08-04 03:22:41 +02:00
df_dependencies.mods_required . bucket = true
2022-08-07 20:34:59 +02:00
df_dependencies.mods_required . mcl_buckets = true
2022-08-04 03:22:41 +02:00
if minetest.get_modpath ( " bucket " ) then
df_dependencies.bucket_register_liquid = bucket.register_liquid
2022-08-07 20:34:59 +02:00
elseif minetest.get_modpath ( " mcl_buckets " ) then
df_dependencies.bucket_register_liquid = function ( source_liquid , flowing_liquid , bucket_node , texture , desc )
mcl_buckets.register_liquid ( {
bucketname = bucket_node ,
source_take = { source_liquid } ,
source_place = source_liquid ,
inventory_image = texture ,
name = desc } )
end
2022-08-04 03:22:41 +02:00
end
2022-08-03 19:38:40 +02:00
-- Note that a circular table reference will result in a crash, TODO: guard against that.
-- Unlikely to be needed, though - it'd take a lot of work for users to get into this bit of trouble.
local function deep_copy ( table_in )
local table_out = { }
for index , value in pairs ( table_in ) do
if type ( value ) == " table " then
table_out [ index ] = deep_copy ( value )
else
table_out [ index ] = value
end
end
return table_out
end
2022-08-04 03:22:41 +02:00
df_dependencies.mods_required . stairs = true
df_dependencies.mods_required . moreblocks = true
df_dependencies.mods_required . doors = true
2022-08-07 03:54:14 +02:00
df_dependencies.mods_required . mcl_stairs = true
2022-08-07 04:12:42 +02:00
df_dependencies.mods_required . mcl_fences = true
df_dependencies.mods_required . mcl_core = true
2022-08-07 03:54:14 +02:00
2022-08-08 08:53:09 +02:00
local node_name_to_stair_properties = function ( name , override_def )
2022-08-03 19:38:40 +02:00
local mod = minetest.get_current_modname ( )
local node_def = minetest.registered_nodes [ mod .. " : " .. name ]
override_def = override_def or { }
local node_copy = deep_copy ( node_def )
for index , value in pairs ( override_def ) do
node_copy [ index ] = value
end
2022-08-07 03:54:14 +02:00
return mod , node_copy
end
df_dependencies.register_stairs = function ( name , override_def )
local mod , node_copy = node_name_to_stair_properties ( name , override_def )
2022-08-03 19:38:40 +02:00
if minetest.get_modpath ( " stairs " ) then
stairs.register_stair_and_slab (
name ,
mod .. " : " .. name ,
node_copy.groups ,
node_copy.tiles ,
S ( " @1 Stair " , node_copy.description ) ,
S ( " @1 Slab " , node_copy.description ) ,
node_copy.sounds
)
end
2022-08-07 03:54:14 +02:00
if minetest.get_modpath ( " mcl_stairs " ) then
mcl_stairs.register_stair_and_slab_simple (
name ,
mod .. " : " .. name ,
S ( " @1 Stair " , node_copy.description ) ,
S ( " @1 Slab " , node_copy.description ) ,
S ( " Double @1 Slab " , node_copy.description )
)
end
end
df_dependencies.register_more_stairs = function ( name , override_def )
local mod , node_copy = node_name_to_stair_properties ( name , override_def )
2022-08-03 19:38:40 +02:00
if minetest.get_modpath ( " moreblocks " ) then
stairsplus : register_all ( mod , name , mod .. " : " .. name , node_copy )
end
end
df_dependencies.register_all_fences = function ( name , override_def )
2022-08-07 03:54:14 +02:00
local mod , node_def = node_name_to_stair_properties ( name , override_def )
2022-08-03 19:38:40 +02:00
override_def = override_def or { }
2022-08-07 03:54:14 +02:00
local material = override_def.material or mod .. " : " .. name
2022-08-03 19:38:40 +02:00
local burntime = override_def.burntime
2022-08-07 03:54:14 +02:00
local texture = override_def.texture or node_def.tiles [ 1 ]
2022-08-03 19:38:40 +02:00
2022-08-04 03:22:41 +02:00
if minetest.get_modpath ( " default " ) then
default.register_fence ( material .. " _fence " , {
description = S ( " @1 Fence " , node_def.description ) ,
2022-08-07 03:54:14 +02:00
texture = texture ,
material = material ,
2022-08-04 03:22:41 +02:00
groups = deep_copy ( node_def.groups or { } ) , -- the default register_fence function modifies the groups table passed in, so send a copy instead to be on the safe side.
sounds = node_def.sounds
2022-08-03 19:38:40 +02:00
} )
2022-08-04 03:22:41 +02:00
if burntime then
minetest.register_craft ( {
type = " fuel " ,
recipe = material .. " _fence " ,
burntime = burntime , -- ignoring two sticks
} )
end
default.register_fence_rail ( material .. " _fence_rail " , {
description = S ( " @1 Fence Rail " , node_def.description ) ,
2022-08-07 03:54:14 +02:00
texture = texture ,
material = material ,
2022-08-04 03:22:41 +02:00
groups = deep_copy ( node_def.groups or { } ) , -- the default register_fence_rail function modifies the groups table passed in, so send a copy instead to be on the safe side.
sounds = node_def.sounds
} )
if burntime then
minetest.register_craft ( {
type = " fuel " ,
recipe = material .. " _fence_rail " ,
burntime = burntime * 4 / 16 ,
} )
end
2022-08-03 19:38:40 +02:00
2022-08-04 03:22:41 +02:00
default.register_mesepost ( material .. " _mese_light " , {
description = S ( " @1 Mese Post Light " , node_def.description ) ,
2022-08-07 03:54:14 +02:00
texture = texture ,
material = material ,
2022-08-04 03:22:41 +02:00
groups = deep_copy ( node_def.groups or { } ) , -- the default register_fence_rail function modifies the groups table passed in, so send a copy instead to be on the safe side.
sounds = node_def.sounds
2022-08-03 19:38:40 +02:00
} )
end
if minetest.get_modpath ( " doors " ) then
doors.register_fencegate ( material .. " _fence_gate " , {
description = S ( " @1 Fence Gate " , node_def.description ) ,
2022-08-07 03:54:14 +02:00
texture = texture ,
material = material ,
2022-08-03 19:38:40 +02:00
groups = deep_copy ( node_def.groups or { } ) , -- the default register_fence_rail function modifies the groups table passed in, so send a copy instead to be on the safe side.
sounds = node_def.sounds
} )
if burntime then
minetest.register_craft ( {
type = " fuel " ,
recipe = material .. " _fence_gate_closed " ,
burntime = burntime * 2 , -- ignoring four sticks
} )
end
end
2022-08-07 20:34:59 +02:00
if minetest.get_modpath ( " mcl_fences " ) then
local groups = deep_copy ( node_def.groups or { } )
groups.fence_wood = 1
mcl_fences.register_fence_and_fence_gate ( name .. " _fence " ,
S ( " @1 Fence " , node_def.description ) ,
S ( " @1 Fence Gate " , node_def.description ) ,
texture ,
groups ,
node_def._mcl_hardness or minetest.registered_nodes [ " mcl_core:wood " ] . _mcl_hardness ,
node_def._mcl_blast_resistance or minetest.registered_nodes [ " mcl_core:wood " ] . _mcl_blast_resistance ,
{ " group:fence_wood " }
)
end
2022-08-03 19:38:40 +02:00
end
2022-08-07 03:54:14 +02:00
df_dependencies.register_all_stairs_and_fences = function ( name , override_def )
df_dependencies.register_stairs ( name , override_def )
df_dependencies.register_more_stairs ( name , override_def )
df_dependencies.register_all_fences ( name , override_def )
2022-08-07 22:27:29 +02:00
end
df_dependencies.mods_required . tnt = true
df_dependencies.mods_required . mcl_explosions = true
if minetest.get_modpath ( " tnt " ) then
df_dependencies.tnt_boom = tnt.boom
elseif minetest.get_modpath ( " mcl_explosions " ) then
df_dependencies.tnt_boom = function ( pos , def )
mcl_explosions.explode ( pos , def.radius )
end
2022-08-07 03:54:14 +02:00
end