diff options
Diffstat (limited to 'src/Blocks/BlockInfested.h')
-rw-r--r-- | src/Blocks/BlockInfested.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/Blocks/BlockInfested.h b/src/Blocks/BlockInfested.h new file mode 100644 index 000000000..d2b634dd0 --- /dev/null +++ b/src/Blocks/BlockInfested.h @@ -0,0 +1,88 @@ + +// BlockInfested.h + +#include "../Entities/Player.h" + +/* This Block Handler describes the blocks spawning silver fishes. Mojang calls them monster egg */ + +class cBlockInfestedHandler final: + public cBlockHandler +{ + using Super = cBlockHandler; + +public: + + using Super::Super; + + static void SpawnSilverfish(cWorldInterface & a_WorldInterface, Vector3i a_BlockPos) + { + auto Pos = Vector3f(a_BlockPos.x - 0.5f, a_BlockPos.y - 0.5f, a_BlockPos.z - 0.5f); + // TODO: only display animation if the difficulty allows mob spawns - Add when difficulty is implemented + // Spawn Silverfish + a_WorldInterface.SpawnMob(Pos.x, Pos.y, Pos.z, mtSilverfish, false); + // Play particle + a_WorldInterface.GetBroadcastManager().BroadcastParticleEffect("explode", Pos, Vector3f(), 0.1f, 50); + } + +private: + + virtual cItems ConvertToPickups(NIBBLETYPE a_BlockMeta, const cEntity * a_Digger, const cItem * a_Tool) const override + { + switch (a_BlockMeta) + { + case E_META_SILVERFISH_EGG_STONE: + { + if (ToolHasSilkTouch(a_Tool)) + { + return cItem(E_BLOCK_STONE); + } + else + { + return cItem(E_BLOCK_COBBLESTONE); + } + } + case E_META_SILVERFISH_EGG_COBBLESTONE: return cItem(E_BLOCK_COBBLESTONE); + case E_META_SILVERFISH_EGG_STONE_BRICK: return cItem(E_BLOCK_STONE_BRICKS); + case E_META_SILVERFISH_EGG_MOSSY_STONE_BRICK: return cItem(E_BLOCK_STONE_BRICKS, 1, E_META_STONE_BRICK_MOSSY); + case E_META_SILVERFISH_EGG_CRACKED_STONE_BRICK: return cItem(E_BLOCK_STONE_BRICKS, 1, E_META_STONE_BRICK_CRACKED); + case E_META_SILVERFISH_EGG_CHISELED_STONE_BRICK: return cItem(E_BLOCK_STONE_BRICKS, 1, E_META_STONE_BRICK_ORNAMENT); + } + return {}; + } + + + + + + virtual void OnBroken( + cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, + Vector3i a_BlockPos, + BLOCKTYPE a_OldBlockType, NIBBLETYPE a_OldBlockMeta, + const cEntity * a_Digger + ) const override + { + if (a_Digger != nullptr) + { + if (a_Digger->IsPlayer()) + { + const auto Player = static_cast<const cPlayer *>(a_Digger); + if (Player->IsGameModeCreative()) + { + return; + } + } + if (a_Digger->IsMob()) + { + return; + } + } + SpawnSilverfish(a_WorldInterface, a_BlockPos); + } + + + virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) const override + { + return 11; + } +} ; + |