From f8b54db3929206b4c826533aad035f1c71cc7b89 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sat, 17 Apr 2021 18:55:56 +0200 Subject: [PATCH] Fix controls.register_on_press being called for every player in a globalstep --- mods/PLAYER/mcl_playerplus/init.lua | 51 +++++++++++++---------------- 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index b14d34824..65c585f52 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -199,22 +199,7 @@ minetest.register_globalstep(function(dtime) end end - - controls.register_on_press(function(player, key) - if key~="jump" and key~="RMB" then return end - if key=="jump" then - if player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" and player_velocity.y < -6 and elytra[player] ~= true then - elytra[player] = true - elseif key=="RMB" then - if wielded:get_name() == "mcl_tools:rocket" then - wielded:take_item() - player:set_wielded_item(wielded) - end - end - end - end) - - if elytra[player] == true and node_stand_return ~= "air" or elytra[player] == true and player:get_inventory():get_stack("armor", 3):get_name() ~= "mcl_armor:elytra" or player:get_attach() ~= nil then + if elytra[player] == true and ~= nil then elytra[player] = false end --[[ @@ -224,21 +209,29 @@ minetest.register_globalstep(function(dtime) elytra[player] = false end]] - if elytra[player] == true then - mcl_player.player_set_animation(player, "fly") - playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.1) - if player_velocity.y < -1.5 then - player:add_velocity({x=0, y=0.17, z=0}) - end - if math.abs(player_velocity.x) + math.abs(player_velocity.z) < 20 then - local dir = minetest.yaw_to_dir(player:get_look_horizontal()) - if degrees(player:get_look_vertical()) * -.01 < .1 then - look_pitch = degrees(player:get_look_vertical()) * -.01 - else - look_pitch = .1 + local wearing_elytra = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" + + if elytra[player] then + if node_stand_return ~= "air" or not wearing_elytra or player:get_attach() then + elytra[player] = false + else + mcl_player.player_set_animation(player, "fly") + playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.1) + if player_velocity.y < -1.5 then + player:add_velocity({x=0, y=0.17, z=0}) + end + if math.abs(player_velocity.x) + math.abs(player_velocity.z) < 20 then + local dir = minetest.yaw_to_dir(player:get_look_horizontal()) + if degrees(player:get_look_vertical()) * -.01 < .1 then + look_pitch = degrees(player:get_look_vertical()) * -.01 + else + look_pitch = .1 + end + player:add_velocity({x=dir.x, y=look_pitch, z=dir.z}) end - player:add_velocity({x=dir.x, y=look_pitch, z=dir.z}) end + elseif wearing_elytra and player_velocity.y < -6 and controls.jump then + elytra[player] = true else playerphysics.remove_physics_factor(player, "gravity", "mcl_playerplus:elytra") end