From b4cd510cc766d875cba4b11ab34fa5f99c1009b5 Mon Sep 17 00:00:00 2001 From: ChristianF Date: Tue, 10 Mar 2026 12:30:00 +0100 Subject: [PATCH] Add executeSaveAll and wait for async chunk saves --- Minecraft.Client/MinecraftServer.cpp | 47 ++++++++++++++++++++++++--- Minecraft.Client/MinecraftServer.h | 7 ++-- Minecraft.Client/ServerChunkCache.h | 2 ++ Minecraft.World/stdafx.h | 3 +- x64/Release/redist64/binkawin64.asi | Bin 110080 -> 110080 bytes x64/Release/redist64/mss64dolby.flt | Bin 44032 -> 44032 bytes x64/Release/redist64/mss64ds3d.flt | Bin 73216 -> 73216 bytes x64/Release/redist64/mss64dsp.flt | Bin 142848 -> 142848 bytes x64/Release/redist64/mss64eax.flt | Bin 132608 -> 132608 bytes x64/Release/redist64/mss64srs.flt | Bin 65024 -> 65024 bytes 10 files changed, 51 insertions(+), 8 deletions(-) diff --git a/Minecraft.Client/MinecraftServer.cpp b/Minecraft.Client/MinecraftServer.cpp index bdcc9f813..8f40d9297 100644 --- a/Minecraft.Client/MinecraftServer.cpp +++ b/Minecraft.Client/MinecraftServer.cpp @@ -23,6 +23,7 @@ #include "..\Minecraft.World\net.minecraft.world.level.storage.h" #include "..\Minecraft.World\net.minecraft.world.h" #include "..\Minecraft.World\net.minecraft.world.level.h" +#include "..\Minecraft.World\ChunkStorage.h" #include "..\Minecraft.World\net.minecraft.world.level.tile.h" #include "..\Minecraft.World\Pos.h" #include "..\Minecraft.World\System.h" @@ -234,11 +235,7 @@ static bool ExecuteConsoleCommand(MinecraftServer *server, const wstring &rawCom if (action == L"save-all") { - if (playerList != nullptr) - { - playerList->saveAll(nullptr, false); - } - server->info(L"World saved."); + server->executeSaveAll(); return true; } @@ -1369,6 +1366,46 @@ void MinecraftServer::saveAllChunks() } } +// 4J-JEV: Added +void MinecraftServer::executeSaveAll() +{ + broadcastStartSavingPacket(); + if (players != nullptr) + { + players->saveAll(Minecraft::GetInstance()->progressRenderer, false); + } + + for (unsigned int i = 0; i < levels.length; i++) + { + ServerLevel *level = levels[levels.length - 1 - i]; + if (level != nullptr) + { + level->save(true, Minecraft::GetInstance()->progressRenderer); + } + } + + if (levels[0] != nullptr) + { + levels[0]->saveToDisc(Minecraft::GetInstance()->progressRenderer, false); + } + + saveGameRules(); + + // 4J - ensure all asynchronous chunk saves are completed + for (unsigned int i = 0; i < levels.length; i++) + { + ServerLevel *level = levels[i]; + if (level != nullptr && level->cache != nullptr && level->cache->getStorage() != nullptr) + { + level->cache->getStorage()->WaitForAll(); + } + } + + broadcastStopSavingPacket(); + + info(L"World saved."); +} + // 4J-JEV: Added void MinecraftServer::saveGameRules() { diff --git a/Minecraft.Client/MinecraftServer.h b/Minecraft.Client/MinecraftServer.h index a33888bcc..45f000db3 100644 --- a/Minecraft.Client/MinecraftServer.h +++ b/Minecraft.Client/MinecraftServer.h @@ -74,6 +74,9 @@ public: // static Logger logger = Logger.getLogger("Minecraft"); static unordered_map ironTimers; + void saveAllChunks(); + void saveGameRules(); + void executeSaveAll(); private: static const int DEFAULT_MINECRAFT_PORT = 25565; @@ -142,8 +145,7 @@ private: bool loadLevel(LevelStorageSource *storageSource, const wstring& name, int64_t levelSeed, LevelType *pLevelType, NetworkGameInitData *initData); void setProgress(const wstring& status, int progress); void endProgress(); - void saveAllChunks(); - void saveGameRules(); +private: void stopServer(bool didInit); #ifdef _LARGE_WORLDS void overwriteBordersForNewWorldSize(ServerLevel* level); @@ -207,6 +209,7 @@ public: static void resetFlags() { s_bServerHalted = false; s_bSaveOnExitAnswered = false; } bool flagEntitiesToBeRemoved(unsigned int *flags); // 4J added + //void MinecraftServer::executeSaveAll(); private: //4J Added static MinecraftServer *server; diff --git a/Minecraft.Client/ServerChunkCache.h b/Minecraft.Client/ServerChunkCache.h index cf93fdc55..f1fced5d9 100644 --- a/Minecraft.Client/ServerChunkCache.h +++ b/Minecraft.Client/ServerChunkCache.h @@ -1,6 +1,7 @@ #pragma once #include "..\Minecraft.World\net.minecraft.world.level.h" #include "..\Minecraft.World\File.h" +#include "..\Minecraft.World\ChunkStorage.h" #include "..\Minecraft.World\net.minecraft.world.level.storage.h" #include "..\Minecraft.World\JavaIntHash.h" #include "..\Minecraft.World\RandomLevelSource.h" @@ -53,6 +54,7 @@ public: #endif virtual LevelChunk **getCache() { return cache; } // 4J added + virtual ChunkStorage *getStorage() { return storage; } // 4J added // 4J-JEV Added; Remove chunk from the toDrop queue. #ifdef _LARGE_WORLDS diff --git a/Minecraft.World/stdafx.h b/Minecraft.World/stdafx.h index 37ec371f5..babeffa04 100644 --- a/Minecraft.World/stdafx.h +++ b/Minecraft.World/stdafx.h @@ -16,6 +16,7 @@ #endif #include +#include "..\Minecraft.Client\Common\BuildVer.h" #ifdef _DURANGO #include @@ -192,7 +193,7 @@ void MemSect(int sect); #include "..\Minecraft.Client\Common\Minecraft_Macros.h" #include "..\Minecraft.Client\Common\Colours\ColourTable.h" -#include "..\Minecraft.Client\Common\BuildVer.h" + #ifdef _XBOX #include "..\Minecraft.Client\Xbox\Xbox_App.h" diff --git a/x64/Release/redist64/binkawin64.asi b/x64/Release/redist64/binkawin64.asi index d363b31db5653776f9490810be7d54a5e73a1890..f0574d9d83ee0698c9e45d54c6093a086949004b 100644 GIT binary patch delta 11248 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

8AHv_*KE6+p?@COjt*n#hj!yN=RTgMeM7CRo% zj6xjH2BN8}2Ug+6b_sIA2Ox5SaQ+MOx>ikMtTk?JG~zbEWgs=`mH~b80s`HDiL&qb7nBM1V(d#xH+@6;0afOXawhgcNLy+=WN-b zUBC%1VKA_t2<$#bmd61{&BOmpK|U7v9*El63M@YMGDZhQJunA%L0TJJ)7csjjchIO z{d~sSfZqt*3!=)^z}q02mHbz6+XETFR{>3!K0=Y9kpczDWC*wi{2*{2K&A|4r(K5g}VE;u7cU$Zl;7SlhK4IWuSso1h7)0&t z0xo-9=Cg5(+CVfgI#N#;6)U4z%2>!U>|Im{1AYoh1YfwEvA?gt$iPk)Jh~cF37+s4h^CbA<##Y*@cF=vAacm~F8+oLqIjwUzPLu_OMr(#G%J^Y3G1-_ zYhlzAOv-vhJb1#{A7I~up9}215uJgL1Nv-2XZZBu2b{Q>F+cExcRwA z;J~ezMeqjTplvd51a{so2Wi-L?Egn7WWneO@XL>|J-`zl{1i7?@HN0AHkm&PJn$u^ zn&iNUIvgrMEx!rua_j*}eupBQ?Xkr82;cZ3!*TotCy4b+j3ea8L!wGj4my2aNwy=2L(pK~<0wrgAt5p71271bhQ< zxEl@~@Y%pZeB3pFCw$!l7Y^`*pR|U<;CBOKHK;e45bHkyAKZ7KK6LqSX^sE{fEr+{dW5+>taITmulG>{Sev-c+W=ijLGR@KI#BghG@AO@cB@1SPn zi5j39FSd^0y@18^e50q_^UpYX&VADxqlBFBA}A6(p%xD$Kk&~UOSn!wds~60H`Yf< l$avrh&-LYO33$RL&|L7%z?yzo(&>Efl*PP)Z(qXW{|`-<`l|o{ delta 11130 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 diff --git a/x64/Release/redist64/mss64dolby.flt b/x64/Release/redist64/mss64dolby.flt index 7e9eb6054a3e57520b924bf61a4d6f15ec46db1f..1842df34be8363ce209ed4ab97be0934d07efac2 100644 GIT binary patch delta 105 zcmZp;!PIbrX~GZY+ILkOe|x5a=*{kFH-!Y!Oxis9dxbprDBFjuuZ&o+*`U&d2P~c5 zsxQmQ!obYH$-uzCvU&a@X-3A>&AS&*22zv#mo5g9ADIk+Dl8fF7>pTGH|s9D%nAU> C_$B!O delta 105 zcmZp;!PIbrX~GZYyBPu-e|x5a=*{kFH-!XNRn!$gzjMy-_xrxzcmCYKLPlUA zBZAY1w{At#aYGi~WHz0Q9c)x*#tM7FBVzA#4-F^{Arc%z2vOAmbE%uE3LDO@DpmM$ zTWAd|iQ3pG@`Va|7&qBUcEh=KjL?Y-?fv>~L6ka#8a2)V-!Ykb+cYo{7VqzX#W=>7*Qeqe~WA+NZZ-iu;$Ei@#qotM`Db+m4mc;!B z+EFwEmslZE9o0OER8KV*A~k}cFKK8`ZEq+E%c<@8*{glUcE3i7VG#ZA1VblKE}^)o zRu^pTR0SE4WU4|Qk($7EjFsgY3dcDBXX8k9nP6vg%R47HnOZ%(s~1CKT3+jCej#i8 zdz~1MXqyEbOcknvlt>P$LKz~p1Q(z22@)*+3dQG#R_EASZly4%rSSV30&Je?^p!>P zdzde#YFRvyv*8G9(ih@s=F*#a9MM}!B6~_dRj2u!1OvO;&QTP!x>IQv?>#pBzOJ3KZUFY!2QJb*3iz0ptvuSupKWx7g&FsCE%;z%&gc8oRo z@jQfrH^rU)QklGfg-q_nnawnvwYP}=G+EPlEt9#2$5HchZf@Tnc%=P6vE@}m{_wBz zg2{p3rzZc@J(VBZPQp8q*oRN~(U)Jo=ipj4`>nwwV%zB^r`P3kdOLgFJuau)(|6hB s_4auXGO_fHLj`636uxV{E|0U{>*Acmq>Y2PDtdiGm#J9}{vb#G0+FpqGynhq delta 965 zcmY*YUr19?7{4bKHqG7n;QY7Q3L`UdRwPCW+8uNwvr!T=2h(C@G*h;j28%`$Z^si& zI>v+q4SGvJ+AV#_Sb z5nq$V^2Nm9UGTE9Q7pC676(%~Dz!4j&Ch1l5H}BHxo&sq(8nQFiLpTHA8_h6-8K}`MN*~6`n6<Im;DV3U-f^Dc|56;X&B8a8_5}VJDqfYb1>@sm$ErIXXi&&Ivb!7$7 zZOj)_)G8rdn&R(tSIAW4pjeej;*s`( z^MtJOnL;Cp^RI<}AigiU1F_L~0pf&lFRA1ojfMieO)~o=vjrN&ob}_4qro`eG*;xs za|9uHQ@`0=EYnxGk?H+7uQxr>Y;PjJO_m+d%Vc_BBCbL;NFWAz7$%`F&mTf8s7 zZ#-W*!H-s5+<5qG8SjzAmpmCMxM5^Kd<f%}_0Se$hjJ0e@jimH+?% diff --git a/x64/Release/redist64/mss64dsp.flt b/x64/Release/redist64/mss64dsp.flt index 28caa28e9e1646975597a87a3bfdbe4085b87ee0..5b47b314e2e01b74a03d6ea461eaf993a783a301 100644 GIT binary patch delta 125 zcmZp;!_jbuW5N&S+ILkOe~Z6ne6m^iP2mO*cYFIB#2YP+7sLzCoJ2z|HSrd zGa0AHZe*0)9=DsZO%$x``31)H!JI4%%nY0i3=AyW=c_PDGcu-b->u3t8Awm}S7%zx Zm^#^!*$}A6l0lEbm?3q$t_IU(RsgJkE|~xT delta 125 zcmZp;!_jbuW5N&SyBPu-e~Z6ne6v~jP2mO*cYFIB#9EuB*XxnH2z{b}N1W diff --git a/x64/Release/redist64/mss64eax.flt b/x64/Release/redist64/mss64eax.flt index c91b6e16322392f7bd8c4251b89d1438c469502d..18d0033db111eadf165277dc5025699998dc050c 100644 GIT binary patch delta 2773 zcmeH}ZERCj7{~9KA&fb9ySH{PccW2|ZiTUB@deSi<~CAfnKcwzx{mR(O1Es#tes96 zvRK01$t^HAOZtHbV=H4*5{oTvZgV4=Y%zpHg3-*xNQ@>WL8DF+6=XioZMQLHx)@3P zz=uBfoagO-ZqNDU+*W^Lt3R>*mk0KLxA*+bpHs;V_Cs0|v9Mj~T4H8xU~Q}~y&&Nh zVV|Vy33oiBjSMrIQJiptu!q#S?9+@=!m*^xwP2Ig0^5;!f;T5{9IqRvqIZ&aNM`Ww z<1N!ZH~K6}?mOygXqKk2g00hRdFmG7IO=QXIBoz&+$67((6uJAObZWhzAV|MyEJ1L zoK5muAc_61dE0YDYIKvdZTo?EMXcI&9a1bRJ5S9 zABHGxn=9QOcRTnLP!;g4HJIMPv<@}q|#OiWarG=C#BR$ay0dz-LUv6P$B<`+kp>Ja?L;{^G zn)?U|vSdLEc9o#Z@0>0^2*t7#gempmE@Pu!<`H(1-tcF_@gx!r*R6060k_^T42Cm| z!g=D#4~to`b8;ve{z_LtNR*Wn`oWGA+QDY)mlGX(RUPA zx733Cm4UUf?G}YUzXkYX0~Q3(ut@>%MQbiQvI*TW0L@l`rETs~A%F&6cX5V53|!m1 zO@$Q30&xt@))r`Y*=h%?vsIQNZ|}n|&LRA1qj3a_!OI_Pg-{GbDmG6V5yJ4hHZ8eF z@a?eQhwm@&J^WvR7lO_79zZZctjBRz@V;>rs%OD7(zCPVEw4iI)>kc%yigUAm$9`E z$YUd}1*23uFG{s{qEv?{v59&&0QG!>?Lh#lyZLYd09DfUw?LV?5vVKOGeG4B=K|Fg zoChfPnY#dW?F<4{)q_9{^!z)Zo;!QbfcmlbK2U!GD)i?63aE*<76???IRq+r&WTr9 zQvW|)Wv>q?SJ{>KT7bWb!G-d7dvHGf3`2MD_wA5!mDP@XlnkpWy>#pXep2?2x01Yk z)siPKeLl9g$aujnb*$S}A@=`tk{B~dabQh^Jd>v)hV|vu9;dh3v%SGx@2qw=?%C<| wc=j}MTwZ`hNP%YQOp3R*!P!{d$ z-#zE|`ks5w`Q%)WFWTdaZvXj?%hj55*MEv9Gwg?iMk29i6Ai@9+Q3$^zQoL^HBs#I z#B36MBB_mh%xF?x)C^&FYtz{mNd+XD#UyV98>=m!K}ToGWoEYHyS-R%A@0Vu>PS9Tlx8eG-N! zZC@_^>bzUx<3Lrwx7K0$X=aeL?ANqd;WT6{*YrnGbQP}~B=irf!V>cw5gMgz?Z?(FNG5^Bpj&Ckcfa=ZyEu^na1Ee zam7c)l*l=04F|3ocMuY0`B^@&qgiEOQ?oacJoZ?&HWe!^$|Z|(fqHSQwBo^{-Y`3u zos%4n=Q!^Rn%PFZg%0DyLXU;nx$Lg!g-M`d)8QzR7nsVqwhmVF(Sw%-;P1_yF9Lt} zSdqU%uvKiYRprlT1^!sbiU68QRREv1rL$wD=#BtbViQ=xt_}?XXyT3Iiv(ie%C0I6 zQWy!$V_0HqhISWhWnhi=@&e@TL;M&K4&kGX%_EoxUcSWxp$LXlY??MBgn{?%26Btw z+gElQzQ4eC?|%i}0BolF2!at}J%`pSFwOF1~{A?x*; zqV9&--+W(f^Ibh}%a~{_9h`Zcn3GAae@l=&x}GPdqT))I!(HjxTkouMR5}|D?RU6b vhZ;Ce@UtMv)ae&f+%@%%hRQ~l1A>qHF9k^k$r`*KBzLY=_0|oMU$*}NQt6yDH?YpYY%#4of!3_5eq9OvXUui3hu+>gL^FCj+U;{@)h^$&XBiKoyn@dJM)4shf3wTxJCT D5oRcT delta 106 zcmZqp!`$$Pc>yEy-3)=v%#4of!3_5eq9Ov%9+!V!W9sg)c}+&HNWPQd=A0uZc)`-< zm*SN;nHiWFI2jlim^aV=BF)H{vU&H{$v|qd|M$f}@*|TWCkulmgC2u1L&|2|AD3AH DiZCXH