mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-23 19:33:36 +00:00
49 lines
2 KiB
C++
49 lines
2 KiB
C++
#include "../Platform/stdafx.h"
|
|
#include "../Headers/net.minecraft.world.entity.player.h"
|
|
#include "../Headers/net.minecraft.world.level.tile.h"
|
|
#include "../Headers/net.minecraft.world.level.h"
|
|
#include "SnowItem.h"
|
|
|
|
SnowItem::SnowItem(int id, Tile* parentTile)
|
|
: AuxDataTileItem(id, parentTile) {}
|
|
|
|
bool SnowItem::useOn(std::shared_ptr<ItemInstance> instance,
|
|
std::shared_ptr<Player> player, Level* level, int x, int y,
|
|
int z, int face, float clickX, float clickY, float clickZ,
|
|
bool bTestUseOnOnly) {
|
|
if (instance->count == 0) return false;
|
|
if (!player->mayUseItemAt(x, y, z, face, instance)) return false;
|
|
|
|
int currentTile = level->getTile(x, y, z);
|
|
|
|
// Are we adding extra snow to an existing tile?
|
|
if (currentTile == Tile::topSnow_Id) {
|
|
Tile* snowTile = Tile::tiles[getTileId()];
|
|
int currentData = level->getData(x, y, z);
|
|
int currentHeight = currentData & TopSnowTile::HEIGHT_MASK;
|
|
|
|
if (currentHeight <= TopSnowTile::MAX_HEIGHT &&
|
|
level->isUnobstructed(snowTile->getAABB(level, x, y, z))) {
|
|
if (!bTestUseOnOnly) {
|
|
// Increase snow tile height
|
|
if (level->setData(
|
|
x, y, z,
|
|
(currentHeight + 1) |
|
|
(currentData & ~TopSnowTile::HEIGHT_MASK),
|
|
Tile::UPDATE_CLIENTS)) {
|
|
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f,
|
|
snowTile->soundType->getPlaceSound(),
|
|
(snowTile->soundType->getVolume() + 1) / 2,
|
|
snowTile->soundType->getPitch() * 0.8f);
|
|
instance->count--;
|
|
return true;
|
|
}
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return AuxDataTileItem::useOn(instance, player, level, x, y, z, face,
|
|
clickX, clickY, clickZ, bTestUseOnOnly);
|
|
} |