aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/SignItem.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/SignItem.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.World/SignItem.cpp')
-rw-r--r--Minecraft.World/SignItem.cpp59
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;
+}