310 lines
11 KiB
Lua
310 lines
11 KiB
Lua
-----------------------------------------------------------------------------------------------
|
|
local title = "Fishing - Mossmanikin's version"
|
|
local version = "0.1.2-LGN"
|
|
local mname = "fishing"
|
|
-----------------------------------------------------------------------------------------------
|
|
-- original by wulfsdad (http://forum.minetest.net/viewtopic.php?id=4375)
|
|
-- this version by Mossmanikin
|
|
-- License (code & textures): WTFPL (exception below)
|
|
-- except for: "fishing_fish_cooked.png" contributed by Tirifto,
|
|
-- released into public domain under CC0.
|
|
-- Contains code from: animal_clownfish, animal_fish_blue_white, fishing (original), stoneage
|
|
-- Looked at code from: default, farming
|
|
-- Dependencies: default
|
|
-- Supports: animal_clownfish, animal_fish_blue_white, animal_rat, mobs
|
|
-----------------------------------------------------------------------------------------------
|
|
|
|
-- todo: item wear done
|
|
-- automatic re-baiting option done
|
|
-- different types of fish, sort of
|
|
-- add sound done
|
|
-- bobber done
|
|
-- change rainworms filling inv & make 'em disappear done
|
|
|
|
-- placable fishing rod for decoration done
|
|
-- make bobber move slowly while fish on hook done
|
|
-- catch bigger fish with smaller
|
|
-- change color of bobber when fish on hook done
|
|
|
|
-----------------------------------------------------------------------------------------------
|
|
|
|
dofile(minetest.get_modpath("fishing").."/settings.txt")
|
|
dofile(minetest.get_modpath("fishing").."/bobber.lua")
|
|
dofile(minetest.get_modpath("fishing").."/crafting.lua")
|
|
dofile(minetest.get_modpath("fishing").."/fishes.lua")
|
|
dofile(minetest.get_modpath("fishing").."/worm.lua")
|
|
|
|
-----------------------------------------------------------------------------------------------
|
|
-- Fishing Pole
|
|
-----------------------------------------------------------------------------------------------
|
|
|
|
local function rod_wear(itemstack, user, pointed_thing, uses)
|
|
itemstack:add_wear(65535/(uses-1))
|
|
return itemstack
|
|
end
|
|
|
|
minetest.register_tool("fishing:pole", {
|
|
|
|
description = "Fishing Pole",
|
|
groups = {},
|
|
inventory_image = "fishing_pole.png",
|
|
wield_image = "fishing_pole.png^[transformFXR270",
|
|
stack_max = 1,
|
|
liquids_pointable = true,
|
|
on_use = function (itemstack, user, pointed_thing)
|
|
if pointed_thing and pointed_thing.under then
|
|
local pt = pointed_thing
|
|
local node = minetest.env:get_node(pt.under)
|
|
if string.find(node.name, "default:water") then
|
|
local player = user:get_player_name()
|
|
local inv = user:get_inventory()
|
|
if inv:get_stack("main", user:get_wield_index()+1):get_name() == "fishing:bait_worm" then
|
|
inv:remove_item("main", "fishing:bait_worm")
|
|
minetest.sound_play("fishing_bobber2", {
|
|
pos = pt.under,
|
|
gain = 0.5,
|
|
})
|
|
minetest.env:add_entity({interval = 1,x=pt.under.x, y=pt.under.y+1, z=pt.under.z}, "fishing:bobber_entity")
|
|
|
|
if WEAR_OUT == true then
|
|
return rod_wear(itemstack, user, pointed_thing, 30)
|
|
else
|
|
return {name="fishing:pole", count=1, wear=0, metadata=""}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end,
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
local pt = pointed_thing
|
|
if minetest.get_node(pt.under).name~="default:water_source" and minetest.get_node(pt.under).name~="default:water_flowing" then
|
|
local wear = itemstack:get_wear()
|
|
local direction = minetest.dir_to_facedir(placer:get_look_dir())
|
|
local meta1 = minetest.env:get_meta({x=pt.under.x, y=pt.under.y , z=pt.under.z})
|
|
local meta2 = minetest.env:get_meta({x=pt.under.x, y=pt.under.y+1, z=pt.under.z})
|
|
minetest.set_node({x=pt.under.x, y=pt.under.y+1, z=pt.under.z}, {name="fishing:pole_deco", param2=direction})
|
|
meta1:set_int("wear", wear)
|
|
meta2:set_int("wear", wear)
|
|
itemstack:take_item()
|
|
end
|
|
return itemstack
|
|
end,
|
|
})
|
|
|
|
if SIMPLE_DECO_FISHING_POLE == true then
|
|
minetest.register_node("fishing:pole_deco", {
|
|
description = "Fishing Pole",
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
tiles = {
|
|
"fishing_pole_top.png", "fishing_pole_bottom.png", "fishing_pole.png", "fishing_pole.png^[transformFX", "fishing_pole_front.png", "fishing_pole_back.png",
|
|
},
|
|
groups = {
|
|
snappy=3,
|
|
flammable=2,
|
|
not_in_creative_inventory=1
|
|
},
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5/3, -1.5/3, -1.5/3, 0.5/3, -0.5/3, -0.5/3},{-0.5/3, -0.5/3, -0.5/3, 0.5/3, 0.5/3, 0.5/3},{-0.5/3, 0.5/3, 0.5/3, 0.5/3, 1.5/3, 1.5/3},{-0.5/3, -1.5/3, 0.5/3, 0.5/3, 0.5/3, 1.5/3},
|
|
}
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5/3, -1.5/3, -1.5/3, 0.5/3, -0.5/3, -0.5/3},{-0.5/3, -0.5/3, -0.5/3, 0.5/3, 0.5/3, 0.5/3},{-0.5/3, 0.5/3, 0.5/3, 0.5/3, 1.5/3, 1.5/3},{-0.5/3, -1.5/3, 0.5/3, 0.5/3, 0.5/3, 1.5/3},
|
|
}
|
|
},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_dig = function(pos, node, digger)
|
|
if digger:is_player() and digger:get_inventory() then
|
|
local meta = minetest.env:get_meta(pos)
|
|
local wear_out = meta:get_int("wear")
|
|
digger:get_inventory():add_item("main", {name="fishing:pole", count=1, wear=wear_out, metadata=""})
|
|
end
|
|
minetest.remove_node(pos)
|
|
end,
|
|
})
|
|
|
|
else
|
|
minetest.register_node("fishing:pole_deco", {
|
|
description = "Fishing Pole",
|
|
inventory_image = "fishing_pole.png",
|
|
wield_image = "fishing_pole.png^[transformFXR270",
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
tiles = {
|
|
"fishing_pole_top.png",
|
|
"fishing_pole_bottom.png",
|
|
"fishing_pole_deco.png", -- right
|
|
"fishing_pole_deco.png^[transformFX", -- left
|
|
"fishing_pole_back.png",
|
|
"fishing_pole_front.png"
|
|
},
|
|
node_box = {
|
|
type = "fixed",
|
|
-- { left , bottom , front , right , top , back }
|
|
fixed = {
|
|
{-1/32 , -1/16 , 14/16 , 1/32 , 6/16 , 15/16},
|
|
{-1/32 , -3/16 , 13/16 , 1/32 , -1/16 , 14/16},
|
|
{-1/32 , -4/16 , 12/16 , 1/32 , -3/16 , 13/16},
|
|
{-1/32 , -5/16 , 11/16 , 1/32 , -4/16 , 12/16},
|
|
{-1/32 , -6/16 , 9/16 , 1/32 , -5/16 , 11/16},
|
|
{-1/32 , -5/16 , 9/16 , 1/32 , -4/16 , 10/16},
|
|
-- stick
|
|
{-1/32 , 6/16 , 12/16 , 1/32 , 7/16 , 15/16}, -- top
|
|
{-1/32 , 5/16 , 11/16 , 1/32 , 7/16 , 12/16},
|
|
{-1/32 , 5/16 , 10/16 , 1/32 , 6/16 , 11/16},
|
|
{-1/32 , 4/16 , 9/16 , 1/32 , 6/16 , 10/16},
|
|
{-1/32 , 3/16 , 8/16 , 1/32 , 5/16 , 9/16},
|
|
{-1/32 , 2/16 , 7/16 , 1/32 , 4/16 , 8/16},
|
|
{-1/32 , 1/16 , 6/16 , 1/32 , 3/16 , 7/16},
|
|
{-1/32 , 0 , 5/16 , 1/32 , 2/16 , 6/16},
|
|
{-1/32 , -2/16 , 4/16 , 1/32 , 1/16 , 5/16},
|
|
{-1/32 , -3/16 , 3/16 , 1/32 , 0 , 4/16},
|
|
{-1/32 , -5/16 , 2/16 , 1/32 , -1/16 , 3/16},
|
|
{-1/32 , -7/16 , 1/16 , 1/32 , -3/16 , 2/16},
|
|
{-1/32 , -1/2 , 0 , 1/32 , -5/16 , 1/16}, -- bottom
|
|
}
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-1/16 , -1/2 , 0 , 1/16 , 1/2 , 1 },
|
|
}
|
|
},
|
|
groups = {
|
|
snappy=3,
|
|
flammable=2,
|
|
not_in_creative_inventory=1
|
|
},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_dig = function(pos, node, digger)
|
|
if digger:is_player() and digger:get_inventory() then
|
|
local meta = minetest.env:get_meta(pos)
|
|
local wear_out = meta:get_int("wear")
|
|
digger:get_inventory():add_item("main", {name="fishing:pole", count=1, wear=wear_out, metadata=""})
|
|
end
|
|
minetest.remove_node(pos)
|
|
end,
|
|
})
|
|
|
|
end
|
|
-----------------------------------------------------------------------------------------------
|
|
-- GETTING WORMS
|
|
-----------------------------------------------------------------------------------------------
|
|
-- get worms from digging in dirt:
|
|
if NEW_WORM_SOURCE == false then
|
|
|
|
minetest.register_node(":default:dirt", {
|
|
description = "Dirt",
|
|
tiles = {"default_dirt.png"},
|
|
is_ground_content = true,
|
|
groups = {crumbly=3},
|
|
sounds = default.node_sound_dirt_defaults(),
|
|
after_dig_node = function (pos, oldnode, oldmetadata, digger)
|
|
if math.random(1, 100) < WORM_CHANCE then
|
|
local tool_in_use = digger:get_wielded_item():get_name()
|
|
if tool_in_use == "" or tool_in_use == "default:dirt" then
|
|
minetest.env:add_entity({x = pos.x, y = pos.y+0.4, z = pos.z}, "fishing:bait_worm_entity")
|
|
--local inv = digger:get_inventory()
|
|
--if inv:room_for_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) then
|
|
--inv:add_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""})
|
|
--end
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
else
|
|
-- get worms from digging with hoes:
|
|
|
|
-- turns nodes with group soil=1 into soil
|
|
local function hoe_on_use(itemstack, user, pointed_thing, uses)
|
|
local pt = pointed_thing
|
|
-- check if pointing at a node
|
|
if not pt then
|
|
return
|
|
end
|
|
if pt.type ~= "node" then
|
|
return
|
|
end
|
|
|
|
local under = minetest.get_node(pt.under)
|
|
local p = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
|
|
local above = minetest.get_node(p)
|
|
|
|
-- return if any of the nodes is not registered
|
|
if not minetest.registered_nodes[under.name] then
|
|
return
|
|
end
|
|
if not minetest.registered_nodes[above.name] then
|
|
return
|
|
end
|
|
|
|
-- check if the node above the pointed thing is air
|
|
if above.name ~= "air" then
|
|
return
|
|
end
|
|
|
|
-- check if pointing at dirt
|
|
if minetest.get_item_group(under.name, "soil") ~= 1 then
|
|
return
|
|
end
|
|
|
|
-- turn the node into soil, play sound, get worm and wear out item
|
|
minetest.set_node(pt.under, {name="farming:soil"})
|
|
minetest.sound_play("default_dig_crumbly", {
|
|
pos = pt.under,
|
|
gain = 0.5,
|
|
})
|
|
--local inv = user:get_inventory()
|
|
if math.random(1, 100) < WORM_CHANCE then
|
|
minetest.env:add_entity({x=pt.under.x, y=pt.under.y+0.4, z=pt.under.z}, "fishing:bait_worm_entity")
|
|
--if inv:room_for_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) then
|
|
--inv:add_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""})
|
|
--end
|
|
end
|
|
itemstack:add_wear(65535/(uses-1))
|
|
return itemstack
|
|
end
|
|
|
|
-- didn't change the hoes, just here because hoe_on_use is local
|
|
minetest.register_tool(":farming:hoe_wood", {
|
|
description = "Wooden Hoe",
|
|
inventory_image = "farming_tool_woodhoe.png",
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
return hoe_on_use(itemstack, user, pointed_thing, 30)
|
|
end,
|
|
})
|
|
minetest.register_tool(":farming:hoe_stone", {
|
|
description = "Stone Hoe",
|
|
inventory_image = "farming_tool_stonehoe.png",
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
return hoe_on_use(itemstack, user, pointed_thing, 90)
|
|
end,
|
|
})
|
|
minetest.register_tool(":farming:hoe_steel", {
|
|
description = "Steel Hoe",
|
|
inventory_image = "farming_tool_steelhoe.png",
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
return hoe_on_use(itemstack, user, pointed_thing, 200)
|
|
end,
|
|
})
|
|
minetest.register_tool(":farming:hoe_bronze", {
|
|
description = "Bronze Hoe",
|
|
inventory_image = "farming_tool_bronzehoe.png",
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
return hoe_on_use(itemstack, user, pointed_thing, 220)
|
|
end,
|
|
})
|
|
|
|
end
|
|
-----------------------------------------------------------------------------------------------
|
|
print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
|
|
-----------------------------------------------------------------------------------------------
|