diff options
author | 12xx12 <12xx12100@gmail.com> | 2020-09-17 16:16:20 +0200 |
---|---|---|
committer | Tiger Wang <ziwei.tiger@outlook.com> | 2020-09-20 02:40:20 +0200 |
commit | f8de67aace4e65ff4c34a1f46f6d8b258b6839aa (patch) | |
tree | 51f60dd89e5abb7bcf14e11f087ef2d49c1fa096 /src/Blocks/BlockEnchantingTable.h | |
parent | Fixed missing case: in entity damaging crashin the server (#4899) (diff) | |
download | cuberite-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.h | 84 |
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; + } +}; |