From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.World/SignItem.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Minecraft.World/SignItem.cpp (limited to 'Minecraft.World/SignItem.cpp') 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 instance, 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->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 ste = dynamic_pointer_cast( 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; +} -- cgit v1.2.3