summaryrefslogtreecommitdiffstats
path: root/src/Blocks/BlockEnchantingTable.h
diff options
context:
space:
mode:
author12xx12 <12xx12100@gmail.com>2020-09-17 16:16:20 +0200
committerTiger Wang <ziwei.tiger@outlook.com>2020-09-20 02:40:20 +0200
commitf8de67aace4e65ff4c34a1f46f6d8b258b6839aa (patch)
tree51f60dd89e5abb7bcf14e11f087ef2d49c1fa096 /src/Blocks/BlockEnchantingTable.h
parentFixed missing case: in entity damaging crashin the server (#4899) (diff)
downloadcuberite-f8de67aace4e65ff4c34a1f46f6d8b258b6839aa.tar
cuberite-f8de67aace4e65ff4c34a1f46f6d8b258b6839aa.tar.gz
cuberite-f8de67aace4e65ff4c34a1f46f6d8b258b6839aa.tar.bz2
cuberite-f8de67aace4e65ff4c34a1f46f6d8b258b6839aa.tar.lz
cuberite-f8de67aace4e65ff4c34a1f46f6d8b258b6839aa.tar.xz
cuberite-f8de67aace4e65ff4c34a1f46f6d8b258b6839aa.tar.zst
cuberite-f8de67aace4e65ff4c34a1f46f6d8b258b6839aa.zip
Diffstat (limited to 'src/Blocks/BlockEnchantingTable.h')
-rw-r--r--src/Blocks/BlockEnchantingTable.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/Blocks/BlockEnchantingTable.h b/src/Blocks/BlockEnchantingTable.h
new file mode 100644
index 000000000..ddd25182b
--- /dev/null
+++ b/src/Blocks/BlockEnchantingTable.h
@@ -0,0 +1,84 @@
+
+#pragma once
+
+#include "BlockHandler.h"
+#include "../Item.h"
+#include "../UI/EnchantingWindow.h"
+#include "../BlockEntities/EnchantingTableEntity.h"
+#include "../Entities/Player.h"
+
+
+
+
+
+class cBlockEnchantingTableHandler :
+ public cBlockHandler
+{
+ using Super = cBlockHandler;
+
+public:
+
+ using Super::Super;
+
+private:
+
+ virtual bool OnUse(
+ cChunkInterface & a_ChunkInterface,
+ cWorldInterface & a_WorldInterface,
+ cPlayer & a_Player,
+ const Vector3i a_BlockPos,
+ eBlockFace a_BlockFace,
+ const Vector3i a_CursorPos
+ ) override
+ {
+ AString WindowName = "Enchant";
+ a_WorldInterface.DoWithBlockEntityAt(a_BlockPos.x, a_BlockPos.y, a_BlockPos.z, [&WindowName](cBlockEntity & a_Entity)
+ {
+ if (a_Entity.GetBlockType() != E_BLOCK_ENCHANTMENT_TABLE)
+ {
+ return false;
+ }
+
+ const auto & EnchantingTable = static_cast<cEnchantingTableEntity &>(a_Entity);
+ const auto & CustomName = EnchantingTable.GetCustomName();
+ if (!CustomName.empty())
+ {
+ WindowName = CustomName;
+ }
+
+ return true;
+ });
+
+ cWindow * Window = new cEnchantingWindow(a_BlockPos, std::move(WindowName));
+ a_Player.OpenWindow(*Window);
+
+ return true;
+ }
+
+
+ virtual bool IsUseable(void) override
+ {
+ return true;
+ }
+
+
+ virtual cItems ConvertToPickups(NIBBLETYPE a_BlockMeta, cBlockEntity * a_BlockEntity, const cEntity * a_Digger, const cItem * a_Tool) override
+ {
+ if ((a_BlockEntity == nullptr) || (a_BlockEntity->GetBlockType() != E_BLOCK_ENCHANTMENT_TABLE))
+ {
+ return {};
+ }
+
+ auto & EnchantingTable = static_cast<const cEnchantingTableEntity &>(*a_BlockEntity);
+ cItem Item = cItem(E_BLOCK_ENCHANTMENT_TABLE);
+ Item.m_CustomName = EnchantingTable.GetCustomName();
+ return Item;
+ }
+
+
+ virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) override
+ {
+ UNUSED(a_Meta);
+ return 29;
+ }
+};