diff options
-rw-r--r-- | src/Bindings/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/BlockEntities/BlockEntity.cpp | 18 | ||||
-rw-r--r-- | src/BlockEntities/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/CMakeLists.txt | 6 | ||||
-rw-r--r-- | src/Entities/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/Generating/CMakeLists.txt | 9 | ||||
-rw-r--r-- | src/Generating/FinishGen.cpp | 6 | ||||
-rw-r--r-- | src/Generating/StructGen.cpp | 135 | ||||
-rw-r--r-- | src/HTTP/CMakeLists.txt | 5 | ||||
-rw-r--r-- | src/Items/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/Items/ItemHandler.cpp | 4 | ||||
-rw-r--r-- | src/Mobs/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/Mobs/Monster.cpp | 16 | ||||
-rw-r--r-- | src/Protocol/CMakeLists.txt | 8 | ||||
-rw-r--r-- | src/Protocol/Protocol_1_10.cpp | 68 | ||||
-rw-r--r-- | src/Protocol/Protocol_1_11.cpp | 68 | ||||
-rw-r--r-- | src/Protocol/Protocol_1_12.cpp | 98 | ||||
-rw-r--r-- | src/Protocol/Protocol_1_8.cpp | 34 | ||||
-rw-r--r-- | src/Protocol/Protocol_1_9.cpp | 69 | ||||
-rw-r--r-- | src/UI/CMakeLists.txt | 5 | ||||
-rw-r--r-- | src/UI/SlotArea.cpp | 7 | ||||
-rw-r--r-- | src/WorldStorage/CMakeLists.txt | 7 | ||||
-rw-r--r-- | src/WorldStorage/NBTChunkSerializer.cpp | 64 | ||||
-rwxr-xr-x | src/WorldStorage/WSSAnvil.cpp | 35 |
24 files changed, 357 insertions, 322 deletions
diff --git a/src/Bindings/CMakeLists.txt b/src/Bindings/CMakeLists.txt index 0ab21467b..0cfb7add9 100644 --- a/src/Bindings/CMakeLists.txt +++ b/src/Bindings/CMakeLists.txt @@ -169,7 +169,6 @@ set_source_files_properties(${CMAKE_SOURCE_DIR}/src/Bindings/Bindings.cpp PROPER if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set_source_files_properties(Bindings.cpp PROPERTIES COMPILE_FLAGS ${COMPILE_FLAGS} "-Wno-old-style-cast -Wno-missing-prototypes") - set_source_files_properties(LuaWindow.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum") endif() if(NOT MSVC) diff --git a/src/BlockEntities/BlockEntity.cpp b/src/BlockEntities/BlockEntity.cpp index f2380734a..b83c5319f 100644 --- a/src/BlockEntities/BlockEntity.cpp +++ b/src/BlockEntities/BlockEntity.cpp @@ -64,8 +64,11 @@ bool cBlockEntity::IsBlockEntityBlockType(BLOCKTYPE a_BlockType) { return true; } + default: + { + return false; + } } - return false; } @@ -95,12 +98,15 @@ cBlockEntity * cBlockEntity::CreateByBlockType(BLOCKTYPE a_BlockType, NIBBLETYPE case E_BLOCK_SIGN_POST: return new cSignEntity (a_BlockType, a_BlockMeta, a_BlockX, a_BlockY, a_BlockZ, a_World); case E_BLOCK_TRAPPED_CHEST: return new cChestEntity (a_BlockType, a_BlockMeta, a_BlockX, a_BlockY, a_BlockZ, a_World); case E_BLOCK_WALLSIGN: return new cSignEntity (a_BlockType, a_BlockMeta, a_BlockX, a_BlockY, a_BlockZ, a_World); + default: + { + LOGD("%s: Requesting creation of an unknown block entity - block type %d (%s)", + __FUNCTION__, a_BlockType, ItemTypeToString(a_BlockType).c_str() + ); + ASSERT(!"Requesting creation of an unknown block entity"); + return nullptr; + } } - LOGD("%s: Requesting creation of an unknown block entity - block type %d (%s)", - __FUNCTION__, a_BlockType, ItemTypeToString(a_BlockType).c_str() - ); - ASSERT(!"Requesting creation of an unknown block entity"); - return nullptr; } diff --git a/src/BlockEntities/CMakeLists.txt b/src/BlockEntities/CMakeLists.txt index 93033931c..d512a776c 100644 --- a/src/BlockEntities/CMakeLists.txt +++ b/src/BlockEntities/CMakeLists.txt @@ -46,10 +46,6 @@ SET (HDRS SignEntity.h ) -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set_source_files_properties(BeaconEntity.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum") -endif() - if(NOT MSVC) add_library(BlockEntities ${SRCS} ${HDRS}) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8a6a5ec7b..c023889bc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -project (Cuberite) +project (Cuberite) include_directories (SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/../lib/") @@ -165,13 +165,9 @@ include_directories (SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/../lib/TCLAP/include") configure_file("BuildInfo.h.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/BuildInfo.h") if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set_source_files_properties(BiomeDef.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum") set_source_files_properties(BlockID.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors") - set_source_files_properties(BoundingBox.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors") set_source_files_properties(ByteBuffer.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors") set_source_files_properties(ClientHandle.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors ") - set_source_files_properties(CompositeChat.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors") - set_source_files_properties(MobSpawner.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum") set_source_files_properties(Statistics.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors") endif() diff --git a/src/Entities/CMakeLists.txt b/src/Entities/CMakeLists.txt index aaab6ebe4..780243d8c 100644 --- a/src/Entities/CMakeLists.txt +++ b/src/Entities/CMakeLists.txt @@ -60,10 +60,6 @@ SET (HDRS ThrownSnowballEntity.h WitherSkullEntity.h) -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set_source_files_properties(Entity.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors") -endif() - if(NOT MSVC) add_library(Entities ${SRCS} ${HDRS}) target_link_libraries(Entities WorldStorage) diff --git a/src/Generating/CMakeLists.txt b/src/Generating/CMakeLists.txt index 67e0e8b22..02f94729f 100644 --- a/src/Generating/CMakeLists.txt +++ b/src/Generating/CMakeLists.txt @@ -71,14 +71,7 @@ SET (HDRS ) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set_source_files_properties(BioGen.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum") - set_source_files_properties(CompoGenBiomal.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors ") - set_source_files_properties(ComposableGenerator.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum") - set_source_files_properties(FinishGen.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum -Wno-error=switch") - set_source_files_properties(PieceGenerator.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors") - set_source_files_properties(Prefab.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors") - set_source_files_properties(StructGen.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum -Wno-error=switch") - set_source_files_properties(VillageGen.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors -Wno-error=switch-enum") + set_source_files_properties(CompoGenBiomal.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors") endif() if(NOT MSVC) diff --git a/src/Generating/FinishGen.cpp b/src/Generating/FinishGen.cpp index fe5ce82be..aa7dd86c1 100644 --- a/src/Generating/FinishGen.cpp +++ b/src/Generating/FinishGen.cpp @@ -586,9 +586,11 @@ bool cFinishGenVines::IsJungleVariant(EMCSBiome a_Biome) { return true; } + default: + { + return false; + } } - - return false; } diff --git a/src/Generating/StructGen.cpp b/src/Generating/StructGen.cpp index a36ebc608..d0e8da26a 100644 --- a/src/Generating/StructGen.cpp +++ b/src/Generating/StructGen.cpp @@ -198,65 +198,88 @@ int cStructGenTrees::GetNumTrees( const cChunkDef::BiomeMap & a_Biomes ) { - int NumTrees = 0; - for (int x = 0; x < cChunkDef::Width; x++) for (int z = 0; z < cChunkDef::Width; z++) + auto BiomeTrees = [](EMCSBiome a_Biome) { - int Add = 0; - switch (cChunkDef::GetBiome(a_Biomes, x, z)) + switch (a_Biome) { - case biOcean: Add = 2; break; - case biDesert: Add = 0; break; - case biPlains: Add = 1; break; - case biExtremeHills: Add = 3; break; - case biForest: Add = 30; break; - case biTaiga: Add = 30; break; - case biSwampland: Add = 8; break; - case biIcePlains: Add = 1; break; - case biIceMountains: Add = 1; break; - case biMushroomIsland: Add = 3; break; - case biMushroomShore: Add = 3; break; - case biForestHills: Add = 20; break; - case biTaigaHills: Add = 20; break; - case biExtremeHillsEdge: Add = 5; break; - case biJungle: Add = 120; break; - case biJungleHills: Add = 90; break; - case biJungleEdge: Add = 90; break; - case biBirchForest: Add = 30; break; - case biBirchForestHills: Add = 20; break; - case biRoofedForest: Add = 50; break; - case biColdTaiga: Add = 20; break; - case biColdTaigaHills: Add = 15; break; - case biMegaTaiga: Add = 30; break; - case biMegaTaigaHills: Add = 25; break; - case biExtremeHillsPlus: Add = 3; break; - case biSavanna: Add = 8; break; - case biSavannaPlateau: Add = 12; break; - case biMesa: Add = 2; break; - case biMesaPlateauF: Add = 8; break; - case biMesaPlateau: Add = 8; break; - case biSunflowerPlains: Add = 1; break; - case biDesertM: Add = 0; break; - case biExtremeHillsM: Add = 4; break; - case biFlowerForest: Add = 30; break; - case biTaigaM: Add = 30; break; - case biSwamplandM: Add = 8; break; - case biIcePlainsSpikes: Add = 1; break; - case biJungleM: Add = 120; break; - case biJungleEdgeM: Add = 90; break; - case biBirchForestM: Add = 30; break; - case biBirchForestHillsM: Add = 20; break; - case biRoofedForestM: Add = 40; break; - case biColdTaigaM: Add = 30; break; - case biMegaSpruceTaiga: Add = 30; break; - case biMegaSpruceTaigaHills: Add = 30; break; - case biExtremeHillsPlusM: Add = 4; break; - case biSavannaM: Add = 8; break; - case biSavannaPlateauM: Add = 12; break; - case biMesaBryce: Add = 4; break; - case biMesaPlateauFM: Add = 12; break; - case biMesaPlateauM: Add = 12; break; + case biOcean: return 2; + case biPlains: return 1; + case biDesert: return 0; + case biExtremeHills: return 3; + case biForest: return 30; + case biTaiga: return 30; + case biSwampland: return 8; + case biRiver: return 0; + case biNether: return 0; + case biEnd: return 0; + case biFrozenOcean: return 0; + case biFrozenRiver: return 0; + case biIcePlains: return 1; + case biIceMountains: return 1; + case biMushroomIsland: return 3; + case biMushroomShore: return 3; + case biBeach: return 0; + case biDesertHills: return 0; + case biForestHills: return 20; + case biTaigaHills: return 20; + case biExtremeHillsEdge: return 5; + case biJungle: return 120; + case biJungleHills: return 90; + case biJungleEdge: return 90; + case biDeepOcean: return 0; + case biStoneBeach: return 0; + case biColdBeach: return 0; + case biBirchForest: return 30; + case biBirchForestHills: return 20; + case biRoofedForest: return 50; + case biColdTaiga: return 20; + case biColdTaigaHills: return 15; + case biMegaTaiga: return 30; + case biMegaTaigaHills: return 25; + case biExtremeHillsPlus: return 3; + case biSavanna: return 8; + case biSavannaPlateau: return 12; + case biMesa: return 2; + case biMesaPlateauF: return 8; + case biMesaPlateau: return 8; + // Biome variants + case biSunflowerPlains: return 1; + case biDesertM: return 0; + case biExtremeHillsM: return 4; + case biFlowerForest: return 30; + case biTaigaM: return 30; + case biSwamplandM: return 8; + case biIcePlainsSpikes: return 1; + case biJungleM: return 120; + case biJungleEdgeM: return 90; + case biBirchForestM: return 30; + case biBirchForestHillsM: return 20; + case biRoofedForestM: return 40; + case biColdTaigaM: return 30; + case biMegaSpruceTaiga: return 30; + case biMegaSpruceTaigaHills: return 30; + case biExtremeHillsPlusM: return 4; + case biSavannaM: return 8; + case biSavannaPlateauM: return 12; + case biMesaBryce: return 4; + case biMesaPlateauFM: return 12; + case biMesaPlateauM: return 12; + // Non-biomes + case biInvalidBiome: + case biNumBiomes: + case biVariant: + case biNumVariantBiomes: + { + ASSERT(!"Invalid biome in cStructGenTrees::GetNumTrees"); + return 0; + } } - NumTrees += Add; + }; + + int NumTrees = 0; + for (auto Biome : a_Biomes) + { + NumTrees += BiomeTrees(Biome); } return NumTrees / 1024; } diff --git a/src/HTTP/CMakeLists.txt b/src/HTTP/CMakeLists.txt index 1e7b0672b..f15c35764 100644 --- a/src/HTTP/CMakeLists.txt +++ b/src/HTTP/CMakeLists.txt @@ -32,11 +32,6 @@ SET (HDRS UrlParser.h ) -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set_source_files_properties(HTTPServer.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors ") - set_source_files_properties(HTTPServerConnection.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum") -endif() - if(NOT MSVC) add_library(HTTPServer ${SRCS} ${HDRS}) endif() diff --git a/src/Items/CMakeLists.txt b/src/Items/CMakeLists.txt index 72858591a..ba0e4ca9f 100644 --- a/src/Items/CMakeLists.txt +++ b/src/Items/CMakeLists.txt @@ -58,10 +58,6 @@ SET (HDRS ItemAxe.h ) -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set_source_files_properties(ItemHandler.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum") -endif() - if(NOT MSVC) add_library(Items ${SRCS} ${HDRS}) endif() diff --git a/src/Items/ItemHandler.cpp b/src/Items/ItemHandler.cpp index e0c5bb56c..ae913f478 100644 --- a/src/Items/ItemHandler.cpp +++ b/src/Items/ItemHandler.cpp @@ -659,9 +659,9 @@ char cItemHandler::GetMaxStackSize(void) case E_ITEM_SUGAR_CANE: return 64; case E_ITEM_TIPPED_ARROW: return 64; case E_ITEM_WHEAT: return 64; + // By default items don't stack: + default: return 1; } - // By default items don't stack: - return 1; } diff --git a/src/Mobs/CMakeLists.txt b/src/Mobs/CMakeLists.txt index 55ae36e1e..08df07d71 100644 --- a/src/Mobs/CMakeLists.txt +++ b/src/Mobs/CMakeLists.txt @@ -81,10 +81,6 @@ SET (HDRS Zombie.h ZombiePigman.h) -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set_source_files_properties(Monster.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch -Wno-error=switch-enum") -endif() - if(NOT MSVC) add_library(Mobs ${SRCS} ${HDRS}) endif() diff --git a/src/Mobs/Monster.cpp b/src/Mobs/Monster.cpp index 944e8aa94..2ff1f74d8 100644 --- a/src/Mobs/Monster.cpp +++ b/src/Mobs/Monster.cpp @@ -1034,10 +1034,12 @@ cMonster::eFamily cMonster::FamilyFromType(eMonsterType a_Type) case mtZombie: return mfHostile; case mtZombiePigman: return mfHostile; - case mtInvalidType: break; + default: + { + ASSERT(!"Unhandled mob type"); + return mfUnhandled; + } } - ASSERT(!"Unhandled mob type"); - return mfUnhandled; } @@ -1053,10 +1055,12 @@ int cMonster::GetSpawnDelay(cMonster::eFamily a_MobFamily) case mfAmbient: return 40; case mfWater: return 400; case mfNoSpawn: return -1; - case mfUnhandled: break; + default: + { + ASSERT(!"Unhandled mob family"); + return -1; + } } - ASSERT(!"Unhandled mob family"); - return -1; } diff --git a/src/Protocol/CMakeLists.txt b/src/Protocol/CMakeLists.txt index f4f266963..ff1a98e6b 100644 --- a/src/Protocol/CMakeLists.txt +++ b/src/Protocol/CMakeLists.txt @@ -32,14 +32,6 @@ SET (HDRS ProtocolRecognizer.h ) -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set_source_files_properties(Protocol_1_9.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch") - set_source_files_properties(Protocol_1_8.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch") - set_source_files_properties(Protocol_1_10.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch") - set_source_files_properties(Protocol_1_11.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch") - set_source_files_properties(Protocol_1_12.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch") -endif() - if (NOT MSVC) add_library(Protocol ${SRCS} ${HDRS}) endif() diff --git a/src/Protocol/Protocol_1_10.cpp b/src/Protocol/Protocol_1_10.cpp index bb29c58ce..a16ad3143 100644 --- a/src/Protocol/Protocol_1_10.cpp +++ b/src/Protocol/Protocol_1_10.cpp @@ -707,6 +707,26 @@ void cProtocol_1_10_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_ break; } // case mtBat + case mtChicken: + { + auto & Chicken = reinterpret_cast<const cChicken &>(a_Mob); + + a_Pkt.WriteBEUInt8(AGEABLE_BABY); + a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); + a_Pkt.WriteBool(Chicken.IsBaby()); + break; + } // case mtChicken + + case mtCow: + { + auto & Cow = reinterpret_cast<const cCow &>(a_Mob); + + a_Pkt.WriteBEUInt8(AGEABLE_BABY); + a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); + a_Pkt.WriteBool(Cow.IsBaby()); + break; + } // case mtCow + case mtCreeper: { auto & Creeper = reinterpret_cast<const cCreeper &>(a_Mob); @@ -821,26 +841,6 @@ void cProtocol_1_10_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_ break; } // case mtOcelot - case mtCow: - { - auto & Cow = reinterpret_cast<const cCow &>(a_Mob); - - a_Pkt.WriteBEUInt8(AGEABLE_BABY); - a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); - a_Pkt.WriteBool(Cow.IsBaby()); - break; - } // case mtCow - - case mtChicken: - { - auto & Chicken = reinterpret_cast<const cChicken &>(a_Mob); - - a_Pkt.WriteBEUInt8(AGEABLE_BABY); - a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); - a_Pkt.WriteBool(Chicken.IsBaby()); - break; - } // case mtChicken - case mtPig: { auto & Pig = reinterpret_cast<const cPig &>(a_Mob); @@ -856,6 +856,19 @@ void cProtocol_1_10_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_ break; } // case mtPig + case mtRabbit: + { + auto & Rabbit = reinterpret_cast<const cRabbit &>(a_Mob); + a_Pkt.WriteBEUInt8(AGEABLE_BABY); + a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); + a_Pkt.WriteBool(Rabbit.IsBaby()); + + a_Pkt.WriteBEUInt8(RABBIT_TYPE); + a_Pkt.WriteBEUInt8(METADATA_TYPE_VARINT); + a_Pkt.WriteVarInt32(static_cast<UInt32>(Rabbit.GetRabbitType())); + break; + } // case mtRabbit + case mtSheep: { auto & Sheep = reinterpret_cast<const cSheep &>(a_Mob); @@ -876,19 +889,6 @@ void cProtocol_1_10_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_ break; } // case mtSheep - case mtRabbit: - { - auto & Rabbit = reinterpret_cast<const cRabbit &>(a_Mob); - a_Pkt.WriteBEUInt8(AGEABLE_BABY); - a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); - a_Pkt.WriteBool(Rabbit.IsBaby()); - - a_Pkt.WriteBEUInt8(RABBIT_TYPE); - a_Pkt.WriteBEUInt8(METADATA_TYPE_VARINT); - a_Pkt.WriteVarInt32(static_cast<UInt32>(Rabbit.GetRabbitType())); - break; - } // case mtRabbit - case mtSkeleton: { auto & Skeleton = reinterpret_cast<const cSkeleton &>(a_Mob); @@ -1003,5 +1003,7 @@ void cProtocol_1_10_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_ a_Pkt.WriteBool(ZombiePigman.IsBaby()); break; } // case mtZombiePigman + + default: break; } // switch (a_Mob.GetType()) } diff --git a/src/Protocol/Protocol_1_11.cpp b/src/Protocol/Protocol_1_11.cpp index ba7742493..c0c8815e8 100644 --- a/src/Protocol/Protocol_1_11.cpp +++ b/src/Protocol/Protocol_1_11.cpp @@ -841,6 +841,26 @@ void cProtocol_1_11_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_ break; } // case mtBat + case mtChicken: + { + auto & Chicken = reinterpret_cast<const cChicken &>(a_Mob); + + a_Pkt.WriteBEUInt8(AGEABLE_BABY); + a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); + a_Pkt.WriteBool(Chicken.IsBaby()); + break; + } // case mtChicken + + case mtCow: + { + auto & Cow = reinterpret_cast<const cCow &>(a_Mob); + + a_Pkt.WriteBEUInt8(AGEABLE_BABY); + a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); + a_Pkt.WriteBool(Cow.IsBaby()); + break; + } // case mtCow + case mtCreeper: { auto & Creeper = reinterpret_cast<const cCreeper &>(a_Mob); @@ -978,26 +998,6 @@ void cProtocol_1_11_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_ break; } // case mtOcelot - case mtCow: - { - auto & Cow = reinterpret_cast<const cCow &>(a_Mob); - - a_Pkt.WriteBEUInt8(AGEABLE_BABY); - a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); - a_Pkt.WriteBool(Cow.IsBaby()); - break; - } // case mtCow - - case mtChicken: - { - auto & Chicken = reinterpret_cast<const cChicken &>(a_Mob); - - a_Pkt.WriteBEUInt8(AGEABLE_BABY); - a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); - a_Pkt.WriteBool(Chicken.IsBaby()); - break; - } // case mtChicken - case mtPig: { auto & Pig = reinterpret_cast<const cPig &>(a_Mob); @@ -1014,6 +1014,19 @@ void cProtocol_1_11_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_ break; } // case mtPig + case mtRabbit: + { + auto & Rabbit = reinterpret_cast<const cRabbit &>(a_Mob); + a_Pkt.WriteBEUInt8(AGEABLE_BABY); + a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); + a_Pkt.WriteBool(Rabbit.IsBaby()); + + a_Pkt.WriteBEUInt8(RABBIT_TYPE); + a_Pkt.WriteBEUInt8(METADATA_TYPE_VARINT); + a_Pkt.WriteVarInt32(static_cast<UInt32>(Rabbit.GetRabbitType())); + break; + } // case mtRabbit + case mtSheep: { auto & Sheep = reinterpret_cast<const cSheep &>(a_Mob); @@ -1034,19 +1047,6 @@ void cProtocol_1_11_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_ break; } // case mtSheep - case mtRabbit: - { - auto & Rabbit = reinterpret_cast<const cRabbit &>(a_Mob); - a_Pkt.WriteBEUInt8(AGEABLE_BABY); - a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); - a_Pkt.WriteBool(Rabbit.IsBaby()); - - a_Pkt.WriteBEUInt8(RABBIT_TYPE); - a_Pkt.WriteBEUInt8(METADATA_TYPE_VARINT); - a_Pkt.WriteVarInt32(static_cast<UInt32>(Rabbit.GetRabbitType())); - break; - } // case mtRabbit - case mtSkeleton: { // XXX Skeletons are separate entities; all skeletons are currently treated as regular ones @@ -1165,6 +1165,8 @@ void cProtocol_1_11_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_ a_Pkt.WriteBool(ZombiePigman.IsBaby()); break; } // case mtZombiePigman + + default: break; } // switch (a_Mob.GetType()) } diff --git a/src/Protocol/Protocol_1_12.cpp b/src/Protocol/Protocol_1_12.cpp index 166078aef..627131576 100644 --- a/src/Protocol/Protocol_1_12.cpp +++ b/src/Protocol/Protocol_1_12.cpp @@ -654,6 +654,26 @@ void cProtocol_1_12::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_Mo break; } // case mtBat + case mtChicken: + { + auto & Chicken = reinterpret_cast<const cChicken &>(a_Mob); + + a_Pkt.WriteBEUInt8(AGEABLE_BABY); + a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); + a_Pkt.WriteBool(Chicken.IsBaby()); + break; + } // case mtChicken + + case mtCow: + { + auto & Cow = reinterpret_cast<const cCow &>(a_Mob); + + a_Pkt.WriteBEUInt8(AGEABLE_BABY); + a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); + a_Pkt.WriteBool(Cow.IsBaby()); + break; + } // case mtCow + case mtCreeper: { auto & Creeper = reinterpret_cast<const cCreeper &>(a_Mob); @@ -791,26 +811,6 @@ void cProtocol_1_12::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_Mo break; } // case mtOcelot - case mtCow: - { - auto & Cow = reinterpret_cast<const cCow &>(a_Mob); - - a_Pkt.WriteBEUInt8(AGEABLE_BABY); - a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); - a_Pkt.WriteBool(Cow.IsBaby()); - break; - } // case mtCow - - case mtChicken: - { - auto & Chicken = reinterpret_cast<const cChicken &>(a_Mob); - - a_Pkt.WriteBEUInt8(AGEABLE_BABY); - a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); - a_Pkt.WriteBool(Chicken.IsBaby()); - break; - } // case mtChicken - case mtPig: { auto & Pig = reinterpret_cast<const cPig &>(a_Mob); @@ -827,6 +827,19 @@ void cProtocol_1_12::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_Mo break; } // case mtPig + case mtRabbit: + { + auto & Rabbit = reinterpret_cast<const cRabbit &>(a_Mob); + a_Pkt.WriteBEUInt8(AGEABLE_BABY); + a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); + a_Pkt.WriteBool(Rabbit.IsBaby()); + + a_Pkt.WriteBEUInt8(RABBIT_TYPE); + a_Pkt.WriteBEUInt8(METADATA_TYPE_VARINT); + a_Pkt.WriteVarInt32(static_cast<UInt32>(Rabbit.GetRabbitType())); + break; + } // case mtRabbit + case mtSheep: { auto & Sheep = reinterpret_cast<const cSheep &>(a_Mob); @@ -847,19 +860,6 @@ void cProtocol_1_12::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_Mo break; } // case mtSheep - case mtRabbit: - { - auto & Rabbit = reinterpret_cast<const cRabbit &>(a_Mob); - a_Pkt.WriteBEUInt8(AGEABLE_BABY); - a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); - a_Pkt.WriteBool(Rabbit.IsBaby()); - - a_Pkt.WriteBEUInt8(RABBIT_TYPE); - a_Pkt.WriteBEUInt8(METADATA_TYPE_VARINT); - a_Pkt.WriteVarInt32(static_cast<UInt32>(Rabbit.GetRabbitType())); - break; - } // case mtRabbit - case mtSkeleton: { // XXX Skeletons are separate entities; all skeletons are currently treated as regular ones @@ -978,6 +978,38 @@ void cProtocol_1_12::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_Mo a_Pkt.WriteBool(ZombiePigman.IsBaby()); break; } // case mtZombiePigman + + case mtBlaze: + case mtEnderDragon: + case mtGuardian: + case mtIronGolem: + case mtSnowGolem: + case mtSpider: + { + // TODO: Mobs with extra fields that aren't implemented + break; + } + + case mtMooshroom: + case mtCaveSpider: + { + // Not mentioned on http://wiki.vg/Entities + break; + } + + case mtGiant: + case mtSilverfish: + case mtSquid: + { + // Mobs with no extra fields + break; + } + + case mtInvalidType: + { + ASSERT(!"cProtocol_1_12::WriteMobMetadata: Recieved mob of invalid type"); + break; + } } // switch (a_Mob.GetType()) } diff --git a/src/Protocol/Protocol_1_8.cpp b/src/Protocol/Protocol_1_8.cpp index b6e5b5a38..c384f85b9 100644 --- a/src/Protocol/Protocol_1_8.cpp +++ b/src/Protocol/Protocol_1_8.cpp @@ -3414,6 +3414,22 @@ void cProtocol_1_8_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_M break; } // case mtBat + case mtChicken: + { + auto & Chicken = reinterpret_cast<const cChicken &>(a_Mob); + a_Pkt.WriteBEUInt8(0x0c); + a_Pkt.WriteBEInt8(Chicken.IsBaby() ? -1 : (Chicken.IsInLoveCooldown() ? 1 : 0)); + break; + } // case mtChicken + + case mtCow: + { + auto & Cow = reinterpret_cast<const cCow &>(a_Mob); + a_Pkt.WriteBEUInt8(0x0c); + a_Pkt.WriteBEInt8(Cow.IsBaby() ? -1 : (Cow.IsInLoveCooldown() ? 1 : 0)); + break; + } // case mtCow + case mtCreeper: { auto & Creeper = reinterpret_cast<const cCreeper &>(a_Mob); @@ -3504,22 +3520,6 @@ void cProtocol_1_8_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_M break; } // case mtOcelot - case mtCow: - { - auto & Cow = reinterpret_cast<const cCow &>(a_Mob); - a_Pkt.WriteBEUInt8(0x0c); - a_Pkt.WriteBEInt8(Cow.IsBaby() ? -1 : (Cow.IsInLoveCooldown() ? 1 : 0)); - break; - } // case mtCow - - case mtChicken: - { - auto & Chicken = reinterpret_cast<const cChicken &>(a_Mob); - a_Pkt.WriteBEUInt8(0x0c); - a_Pkt.WriteBEInt8(Chicken.IsBaby() ? -1 : (Chicken.IsInLoveCooldown() ? 1 : 0)); - break; - } // case mtChicken - case mtPig: { auto & Pig = reinterpret_cast<const cPig &>(a_Mob); @@ -3650,6 +3650,8 @@ void cProtocol_1_8_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_M a_Pkt.WriteBEInt8(ZombiePigman.IsBaby() ? 1 : -1); break; } // case mtZombiePigman + + default: break; } // switch (a_Mob.GetType()) } diff --git a/src/Protocol/Protocol_1_9.cpp b/src/Protocol/Protocol_1_9.cpp index 90eedf91e..fcfc6674a 100644 --- a/src/Protocol/Protocol_1_9.cpp +++ b/src/Protocol/Protocol_1_9.cpp @@ -3434,6 +3434,7 @@ void cProtocol_1_9_0::WriteItem(cPacketizer & a_Pkt, const cItem & a_Item) case cEntityEffect::effInstantDamage: PotionID = "harming"; break; case cEntityEffect::effWaterBreathing: PotionID = "water_breathing"; break; case cEntityEffect::effInvisibility: PotionID = "invisibility"; break; + default: ASSERT(!"Unknown potion effect"); break; } if (cEntityEffect::GetPotionEffectIntensity(a_Item.m_ItemDamage) == 1) { @@ -3835,6 +3836,26 @@ void cProtocol_1_9_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_M break; } // case mtBat + case mtChicken: + { + auto & Chicken = reinterpret_cast<const cChicken &>(a_Mob); + + a_Pkt.WriteBEUInt8(11); // Index 11: Is baby + a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); + a_Pkt.WriteBool(Chicken.IsBaby()); + break; + } // case mtChicken + + case mtCow: + { + auto & Cow = reinterpret_cast<const cCow &>(a_Mob); + + a_Pkt.WriteBEUInt8(11); // Index 11: Is baby + a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); + a_Pkt.WriteBool(Cow.IsBaby()); + break; + } // case mtCow + case mtCreeper: { auto & Creeper = reinterpret_cast<const cCreeper &>(a_Mob); @@ -3949,26 +3970,6 @@ void cProtocol_1_9_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_M break; } // case mtOcelot - case mtCow: - { - auto & Cow = reinterpret_cast<const cCow &>(a_Mob); - - a_Pkt.WriteBEUInt8(11); // Index 11: Is baby - a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); - a_Pkt.WriteBool(Cow.IsBaby()); - break; - } // case mtCow - - case mtChicken: - { - auto & Chicken = reinterpret_cast<const cChicken &>(a_Mob); - - a_Pkt.WriteBEUInt8(11); // Index 11: Is baby - a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); - a_Pkt.WriteBool(Chicken.IsBaby()); - break; - } // case mtChicken - case mtPig: { auto & Pig = reinterpret_cast<const cPig &>(a_Mob); @@ -3984,6 +3985,19 @@ void cProtocol_1_9_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_M break; } // case mtPig + case mtRabbit: + { + auto & Rabbit = reinterpret_cast<const cRabbit &>(a_Mob); + a_Pkt.WriteBEUInt8(11); // Index 11: Is baby + a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); + a_Pkt.WriteBool(Rabbit.IsBaby()); + + a_Pkt.WriteBEUInt8(12); // Index 12: Type + a_Pkt.WriteBEUInt8(METADATA_TYPE_VARINT); + a_Pkt.WriteVarInt32(static_cast<UInt32>(Rabbit.GetRabbitType())); + break; + } // case mtRabbit + case mtSheep: { auto & Sheep = reinterpret_cast<const cSheep &>(a_Mob); @@ -4004,19 +4018,6 @@ void cProtocol_1_9_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_M break; } // case mtSheep - case mtRabbit: - { - auto & Rabbit = reinterpret_cast<const cRabbit &>(a_Mob); - a_Pkt.WriteBEUInt8(11); // Index 11: Is baby - a_Pkt.WriteBEUInt8(METADATA_TYPE_BOOL); - a_Pkt.WriteBool(Rabbit.IsBaby()); - - a_Pkt.WriteBEUInt8(12); // Index 12: Type - a_Pkt.WriteBEUInt8(METADATA_TYPE_VARINT); - a_Pkt.WriteVarInt32(static_cast<UInt32>(Rabbit.GetRabbitType())); - break; - } // case mtRabbit - case mtSkeleton: { auto & Skeleton = reinterpret_cast<const cSkeleton &>(a_Mob); @@ -4131,6 +4132,8 @@ void cProtocol_1_9_0::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_M a_Pkt.WriteBool(ZombiePigman.IsBaby()); break; } // case mtZombiePigman + + default: break; } // switch (a_Mob.GetType()) } diff --git a/src/UI/CMakeLists.txt b/src/UI/CMakeLists.txt index d71e08ade..54236a929 100644 --- a/src/UI/CMakeLists.txt +++ b/src/UI/CMakeLists.txt @@ -34,11 +34,6 @@ SET (HDRS MinecartWithChestWindow.h WindowOwner.h) -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set_source_files_properties(SlotArea.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum ") - set_source_files_properties(Window.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum ") -endif() - if(NOT MSVC) add_library(UI ${SRCS} ${HDRS}) endif() diff --git a/src/UI/SlotArea.cpp b/src/UI/SlotArea.cpp index 94fd958d5..865e9cb44 100644 --- a/src/UI/SlotArea.cpp +++ b/src/UI/SlotArea.cpp @@ -1235,8 +1235,11 @@ bool cSlotAreaBeacon::IsPlaceableItem(short a_ItemType) { return true; } + default: + { + return false; + } } - return false; } @@ -2406,8 +2409,8 @@ bool cSlotAreaArmor::CanPlaceArmorInSlot(int a_SlotNum, const cItem & a_Item) case 1: return ItemCategory::IsChestPlate(a_Item.m_ItemType); case 2: return ItemCategory::IsLeggings(a_Item.m_ItemType); case 3: return ItemCategory::IsBoots(a_Item.m_ItemType); + default: return false; } - return false; } diff --git a/src/WorldStorage/CMakeLists.txt b/src/WorldStorage/CMakeLists.txt index c351420f4..d9e066b32 100644 --- a/src/WorldStorage/CMakeLists.txt +++ b/src/WorldStorage/CMakeLists.txt @@ -28,13 +28,6 @@ SET (HDRS WorldStorage.h ) -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set_source_files_properties(FireworksSerializer.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum ") - set_source_files_properties(NBTChunkSerializer.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch-enum ") - set_source_files_properties(SchematicFileSerializer.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=global-constructors") - set_source_files_properties(WSSAnvil.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=switch -Wno-error=switch-enum ") -endif() - if(NOT MSVC) add_library(WorldStorage ${SRCS} ${HDRS}) diff --git a/src/WorldStorage/NBTChunkSerializer.cpp b/src/WorldStorage/NBTChunkSerializer.cpp index 1e8543648..12f767abf 100644 --- a/src/WorldStorage/NBTChunkSerializer.cpp +++ b/src/WorldStorage/NBTChunkSerializer.cpp @@ -643,6 +643,35 @@ void cNBTChunkSerializer::AddMonsterEntity(cMonster * a_Monster) m_Writer.AddInt("Size", reinterpret_cast<const cMagmaCube *>(a_Monster)->GetSize()); break; } + case mtOcelot: + { + const auto *Ocelot = reinterpret_cast<const cOcelot *>(a_Monster); + if (!Ocelot->GetOwnerName().empty()) + { + m_Writer.AddString("Owner", Ocelot->GetOwnerName()); + } + if (!Ocelot->GetOwnerUUID().IsNil()) + { + m_Writer.AddString("OwnerUUID", Ocelot->GetOwnerUUID().ToShortString()); + } + m_Writer.AddByte("Sitting", Ocelot->IsSitting() ? 1 : 0); + m_Writer.AddInt("CatType", Ocelot->GetOcelotType()); + m_Writer.AddInt("Age", Ocelot->GetAge()); + break; + } + case mtPig: + { + m_Writer.AddInt("Age", reinterpret_cast<const cPig *>(a_Monster)->GetAge()); + break; + } + case mtRabbit: + { + const cRabbit * Rabbit = reinterpret_cast<const cRabbit *>(a_Monster); + m_Writer.AddInt("RabbitType", static_cast<Int32>(Rabbit->GetRabbitType())); + m_Writer.AddInt("MoreCarrotTicks", Rabbit->GetMoreCarrotTicks()); + m_Writer.AddInt("Age", Rabbit->GetAge()); + break; + } case mtSheep: { const cSheep *Sheep = reinterpret_cast<const cSheep *>(a_Monster); @@ -703,36 +732,6 @@ void cNBTChunkSerializer::AddMonsterEntity(cMonster * a_Monster) m_Writer.AddInt("Age", reinterpret_cast<const cZombiePigman *>(a_Monster)->GetAge()); break; } - case mtOcelot: - { - const auto *Ocelot = reinterpret_cast<const cOcelot *>(a_Monster); - if (!Ocelot->GetOwnerName().empty()) - { - m_Writer.AddString("Owner", Ocelot->GetOwnerName()); - } - if (!Ocelot->GetOwnerUUID().IsNil()) - { - m_Writer.AddString("OwnerUUID", Ocelot->GetOwnerUUID().ToShortString()); - } - m_Writer.AddByte("Sitting", Ocelot->IsSitting() ? 1 : 0); - m_Writer.AddInt ("CatType", Ocelot->GetOcelotType()); - m_Writer.AddInt ("Age", Ocelot->GetAge()); - break; - } - case mtPig: - { - m_Writer.AddInt("Age", reinterpret_cast<const cPig *>(a_Monster)->GetAge()); - break; - } - case mtRabbit: - { - const cRabbit * Rabbit = reinterpret_cast<const cRabbit *>(a_Monster); - m_Writer.AddInt("RabbitType", static_cast<Int32>(Rabbit->GetRabbitType())); - m_Writer.AddInt("MoreCarrotTicks", Rabbit->GetMoreCarrotTicks()); - m_Writer.AddInt("Age", Rabbit->GetAge()); - break; - } - case mtInvalidType: case mtBlaze: case mtCaveSpider: case mtChicken: @@ -752,6 +751,11 @@ void cNBTChunkSerializer::AddMonsterEntity(cMonster * a_Monster) // Other mobs have no special tags. break; } + case mtInvalidType: + { + ASSERT(!"cNBTChunkSerializer::AddMonsterEntity: Recieved mob of invalid type"); + break; + } } m_Writer.EndCompound(); } diff --git a/src/WorldStorage/WSSAnvil.cpp b/src/WorldStorage/WSSAnvil.cpp index 158f7a819..b47d3eddd 100755 --- a/src/WorldStorage/WSSAnvil.cpp +++ b/src/WorldStorage/WSSAnvil.cpp @@ -716,22 +716,25 @@ cBlockEntity * cWSSAnvil::LoadBlockEntityFromNBT(const cParsedNBT & a_NBT, int a // Blocktypes that have block entities but don't load their contents from disk: case E_BLOCK_ENDER_CHEST: return nullptr; - } - // All the other blocktypes should have no entities assigned to them. Report an error: - // Get the "id" tag: - int TagID = a_NBT.FindChildByName(a_Tag, "id"); - AString TypeName("<unknown>"); - if (TagID >= 0) - { - TypeName.assign(a_NBT.GetData(TagID), static_cast<size_t>(a_NBT.GetDataLength(TagID))); + default: + { + // All the other blocktypes should have no entities assigned to them. Report an error: + // Get the "id" tag: + int TagID = a_NBT.FindChildByName(a_Tag, "id"); + AString TypeName("<unknown>"); + if (TagID >= 0) + { + TypeName.assign(a_NBT.GetData(TagID), static_cast<size_t>(a_NBT.GetDataLength(TagID))); + } + LOGINFO("WorldLoader(%s): Block entity mismatch: block type %s (%d), type \"%s\", at {%d, %d, %d}; the entity will be lost.", + m_World->GetName().c_str(), + ItemTypeToString(a_BlockType).c_str(), a_BlockType, TypeName.c_str(), + a_BlockX, a_BlockY, a_BlockZ + ); + return nullptr; + } } - LOGINFO("WorldLoader(%s): Block entity mismatch: block type %s (%d), type \"%s\", at {%d, %d, %d}; the entity will be lost.", - m_World->GetName().c_str(), - ItemTypeToString(a_BlockType).c_str(), a_BlockType, TypeName.c_str(), - a_BlockX, a_BlockY, a_BlockZ - ); - return nullptr; } @@ -1645,13 +1648,15 @@ void cWSSAnvil::LoadOldMinecartFromNBT(cEntityList & a_Entities, const cParsedNB { return; } - switch (a_NBT.GetInt(TypeTag)) + int MinecartType = a_NBT.GetInt(TypeTag); + switch (MinecartType) { case 0: LoadMinecartRFromNBT(a_Entities, a_NBT, a_TagIdx); break; // Rideable minecart case 1: LoadMinecartCFromNBT(a_Entities, a_NBT, a_TagIdx); break; // Minecart with chest case 2: LoadMinecartFFromNBT(a_Entities, a_NBT, a_TagIdx); break; // Minecart with furnace case 3: LoadMinecartTFromNBT(a_Entities, a_NBT, a_TagIdx); break; // Minecart with TNT case 4: LoadMinecartHFromNBT(a_Entities, a_NBT, a_TagIdx); break; // Minecart with Hopper + default: LOGWARNING("cWSSAnvil::LoadOldMinecartFromNBT: Unhandled minecart type (%d)", MinecartType); break; } } |