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/SignItem.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.World/SignItem.cpp')
| -rw-r--r-- | Minecraft.World/SignItem.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Minecraft.World/SignItem.cpp b/Minecraft.World/SignItem.cpp new file mode 100644 index 00000000..02ccf83d --- /dev/null +++ b/Minecraft.World/SignItem.cpp @@ -0,0 +1,59 @@ +#include "stdafx.h" +#include "net.minecraft.world.entity.player.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.level.tile.h" +#include "net.minecraft.world.level.tile.entity.h" +#include "ItemInstance.h" +#include "SignItem.h" +#include "GenericStats.h" + +SignItem::SignItem(int id) : Item(id) +{ + // 4J-PB - Changed for TU9 + maxStackSize = 16; +} + +bool SignItem::useOn(shared_ptr<ItemInstance> instance, shared_ptr<Player> 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->mayBuild(x, y, z)) return false; + + if (!Tile::sign->mayPlace(level, x, y, z)) return false; + + 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); + } + else + { + level->setTileAndData(x, y, z, Tile::wallSign_Id, face); + } + + instance->count--; + shared_ptr<SignTileEntity> ste = dynamic_pointer_cast<SignTileEntity>( level->getTileEntity(x, y, z) ); + if (ste != NULL) 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; +} |
