2019-07-31 06:47:40 +03:00
--Fishing Rod, Bobber, and Flying Bobber mechanics and Bobber artwork by Rootyjr.
2019-03-08 02:00:09 +03:00
local S = minetest.get_translator ( " mcl_fishing " )
2019-07-31 05:22:28 +03:00
local mod_throwing = minetest.get_modpath ( " mcl_throwing " )
local entity_mapping = {
[ " mcl_fishing:bobber " ] = " mcl_fishing:bobber_entity " ,
}
2019-03-08 02:00:09 +03:00
2019-07-31 05:22:28 +03:00
local bobber_ENTITY = {
physical = false ,
timer = 0 ,
textures = { " mcl_fishing_bobber.png " } ,
visual_size = { x = 0.5 , y = 0.5 } ,
collisionbox = { 0.45 , 0.45 , 0.45 , 0.45 , 0.45 , 0.45 } ,
pointable = false ,
2019-11-19 03:19:47 +03:00
static_save = false ,
2019-07-31 05:22:28 +03:00
_lastpos = { } ,
_dive = false ,
2020-11-09 20:59:08 +03:00
_waittime = nil ,
_time = 0 ,
2019-07-31 05:22:28 +03:00
player = nil ,
_oldy = nil ,
objtype = " fishing " ,
}
2021-01-04 22:23:14 +03:00
local fish = function ( itemstack , player , pointed_thing )
if pointed_thing and pointed_thing.type == " node " then
-- Call on_rightclick if the pointed node defines it
local node = minetest.get_node ( pointed_thing.under )
if player and not player : 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 , player , itemstack ) or itemstack
end
end
end
2019-07-31 05:22:28 +03:00
local pos = player : get_pos ( )
2019-08-02 22:38:00 +03:00
local objs = minetest.get_objects_inside_radius ( pos , 125 )
2019-07-31 05:22:28 +03:00
local num = 0
local ent = nil
local noent = true
2021-01-04 22:23:14 +03:00
2020-11-02 19:38:51 +03:00
local durability = 65
local unbreaking = mcl_enchanting.get_enchantment ( itemstack , " unbreaking " )
if unbreaking > 0 then
durability = durability * ( unbreaking + 1 )
end
2021-01-04 22:23:14 +03:00
2019-07-31 05:22:28 +03:00
--Check for bobber if so handle.
for n = 1 , # objs do
ent = objs [ n ] : get_luaentity ( )
if ent then
if ent.player and ent.objtype == " fishing " then
if ( player : get_player_name ( ) == ent.player ) then
noent = false
if ent._dive == true then
local itemname
2019-09-27 13:09:03 +03:00
local items
2019-07-31 05:22:28 +03:00
local itemcount = 1
local itemwear = 0
local pr = PseudoRandom ( os.time ( ) * math.random ( 1 , 100 ) )
local r = pr : next ( 1 , 100 )
2020-12-23 17:18:20 +03:00
local fish_values = { 85 , 84.8 , 84.7 , 84.5 }
local junk_values = { 10 , 8.1 , 6.1 , 4.2 }
local luck_of_the_sea = math.min ( mcl_enchanting.get_enchantment ( itemstack , " luck_of_the_sea " ) , 3 )
local index = luck_of_the_sea + 1
local fish_value = fish_values [ index ]
local junk_value = junk_values [ index ] + fish_value
if r <= fish_value then
2019-07-31 05:22:28 +03:00
-- Fish
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 )
2020-12-23 17:18:20 +03:00
elseif r <= junk_value then
2019-07-31 05:22:28 +03:00
-- Junk
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 } ,
2020-02-18 17:44:54 +03:00
{ itemstring = " mcl_armor:boots_leather " , weight = 10 , wear_min = 6554 , wear_max = 65535 } , -- 10%-100% damage
2019-07-31 05:22:28 +03:00
{ itemstring = " mcl_mobitems:rotten_flesh " , weight = 10 } ,
{ itemstring = " mcl_core:stick " , weight = 5 } ,
{ itemstring = " mcl_mobitems:string " , weight = 5 } ,
2020-09-08 06:21:29 +03:00
{ itemstring = " mcl_potions:water " , weight = 10 } ,
2019-07-31 05:22:28 +03:00
{ 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 )
else
-- Treasure
items = mcl_loot.get_loot ( {
items = {
-- TODO: Enchanted Bow
{ itemstring = " mcl_bows:bow " , wear_min = 49144 , wear_max = 65535 } , -- 75%-100% damage
2020-12-20 19:33:24 +03:00
{ itemstack = mcl_enchanting.get_randomly_enchanted_book ( 30 , true , true ) } ,
2019-07-31 05:22:28 +03:00
-- TODO: Enchanted Fishing Rod
{ itemstring = " mcl_fishing:fishing_rod " , wear_min = 49144 , wear_max = 65535 } , -- 75%-100% damage
{ itemstring = " mcl_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 ( )
end
local inv = player : get_inventory ( )
if inv : room_for_item ( " main " , item ) then
inv : add_item ( " main " , item )
2021-01-05 19:35:06 +03:00
else
minetest.add_item ( pos , item )
2019-07-31 05:22:28 +03:00
end
2020-11-02 19:38:51 +03:00
if mcl_experience.throw_experience then
mcl_experience.throw_experience ( pos , math.random ( 1 , 6 ) )
end
2020-07-10 17:08:40 +03:00
if not minetest.is_creative_enabled ( player : get_player_name ( ) ) then
2019-07-31 05:22:28 +03:00
local idef = itemstack : get_definition ( )
2020-11-02 19:38:51 +03:00
itemstack : add_wear ( 65535 / durability ) -- 65 uses
2019-07-31 05:22:28 +03:00
if itemstack : get_count ( ) == 0 and idef.sound and idef.sound . breaks then
2020-04-07 01:55:45 +03:00
minetest.sound_play ( idef.sound . breaks , { pos = player : get_pos ( ) , gain = 0.5 } , true )
2019-07-31 05:22:28 +03:00
end
end
end
--Check if object is on land.
local epos = ent.object : get_pos ( )
epos.y = math.floor ( epos.y )
local node = minetest.get_node ( epos )
local def = minetest.registered_nodes [ node.name ]
if def.walkable then
2020-07-10 17:08:40 +03:00
if not minetest.is_creative_enabled ( player : get_player_name ( ) ) then
2019-07-31 05:22:28 +03:00
local idef = itemstack : get_definition ( )
2020-11-02 19:38:51 +03:00
itemstack : add_wear ( ( 65535 / durability ) * 2 ) -- if so and not creative then wear double like in MC.
2019-07-31 05:22:28 +03:00
if itemstack : get_count ( ) == 0 and idef.sound and idef.sound . breaks then
2020-04-07 01:55:45 +03:00
minetest.sound_play ( idef.sound . breaks , { pos = player : get_pos ( ) , gain = 0.5 } , true )
2019-07-31 05:22:28 +03:00
end
end
end
--Destroy bobber.
ent.object : remove ( )
return itemstack
end
end
end
end
--Check for flying bobber.
for n = 1 , # objs do
ent = objs [ n ] : get_luaentity ( )
if ent then
if ent._thrower and ent.objtype == " fishing " then
if player : get_player_name ( ) == ent._thrower then
noent = false
break
end
end
end
end
--If no bobber or flying_bobber exists then throw bobber.
if noent == true then
local playerpos = player : get_pos ( )
local dir = player : get_look_dir ( )
2021-03-27 00:31:15 +03:00
local obj = mcl_throwing.throw ( " mcl_fishing:flying_bobber " , { x = playerpos.x , y = playerpos.y + 1.5 , z = playerpos.z } , dir , 15 , player : get_player_name ( ) )
2019-07-31 05:22:28 +03:00
end
end
-- Movement function of bobber
local bobber_on_step = function ( self , dtime )
self.timer = self.timer + dtime
local epos = self.object : get_pos ( )
epos.y = math.floor ( epos.y )
local node = minetest.get_node ( epos )
local def = minetest.registered_nodes [ node.name ]
2020-07-05 04:28:02 +03:00
2019-11-19 03:19:47 +03:00
--If we have no player, remove self.
if self.player == nil or self.player == " " then
2019-07-31 05:22:28 +03:00
self.object : remove ( )
2019-11-19 03:19:47 +03:00
return
end
local player = minetest.get_player_by_name ( self.player )
if not player then
self.object : remove ( )
return
2019-07-31 05:22:28 +03:00
end
2020-11-09 20:59:08 +03:00
local wield = player : get_wielded_item ( )
2019-07-31 05:22:28 +03:00
--Check if player is nearby
2020-11-09 20:59:08 +03:00
if self.player ~= nil and player ~= nil then
2019-07-31 05:22:28 +03:00
--Destroy bobber if item not wielded.
2020-11-02 19:38:51 +03:00
if ( ( not wield ) or ( minetest.get_item_group ( wield : get_name ( ) , " fishing_rod " ) <= 0 ) ) then
2019-07-31 05:22:28 +03:00
self.object : remove ( )
2019-11-19 03:19:47 +03:00
return
2019-07-31 05:22:28 +03:00
end
2020-07-05 04:28:02 +03:00
2019-07-31 05:22:28 +03:00
--Destroy bobber if player is too far away.
local objpos = self.object : get_pos ( )
2019-11-19 03:19:47 +03:00
local playerpos = player : get_pos ( )
2019-07-31 05:22:28 +03:00
if ( ( ( playerpos.y - objpos.y ) >= 33 ) or ( ( playerpos.y - objpos.y ) <= - 33 ) ) then
self.object : remove ( )
2019-11-19 03:19:47 +03:00
return
2019-07-31 05:22:28 +03:00
elseif ( ( ( playerpos.x - objpos.x ) >= 33 ) or ( ( playerpos.x - objpos.x ) <= - 33 ) ) then
self.object : remove ( )
2019-11-19 03:19:47 +03:00
return
2019-07-31 05:22:28 +03:00
elseif ( ( ( playerpos.z - objpos.z ) >= 33 ) or ( ( playerpos.z - objpos.z ) <= - 33 ) ) then
self.object : remove ( )
2019-11-19 03:19:47 +03:00
return
2019-07-31 05:22:28 +03:00
elseif ( ( ( ( playerpos.z + playerpos.x ) - ( objpos.z + objpos.x ) ) >= 33 ) or ( ( playerpos.z + playerpos.x ) - ( objpos.z + objpos.x ) ) <= - 33 ) then
self.object : remove ( )
2019-11-19 03:19:47 +03:00
return
2019-07-31 05:22:28 +03:00
elseif ( ( ( ( playerpos.y + playerpos.x ) - ( objpos.y + objpos.x ) ) >= 33 ) or ( ( playerpos.y + playerpos.x ) - ( objpos.y + objpos.x ) ) <= - 33 ) then
self.object : remove ( )
2019-11-19 03:19:47 +03:00
return
2019-07-31 05:22:28 +03:00
elseif ( ( ( ( playerpos.z + playerpos.y ) - ( objpos.z + objpos.y ) ) >= 33 ) or ( ( playerpos.z + playerpos.y ) - ( objpos.z + objpos.y ) ) <= - 33 ) then
self.object : remove ( )
2019-11-19 03:19:47 +03:00
return
2019-07-31 05:22:28 +03:00
end
2020-07-05 04:28:02 +03:00
2019-07-31 05:22:28 +03:00
end
2019-09-10 16:12:36 +03:00
-- If in water, then bob.
if def.liquidtype == " source " and minetest.get_item_group ( def.name , " water " ) ~= 0 then
2019-07-31 05:22:28 +03:00
if self._oldy == nil then
self.object : set_pos ( { x = self.object : get_pos ( ) . x , y = math.floor ( self.object : get_pos ( ) . y ) + .5 , z = self.object : get_pos ( ) . z } )
self._oldy = self.object : get_pos ( ) . y
end
-- reset to original position after dive.
if self.object : get_pos ( ) . y > self._oldy then
self.object : set_pos ( { x = self.object : get_pos ( ) . x , y = self._oldy , z = self.object : get_pos ( ) . z } )
self.object : set_velocity ( { x = 0 , y = 0 , z = 0 } )
self.object : set_acceleration ( { x = 0 , y = 0 , z = 0 } )
end
if self._dive then
for i = 1 , 2 do
2019-09-10 16:16:49 +03:00
-- Spray bubbles when there's a fish.
2019-07-31 05:22:28 +03:00
minetest.add_particle ( {
pos = { x = epos [ " x " ] + math.random ( - 1 , 1 ) * math.random ( ) / 2 , y = epos [ " y " ] + 0.1 , z = epos [ " z " ] + math.random ( - 1 , 1 ) * math.random ( ) / 2 } ,
velocity = { x = 0 , y = 4 , z = 0 } ,
acceleration = { x = 0 , y =- 5 , z = 0 } ,
2020-11-09 20:59:08 +03:00
expirationtime = math.random ( ) * 0.5 ,
size = math.random ( ) ,
2019-07-31 05:22:28 +03:00
collisiondetection = true ,
vertical = false ,
texture = " mcl_particles_bubble.png " ,
} )
end
2020-11-09 20:59:08 +03:00
if self._time < self._waittime then
self._time = self._time + dtime
2019-07-31 05:22:28 +03:00
else
2020-11-09 20:59:08 +03:00
self._waittime = 0
self._time = 0
2019-07-31 05:22:28 +03:00
self._dive = false
end
2020-11-09 20:59:08 +03:00
else if not self._waittime or self._waittime <= 0 then
2019-09-10 16:16:49 +03:00
-- wait for random number of ticks.
2020-11-09 20:59:08 +03:00
local lure_enchantment = wield and mcl_enchanting.get_enchantment ( wield , " lure " ) or 0
2020-12-20 18:32:04 +03:00
local reduced = lure_enchantment * 5
2021-01-04 22:23:14 +03:00
self._waittime = math.random ( math.max ( 0 , 5 - reduced ) , 30 - reduced )
2019-07-31 05:22:28 +03:00
else
2020-11-09 20:59:08 +03:00
if self._time < self._waittime then
self._time = self._time + dtime
2019-07-31 05:22:28 +03:00
else
2020-11-09 20:59:08 +03:00
-- wait time is over time to dive.
2019-07-31 05:22:28 +03:00
self._dive = true
self.object : set_velocity ( { x = 0 , y =- 2 , z = 0 } )
self.object : set_acceleration ( { x = 0 , y = 5 , z = 0 } )
2020-11-09 20:59:08 +03:00
self._waittime = 0.8
self._time = 0
2019-07-31 05:22:28 +03:00
end
end
end
2020-07-05 04:28:02 +03:00
end
2019-07-31 05:22:28 +03:00
2019-09-10 16:10:12 +03:00
-- TODO: Destroy when hitting a solid node
2019-07-31 05:22:28 +03:00
--if self._lastpos.x~=nil then
-- if (def and def.walkable) or not def then
--self.object:remove()
-- return
-- end
--end
--self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Node will be added at last pos outside the node
end
bobber_ENTITY.on_step = bobber_on_step
minetest.register_entity ( " mcl_fishing:bobber_entity " , bobber_ENTITY )
2021-03-27 00:31:15 +03:00
local flying_bobber_ENTITY = {
physical = false ,
timer = 0 ,
textures = { " mcl_fishing_bobber.png " } , --FIXME: Replace with correct texture.
visual_size = { x = 0.5 , y = 0.5 } ,
collisionbox = { 0 , 0 , 0 , 0 , 0 , 0 } ,
pointable = false ,
get_staticdata = get_staticdata ,
on_activate = on_activate ,
_lastpos = { } ,
_thrower = nil ,
objtype = " fishing " ,
}
-- Movement function of flying bobber
local flying_bobber_on_step = function ( self , dtime )
self.timer = self.timer + dtime
local pos = self.object : get_pos ( )
local node = minetest.get_node ( pos )
local def = minetest.registered_nodes [ node.name ]
--local player = minetest.get_player_by_name(self._thrower)
-- Destroy when hitting a solid node
if self._lastpos . x ~= nil then
if ( def and ( def.walkable or def.liquidtype == " flowing " or def.liquidtype == " source " ) ) or not def then
local make_child = function ( object )
local ent = object : get_luaentity ( )
ent.player = self._thrower
ent.child = true
end
make_child ( minetest.add_entity ( self._lastpos , " mcl_fishing:bobber_entity " ) )
self.object : remove ( )
return
end
end
self._lastpos = { x = pos.x , y = pos.y , z = pos.z } -- Set lastpos-->Node will be added at last pos outside the node
end
flying_bobber_ENTITY.on_step = flying_bobber_on_step
minetest.register_entity ( " mcl_fishing:flying_bobber_entity " , flying_bobber_ENTITY )
mcl_throwing.register_throwable_object ( " mcl_fishing:flying_bobber " , " mcl_fishing:flying_bobber_entity " , 5 )
2019-09-10 16:10:12 +03:00
-- If player leaves area, remove bobber.
2019-07-31 05:22:28 +03:00
minetest.register_on_leaveplayer ( function ( player )
local objs = minetest.get_objects_inside_radius ( player : get_pos ( ) , 250 )
local num = 0
local ent = nil
local noent = true
2020-07-05 04:28:02 +03:00
2019-07-31 05:22:28 +03:00
for n = 1 , # objs do
ent = objs [ n ] : get_luaentity ( )
if ent then
if ent.player and ent.objtype == " fishing " then
ent.object : remove ( )
elseif ent._thrower and ent.objtype == " fishing " then
ent.object : remove ( )
end
end
end
end )
2019-09-10 16:10:12 +03:00
-- If player dies, remove bobber.
2019-07-31 05:22:28 +03:00
minetest.register_on_dieplayer ( function ( player )
local objs = minetest.get_objects_inside_radius ( player : get_pos ( ) , 250 )
local num = 0
local ent = nil
local noent = true
2020-07-05 04:28:02 +03:00
2019-07-31 05:22:28 +03:00
for n = 1 , # objs do
ent = objs [ n ] : get_luaentity ( )
if ent then
if ent.player and ent.objtype == " fishing " then
ent.object : remove ( )
elseif ent._thrower and ent.objtype == " fishing " then
ent.object : remove ( )
end
end
end
end )
2017-02-18 00:27:33 +03:00
-- Fishing Rod
minetest.register_tool ( " mcl_fishing:fishing_rod " , {
2019-03-08 02:00:09 +03:00
description = S ( " Fishing Rod " ) ,
2020-03-12 03:35:11 +03:00
_tt_help = S ( " Catches fish in water " ) ,
2019-03-08 02:00:09 +03:00
_doc_items_longdesc = S ( " Fishing rods can be used to catch fish. " ) ,
2019-07-31 05:22:28 +03:00
_doc_items_usagehelp = S ( " Rightclick to launch the bobber. When it sinks right-click again to reel in an item. Who knows what you're going to catch? " ) ,
2020-11-25 14:47:27 +03:00
groups = { tool = 1 , fishing_rod = 1 , enchantability = 1 } ,
2017-02-18 00:27:33 +03:00
inventory_image = " mcl_fishing_fishing_rod.png " ,
2020-04-08 05:07:16 +03:00
wield_image = " mcl_fishing_fishing_rod.png^[transformR270 " ,
wield_scale = { x = 1.5 , y = 1.5 , z = 1 } ,
2017-02-18 00:27:33 +03:00
stack_max = 1 ,
2019-07-31 05:22:28 +03:00
on_place = fish ,
on_secondary_use = fish ,
2017-02-19 22:23:33 +03:00
sound = { breaks = " default_tool_breaks " } ,
2020-12-21 17:12:24 +03:00
_mcl_uses = 65 ,
2021-02-18 11:28:12 +03:00
_mcl_toollike_wield = true ,
2017-02-01 17:20:28 +03:00
} )
minetest.register_craft ( {
output = " mcl_fishing:fishing_rod " ,
recipe = {
{ ' ' , ' ' , ' mcl_core:stick ' } ,
2017-02-01 19:59:15 +03:00
{ ' ' , ' mcl_core:stick ' , ' mcl_mobitems:string ' } ,
{ ' mcl_core:stick ' , ' ' , ' mcl_mobitems:string ' } ,
2017-02-01 17:20:28 +03:00
}
} )
minetest.register_craft ( {
output = " mcl_fishing:fishing_rod " ,
recipe = {
{ ' mcl_core:stick ' , ' ' , ' ' } ,
2017-02-01 19:59:15 +03:00
{ ' mcl_mobitems:string ' , ' mcl_core:stick ' , ' ' } ,
{ ' mcl_mobitems:string ' , ' ' , ' mcl_core:stick ' } ,
2017-02-01 17:20:28 +03:00
}
} )
minetest.register_craft ( {
type = " fuel " ,
2020-11-01 19:24:57 +03:00
recipe = " group:fishing_rod " ,
2017-02-01 17:20:28 +03:00
burntime = 15 ,
} )
-- Fish
minetest.register_craftitem ( " mcl_fishing:fish_raw " , {
2019-03-08 02:00:09 +03:00
description = S ( " Raw Fish " ) ,
_doc_items_longdesc = S ( " Raw fish is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value. " ) ,
2017-02-01 17:20:28 +03:00
inventory_image = " mcl_fishing_fish_raw.png " ,
2017-02-16 19:45:33 +03:00
on_place = minetest.item_eat ( 2 ) ,
on_secondary_use = minetest.item_eat ( 2 ) ,
2017-02-01 17:20:28 +03:00
stack_max = 64 ,
groups = { food = 2 , eatable = 2 } ,
2017-05-20 18:45:04 +03:00
_mcl_saturation = 0.4 ,
2017-02-01 17:20:28 +03:00
} )
minetest.register_craftitem ( " mcl_fishing:fish_cooked " , {
2019-03-08 02:00:09 +03:00
description = S ( " Cooked Fish " ) ,
_doc_items_longdesc = S ( " Mmh, fish! This is a healthy food item. " ) ,
2017-02-01 17:20:28 +03:00
inventory_image = " mcl_fishing_fish_cooked.png " ,
2017-02-16 19:45:33 +03:00
on_place = minetest.item_eat ( 5 ) ,
on_secondary_use = minetest.item_eat ( 5 ) ,
2017-02-01 17:20:28 +03:00
stack_max = 64 ,
groups = { food = 2 , eatable = 5 } ,
2017-05-21 04:26:51 +03:00
_mcl_saturation = 6 ,
2017-02-01 17:20:28 +03:00
} )
minetest.register_craft ( {
type = " cooking " ,
output = " mcl_fishing:fish_cooked " ,
recipe = " mcl_fishing:fish_raw " ,
cooktime = 10 ,
} )
2017-02-01 17:29:43 +03:00
-- Salmon
minetest.register_craftitem ( " mcl_fishing:salmon_raw " , {
2019-03-08 02:00:09 +03:00
description = S ( " Raw Salmon " ) ,
_doc_items_longdesc = S ( " Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value. " ) ,
2017-02-01 17:29:43 +03:00
inventory_image = " mcl_fishing_salmon_raw.png " ,
2017-02-16 19:45:33 +03:00
on_place = minetest.item_eat ( 2 ) ,
on_secondary_use = minetest.item_eat ( 2 ) ,
2017-02-01 17:29:43 +03:00
stack_max = 64 ,
groups = { food = 2 , eatable = 2 } ,
2017-05-20 18:45:04 +03:00
_mcl_saturation = 0.4 ,
2017-02-01 17:29:43 +03:00
} )
minetest.register_craftitem ( " mcl_fishing:salmon_cooked " , {
2019-03-08 02:00:09 +03:00
description = S ( " Cooked Salmon " ) ,
_doc_items_longdesc = S ( " This is a healthy food item which can be eaten. " ) ,
2017-02-01 17:29:43 +03:00
inventory_image = " mcl_fishing_salmon_cooked.png " ,
2017-02-16 19:45:33 +03:00
on_place = minetest.item_eat ( 6 ) ,
on_secondary_use = minetest.item_eat ( 6 ) ,
2017-02-01 17:29:43 +03:00
stack_max = 64 ,
groups = { food = 2 , eatable = 6 } ,
2017-05-20 18:45:04 +03:00
_mcl_saturation = 9.6 ,
2017-02-01 17:29:43 +03: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 " , {
2019-03-08 02:00:09 +03:00
description = S ( " Clownfish " ) ,
_doc_items_longdesc = S ( " Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely. " ) ,
2017-02-01 17:29:43 +03:00
inventory_image = " mcl_fishing_clownfish_raw.png " ,
2017-02-16 19:45:33 +03:00
on_place = minetest.item_eat ( 1 ) ,
on_secondary_use = minetest.item_eat ( 1 ) ,
2017-02-01 17:29:43 +03:00
stack_max = 64 ,
groups = { food = 2 , eatable = 1 } ,
2017-05-20 18:45:04 +03:00
_mcl_saturation = 0.2 ,
2017-02-01 17:29:43 +03:00
} )
2020-08-01 15:36:22 +03:00
2017-02-01 17:29:43 +03:00
minetest.register_craftitem ( " mcl_fishing:pufferfish_raw " , {
2019-03-08 02:00:09 +03:00
description = S ( " Pufferfish " ) ,
2021-03-27 00:50:37 +03:00
_tt_help = minetest.colorize ( mcl_colors.YELLOW , S ( " Very poisonous " ) ) ,
2019-03-08 02:00:09 +03:00
_doc_items_longdesc = S ( " Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger). " ) ,
2017-02-01 17:29:43 +03:00
inventory_image = " mcl_fishing_pufferfish_raw.png " ,
2017-02-16 19:45:33 +03:00
on_place = minetest.item_eat ( 1 ) ,
on_secondary_use = minetest.item_eat ( 1 ) ,
2017-02-01 17:29:43 +03:00
stack_max = 64 ,
2020-07-05 04:28:02 +03:00
groups = { food = 2 , eatable = 1 , brewitem = 1 } ,
2020-08-01 15:36:22 +03:00
-- _mcl_saturation = 0.2,
2017-02-01 17:29:43 +03:00
} )
2020-08-01 15:36:22 +03:00
minetest.register_on_item_eat ( function ( hp_change , replace_with_item , itemstack , user , pointed_thing )
if itemstack : get_name ( ) == " mcl_fishing:pufferfish_raw " then
2020-08-13 20:20:52 +03:00
mcl_potions.poison_func ( user , 1 / 3 , 60 )
2020-08-01 15:36:22 +03:00
end
end )