diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/StoneMonsterTile.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.World/StoneMonsterTile.cpp')
| -rw-r--r-- | Minecraft.World/StoneMonsterTile.cpp | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/Minecraft.World/StoneMonsterTile.cpp b/Minecraft.World/StoneMonsterTile.cpp new file mode 100644 index 00000000..d3d6a846 --- /dev/null +++ b/Minecraft.World/StoneMonsterTile.cpp @@ -0,0 +1,114 @@ +#include "stdafx.h" +#include "net.minecraft.world.entity.monster.h" +#include "net.minecraft.world.level.h" +#include "StoneMonsterTile.h" + +const unsigned int StoneMonsterTile::STONE_MONSTER_NAMES[STONE_MONSTER_NAMES_LENGTH] = { IDS_TILE_STONE_SILVERFISH, + IDS_TILE_STONE_SILVERFISH_COBBLESTONE, + IDS_TILE_STONE_SILVERFISH_STONE_BRICK, + }; + +StoneMonsterTile::StoneMonsterTile(int id) : Tile(id, Material::clay) +{ + setDestroyTime(0); +} + +Icon *StoneMonsterTile::getTexture(int face, int data) +{ + if (data == HOST_COBBLE) + { + return Tile::stoneBrick->getTexture(face); + } + if (data == HOST_STONEBRICK) + { + return Tile::stoneBrickSmooth->getTexture(face); + } + return Tile::rock->getTexture(face); +} + +void StoneMonsterTile::registerIcons(IconRegister *iconRegister) +{ + // None +} + +void StoneMonsterTile::destroy(Level *level, int x, int y, int z, int data) +{ + if (!level->isClientSide) + { + // 4J - limit total amount of monsters. The normal map spawning limits these to 50, and mobspawning tiles limit to 60, so give ourselves a bit of headroom here to also be able to make silverfish + if(level->countInstanceOf( eTYPE_MONSTER, false) < 70 ) + { + // Also limit the amount of silverfish specifically + if(level->countInstanceOf( eTYPE_SILVERFISH, true) < 15 ) + { + shared_ptr<Silverfish> silverfish = shared_ptr<Silverfish>(new Silverfish(level)); + silverfish->moveTo(x + .5, y, z + .5, 0, 0); + level->addEntity(silverfish); + + silverfish->spawnAnim(); + } + } + } + Tile::destroy(level, x, y, z, data); +} + +int StoneMonsterTile::getResourceCount(Random *random) +{ + return 0; +} + +bool StoneMonsterTile::isCompatibleHostBlock(int block) +{ + return block == Tile::rock_Id || block == Tile::stoneBrick_Id || block == Tile::stoneBrickSmooth_Id; +} + +int StoneMonsterTile::getDataForHostBlock(int block) +{ + if (block == Tile::stoneBrick_Id) + { + return HOST_COBBLE; + } + if (block == Tile::stoneBrickSmooth_Id) + { + return HOST_STONEBRICK; + } + return HOST_ROCK; +} + +Tile *StoneMonsterTile::getHostBlockForData(int data) +{ + switch (data) + { + case HOST_COBBLE: + return Tile::stoneBrick; + case HOST_STONEBRICK: + return Tile::stoneBrickSmooth; + default: + return Tile::rock; + } +} + +shared_ptr<ItemInstance> StoneMonsterTile::getSilkTouchItemInstance(int data) +{ + Tile *tile = Tile::rock; + if (data == HOST_COBBLE) + { + tile = Tile::stoneBrick; + } + if (data == HOST_STONEBRICK) + { + tile = Tile::stoneBrickSmooth; + } + return shared_ptr<ItemInstance>(new ItemInstance(tile)); +} + +int StoneMonsterTile::cloneTileData(Level *level, int x, int y, int z) +{ + return level->getData(x, y, z); +} + +unsigned int StoneMonsterTile::getDescriptionId(int iData /*= -1*/) +{ + if(iData < 0 ) iData = 0; + return StoneMonsterTile::STONE_MONSTER_NAMES[iData]; +}
\ No newline at end of file |
