From 69009916ef920d19859543ed8bb62aee9205ad5e Mon Sep 17 00:00:00 2001
From: Fireblade <3+fireblade@noreply.neolegacy.dev>
Date: Sun, 2 Aug 2026 19:08:14 -0400
Subject: [PATCH] fix: dlc world music fading out to main menu
---
BUMP | 2 +-
Minecraft.Client/Common/Audio/SoundEngine.cpp | 41 +++++++++++++++++--
Minecraft.Client/Common/Audio/SoundEngine.h | 2 +
Minecraft.Client/Minecraft.cpp | 5 ++-
.../Windows64Media/loc/stringsGeneric.xml | 3 ++
5 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/BUMP b/BUMP
index 910abdcc..3e153f5b 100644
--- a/BUMP
+++ b/BUMP
@@ -1 +1 @@
-1.1.0b
+1.1.1b
diff --git a/Minecraft.Client/Common/Audio/SoundEngine.cpp b/Minecraft.Client/Common/Audio/SoundEngine.cpp
index 694c78bd..031d3906 100644
--- a/Minecraft.Client/Common/Audio/SoundEngine.cpp
+++ b/Minecraft.Client/Common/Audio/SoundEngine.cpp
@@ -472,6 +472,8 @@ SoundEngine::SoundEngine()
m_musicFadeLastUpdateTime = std::chrono::steady_clock::now();
m_bCurrentStreamIsCustom = false;
m_bCurrentStreamIsMenuMusic = true;
+ m_bPendingCustomMusicFade = false;
+ m_bPendingMenuMusicStart = false;
memset(CurrentSoundsPlaying,0,sizeof(int)*(eSoundType_MAX+eSFX_MAX));
memset(m_ListenerA,0,sizeof(AUDIO_LISTENER)*XUSER_MAX_COUNT);
@@ -854,10 +856,35 @@ void SoundEngine::playStreaming(const wstring& name, float x, float y, float z,
return;
}
- bool bNextCustom = isCustomMusicRequest(name);
- bool bCurrentCustom = m_musicStreamActive && m_bCurrentStreamIsCustom;
+ if (name.empty() && m_bPendingMenuMusicStart &&
+ (m_StreamState == eMusicStreamState_Playing || m_StreamState == eMusicStreamState_Fading))
+ {
+ return;
+ }
- if(m_StreamState == eMusicStreamState_Playing)
+ const bool bNextCustom = isCustomMusicRequest(name);
+ const bool bCurrentCustom = m_musicStreamActive && m_bCurrentStreamIsCustom;
+ const bool bTransitioningFromCustomMusic = name.empty() && m_musicStreamActive && bCurrentCustom && !m_bCurrentStreamIsMenuMusic;
+ const bool bTransitioningFromNonMenuMusic = name.empty() && m_musicStreamActive && !m_bCurrentStreamIsMenuMusic;
+
+ if (bTransitioningFromNonMenuMusic && (m_StreamState == eMusicStreamState_Playing || m_StreamState == eMusicStreamState_Fading))
+ {
+ m_bPendingMenuMusicStart = true;
+ m_bCurrentStreamIsMenuMusic = false;
+ if (bTransitioningFromCustomMusic)
+ {
+ m_bPendingCustomMusicFade = true;
+ }
+ if (m_StreamState == eMusicStreamState_Playing)
+ {
+ m_StreamState = eMusicStreamState_Fading;
+ m_musicFadeSecondsRemaining = MUSIC_FADE_DURATION_SECONDS;
+ m_musicFadeLastUpdateTime = std::chrono::steady_clock::now();
+ }
+ return;
+ }
+
+ if (m_StreamState == eMusicStreamState_Playing)
{
if (bCurrentCustom != bNextCustom)
{
@@ -1534,7 +1561,15 @@ void SoundEngine::playMusicUpdate()
SetIsPlayingStreamingCDMusic(false);
SetIsPlayingStreamingGameMusic(false);
+ if (m_bPendingMenuMusicStart)
+ {
+ m_musicID = getMusicID(eMusicType_Menu);
+ m_bCurrentStreamIsMenuMusic = true;
+ m_iMusicDelay = 0;
+ m_bPendingMenuMusicStart = false;
+ }
m_StreamState = eMusicStreamState_Idle;
+ m_bPendingCustomMusicFade = false;
break;
case eMusicStreamState_Stopping:
break;
diff --git a/Minecraft.Client/Common/Audio/SoundEngine.h b/Minecraft.Client/Common/Audio/SoundEngine.h
index 3d5be955..10bf745a 100644
--- a/Minecraft.Client/Common/Audio/SoundEngine.h
+++ b/Minecraft.Client/Common/Audio/SoundEngine.h
@@ -175,6 +175,8 @@ private:
std::chrono::steady_clock::time_point m_musicFadeLastUpdateTime;
bool m_bCurrentStreamIsCustom;
bool m_bCurrentStreamIsMenuMusic;
+ bool m_bPendingCustomMusicFade;
+ bool m_bPendingMenuMusicStart;
ma_engine m_engine;
ma_engine_config m_engineConfig;
diff --git a/Minecraft.Client/Minecraft.cpp b/Minecraft.Client/Minecraft.cpp
index 11cb68d9..cf5d7010 100644
--- a/Minecraft.Client/Minecraft.cpp
+++ b/Minecraft.Client/Minecraft.cpp
@@ -4571,7 +4571,10 @@ void Minecraft::setLevel(MultiPlayerLevel *level, int message /*=-1*/, shared_pt
if (hasCustomMusic || !isMenuMusic)
{
- soundEngine->stopStreamingNow();
+ if (level != nullptr)
+ {
+ soundEngine->stopStreamingNow();
+ }
soundEngine->playStreaming(L"", 0, 0, 0, 1, 1);
}
}
diff --git a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml
index 5a06756e..aa3b928f 100644
--- a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml
+++ b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml
@@ -9538,6 +9538,9 @@ All Ender Chests in a world are linked. Items placed into an Ender Chest are acc
Plant on Farmland.
Restores 3{*ICON_SHANK_01*}.
+ Awarded all achievements
+ All achievements have been awarded.
+
Taking Inventory
Open your inventory.