4jcraft/Minecraft.World/Blocks/IceTile.cpp
MatthewBeshay dfb0e3b03e refactor: replace NULL with nullptr across C++ codebase
Excludes vendored C libs (zlib, Miles, DirectXMath, boost, Iggy).
2026-03-30 16:25:52 +11:00

68 lines
2.4 KiB
C++

#include "../Platform/stdafx.h"
#include "../Headers/net.minecraft.world.level.h"
#include "../Headers/net.minecraft.world.level.dimension.h"
#include "../Headers/net.minecraft.world.item.enchantment.h"
#include "../Headers/net.minecraft.world.food.h"
#include "../Headers/net.minecraft.stats.h"
#include "IceTile.h"
IceTile::IceTile(int id)
: HalfTransparentTile(id, L"ice", Material::ice, false) {
friction = 0.98f;
setTicking(true);
}
int IceTile::getRenderLayer() { return 1; }
bool IceTile::shouldRenderFace(LevelSource* level, int x, int y, int z,
int face) {
return HalfTransparentTile::shouldRenderFace(level, x, y, z, 1 - face);
}
void IceTile::playerDestroy(Level* level, std::shared_ptr<Player> player, int x,
int y, int z, int data) {
player->awardStat(GenericStats::blocksMined(id),
GenericStats::param_blocksMined(id, data, 1));
player->causeFoodExhaustion(FoodConstants::EXHAUSTION_MINE);
if (isSilkTouchable() && EnchantmentHelper::hasSilkTouch(player)) {
std::shared_ptr<ItemInstance> item = getSilkTouchItemInstance(data);
if (item != nullptr) {
popResource(level, x, y, z, item);
}
} else {
if (level->dimension->ultraWarm) {
level->removeTile(x, y, z);
return;
}
int playerBonusLevel = EnchantmentHelper::getDiggingLootBonus(player);
spawnResources(level, x, y, z, data, playerBonusLevel);
Material* below = level->getMaterial(x, y - 1, z);
if (below->blocksMotion() || below->isLiquid()) {
level->setTileAndUpdate(x, y, z, Tile::water_Id);
}
}
}
int IceTile::getResourceCount(Random* random) { return 0; }
void IceTile::tick(Level* level, int x, int y, int z, Random* random) {
if (level->getBrightness(LightLayer::Block, x, y, z) >
11 - Tile::lightBlock[id]) {
if (level->dimension->ultraWarm) {
level->removeTile(x, y, z);
return;
}
this->spawnResources(level, x, y, z, level->getData(x, y, z), 0);
level->setTileAndUpdate(x, y, z, Tile::calmWater_Id);
}
}
bool IceTile::shouldTileTick(Level* level, int x, int y, int z) {
return level->getBrightness(LightLayer::Block, x, y, z) >
11 - Tile::lightBlock[id];
}
int IceTile::getPistonPushReaction() { return Material::PUSH_NORMAL; }