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/WoolCarpetTile.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.World/WoolCarpetTile.cpp')
| -rw-r--r-- | Minecraft.World/WoolCarpetTile.cpp | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/Minecraft.World/WoolCarpetTile.cpp b/Minecraft.World/WoolCarpetTile.cpp new file mode 100644 index 00000000..16a3d0aa --- /dev/null +++ b/Minecraft.World/WoolCarpetTile.cpp @@ -0,0 +1,111 @@ +#include "stdafx.h" +#include "net.minecraft.world.phys.h" +#include "net.minecraft.world.level.h" +#include "SharedConstants.h" +#include "WoolCarpetTile.h" + +WoolCarpetTile::WoolCarpetTile(int id) : Tile(id, Material::clothDecoration, isSolidRender() ) +{ + setShape(0, 0, 0, 1, 1 / 16.0f, 1); + setTicking(true); + updateShape(0); +} + +Icon *WoolCarpetTile::getTexture(int face, int data) +{ + return Tile::cloth->getTexture(face, data); +} + +AABB *WoolCarpetTile::getAABB(Level *level, int x, int y, int z) +{ + int height = 0; + float offset = 1.0f / SharedConstants::WORLD_RESOLUTION; + ThreadStorage *tls = (ThreadStorage *)TlsGetValue(Tile::tlsIdxShape); + // 4J Stu - Added this so that the TLS shape is correct for this tile + if(tls->tileId != this->id) updateDefaultShape(); + return AABB::newTemp(x + tls->xx0, y + tls->yy0, z + tls->zz0, x + tls->xx1, y + (height * offset), z + tls->zz1); +} + +bool WoolCarpetTile::blocksLight() +{ + return false; +} + +bool WoolCarpetTile::isSolidRender(bool isServerLevel) +{ + return false; +} + +bool WoolCarpetTile::isCubeShaped() +{ + return false; +} + +void WoolCarpetTile::updateDefaultShape() +{ + updateShape(0); +} + +void WoolCarpetTile::updateShape(LevelSource *level, int x, int y, int z, int forceData, shared_ptr<TileEntity> forceEntity) +{ + updateShape(level->getData(x, y, z)); +} + +void WoolCarpetTile::updateShape(int data) +{ + int height = 0; + float o = 1 * (1 + height) / 16.0f; + setShape(0, 0, 0, 1, o, 1); +} + +bool WoolCarpetTile::mayPlace(Level *level, int x, int y, int z) +{ + return Tile::mayPlace(level, x, y, z) && canSurvive(level, x, y, z); +} + +void WoolCarpetTile::neighborChanged(Level *level, int x, int y, int z, int type) +{ + checkCanSurvive(level, x, y, z); +} + +bool WoolCarpetTile::checkCanSurvive(Level *level, int x, int y, int z) +{ + if (!canSurvive(level, x, y, z)) + { + spawnResources(level, x, y, z, level->getData(x, y, z), 0); + level->setTile(x, y, z, 0); + return false; + } + return true; +} + +bool WoolCarpetTile::canSurvive(Level *level, int x, int y, int z) +{ + return !level->isEmptyTile(x, y - 1, z); +} + +bool WoolCarpetTile::shouldRenderFace(LevelSource *level, int x, int y, int z, int face) +{ + if (face == 1) return true; + return Tile::shouldRenderFace(level, x, y, z, face); +} + +int WoolCarpetTile::getSpawnResourcesAuxValue(int data) +{ + return data; +} + +int WoolCarpetTile::getTileDataForItemAuxValue(int auxValue) +{ + return (~auxValue & 0xf); +} + +int WoolCarpetTile::getItemAuxValueForTileData(int data) +{ + return (~data & 0xf); +} + +void WoolCarpetTile::registerIcons(IconRegister *iconRegister) +{ + // None, delegates to cloth tile +} |
