]> git.lizzy.rs Git - Crafter.git/blob - mods/fishing/init.lua
Use actual state modifiers with ticks to control satiation and hunger instead of...
[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                 if not players_fishing[name] then
15                         local pos = user:get_pos()
16             local anchor = table.copy(pos)
17                         pos.y = pos.y + 1.625
18                         --minetest.sound_play("gun_shot",{object=user, pitch = math.random(80,100)/100})
19                         local dir = user:get_look_dir()
20                         local force = vector.multiply(dir,20)
21                         local name = user:get_player_name()
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
35 local lure = {}
36 lure.initial_properties = {
37         physical = false,
38         collide_with_objects = false,
39         collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
40         visual = "mesh",
41         visual_size = {x = 1, y = 1},
42         mesh = "lure.b3d",
43         textures = {
44                 "lure.png"
45         },
46         is_visible = true,
47         pointable = false,
48         --glow = -1,
49         --automatic_face_movement_dir = 0.0,
50         --automatic_face_movement_max_rotation_per_sec = 600,
51 }
52 lure.on_activate = function(self)
53         self.object:set_acceleration(vector.new(0,-10,0))
54 end
55 lure.in_water = false
56 lure.interplayer = nil
57 lure.on_step = function(self, dtime)
58         local pos = self.object:get_pos()
59         local node = minetest.get_node(pos).name
60         if node == "main:water" then
61                 self.in_water = true
62                 local new_pos = vector.floor(pos)
63                 new_pos.y = new_pos.y + 0.5
64                 self.object:move_to(vector.new(pos.x,new_pos.y,pos.z))
65                 self.object:set_acceleration(vector.new(0,0,0))
66                 self.object:set_velocity(vector.new(0,0,0))
67     else
68         local newp = table.copy(pos)
69         newp.y = newp.y - 0.1
70         local node = minetest.get_node(newp).name
71         if node ~= "air" and node ~= "main:water" and node ~= "main:waterflow" then
72             if self.player then
73                 players_fishing[self.player] = nil
74             end
75             self.object:remove()
76         end
77         end
78         if self.in_water == true then
79                 if self.player then
80                         local p = minetest.get_player_by_name(self.player)
81                         if p:get_player_control().RMB then
82                 local pos2 = p:get_pos()
83                                 local vel = vector.direction(pos,pos2)
84                                 self.object:set_velocity(vector.multiply(vel,2))
85                 if math.random() > 0.97 then
86                    local obj = minetest.add_item(pos, "main:dirt")
87                    if obj then
88                        local distance = vector.distance(pos,pos2)
89                        local dir = vector.direction(pos,pos2)
90                        local force = vector.multiply(dir,distance)
91                        force.y = 6
92                        obj:set_velocity(force)
93                    end
94                    players_fishing[self.player] = nil
95                    self.object:remove()
96                 end
97                         else
98                                 self.object:set_velocity(vector.new(0,0,0))
99                         end
100             if p then
101                 local pos2 = p:get_pos()
102                 if vector.distance(pos, pos2) < 1 then
103                     players_fishing[self.player] = nil
104                     self.object:remove()
105                 end
106             end
107                 end
108         end
109         if self.player == nil then
110                 self.object:remove()
111         end
112 end
113 minetest.register_entity("fishing:lure", lure)