#include "SignItem.h" #include #include "minecraft/stats/GenericStats.h" #include "minecraft/util/Mth.h" #include "minecraft/world/entity/player/Player.h" #include "minecraft/world/item/Item.h" #include "minecraft/world/item/ItemInstance.h" #include "minecraft/world/level/Level.h" #include "minecraft/world/level/material/Material.h" #include "minecraft/world/level/tile/Tile.h" #include "minecraft/world/level/tile/entity/SignTileEntity.h" SignItem::SignItem(int id) : Item(id) { // 4J-PB - Changed for TU9 maxStackSize = 16; } bool SignItem::useOn(std::shared_ptr instance, std::shared_ptr player, Level* level, int x, int y, int z, int face, float clickX, float clickY, float clickZ, bool bTestUseOnOnly) { // 4J-PB - Adding a test only version to allow tooltips to be displayed if (face == 0) return false; if (!level->getMaterial(x, y, z)->isSolid()) return false; if (face == 1) y++; if (face == 2) z--; if (face == 3) z++; if (face == 4) x--; if (face == 5) x++; if (!player->mayUseItemAt(x, y, z, face, instance)) return false; if (!Tile::sign->mayPlace(level, x, y, z)) return false; if (level->isClientSide) { return true; } if (!bTestUseOnOnly) { if (face == 1) { int rot = Mth::floor(((player->yRot + 180) * 16) / 360 + 0.5) & 15; level->setTileAndData(x, y, z, Tile::sign_Id, rot, Tile::UPDATE_ALL); } else { level->setTileAndData(x, y, z, Tile::wallSign_Id, face, Tile::UPDATE_ALL); } instance->count--; std::shared_ptr ste = std::dynamic_pointer_cast( level->getTileEntity(x, y, z)); if (ste != nullptr) player->openTextEdit(ste); // 4J-JEV: Hook for durango 'BlockPlaced' event. player->awardStat(GenericStats::blocksPlaced( (face == 1) ? Tile::sign_Id : Tile::wallSign_Id), GenericStats::param_blocksPlaced( (face == 1) ? Tile::sign_Id : Tile::wallSign_Id, instance->getAuxValue(), 1)); } return true; }