From 2d6e11bb108c2288972c544965fff11074791de5 Mon Sep 17 00:00:00 2001 From: Alezito2008 Date: Mon, 9 Mar 2026 22:27:43 -0300 Subject: [PATCH] Fix fireworks crafting crash --- .../Common/Network/GameNetworkManager.cpp | 1 - Minecraft.World/FireworksRecipe.cpp | 49 +++---------------- Minecraft.World/FireworksRecipe.h | 19 +------ 3 files changed, 9 insertions(+), 60 deletions(-) diff --git a/Minecraft.Client/Common/Network/GameNetworkManager.cpp b/Minecraft.Client/Common/Network/GameNetworkManager.cpp index 3c032bf97..f420a2d2d 100644 --- a/Minecraft.Client/Common/Network/GameNetworkManager.cpp +++ b/Minecraft.Client/Common/Network/GameNetworkManager.cpp @@ -961,7 +961,6 @@ int CGameNetworkManager::ServerThreadProc( void* lpParameter ) Entity::useSmallIds(); Level::enableLightingCache(); Tile::CreateNewThreadStorage(); - FireworksRecipe::CreateNewThreadStorage(); MinecraftServer::main(seed, lpParameter); //saveData, app.GetGameHostOption(eGameHostOption_All)); diff --git a/Minecraft.World/FireworksRecipe.cpp b/Minecraft.World/FireworksRecipe.cpp index feb1cf573..440462b0f 100644 --- a/Minecraft.World/FireworksRecipe.cpp +++ b/Minecraft.World/FireworksRecipe.cpp @@ -2,47 +2,14 @@ #include "net.minecraft.world.item.h" #include "FireworksRecipe.h" -DWORD FireworksRecipe::tlsIdx = 0; -FireworksRecipe::ThreadStorage *FireworksRecipe::tlsDefault = nullptr; - -FireworksRecipe::ThreadStorage::ThreadStorage() -{ - resultItem = nullptr; -} - -void FireworksRecipe::CreateNewThreadStorage() -{ - ThreadStorage *tls = new ThreadStorage(); - if(tlsDefault == nullptr ) - { - tlsIdx = TlsAlloc(); - tlsDefault = tls; - } - TlsSetValue(tlsIdx, tls); -} - -void FireworksRecipe::UseDefaultThreadStorage() -{ - TlsSetValue(tlsIdx, tlsDefault); -} - -void FireworksRecipe::ReleaseThreadStorage() -{ - ThreadStorage *tls = static_cast(TlsGetValue(tlsIdx)); - if( tls == tlsDefault ) return; - - delete tls; -} - void FireworksRecipe::setResultItem(shared_ptr item) { - ThreadStorage *tls = static_cast(TlsGetValue(tlsIdx)); - tls->resultItem = item; + this->resultItem = item; } FireworksRecipe::FireworksRecipe() { - //resultItem = nullptr; + resultItem = nullptr; } bool FireworksRecipe::matches(shared_ptr craftSlots, Level *level) @@ -268,9 +235,11 @@ bool FireworksRecipe::matches(shared_ptr craftSlots, Level *l shared_ptr FireworksRecipe::assemble(shared_ptr craftSlots) { - ThreadStorage *tls = static_cast(TlsGetValue(tlsIdx)); - return tls->resultItem->copy(); - //return resultItem->copy(); + if (this->resultItem != nullptr) + { + return this->resultItem->copy(); + } + return nullptr; } int FireworksRecipe::size() @@ -280,9 +249,7 @@ int FireworksRecipe::size() const ItemInstance *FireworksRecipe::getResultItem() { - ThreadStorage *tls = static_cast(TlsGetValue(tlsIdx)); - return tls->resultItem.get(); - //return resultItem.get(); + return this->resultItem.get(); } void FireworksRecipe::updatePossibleRecipes(shared_ptr craftSlots, bool *firework, bool *charge, bool *fade) diff --git a/Minecraft.World/FireworksRecipe.h b/Minecraft.World/FireworksRecipe.h index b0c7c2363..2dcc310bd 100644 --- a/Minecraft.World/FireworksRecipe.h +++ b/Minecraft.World/FireworksRecipe.h @@ -5,26 +5,9 @@ class FireworksRecipe : public Recipy { private: - //shared_ptr resultItem; - - // 4J added so we can have separate contexts and rleBuf for different threads - class ThreadStorage - { - public: - shared_ptr resultItem; - ThreadStorage(); - }; - static DWORD tlsIdx; - static ThreadStorage *tlsDefault; + shared_ptr resultItem; void setResultItem(shared_ptr item); -public: - // Each new thread that needs to use Compression will need to call one of the following 2 functions, to either create its own - // local storage, or share the default storage already allocated by the main thread - static void CreateNewThreadStorage(); - static void UseDefaultThreadStorage(); - static void ReleaseThreadStorage(); - public: FireworksRecipe();