diff --git a/targets/app/common/DLC/DLCLocalisationFile.cpp b/targets/app/common/DLC/DLCLocalisationFile.cpp index 343faad53..5eb68ad59 100644 --- a/targets/app/common/DLC/DLCLocalisationFile.cpp +++ b/targets/app/common/DLC/DLCLocalisationFile.cpp @@ -12,7 +12,6 @@ DLCLocalisationFile::DLCLocalisationFile(const std::string& path) void DLCLocalisationFile::addData(std::uint8_t* pbData, std::uint32_t dataBytes) { - std::vector locales; - app.getLocale(locales); - m_strings = new StringTable(pbData, dataBytes, locales); + m_strings = new StringTable( + std::span(pbData, dataBytes), app.getLocale()); } diff --git a/targets/app/common/DLC/DLCPack.cpp b/targets/app/common/DLC/DLCPack.cpp index 20bef9ed6..56accae69 100644 --- a/targets/app/common/DLC/DLCPack.cpp +++ b/targets/app/common/DLC/DLCPack.cpp @@ -351,8 +351,6 @@ void DLCPack::UpdateLanguage() { DLCLocalisationFile* localisationFile = (DLCLocalisationFile*)getFile( DLCManager::e_DLCType_LocalisationData, "languages.loc"); StringTable* strTable = localisationFile->getStringTable(); - std::vector locales; - app.getLocale(locales); - strTable->ReloadStringTable(locales); + strTable->ReloadStringTable(app.getLocale()); } } diff --git a/targets/app/common/Game.h b/targets/app/common/Game.h index c31ea2c70..0a1cca1b7 100644 --- a/targets/app/common/Game.h +++ b/targets/app/common/Game.h @@ -1177,6 +1177,11 @@ public: void getLocale(std::vector& vecWstrLocales) { m_localizationManager.getLocale(vecWstrLocales); } + [[nodiscard]] std::vector getLocale() { + std::vector v; + m_localizationManager.getLocale(v); + return v; + } int get_eMCLang(char* pwchLocale) { return m_localizationManager.get_eMCLang(pwchLocale); } diff --git a/targets/app/common/GameRules/GameRuleManager.cpp b/targets/app/common/GameRules/GameRuleManager.cpp index 39fb980e0..c86544f6a 100644 --- a/targets/app/common/GameRules/GameRuleManager.cpp +++ b/targets/app/common/GameRules/GameRuleManager.cpp @@ -223,10 +223,7 @@ void GameRuleManager::loadGameRules(LevelGenerationOptions* lgo, uint8_t* dIn, unsigned int bStringTableSize = dis2.readInt(); std::vector bStringTable(bStringTableSize); dis2.read(bStringTable); - std::vector locales; - app.getLocale(locales); - StringTable* strings = - new StringTable(bStringTable.data(), bStringTable.size(), locales); + StringTable* strings = new StringTable(bStringTable, app.getLocale()); // Read RuleFile. std::vector bRuleFile(content.size() - bStringTable.size()); diff --git a/targets/app/common/LocalizationManager.cpp b/targets/app/common/LocalizationManager.cpp index 7048b8fc1..9a2210b50 100644 --- a/targets/app/common/LocalizationManager.cpp +++ b/targets/app/common/LocalizationManager.cpp @@ -79,8 +79,7 @@ void LocalizationManager::loadStringTable(ArchiveFile* mediaArchive) { std::vector locFile = mediaArchive->getFile(localisationFile); std::vector locales; getLocale(locales); - m_stringTable = - new StringTable(locFile.data(), locFile.size(), locales); + m_stringTable = new StringTable(locFile, locales); } else { m_stringTable = nullptr; assert(false); diff --git a/targets/app/common/UI/Scenes/Frontend Menu screens/IUIScene_StartGame.cpp b/targets/app/common/UI/Scenes/Frontend Menu screens/IUIScene_StartGame.cpp index 499e9ca4a..65463dfd2 100644 --- a/targets/app/common/UI/Scenes/Frontend Menu screens/IUIScene_StartGame.cpp +++ b/targets/app/common/UI/Scenes/Frontend Menu screens/IUIScene_StartGame.cpp @@ -145,10 +145,9 @@ void IUIScene_StartGame::UpdateTexturePackDescription(int index) { app.GetFileFromTPD(eTPDFileType_Loc, pbData, dwBytes, &pbFileData, &dwFileBytes); if (dwFileBytes > 0 && pbFileData) { - std::vector locales; - app.getLocale(locales); - StringTable* pStringTable = - new StringTable(pbFileData, dwFileBytes, locales); + StringTable* pStringTable = new StringTable( + std::span(pbFileData, dwFileBytes), + app.getLocale()); m_texturePackTitle.SetText( pStringTable->getString("IDS_DISPLAY_NAME")); m_texturePackDescription.SetText( diff --git a/targets/minecraft/locale/StringTable.cpp b/targets/minecraft/locale/StringTable.cpp index e19c49d63..427e77ddf 100644 --- a/targets/minecraft/locale/StringTable.cpp +++ b/targets/minecraft/locale/StringTable.cpp @@ -13,14 +13,13 @@ StringTable::StringTable(void) {} // localisation data only. The caller passes the locale list it wants // matched (typically obtained from the LocalizationManager) so that // StringTable does not have to know about app-side singletons. -StringTable::StringTable(std::uint8_t* pbData, unsigned int dataSize, - const std::vector& locales) { - src = std::vector(pbData, pbData + dataSize); - +StringTable::StringTable(std::span data, + std::span locales) + : src(data.begin(), data.end()) { ProcessStringTableData(locales); } -void StringTable::ReloadStringTable(const std::vector& locales) { +void StringTable::ReloadStringTable(std::span locales) { m_stringsMap.clear(); m_stringsVec.clear(); @@ -28,7 +27,7 @@ void StringTable::ReloadStringTable(const std::vector& locales) { } void StringTable::ProcessStringTableData( - const std::vector& locales) { + std::span locales) { ByteArrayInputStream bais(src); DataInputStream dis(&bais); diff --git a/targets/minecraft/locale/StringTable.h b/targets/minecraft/locale/StringTable.h index aef23eca1..2090117c1 100644 --- a/targets/minecraft/locale/StringTable.h +++ b/targets/minecraft/locale/StringTable.h @@ -1,11 +1,12 @@ #pragma once #include +#include #include #include #include -#define LOCALE_COUNT 11 +inline constexpr int kLocaleCount = 11; class StringTable { private: @@ -54,19 +55,17 @@ public: // }; StringTable(void); - StringTable(std::uint8_t* pbData, unsigned int dataSize, - const std::vector& locales); + StringTable(std::span data, + std::span locales); ~StringTable(void); - void ReloadStringTable(const std::vector& locales); + void ReloadStringTable(std::span locales); void getData(std::uint8_t** ppData, unsigned int* pSize); const char* getString(const std::string& id); const char* getString(int id); - // static const char* m_wchLocaleCode[LOCALE_COUNT]; - private: // std::string getLangId(uint32_t dwLanguage=0); - void ProcessStringTableData(const std::vector& locales); + void ProcessStringTableData(std::span locales); }; diff --git a/targets/minecraft/server/level/ServerLevel.cpp b/targets/minecraft/server/level/ServerLevel.cpp index ce522df1b..3f55b305f 100644 --- a/targets/minecraft/server/level/ServerLevel.cpp +++ b/targets/minecraft/server/level/ServerLevel.cpp @@ -729,7 +729,7 @@ std::vector* ServerLevel::fetchTicksInChunk(LevelChunk* chunk, } } else { if (!toBeTicked.empty()) { - Log::info("To be ticked size: %d\n", toBeTicked.size()); + Log::info("To be ticked size: %zu\n", toBeTicked.size()); } for (auto it = toBeTicked.begin(); it != toBeTicked.end();) { TickNextTickData td = *it; diff --git a/targets/minecraft/util/Log.h b/targets/minecraft/util/Log.h index ee70d553b..b353b244d 100644 --- a/targets/minecraft/util/Log.h +++ b/targets/minecraft/util/Log.h @@ -5,11 +5,22 @@ namespace Log { +#if defined(_FINAL_BUILD) +// In shipping builds, info traces compile to nothing - matches the +// historical Game::DebugPrintf behaviour. The varargs path is +// completely elided so format strings and their arguments are not +// even constructed. +inline void info(const char* /*fmt*/, ...) {} +#else +#if defined(__GNUC__) || defined(__clang__) +[[gnu::format(printf, 1, 2)]] +#endif inline void info(const char* fmt, ...) { va_list args; va_start(args, fmt); std::vfprintf(stderr, fmt, args); va_end(args); } +#endif } // namespace Log diff --git a/targets/minecraft/world/entity/projectile/Arrow.cpp b/targets/minecraft/world/entity/projectile/Arrow.cpp index e8a27a1bc..cc40c8949 100644 --- a/targets/minecraft/world/entity/projectile/Arrow.cpp +++ b/targets/minecraft/world/entity/projectile/Arrow.cpp @@ -182,7 +182,7 @@ void Arrow::lerpMotion(double xd, double yd, double zd) { xRotO = xRot = (float)(atan2(yd, sd) * 180 / std::numbers::pi); xRotO = xRot; yRotO = yRot; - Log::info("%f %f : 0x%x\n", xRot, yRot, &yRot); + Log::info("%f %f : %p\n", xRot, yRot, static_cast(&yRot)); moveTo(x, y, z, yRot, xRot); life = 0; } diff --git a/targets/minecraft/world/level/Explosion.cpp b/targets/minecraft/world/level/Explosion.cpp index e942a9d4a..15f911881 100644 --- a/targets/minecraft/world/level/Explosion.cpp +++ b/targets/minecraft/world/level/Explosion.cpp @@ -206,7 +206,7 @@ void Explosion::finalizeExplosion( if (destroyBlocks) { // toBlowArray.addAll(toBlow); // TODO 4J Stu - Reverse iterator - Log::info("Finalizing explosion size %d\n", toBlow.size()); + Log::info("Finalizing explosion size %zu\n", toBlow.size()); static const int MAX_EXPLODE_PARTICLES = 50; // 4J - try and make at most MAX_EXPLODE_PARTICLES pairs of particles int fraction = (int)toBlowArray->size() / MAX_EXPLODE_PARTICLES; diff --git a/targets/minecraft/world/level/Level.cpp b/targets/minecraft/world/level/Level.cpp index 1b984f1f9..9dd7dab78 100644 --- a/targets/minecraft/world/level/Level.cpp +++ b/targets/minecraft/world/level/Level.cpp @@ -3872,8 +3872,8 @@ void Level::setGameTime(int64_t time) { // time passing so ignore (moving dimensions does this) Log::info( "Level::setTime: Massive time difference, ignoring for time " - "passed stat (%lli)\n", - timeDiff); + "passed stat (%lld)\n", + static_cast(timeDiff)); timeDiff = 0; } diff --git a/targets/minecraft/world/level/chunk/storage/ChunkStorageProfileDecorator.cpp b/targets/minecraft/world/level/chunk/storage/ChunkStorageProfileDecorator.cpp index 782074473..b2292f58e 100644 --- a/targets/minecraft/world/level/chunk/storage/ChunkStorageProfileDecorator.cpp +++ b/targets/minecraft/world/level/chunk/storage/ChunkStorageProfileDecorator.cpp @@ -54,7 +54,7 @@ void ChunkStorageProfilerDecorator::tick() { 0.000001 * (double)timeSpentLoading / (double)loadCount, loadCount); #endif - Log::info(buf); + Log::info("%s", buf); #endif } if (saveCount > 0) { @@ -68,7 +68,7 @@ void ChunkStorageProfilerDecorator::tick() { 0.000001 * (double)timeSpentSaving / (double)loadCount, loadCount); #endif - Log::info(buf); + Log::info("%s", buf); #endif } counter = 0; diff --git a/targets/minecraft/world/level/chunk/storage/McRegionChunkStorage.cpp b/targets/minecraft/world/level/chunk/storage/McRegionChunkStorage.cpp index f7dd05eda..ebad12c81 100644 --- a/targets/minecraft/world/level/chunk/storage/McRegionChunkStorage.cpp +++ b/targets/minecraft/world/level/chunk/storage/McRegionChunkStorage.cpp @@ -144,7 +144,7 @@ LevelChunk* McRegionChunkStorage::load(Level* level, int x, int z) { sprintf(buf, "Chunk file at %d, %d is missing level data, skipping\n", x, z); - Log::info(buf); + Log::info("%s", buf); delete chunkData; return nullptr; } @@ -153,7 +153,7 @@ LevelChunk* McRegionChunkStorage::load(Level* level, int x, int z) { sprintf(buf, "Chunk file at %d, %d is missing block data, skipping\n", x, z); - Log::info(buf); + Log::info("%s", buf); delete chunkData; return nullptr; } @@ -165,7 +165,7 @@ LevelChunk* McRegionChunkStorage::load(Level* level, int x, int z) { "Chunk file at %d, %d is in the wrong location; " "relocating. Expected %d, %d, got %d, %d\n", x, z, x, z, levelChunk->x, levelChunk->z); - Log::info(buf); + Log::info("%s", buf); delete levelChunk; delete chunkData; return nullptr; diff --git a/targets/minecraft/world/level/chunk/storage/OldChunkStorage.cpp b/targets/minecraft/world/level/chunk/storage/OldChunkStorage.cpp index eff498ad8..5ccd24a96 100644 --- a/targets/minecraft/world/level/chunk/storage/OldChunkStorage.cpp +++ b/targets/minecraft/world/level/chunk/storage/OldChunkStorage.cpp @@ -134,7 +134,7 @@ LevelChunk* OldChunkStorage::load(Level* level, int x, int z) { sprintf(buf, "Chunk file at %d, %d is missing level data, skipping\n", x, z); - Log::info(buf); + Log::info("%s", buf); return nullptr; } if (!tag->getCompound("Level")->contains("Blocks")) { @@ -142,7 +142,7 @@ LevelChunk* OldChunkStorage::load(Level* level, int x, int z) { sprintf(buf, "Chunk file at %d, %d is missing block data, skipping\n", x, z); - Log::info(buf); + Log::info("%s", buf); return nullptr; } LevelChunk* levelChunk = @@ -153,7 +153,7 @@ LevelChunk* OldChunkStorage::load(Level* level, int x, int z) { "Chunk fileat %d, %d is in the wrong location; relocating. " "Expected %d, %d, got %d, %d\n", x, z, x, z, levelChunk->x, levelChunk->z); - Log::info(buf); + Log::info("%s", buf); tag->putInt("xPos", x); tag->putInt("zPos", z); levelChunk = diff --git a/targets/minecraft/world/level/storage/DirectoryLevelStorage.cpp b/targets/minecraft/world/level/storage/DirectoryLevelStorage.cpp index c3881941d..4f4631e1f 100644 --- a/targets/minecraft/world/level/storage/DirectoryLevelStorage.cpp +++ b/targets/minecraft/world/level/storage/DirectoryLevelStorage.cpp @@ -164,8 +164,9 @@ void DirectoryLevelStorage::PlayerMappings::writeMappings( DataOutputStream* dos) { dos->writeInt(m_mappings.size()); for (auto it = m_mappings.begin(); it != m_mappings.end(); ++it) { - Log::info(" -- %lld (0x%016llx) = %d\n", it->first, it->first, - it->second); + Log::info(" -- %lld (0x%016llx) = %d\n", + static_cast(it->first), + static_cast(it->first), it->second); dos->writeLong(it->first); dos->writeInt(it->second); } @@ -177,7 +178,9 @@ void DirectoryLevelStorage::PlayerMappings::readMappings(DataInputStream* dis) { int64_t index = dis->readLong(); int id = dis->readInt(); m_mappings[index] = id; - Log::info(" -- %lld (0x%016llx) = %d\n", index, index, id); + Log::info(" -- %lld (0x%016llx) = %d\n", + static_cast(index), + static_cast(index), id); } } #endif @@ -278,10 +281,12 @@ LevelData* DirectoryLevelStorage::prepareLevel() { for (unsigned int i = 0; i < count; ++i) { PlayerUID playerUid = dis.readPlayerUID(); #if defined(_WINDOWS64) || defined(__linux__) - Log::info(" -- %d\n", playerUid); + Log::info(" -- %llu\n", + static_cast(playerUid)); #else #if defined(__linux__) - Log::info(" -- %d\n", playerUid); + Log::info(" -- %llu\n", + static_cast(playerUid)); #else Log::info(" -- %s\n", playerUid.toWString().c_str()); #endif @@ -633,11 +638,12 @@ void DirectoryLevelStorage::saveMapIdLookup() { ByteArrayOutputStream baos; DataOutputStream dos(&baos); dos.writeInt(m_playerMappings.size()); - Log::info("Saving %d mappings\n", m_playerMappings.size()); + Log::info("Saving %zu mappings\n", m_playerMappings.size()); for (auto it = m_playerMappings.begin(); it != m_playerMappings.end(); ++it) { #if defined(_WINDOWS64) || defined(__linux__) - Log::info(" -- %d\n", it->first); + Log::info(" -- %llu\n", + static_cast(it->first)); #else #if defined(__linux__) Log::info(" -- %d\n", it->first);