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 hunger = meta:get_int("hunger")
23 local running = (meta:get_string("player.player_movement_state") == "1")
24 local bunny_hopping = (meta:get_string("player.player_movement_state") == "2")
25 local sneaking = (meta:get_string("player.player_movement_state") == "3")
27 --print(running, bunny_hopping)
30 --running FOV modifier
31 if hunger > 6 and (running or bunny_hopping) then
32 player:set_fov(1.25, true,0.15)
34 if bunny_hopping == true then
35 --player:set_fov(1.45, true,0.15)
36 player:set_physics_override({speed=1.75})
38 --player:set_fov(1.25, true,0.15)
39 player:set_physics_override({speed=1.5})
42 player:set_fov(1, true,0.15)
43 player:set_physics_override({speed=1})
44 --meta:set_float("running_timer", 0)
49 --player:set_fov(0.8, true,0.1)
50 player:set_eye_offset({x=0,y=-1,z=0},{x=0,y=-1,z=0})
52 player:set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})
55 --remember to implement hunger
58 if player:get_player_control().RMB then
60 local item = player:get_wielded_item():get_name()
61 local satiation = minetest.get_item_group(item, "satiation")
62 local hunger = minetest.get_item_group(item, "hunger")
64 local meta = player:get_meta()
65 if meta:get_int("hunger") == 20 then
69 if hunger > 0 and satiation > 0 then
70 local eating = meta:get_float("eating")
71 local eating_timer = meta:get_float("eating_timer")
73 eating = eating + dtime
74 eating_timer = eating_timer + dtime
76 local ps = minetest.add_particlespawner({
79 minpos = {x=-0.2, y=-1.5, z=0.5},
80 maxpos = {x=0.2, y=1.7, z=0.5},
81 minvel = vector.new(-0.5,0,-0.5),
82 maxvel = vector.new(0.5,0,0.5),
83 minacc = {x=0, y=-9.81, z=1},
84 maxacc = {x=0, y=-9.81, z=1},
90 collisiondetection = true,
91 collision_removal = true,
93 texture = "eat_particles_1.png"
96 if eating_timer + dtime > 0.25 then
97 minetest.sound_play("eat", {
98 to_player = player:get_player_name(),
99 gain = 1.0, -- default
100 pitch = math.random(60,100)/100,
105 if eating + dtime >= 1 then
106 local stack = player:get_wielded_item()
108 minetest.eat_food(player,item)
110 minetest.sound_play("eat_finish", {
111 to_player = player:get_player_name(),
112 gain = 0.2, -- default
113 pitch = math.random(60,85)/100,
117 meta:set_float("eating_timer", eating_timer)
118 meta:set_float("eating", eating)
120 local meta = player:get_meta()
121 meta:set_float("eating", 0)
122 meta:set_float("eating_timer", 0)
126 local meta = player:get_meta()
127 meta:set_float("eating", 0)
128 meta:set_float("eating_timer", 0)