diff options
Diffstat (limited to 'src/Block.cpp')
-rw-r--r-- | src/Block.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/Block.cpp b/src/Block.cpp index 48c099d..b81a762 100644 --- a/src/Block.cpp +++ b/src/Block.cpp @@ -1,20 +1,25 @@ #include "Block.hpp" #include <map> +#include <vector> #include "Plugin.hpp" -std::map<BlockId, BlockInfo> staticBlockInfo; +static std::vector<BlockInfo> blocks; +static std::map<BlockId, size_t> staticBlockInfo; + +BlockInfo WTFBlock{ true, "", "" }; void RegisterStaticBlockInfo(BlockId blockId, BlockInfo blockInfo) { - staticBlockInfo[blockId] = blockInfo; + //NOTE: It can be made thread-safe using incrementer + staticBlockInfo[blockId] = blocks.size(); + blocks.push_back(blockInfo); } -BlockInfo GetBlockInfo(BlockId blockId, Vector blockPos) { +BlockInfo* GetBlockInfo(BlockId blockId, Vector blockPos) { auto it = staticBlockInfo.find(blockId); if (it != staticBlockInfo.end()) - return it->second; - if (blockPos == Vector()) - return BlockInfo{ true, "", "" }; - return PluginSystem::RequestBlockInfo(blockPos); + return &blocks.data()[it->second]; + else + return &WTFBlock; } |