2017-02-17 22:27:33 +01:00
local go_fishing = function ( itemstack , user , pointed_thing )
if pointed_thing and pointed_thing.under then
2017-03-02 16:09:13 +01:00
-- Use pointed node's on_rightclick function first, if present
2017-02-17 22:27:33 +01:00
local node = minetest.get_node ( pointed_thing.under )
2017-03-02 16:09:13 +01:00
if user and not user : get_player_control ( ) . sneak then
if minetest.registered_nodes [ node.name ] and minetest.registered_nodes [ node.name ] . on_rightclick then
return minetest.registered_nodes [ node.name ] . on_rightclick ( pointed_thing.under , node , user , itemstack ) or itemstack
end
end
2017-02-17 22:27:33 +01:00
if string.find ( node.name , " mcl_core:water " ) then
local itemname
local itemcount = 1
local itemwear = 0
2017-05-19 18:00:21 +02:00
-- FIXME: Maybe use a better seeding
local pr = PseudoRandom ( os.time ( ) * math.random ( 1 , 100 ) )
local r = pr : next ( 1 , 100 )
2017-02-17 22:27:33 +01:00
if r <= 85 then
-- Fish
2017-05-19 18:00:21 +02:00
items = mcl_loot.get_loot ( {
items = {
{ itemstring = " mcl_fishing:fish_raw " , weight = 60 } ,
{ itemstring = " mcl_fishing:salmon_raw " , weight = 25 } ,
{ itemstring = " mcl_fishing:clownfish_raw " , weight = 2 } ,
{ itemstring = " mcl_fishing:pufferfish_raw " , weight = 13 } ,
}
} , pr )
2017-02-17 22:27:33 +01:00
elseif r <= 95 then
-- Junk
2017-05-19 18:00:21 +02:00
items = mcl_loot.get_loot ( {
items = {
{ itemstring = " mcl_core:bowl " , weight = 10 } ,
{ itemstring = " mcl_fishing:fishing_rod " , weight = 2 , wear_min = 6554 , wear_max = 65535 } , -- 10%-100% damage
{ itemstring = " mcl_mobitems:leather " , weight = 10 } ,
{ itemstring = " 3d_armor:boots_leather " , weight = 10 , wear_min = 6554 , wear_max = 65535 } , -- 10%-100% damage
{ itemstring = " mcl_mobitems:rotten_flesh " , weight = 10 } ,
{ itemstring = " mcl_core:stick " , weight = 5 } ,
{ itemstring = " mcl_mobitems:string " , weight = 5 } ,
{ itemstring = " mcl_potions:potion_water " , weight = 10 } ,
{ itemstring = " mcl_mobitems:bone " , weight = 10 } ,
{ itemstring = " mcl_dye:black " , weight = 1 , amount_min = 10 , amount_max = 10 } ,
{ itemstring = " mcl_mobitems:string " , weight = 10 } , -- TODO: Tripwire Hook
}
} , pr )
2017-02-17 22:27:33 +01:00
else
-- Treasure
2017-05-19 18:00:21 +02:00
items = mcl_loot.get_loot ( {
items = {
-- TODO: Enchanted Bow
{ itemstring = " mcl_throwing:bow " , wear_min = 49144 , wear_max = 65535 } , -- 75%-100% damage
-- TODO: Enchanted Book
{ itemstring = " mcl_books:book " } ,
-- TODO: Enchanted Fishing Rod
{ itemstring = " mcl_fishing:fishing_rod " , wear_min = 49144 , wear_max = 65535 } , -- 75%-100% damage
{ itemstring = " mobs:nametag " , } ,
{ itemstring = " mcl_mobitems:saddle " , } ,
{ itemstring = " mcl_flowers:waterlily " , } ,
}
} , pr )
end
local item
if # items >= 1 then
item = ItemStack ( items [ 1 ] )
else
item = ItemStack ( )
2017-02-01 15:20:28 +01:00
end
2017-02-17 22:27:33 +01:00
local inv = user : get_inventory ( )
if inv : room_for_item ( " main " , item ) then
inv : add_item ( " main " , item )
end
2017-02-17 22:39:56 +01:00
if not minetest.setting_getbool ( " creative_mode " ) then
2017-02-19 20:23:33 +01:00
local idef = itemstack : get_definition ( )
2017-02-17 22:39:56 +01:00
itemstack : add_wear ( 65535 / 65 ) -- 65 uses
2017-02-19 20:23:33 +01:00
if itemstack : get_count ( ) == 0 and idef.sound and idef.sound . breaks then
minetest.sound_play ( idef.sound . breaks , { pos = pointed_thing.above , gain = 0.5 } )
end
2017-02-17 22:27:33 +01:00
end
return itemstack
2017-02-01 15:20:28 +01:00
end
2017-02-17 22:27:33 +01:00
end
return nil
end
-- Fishing Rod
minetest.register_tool ( " mcl_fishing:fishing_rod " , {
description = " Fishing Rod " ,
2017-03-12 02:09:11 +01:00
_doc_items_longdesc = " Fishing rods can be used to catch fish. " ,
_doc_items_usagehelp = " Rightclick a water source to try to go fishing. Who knows what you're going to catch? " ,
2017-02-17 22:27:33 +01:00
groups = { tool = 1 } ,
inventory_image = " mcl_fishing_fishing_rod.png " ,
stack_max = 1 ,
liquids_pointable = true ,
on_place = go_fishing ,
2017-02-19 20:23:33 +01:00
sound = { breaks = " default_tool_breaks " } ,
2017-02-01 15:20:28 +01:00
} )
minetest.register_craft ( {
output = " mcl_fishing:fishing_rod " ,
recipe = {
{ ' ' , ' ' , ' mcl_core:stick ' } ,
2017-02-01 17:59:15 +01:00
{ ' ' , ' mcl_core:stick ' , ' mcl_mobitems:string ' } ,
{ ' mcl_core:stick ' , ' ' , ' mcl_mobitems:string ' } ,
2017-02-01 15:20:28 +01:00
}
} )
minetest.register_craft ( {
output = " mcl_fishing:fishing_rod " ,
recipe = {
{ ' mcl_core:stick ' , ' ' , ' ' } ,
2017-02-01 17:59:15 +01:00
{ ' mcl_mobitems:string ' , ' mcl_core:stick ' , ' ' } ,
{ ' mcl_mobitems:string ' , ' ' , ' mcl_core:stick ' } ,
2017-02-01 15:20:28 +01:00
}
} )
minetest.register_craft ( {
type = " fuel " ,
recipe = " mcl_fishing:fishing_rod " ,
burntime = 15 ,
} )
-- Fish
minetest.register_craftitem ( " mcl_fishing:fish_raw " , {
description = " Raw Fish " ,
2017-03-18 17:18:12 +01:00
_doc_items_longdesc = " This is a raw food item which can be eaten for 2 hunger points. But cooking it is better. " ,
2017-02-01 15:20:28 +01:00
inventory_image = " mcl_fishing_fish_raw.png " ,
2017-02-16 17:45:33 +01:00
on_place = minetest.item_eat ( 2 ) ,
on_secondary_use = minetest.item_eat ( 2 ) ,
2017-02-01 15:20:28 +01:00
stack_max = 64 ,
groups = { food = 2 , eatable = 2 } ,
2017-05-20 17:45:04 +02:00
_mcl_saturation = 0.4 ,
2017-02-01 15:20:28 +01:00
} )
minetest.register_craftitem ( " mcl_fishing:fish_cooked " , {
description = " Cooked Fish " ,
2017-03-18 17:18:12 +01:00
_doc_items_longdesc = " Mmh, fish! This food item can be eaten for 5 hunger points. " ,
2017-02-01 15:20:28 +01:00
inventory_image = " mcl_fishing_fish_cooked.png " ,
2017-02-16 17:45:33 +01:00
on_place = minetest.item_eat ( 5 ) ,
on_secondary_use = minetest.item_eat ( 5 ) ,
2017-02-01 15:20:28 +01:00
stack_max = 64 ,
groups = { food = 2 , eatable = 5 } ,
2017-05-20 17:45:04 +02:00
_mcl_saturation = 9.6 ,
2017-02-01 15:20:28 +01:00
} )
minetest.register_craft ( {
type = " cooking " ,
output = " mcl_fishing:fish_cooked " ,
recipe = " mcl_fishing:fish_raw " ,
cooktime = 10 ,
} )
2017-02-01 15:29:43 +01:00
-- Salmon
minetest.register_craftitem ( " mcl_fishing:salmon_raw " , {
description = " Raw Salmon " ,
2017-03-18 17:18:12 +01:00
_doc_items_longdesc = " This is a raw food item which can be eaten for 2 hunger points. But cooking it is better. " ,
2017-02-01 15:29:43 +01:00
inventory_image = " mcl_fishing_salmon_raw.png " ,
2017-02-16 17:45:33 +01:00
on_place = minetest.item_eat ( 2 ) ,
on_secondary_use = minetest.item_eat ( 2 ) ,
2017-02-01 15:29:43 +01:00
stack_max = 64 ,
groups = { food = 2 , eatable = 2 } ,
2017-05-20 17:45:04 +02:00
_mcl_saturation = 0.4 ,
2017-02-01 15:29:43 +01:00
} )
minetest.register_craftitem ( " mcl_fishing:salmon_cooked " , {
description = " Cooked Salmon " ,
2017-03-18 17:18:12 +01:00
_doc_items_longdesc = " This is a food item which can be eaten for 6 hunger points. " ,
2017-02-01 15:29:43 +01:00
inventory_image = " mcl_fishing_salmon_cooked.png " ,
2017-02-16 17:45:33 +01:00
on_place = minetest.item_eat ( 6 ) ,
on_secondary_use = minetest.item_eat ( 6 ) ,
2017-02-01 15:29:43 +01:00
stack_max = 64 ,
groups = { food = 2 , eatable = 6 } ,
2017-05-20 17:45:04 +02:00
_mcl_saturation = 9.6 ,
2017-02-01 15:29:43 +01:00
} )
minetest.register_craft ( {
type = " cooking " ,
output = " mcl_fishing:salmon_cooked " ,
recipe = " mcl_fishing:salmon_raw " ,
cooktime = 10 ,
} )
-- Clownfish
minetest.register_craftitem ( " mcl_fishing:clownfish_raw " , {
description = " Clownfish " ,
2017-03-18 17:18:12 +01:00
_doc_items_longdesc = " This is a food item which can be eaten for 1 hunger point. " ,
2017-02-01 15:29:43 +01:00
inventory_image = " mcl_fishing_clownfish_raw.png " ,
2017-02-16 17:45:33 +01:00
on_place = minetest.item_eat ( 1 ) ,
on_secondary_use = minetest.item_eat ( 1 ) ,
2017-02-01 15:29:43 +01:00
stack_max = 64 ,
groups = { food = 2 , eatable = 1 } ,
2017-05-20 17:45:04 +02:00
_mcl_saturation = 0.2 ,
2017-02-01 15:29:43 +01:00
} )
-- Pufferfish
2017-05-21 00:43:30 +02:00
-- TODO: Add real status effect
2017-02-01 15:29:43 +01:00
minetest.register_craftitem ( " mcl_fishing:pufferfish_raw " , {
description = " Pufferfish " ,
2017-05-21 01:07:46 +02:00
_doc_items_longdesc = " Pufferfish are a common species of fish, but they not fit for consumption by humans. Eating a pufferfish restores 1 hunger point, but it will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger). " ,
2017-02-01 15:29:43 +01:00
inventory_image = " mcl_fishing_pufferfish_raw.png " ,
2017-02-16 17:45:33 +01:00
on_place = minetest.item_eat ( 1 ) ,
on_secondary_use = minetest.item_eat ( 1 ) ,
2017-02-01 15:29:43 +01:00
stack_max = 64 ,
groups = { food = 2 , eatable = 1 } ,
2017-05-20 17:45:04 +02:00
_mcl_saturation = 0.2 ,
2017-02-01 15:29:43 +01:00
} )