1 local player_state_channel = minetest.mod_channel_join("player.player_movement_state")
3 minetest.register_on_modchannel_message(function(channel_name, sender, message)
4 if channel_name == "player.player_movement_state" then
5 local player = minetest.get_player_by_name(sender)
6 local meta = player:get_meta()
7 meta:set_string("player.player_movement_state", message)
11 minetest.register_on_joinplayer(function(player)
12 player:set_physics_override({jump=1.25,gravity=1.25})
13 local meta = player:get_meta()
14 meta:set_string("player.player_movement_state", "0")
17 minetest.register_globalstep(function(dtime)
18 for _,player in ipairs(minetest.get_connected_players()) do
19 local meta = player:get_meta()
21 local running = (meta:get_string("player.player_movement_state") == "1")
22 local bunny_hopping = (meta:get_string("player.player_movement_state") == "2")
23 local sneaking = (meta:get_string("player.player_movement_state") == "3")
25 --print(running, bunny_hopping)
28 --running FOV modifier
29 if running or bunny_hopping then
30 if bunny_hopping == true then
31 player:set_fov(1.4, true,0.1)
32 player:set_physics_override({speed=1.75})
34 player:set_fov(1.2, true,0.1)
35 player:set_physics_override({speed=1.5})
38 player:set_fov(1, true,0.1)
39 player:set_physics_override({speed=1})
40 --meta:set_float("running_timer", 0)
45 player:set_fov(0.8, true,0.1)
46 player:set_eye_offset({x=0,y=-1,z=0},{x=0,y=-1,z=0})
48 player:set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})
51 --remember to implement hunger
54 if player:get_player_control().RMB then
56 local item = player:get_wielded_item():get_name()
57 local satiation = minetest.get_item_group(item, "satiation")
58 local hunger = minetest.get_item_group(item, "hunger")
61 if hunger and satiation then
62 local meta = player:get_meta()
63 local eating = meta:get_float("eating")
64 local eating_timer = meta:get_float("eating_timer")
66 eating = eating + dtime
67 eating_timer = eating_timer + dtime
69 local ps = minetest.add_particlespawner({
72 minpos = {x=-0.2, y=-1.5, z=0.5},
73 maxpos = {x=0.2, y=1.7, z=0.5},
74 minvel = vector.new(-0.5,0,-0.5),
75 maxvel = vector.new(0.5,0,0.5),
76 minacc = {x=0, y=-9.81, z=1},
77 maxacc = {x=0, y=-9.81, z=1},
83 collisiondetection = true,
84 collision_removal = true,
86 texture = "eat_particles_1.png"
89 if eating_timer + dtime > 0.25 then
90 minetest.sound_play("eat", {
91 to_player = player:get_player_name(),
92 gain = 1.0, -- default
93 pitch = math.random(60,100)/100,
98 if eating + dtime >= 1 then
99 local stack = player:get_wielded_item()
101 minetest.eat_food(player,item)
103 minetest.sound_play("eat_finish", {
104 to_player = player:get_player_name(),
105 gain = 0.2, -- default
106 pitch = math.random(60,85)/100,
110 meta:set_float("eating_timer", eating_timer)
111 meta:set_float("eating", eating)
113 local meta = player:get_meta()
114 meta:set_float("eating", 0)
115 meta:set_float("eating_timer", 0)
119 local meta = player:get_meta()
120 meta:set_float("eating", 0)
121 meta:set_float("eating_timer", 0)