@ -1,18 +1,34 @@
local old_furnace = table.copy ( minetest.registered_nodes [ " mcl_furnaces:furnace " ] )
local old_blast_furnace = table.copy ( minetest.registered_nodes [ " mcl_blast_furnace:blast_furnace " ] )
local old_smoker = table.copy ( minetest.registered_nodes [ " mcl_smoker:smoker " ] )
local tube_entry = " ^pipeworks_tube_connection_stony.png "
local groups = old_furnace.groups
groups [ " tubedevice " ] = 1
groups [ " tubedevice_receiver " ] = 1
local groups_active = table.copy ( groups )
groups_active [ " not_in_creative_inventory " ] = 1
-- groups
local furnace_groups = old_furnace.groups
furnace_groups [ " tubedevice " ] = 1
furnace_groups [ " tubedevice_receiver " ] = 1
local furnace_groups_active = table.copy ( furnace_groups )
furnace_groups_active [ " not_in_creative_inventory " ] = 1
local blast_furnace_groups = old_blast_furnace.groups
blast_furnace_groups [ " tubedevice " ] = 1
blast_furnace_groups [ " tubedevice_receiver " ] = 1
local blast_furnace_groups_active = table.copy ( blast_furnace_groups )
blast_furnace_groups_active [ " not_in_creative_inventory " ] = 1
local smoker_groups = old_smoker.groups
smoker_groups [ " tubedevice " ] = 1
smoker_groups [ " tubedevice_receiver " ] = 1
local smoker_groups_active = table.copy ( smoker_groups )
smoker_groups_active [ " not_in_creative_inventory " ] = 1
-- a hack to give the exp to fake players it's be dropped instead added to (fake) player inv
local function give_xp ( pos , player )
local meta = minetest.get_meta ( pos )
local dir = vector.divide ( minetest.facedir_to_dir ( minetest.get_node ( pos ) . param2 ) , - 1.95 )
local dir = vector.divide ( minetest.facedir_to_dir ( minetest.get_node ( pos ) . param2 ) , - 1.95 )
local xp = meta : get_int ( " xp " )
if xp > 0 then
mcl_experience.throw_xp ( vector.add ( pos , dir ) , xp )
@ -31,7 +47,7 @@ override.tiles = {
" default_furnace_front.png "
}
override.groups = groups
override.groups = furnace_ groups
override.tube = {
insert_object = function ( pos , node , stack , direction )
@ -97,7 +113,7 @@ override_active.tiles = {
" default_furnace_front_active.png " ,
}
override_active.groups = groups_active
override_active.groups = furnace_ groups_active
override_active.tube = {
insert_object = function ( pos , node , stack , direction )
@ -127,6 +143,234 @@ override_active.tube = {
}
--blast furnace
local override_blast_furnace = { }
override_blast_furnace.tiles = {
" blast_furnace_top.png " .. tube_entry ,
" blast_furnace_top.png " .. tube_entry ,
" blast_furnace_side.png " .. tube_entry ,
" blast_furnace_side.png " .. tube_entry ,
" blast_furnace_side.png " .. tube_entry ,
" blast_furnace_front.png "
}
override_blast_furnace.groups = blast_furnace_groups
override_blast_furnace.tube = {
insert_object = function ( pos , node , stack , direction )
local meta = minetest.get_meta ( pos )
local inv = meta : get_inventory ( )
local timer = minetest.get_node_timer ( pos )
if not timer : is_started ( ) then
timer : start ( 1.0 )
end
if direction.y == 1 then
return inv : add_item ( " fuel " , stack )
else
return inv : add_item ( " src " , stack )
end
end ,
can_insert = function ( pos , node , stack , direction )
local meta = minetest.get_meta ( pos )
local inv = meta : get_inventory ( )
if direction.y == 1 then
return inv : room_for_item ( " fuel " , stack )
else
if meta : get_int ( " split_material_stacks " ) == 1 then
stack = stack : peek_item ( 1 )
end
return inv : room_for_item ( " src " , stack )
end
end ,
input_inventory = " dst " ,
connect_sides = { left = 1 , right = 1 , back = 1 , bottom = 1 , top = 1 }
}
override_blast_furnace.after_place_node = function ( pos , placer , itemstack , pointed_thing )
pipeworks.after_place ( pos , placer , itemstack , pointed_thing )
end
override_blast_furnace.after_dig_node = function ( pos , oldnode , oldmetadata , digger )
old_blast_furnace.after_dig_node ( pos , oldnode , oldmetadata , digger )
pipeworks.after_dig ( pos )
end
override_blast_furnace.on_metadata_inventory_take = function ( pos , listname , index , stack , player )
-- Award smelting achievements
if listname == " dst " then
if stack : get_name ( ) == " mcl_core:iron_ingot " then
awards.unlock ( player : get_player_name ( ) , " mcl:acquireIron " )
end
give_xp ( pos , player )
end
end
override_blast_furnace.on_rotate = pipeworks.on_rotate
local override_blast_active = table.copy ( override )
override_blast_active.tiles = {
" blast_furnace_top.png " .. tube_entry ,
" blast_furnace_top.png " .. tube_entry ,
" blast_furnace_side.png " .. tube_entry ,
" blast_furnace_side.png " .. tube_entry ,
" blast_furnace_side.png " .. tube_entry ,
{
name = " blast_furnace_front_on.png " ,
animation = { type = " vertical_frames " , aspect_w = 16 , aspect_h = 16 , length = 48 }
} ,
}
override_blast_active.groups = blast_furnace_groups_active
override_blast_active.tube = {
insert_object = function ( pos , node , stack , direction )
local meta = minetest.get_meta ( pos )
local inv = meta : get_inventory ( )
local timer = minetest.get_node_timer ( pos )
if not timer : is_started ( ) then
timer : start ( 1.0 )
end
if direction.y == 1 then
return inv : add_item ( " fuel " , stack )
else
return inv : add_item ( " src " , stack )
end
end ,
can_insert = function ( pos , node , stack , direction )
local meta = minetest.get_meta ( pos )
local inv = meta : get_inventory ( )
if direction.y == 1 then
return inv : room_for_item ( " fuel " , stack )
else
return inv : room_for_item ( " src " , stack )
end
end ,
input_inventory = " dst " ,
connect_sides = { left = 1 , right = 1 , back = 1 , bottom = 1 , top = 1 }
}
-- smoker
local override_smoker = { }
override_smoker.tiles = {
" smoker_top.png " .. tube_entry ,
" smoker_bottom.png " .. tube_entry ,
" smoker_side.png " .. tube_entry ,
" smoker_side.png " .. tube_entry ,
" smoker_side.png " .. tube_entry ,
" smoker_front.png "
}
override_smoker.groups = smoker_groups
override_smoker.tube = {
insert_object = function ( pos , node , stack , direction )
local meta = minetest.get_meta ( pos )
local inv = meta : get_inventory ( )
local timer = minetest.get_node_timer ( pos )
if not timer : is_started ( ) then
timer : start ( 1.0 )
end
if direction.y == 1 then
return inv : add_item ( " fuel " , stack )
else
return inv : add_item ( " src " , stack )
end
end ,
can_insert = function ( pos , node , stack , direction )
local meta = minetest.get_meta ( pos )
local inv = meta : get_inventory ( )
if direction.y == 1 then
return inv : room_for_item ( " fuel " , stack )
else
if meta : get_int ( " split_material_stacks " ) == 1 then
stack = stack : peek_item ( 1 )
end
return inv : room_for_item ( " src " , stack )
end
end ,
input_inventory = " dst " ,
connect_sides = { left = 1 , right = 1 , back = 1 , bottom = 1 , top = 1 }
}
override_smoker.after_place_node = function ( pos , placer , itemstack , pointed_thing )
pipeworks.after_place ( pos , placer , itemstack , pointed_thing )
end
override_smoker.after_dig_node = function ( pos , oldnode , oldmetadata , digger )
old_smoker.after_dig_node ( pos , oldnode , oldmetadata , digger )
pipeworks.after_dig ( pos )
end
override_smoker.on_metadata_inventory_take = function ( pos , listname , index , stack , player )
-- Award fish achievements
if listname == " dst " then
if stack : get_name ( ) == " mcl_fishing:fish_cooked " then
awards.unlock ( player : get_player_name ( ) , " mcl:cookFish " )
end
give_xp ( pos , player )
end
end
override_smoker.on_rotate = pipeworks.on_rotate
local override_smoker_active = table.copy ( override )
override_smoker_active.tiles = {
" smoker_top.png " .. tube_entry ,
" smoker_bottom.png " .. tube_entry ,
" smoker_side.png " .. tube_entry ,
" smoker_side.png " .. tube_entry ,
" smoker_side.png " .. tube_entry ,
{
name = " smoker_front_on.png " ,
animation = { type = " vertical_frames " , aspect_w = 16 , aspect_h = 16 , length = 48 }
} ,
}
override_smoker_active.groups = smoker_groups_active
override_smoker_active.tube = {
insert_object = function ( pos , node , stack , direction )
local meta = minetest.get_meta ( pos )
local inv = meta : get_inventory ( )
local timer = minetest.get_node_timer ( pos )
if not timer : is_started ( ) then
timer : start ( 1.0 )
end
if direction.y == 1 then
return inv : add_item ( " fuel " , stack )
else
return inv : add_item ( " src " , stack )
end
end ,
can_insert = function ( pos , node , stack , direction )
local meta = minetest.get_meta ( pos )
local inv = meta : get_inventory ( )
if direction.y == 1 then
return inv : room_for_item ( " fuel " , stack )
else
return inv : room_for_item ( " src " , stack )
end
end ,
input_inventory = " dst " ,
connect_sides = { left = 1 , right = 1 , back = 1 , bottom = 1 , top = 1 }
}
-- override
minetest.override_item ( " mcl_furnaces:furnace " , override )
minetest.override_item ( " mcl_furnaces:furnace_active " , override_active )
minetest.override_item ( " mcl_blast_furnace:blast_furnace " , override_blast_furnace )
minetest.override_item ( " mcl_blast_furnace:blast_furnace_active " , override_blast_active )
minetest.override_item ( " mcl_smoker:smoker " , override_smoker )
minetest.override_item ( " mcl_smoker:smoker_active " , override_smoker_active )