diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 5b7de5ff2..5d3462e41 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -112,6 +112,7 @@ doubletap_jump (Double tap jump for fly) bool false always_fly_fast (Always fly fast) bool true # If enabled, the "Sneak" key will toggle when pressed. +# This functionality is ignored when fly is enabled. toggle_sneak_key (Toggle Sneak key) bool false # If enabled, the "Aux1" key will toggle when pressed. diff --git a/src/client/game.cpp b/src/client/game.cpp index 4e7ec9cec..b7d1df743 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -2450,6 +2450,11 @@ void Game::updatePlayerControl(const CameraOrientation &cam) { LocalPlayer *player = client->getEnv().getLocalPlayer(); + // In free move (fly), the "toggle_sneak_key" setting would prevent precise + // up/down movements. Hence, enable the feature only during 'normal' movement. + const bool allow_sneak_toggle = m_cache_toggle_sneak_key && + !player->getPlayerSettings().free_move; + //TimeTaker tt("update player control", NULL, PRECISION_NANO); PlayerControl control( @@ -2458,8 +2463,8 @@ void Game::updatePlayerControl(const CameraOrientation &cam) isKeyDown(KeyType::LEFT), isKeyDown(KeyType::RIGHT), isKeyDown(KeyType::JUMP) || player->getAutojump(), - getTogglableKeyState(KeyType::AUX1, m_cache_toggle_aux1_key, player->control.aux1), - getTogglableKeyState(KeyType::SNEAK, m_cache_toggle_sneak_key, player->control.sneak), + getTogglableKeyState(KeyType::AUX1, m_cache_toggle_aux1_key, player->control.aux1), + getTogglableKeyState(KeyType::SNEAK, allow_sneak_toggle, player->control.sneak), isKeyDown(KeyType::ZOOM), isKeyDown(KeyType::DIG), isKeyDown(KeyType::PLACE),