]> git.lizzy.rs Git - Crafter.git/blob - mods/fishing/init.lua
b2757a2b9f13b60ce877b404e2db4c35c9047ce4
[Crafter.git] / mods / fishing / init.lua
1  local players_fishing = {}
2  
3  minetest.register_craftitem("fishing:pole", {
4         description = "Fishing Pole",
5         inventory_image = "fishing_rod.png",
6         stack_max = 1,
7         range = 0,
8         on_use = function(itemstack, user, pointed_thing)
9                 --minetest.sound_play("reload_gun",{object=user, pitch = math.random(80,100)/100})
10                 --print("reload")
11         end,
12         
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)
18                         pos.y = pos.y + 1.625
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")
23                         if obj then
24                                 minetest.sound_play("woosh",{pos=pos})
25                                 obj:get_luaentity().player=name
26
27                                 obj:set_velocity(force)
28                                 players_fishing[name] = obj
29                         end
30                 end
31         end,
32 })
33
34 minetest.register_craft({
35         output = "fishing:pole",
36         recipe = {
37                 {"",          "",           "main:stick"},
38                 {"",          "main:stick", "mob:string"},
39                 {"main:stick","",           "mob:string"},
40         }
41 })
42
43
44 local lure = {}
45 lure.initial_properties = {
46         physical = false,
47         collide_with_objects = false,
48         collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
49         visual = "sprite",
50         visual_size = {x = 0.25, y = 0.25},
51         textures = {"lure.png"},
52         is_visible = true,
53         pointable = false,
54         --glow = -1,
55         --automatic_face_movement_dir = 0.0,
56         --automatic_face_movement_max_rotation_per_sec = 600,
57 }
58 lure.on_activate = function(self)
59         self.object:set_acceleration(vector.new(0,-10,0))
60 end
61 lure.in_water = false
62 lure.interplayer = nil
63 lure.catch_timer = 0
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
68                 self.in_water = true
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))
74     else
75         local newp = table.copy(pos)
76         newp.y = newp.y - 0.1
77         local node = minetest.get_node(newp).name
78                 if node ~= "air" and node ~= "main:water" and node ~= "main:waterflow" then
79             if self.player then
80                                 players_fishing[self.player] = nil
81                         end
82                         minetest.sound_play("line_break",{pos=pos,gain=0.3})
83             self.object:remove()
84         end
85         end
86         if self.in_water == true then
87                 if self.player 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))
93
94
95                                 self.catch_timer = self.catch_timer + dtime
96
97                                 if self.catch_timer >= 0.5 then
98                                         self.catch_timer = 0
99                                         if math.random() > 0.94 then
100                                                 local obj = minetest.add_item(pos, "fishing:fish")
101                                                 if obj then
102                                                         local distance = vector.distance(pos,pos2)
103                                                         local dir = vector.direction(pos,pos2)
104                                                         local force = vector.multiply(dir,distance)
105                                                         force.y = 6
106                                                         obj:set_velocity(force)
107                                                         minetest.sound_play("splash",{pos=obj:get_pos(),gain=0.25})
108                                                 end
109                                                 players_fishing[self.player] = nil
110                                                 self.object:remove()
111                                         end
112                 end
113                         else
114                                 self.object:set_velocity(vector.new(0,0,0))
115                         end
116             if p then
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})
121                     self.object:remove()
122                 end
123             end
124                 end
125         end
126         if self.player == nil then
127                 self.object:remove()
128         end
129 end
130 minetest.register_entity("fishing:lure", lure)
131
132 minetest.register_craft({
133         type = "cooking",
134         output = "fishing:fish_cooked",
135         recipe = "fishing:fish",
136 })
137
138 minetest.register_food("fishing:fish",{
139         description = "Raw Fish",
140         texture = "fish.png",
141         satiation=1,
142         hunger=2,
143 })
144
145 minetest.register_food("fishing:fish_cooked",{
146         description = "Cooked Fish",
147         texture = "fish_cooked.png",
148         satiation=3,
149         hunger=5,
150 })