1 local players_fishing = {}
3 minetest.register_craftitem("fishing:pole", {
4 description = "Fishing Pole",
5 inventory_image = "fishing_rod.png",
8 on_use = function(itemstack, user, pointed_thing)
9 --minetest.sound_play("reload_gun",{object=user, pitch = math.random(80,100)/100})
13 on_secondary_use = function(itemstack, user, pointed_thing)
14 local name = user:get_player_name()
15 if not players_fishing[name] or not players_fishing[name]:get_luaentity() then
16 local pos = user:get_pos()
17 local anchor = table.copy(pos)
19 --minetest.sound_play("gun_shot",{object=user, pitch = math.random(80,100)/100})
20 local dir = user:get_look_dir()
21 local force = vector.multiply(dir,20)
22 local obj = minetest.add_entity(pos,"fishing:lure")
24 minetest.sound_play("woosh",{pos=pos})
25 obj:get_luaentity().player=name
27 obj:set_velocity(force)
28 players_fishing[name] = obj
34 minetest.register_craft({
35 output = "fishing:pole",
37 {"", "", "main:stick"},
38 {"", "main:stick", "mob:string"},
39 {"main:stick","", "mob:string"},
45 lure.initial_properties = {
47 collide_with_objects = false,
48 collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
50 visual_size = {x = 0.25, y = 0.25},
51 textures = {"lure.png"},
55 --automatic_face_movement_dir = 0.0,
56 --automatic_face_movement_max_rotation_per_sec = 600,
58 lure.on_activate = function(self)
59 self.object:set_acceleration(vector.new(0,-10,0))
62 lure.interplayer = nil
64 lure.on_step = function(self, dtime)
65 local pos = self.object:get_pos()
66 local node = minetest.get_node(pos).name
67 if node == "main:water" then
69 local new_pos = vector.floor(pos)
70 new_pos.y = new_pos.y + 0.5
71 self.object:move_to(vector.new(pos.x,new_pos.y,pos.z))
72 self.object:set_acceleration(vector.new(0,0,0))
73 self.object:set_velocity(vector.new(0,0,0))
75 local newp = table.copy(pos)
77 local node = minetest.get_node(newp).name
78 if node ~= "air" and node ~= "main:water" and node ~= "main:waterflow" then
80 players_fishing[self.player] = nil
82 minetest.sound_play("line_break",{pos=pos,gain=0.3})
86 if self.in_water == true then
88 local p = minetest.get_player_by_name(self.player)
89 if p:get_player_control().RMB then
90 local pos2 = p:get_pos()
91 local vel = vector.direction(vector.new(pos.x,0,pos.z),vector.new(pos2.x,0,pos2.z))
92 self.object:set_velocity(vector.multiply(vel,2))
95 self.catch_timer = self.catch_timer + dtime
97 if self.catch_timer >= 0.5 then
99 if math.random() > 0.94 then
100 local obj = minetest.add_item(pos, "fishing:fish")
102 local distance = vector.distance(pos,pos2)
103 local dir = vector.direction(pos,pos2)
104 local force = vector.multiply(dir,distance)
106 obj:set_velocity(force)
107 minetest.sound_play("splash",{pos=obj:get_pos(),gain=0.25})
109 players_fishing[self.player] = nil
114 self.object:set_velocity(vector.new(0,0,0))
117 local pos2 = p:get_pos()
118 if vector.distance(vector.new(pos.x,0,pos.z),vector.new(pos2.x,0,pos2.z)) < 1 then
119 players_fishing[self.player] = nil
120 minetest.sound_play("line_break",{pos=pos,gain=0.3,pitch=0.5})
126 if self.player == nil then
130 minetest.register_entity("fishing:lure", lure)
132 minetest.register_craft({
134 output = "fishing:fish_cooked",
135 recipe = "fishing:fish",
138 minetest.register_food("fishing:fish",{
139 description = "Raw Fish",
140 texture = "fish.png",
145 minetest.register_food("fishing:fish_cooked",{
146 description = "Cooked Fish",
147 texture = "fish_cooked.png",