mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-25 11:13:37 +00:00
68 lines
2.4 KiB
C++
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 != NULL) {
|
|
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; }
|