From b789fc3d9bc235ffdba8a928fda4bb513147ca8b Mon Sep 17 00:00:00 2001 From: Quentin Bazin Date: Fri, 22 May 2020 04:54:34 +0200 Subject: [PATCH] [ScriptEngine] Code splitted into multiple files, improving compilation speed. --- source/common/core/Registry.cpp | 24 +++ source/common/core/Registry.hpp | 2 + source/common/inventory/Inventory.cpp | 9 ++ source/common/inventory/Inventory.hpp | 2 + source/common/inventory/Item.cpp | 10 ++ source/common/inventory/Item.hpp | 2 + source/common/inventory/ItemStack.cpp | 8 + source/common/inventory/ItemStack.hpp | 2 + source/common/world/Block.cpp | 13 ++ source/common/world/Block.hpp | 2 + source/common/world/BlockMetadata.cpp | 14 ++ source/common/world/BlockMetadata.hpp | 2 + source/common/world/Chunk.cpp | 14 ++ source/common/world/Chunk.hpp | 2 + source/common/world/Dimension.cpp | 7 + source/common/world/Dimension.hpp | 4 + source/common/world/Player.cpp | 17 ++ source/common/world/Player.hpp | 2 + source/common/world/World.cpp | 15 ++ source/common/world/World.hpp | 2 + source/server/lua/ScriptEngine.cpp | 147 ++---------------- source/server/lua/ServerModLoader.cpp | 7 + source/server/lua/ServerModLoader.hpp | 2 + .../server/network/ServerCommandHandler.cpp | 8 + .../server/network/ServerCommandHandler.hpp | 4 + source/server/scene/EntityWrapper.cpp | 39 +++++ source/server/scene/EntityWrapper.hpp | 2 + source/server/world/ServerBlock.cpp | 7 + source/server/world/ServerBlock.hpp | 2 + source/server/world/ServerPlayer.cpp | 8 + source/server/world/ServerPlayer.hpp | 2 + source/server/world/ServerWorld.cpp | 9 ++ source/server/world/ServerWorld.hpp | 2 + 33 files changed, 261 insertions(+), 131 deletions(-) create mode 100644 source/server/scene/EntityWrapper.cpp diff --git a/source/common/core/Registry.cpp b/source/common/core/Registry.cpp index 571aceb5b..9bd413d4a 100644 --- a/source/common/core/Registry.cpp +++ b/source/common/core/Registry.cpp @@ -284,3 +284,27 @@ void Registry::clear() { m_entityRegistry.clear(); } +// Please update 'docs/lua-api-cpp.md' if you change this +void Registry::initUsertype(sol::state &lua) { + lua.new_usertype("Registry", + "get_block", &Registry::getBlock, + "get_item", &Registry::getItem, + "get_sky", &Registry::getSky, + "get_tree", &Registry::getTree, + "get_biome", &Registry::getBiome, + "get_recipe", &Registry::getRecipe, + + "get_block_from_string", &Registry::getBlockFromStringID, + "get_item_from_string", &Registry::getItemFromStringID, + "get_sky_from_string", &Registry::getSkyFromStringID, + "get_tree_from_string", &Registry::getTreeFromStringID, + "get_biome_from_string", &Registry::getBiomeFromStringID, + + "blocks", &Registry::blocks, + "items", &Registry::items, + "trees", &Registry::trees, + "biomes", &Registry::biomes, + "dimensions", &Registry::dimensions + ); +} + diff --git a/source/common/core/Registry.hpp b/source/common/core/Registry.hpp index 24470f9d6..20e85fffb 100644 --- a/source/common/core/Registry.hpp +++ b/source/common/core/Registry.hpp @@ -108,6 +108,8 @@ class Registry : public ISerializable { void clear(); + static void initUsertype(sol::state &lua); + const std::vector> &blocks() const { return m_blocks; } const std::vector &items() const { return m_items; } const std::vector &trees() const { return m_trees; } diff --git a/source/common/inventory/Inventory.cpp b/source/common/inventory/Inventory.cpp index a325191d2..65dbe5052 100644 --- a/source/common/inventory/Inventory.cpp +++ b/source/common/inventory/Inventory.cpp @@ -97,3 +97,12 @@ void Inventory::deserialize(sf::Packet &packet) { } } +// Please update 'docs/lua-api-cpp.md' if you change this +void Inventory::initUsertype(sol::state &lua) { + lua.new_usertype("Inventory", + "add_stack", sol::overload(&Inventory::addStack, &Inventory::addStack2), + "get_stack", &Inventory::getStack, + "set_stack", &Inventory::setStack + ); +} + diff --git a/source/common/inventory/Inventory.hpp b/source/common/inventory/Inventory.hpp index bd955fde8..ee440e0ea 100644 --- a/source/common/inventory/Inventory.hpp +++ b/source/common/inventory/Inventory.hpp @@ -70,6 +70,8 @@ class Inventory : public ISerializable { bool isUnlimited() const { return m_isUnlimited; } void setUnlimited(bool isUnlimited) { m_isUnlimited = isUnlimited; } + static void initUsertype(sol::state &lua); + private: std::string m_name; diff --git a/source/common/inventory/Item.cpp b/source/common/inventory/Item.cpp index 81bae85eb..35b2515d8 100644 --- a/source/common/inventory/Item.cpp +++ b/source/common/inventory/Item.cpp @@ -45,3 +45,13 @@ void Item::deserialize(sf::Packet &packet) { >> m_miningSpeed >> m_harvestCapability >> m_groups; } +// Please update 'docs/lua-api-cpp.md' if you change this +void Item::initUsertype(sol::state &lua) { + lua.new_usertype("Item", + "id", &Item::id, + "string_id", &Item::stringID, + "has_group", &Item::hasGroup, + "get_group_value", &Item::getGroupValue + ); +} + diff --git a/source/common/inventory/Item.hpp b/source/common/inventory/Item.hpp index 3f9ad2abc..04197aa86 100644 --- a/source/common/inventory/Item.hpp +++ b/source/common/inventory/Item.hpp @@ -71,6 +71,8 @@ class Item : public ISerializable { return it->second; } + static void initUsertype(sol::state &lua); + protected: bool m_isBlock = false; diff --git a/source/common/inventory/ItemStack.cpp b/source/common/inventory/ItemStack.cpp index 63e16f78b..82e7927b0 100644 --- a/source/common/inventory/ItemStack.cpp +++ b/source/common/inventory/ItemStack.cpp @@ -31,6 +31,14 @@ const Item &ItemStack::item() const { return Registry::getInstance().getItemFromStringID(m_stringID); } +// Please update 'docs/lua-api-cpp.md' if you change this +void ItemStack::initUsertype(sol::state &lua) { + lua.new_usertype("ItemStack", + "amount", &ItemStack::amount, + "item", &ItemStack::item + ); +} + sf::Packet &operator<<(sf::Packet &packet, const ItemStack &itemStack) { return packet << itemStack.item().stringID() << itemStack.amount(); } diff --git a/source/common/inventory/ItemStack.hpp b/source/common/inventory/ItemStack.hpp index 0f32b6fc8..0e976ab66 100644 --- a/source/common/inventory/ItemStack.hpp +++ b/source/common/inventory/ItemStack.hpp @@ -43,6 +43,8 @@ class ItemStack { u16 amount() const { return m_amount; } void setAmount(u16 amount) { m_amount = amount; } + static void initUsertype(sol::state &lua); + private: std::string m_stringID; diff --git a/source/common/world/Block.cpp b/source/common/world/Block.cpp index fa195b793..407376293 100644 --- a/source/common/world/Block.cpp +++ b/source/common/world/Block.cpp @@ -60,3 +60,16 @@ void Block::deserialize(sf::Packet &packet) { m_drawType = BlockDrawType(drawType); } +// Please update 'docs/lua-api-cpp.md' if you change this +void Block::initUsertype(sol::state &lua) { + lua.new_usertype("Block", + "id", &Block::id, + "data", &Block::data, + "string_id", &Block::stringID, + "label", &Block::label, + "mod_name", &Block::modName, + "is_opaque", &Block::isOpaque, + "get_item_drop", &Block::getItemDrop + ); +} + diff --git a/source/common/world/Block.hpp b/source/common/world/Block.hpp index 0ac3a71a1..e3911b166 100644 --- a/source/common/world/Block.hpp +++ b/source/common/world/Block.hpp @@ -120,6 +120,8 @@ class Block : public ISerializable { return it->second; } + static void initUsertype(sol::state &lua); + protected: glm::vec4 getTexCoordsFromID(int textureID) const; diff --git a/source/common/world/BlockMetadata.cpp b/source/common/world/BlockMetadata.cpp index 7a5ad0d47..ed2abca1d 100644 --- a/source/common/world/BlockMetadata.cpp +++ b/source/common/world/BlockMetadata.cpp @@ -83,3 +83,17 @@ void BlockMetadata::deserialize(sf::Packet &packet) { } } +// Please update 'docs/lua-api-cpp.md' if you change this +void BlockMetadata::initUsertype(sol::state &lua) { + lua.new_usertype("BlockMetadata", + "get_string", &BlockMetadata::getLuaObject, + "set_string", &BlockMetadata::setString, + + "get_int", &BlockMetadata::getLuaObject, + "set_int", &BlockMetadata::setInt, + + "get_bool", &BlockMetadata::getLuaObject, + "set_bool", &BlockMetadata::setBool + ); +} + diff --git a/source/common/world/BlockMetadata.hpp b/source/common/world/BlockMetadata.hpp index 6e498abcc..36a20e6a2 100644 --- a/source/common/world/BlockMetadata.hpp +++ b/source/common/world/BlockMetadata.hpp @@ -94,6 +94,8 @@ class BlockMetadata : public ISerializable { void serialize(sf::Packet &packet) const override; void deserialize(sf::Packet &packet) override; + static void initUsertype(sol::state &lua); + private: std::unordered_map m_data; }; diff --git a/source/common/world/Chunk.cpp b/source/common/world/Chunk.cpp index 19cad394c..fb83eec01 100644 --- a/source/common/world/Chunk.cpp +++ b/source/common/world/Chunk.cpp @@ -197,3 +197,17 @@ bool Chunk::areAllNeighboursInitialized() const { && m_surroundingChunks[Chunk::Top] && m_surroundingChunks[Chunk::Top]->isInitialized(); } +// Please update 'docs/lua-api-cpp.md' if you change this +void Chunk::initUsertype(sol::state &lua) { + lua.new_usertype("Chunk", + "get_block", &Chunk::getBlock, + "set_block", &Chunk::setBlock, + + "get_data", &Chunk::getData, + "set_data", &Chunk::setData, + + "get_block_data", &Chunk::getBlockData, + "add_block_data", &Chunk::addBlockData + ); +} + diff --git a/source/common/world/Chunk.hpp b/source/common/world/Chunk.hpp index 0b06f58d4..fcf5a3152 100644 --- a/source/common/world/Chunk.hpp +++ b/source/common/world/Chunk.hpp @@ -103,6 +103,8 @@ class Chunk : public gk::NonCopyable { u32 data(int x, int y, int z) const { return m_data[z][y][x]; } + static void initUsertype(sol::state &lua); + protected: s32 m_x; s32 m_y; diff --git a/source/common/world/Dimension.cpp b/source/common/world/Dimension.cpp index d9b9fd1d0..11e791be2 100644 --- a/source/common/world/Dimension.cpp +++ b/source/common/world/Dimension.cpp @@ -35,3 +35,10 @@ void Dimension::deserialize(sf::Packet &packet) { packet >> m_id >> m_stringID >> m_name >> m_biomes >> m_sky; } +// Please update 'docs/lua-api-cpp.md' if you change this +void Dimension::initUsertype(sol::state &lua) { + lua.new_usertype("Dimension", + "id", &Dimension::id + ); +} + diff --git a/source/common/world/Dimension.hpp b/source/common/world/Dimension.hpp index 368faea5a..0d66bdf13 100644 --- a/source/common/world/Dimension.hpp +++ b/source/common/world/Dimension.hpp @@ -32,6 +32,8 @@ #include +#include + #include "ISerializable.hpp" class Dimension : public ISerializable { @@ -52,6 +54,8 @@ class Dimension : public ISerializable { const std::string &sky() const { return m_sky; } void setSky(const std::string &sky) { m_sky = sky; } + static void initUsertype(sol::state &lua); + private: u16 m_id = 0; diff --git a/source/common/world/Player.cpp b/source/common/world/Player.cpp index ef627abcb..844d96885 100644 --- a/source/common/world/Player.cpp +++ b/source/common/world/Player.cpp @@ -39,3 +39,20 @@ void Player::deserialize(sf::Packet &packet) { packet >> m_x >> m_y >> m_z >> m_dimension >> m_inventory; } +// Please update 'docs/lua-api-cpp.md' if you change this +void Player::initUsertype(sol::state &lua) { + lua.new_usertype("Player", + "inventory", &Player::inventory, + + "x", &Player::x, + "y", &Player::y, + "z", &Player::z, + "set_position", &Player::setPosition, + + "dimension", &Player::dimension, + "set_dimension", &Player::setDimension, + + "client_id", &Player::clientID + ); +} + diff --git a/source/common/world/Player.hpp b/source/common/world/Player.hpp index 4f42ebcf0..5289d4925 100644 --- a/source/common/world/Player.hpp +++ b/source/common/world/Player.hpp @@ -55,6 +55,8 @@ class Player : public ISerializable { const gk::FloatBox &hitbox() const { return m_hitbox; } + static void initUsertype(sol::state &lua); + protected: double m_x = 0; double m_y = 0; diff --git a/source/common/world/World.cpp b/source/common/world/World.cpp index 6d166283c..e38c54e17 100644 --- a/source/common/world/World.cpp +++ b/source/common/world/World.cpp @@ -84,3 +84,18 @@ void World::setData(int x, int y, int z, u16 data) const { if (chunk) chunk->setData(x & (CHUNK_WIDTH - 1), y & (CHUNK_DEPTH - 1), z & (CHUNK_HEIGHT - 1), data); } + +// Please update 'docs/lua-api-cpp.md' if you change this +void World::initUsertype(sol::state &lua) { + lua.new_usertype("World", + "get_block", &World::getBlock, + "set_block", &World::setBlock, + + "get_data", &World::getData, + "set_data", &World::setData, + + "get_block_data", &World::getBlockData, + "add_block_data", &World::addBlockData + ); +} + diff --git a/source/common/world/World.hpp b/source/common/world/World.hpp index e96e176ab..ceb480255 100644 --- a/source/common/world/World.hpp +++ b/source/common/world/World.hpp @@ -48,6 +48,8 @@ class World { virtual void onBlockPlaced(int, int, int, const Block &) {} + static void initUsertype(sol::state &lua); + static bool isReloadRequested; }; diff --git a/source/server/lua/ScriptEngine.cpp b/source/server/lua/ScriptEngine.cpp index 804add29c..06a017a37 100644 --- a/source/server/lua/ScriptEngine.cpp +++ b/source/server/lua/ScriptEngine.cpp @@ -52,62 +52,22 @@ void ScriptEngine::init() { } void ScriptEngine::initUsertypes() { - m_lua.new_usertype("EntityWrapper", - "id", &EntityWrapper::id, - - "position", &EntityWrapper::getPositionComponent, - "network", &EntityWrapper::getNetworkComponent, - "item_stack", &EntityWrapper::getItemStack - ); - - m_lua.new_usertype("Registry", - "get_block", &Registry::getBlock, - "get_item", &Registry::getItem, - "get_sky", &Registry::getSky, - "get_tree", &Registry::getTree, - "get_biome", &Registry::getBiome, - "get_recipe", &Registry::getRecipe, - - "get_block_from_string", &Registry::getBlockFromStringID, - "get_item_from_string", &Registry::getItemFromStringID, - "get_sky_from_string", &Registry::getSkyFromStringID, - "get_tree_from_string", &Registry::getTreeFromStringID, - "get_biome_from_string", &Registry::getBiomeFromStringID, - - "blocks", &Registry::blocks, - "items", &Registry::items, - "trees", &Registry::trees, - "biomes", &Registry::biomes, - "dimensions", &Registry::dimensions - ); - - m_lua.new_usertype("World", - "get_block", &World::getBlock, - "set_block", &World::setBlock, - - "get_data", &World::getData, - "set_data", &World::setData, - - "get_block_data", &World::getBlockData, - "add_block_data", &World::addBlockData - ); - - m_lua.new_usertype("ServerWorld", - sol::base_classes, sol::bases(), - - "dimension", &ServerWorld::dimension - ); - - m_lua.new_usertype("Chunk", - "get_block", &Chunk::getBlock, - "set_block", &Chunk::setBlock, - - "get_data", &Chunk::getData, - "set_data", &Chunk::setData, - - "get_block_data", &Chunk::getBlockData, - "add_block_data", &Chunk::addBlockData - ); + Block ::initUsertype(m_lua); + BlockMetadata ::initUsertype(m_lua); + Chunk ::initUsertype(m_lua); + Dimension ::initUsertype(m_lua); + EntityWrapper ::initUsertype(m_lua); + Inventory ::initUsertype(m_lua); + Item ::initUsertype(m_lua); + ItemStack ::initUsertype(m_lua); + Player ::initUsertype(m_lua); + Registry ::initUsertype(m_lua); + ServerBlock ::initUsertype(m_lua); + ServerCommandHandler::initUsertype(m_lua); + ServerModLoader ::initUsertype(m_lua); + ServerPlayer ::initUsertype(m_lua); + World ::initUsertype(m_lua); + ServerWorld ::initUsertype(m_lua); m_lua.new_usertype("BlockData", "inventory", &BlockData::inventory, @@ -115,96 +75,21 @@ void ScriptEngine::initUsertypes() { "use_alt_tiles", &BlockData::useAltTiles ); - m_lua.new_usertype("Dimension", - "id", &Dimension::id - ); - - m_lua.new_usertype("Block", - "id", &Block::id, - "data", &Block::data, - "string_id", &Block::stringID, - "label", &Block::label, - "mod_name", &Block::modName, - "is_opaque", &Block::isOpaque, - "get_item_drop", &Block::getItemDrop - ); - - m_lua.new_usertype("ServerBlock", - sol::base_classes, sol::bases() - ); - - m_lua.new_usertype("Player", - "inventory", &Player::inventory, - - "x", &Player::x, - "y", &Player::y, - "z", &Player::z, - "set_position", &Player::setPosition, - - "dimension", &Player::dimension, - "set_dimension", &Player::setDimension, - - "client_id", &Player::clientID - ); - - m_lua.new_usertype("ServerPlayer", - sol::base_classes, sol::bases(), - "client", &ServerPlayer::client - ); - - m_lua.new_usertype("Inventory", - "add_stack", sol::overload(&Inventory::addStack, &Inventory::addStack2), - "get_stack", &Inventory::getStack, - "set_stack", &Inventory::setStack - ); - m_lua.new_usertype("Recipe", "type", &Recipe::type, "result", &Recipe::result ); - m_lua.new_usertype("ItemStack", - "amount", &ItemStack::amount, - "item", &ItemStack::item - ); - - m_lua.new_usertype("Item", - "id", &Item::id, - "string_id", &Item::stringID, - "has_group", &Item::hasGroup, - "get_group_value", &Item::getGroupValue - ); - m_lua.new_usertype("ivec3", "x", &glm::ivec3::x, "y", &glm::ivec3::y, "z", &glm::ivec3::z ); - m_lua.new_usertype("BlockMetadata", - "get_string", &BlockMetadata::getLuaObject, - "set_string", &BlockMetadata::setString, - - "get_int", &BlockMetadata::getLuaObject, - "set_int", &BlockMetadata::setInt, - - "get_bool", &BlockMetadata::getLuaObject, - "set_bool", &BlockMetadata::setBool - ); - m_lua.new_usertype("ClientInfo", "id", &ClientInfo::id ); - m_lua.new_usertype("ServerCommandHandler", - "send_player_change_dimension", &ServerCommandHandler::sendPlayerChangeDimension, - "send_chat_message", &ServerCommandHandler::sendChatMessage - ); - - m_lua.new_usertype("ServerModLoader", - "register_mod", &ServerModLoader::registerMod - ); - LuaCore::initUsertype(m_lua); LuaMod::initUsertype(m_lua); LuaGUI::initUsertype(m_lua); diff --git a/source/server/lua/ServerModLoader.cpp b/source/server/lua/ServerModLoader.cpp index 5da0b23cb..04bf0104c 100644 --- a/source/server/lua/ServerModLoader.cpp +++ b/source/server/lua/ServerModLoader.cpp @@ -86,3 +86,10 @@ LuaMod &ServerModLoader::registerMod(const std::string &name) { return m_mods.at(name); } +// Please update 'docs/lua-api-cpp.md' if you change this +void ServerModLoader::initUsertype(sol::state &lua) { + lua.new_usertype("ServerModLoader", + "register_mod", &ServerModLoader::registerMod + ); +} + diff --git a/source/server/lua/ServerModLoader.hpp b/source/server/lua/ServerModLoader.hpp index 0baeb5a35..9c639bfde 100644 --- a/source/server/lua/ServerModLoader.hpp +++ b/source/server/lua/ServerModLoader.hpp @@ -46,6 +46,8 @@ class ServerModLoader { LuaMod ®isterMod(const std::string &name); + static void initUsertype(sol::state &lua); + private: ScriptEngine &m_scriptEngine; Registry &m_registry; diff --git a/source/server/network/ServerCommandHandler.cpp b/source/server/network/ServerCommandHandler.cpp index edaf6895e..ac926f9d3 100644 --- a/source/server/network/ServerCommandHandler.cpp +++ b/source/server/network/ServerCommandHandler.cpp @@ -401,3 +401,11 @@ inline ServerWorld &ServerCommandHandler::getWorldForClient(u16 clientID) { return m_worldController.getWorld(player->dimension()); } +// Please update 'docs/lua-api-cpp.md' if you change this +void ServerCommandHandler::initUsertype(sol::state &lua) { + lua.new_usertype("ServerCommandHandler", + "send_player_change_dimension", &ServerCommandHandler::sendPlayerChangeDimension, + "send_chat_message", &ServerCommandHandler::sendChatMessage + ); +} + diff --git a/source/server/network/ServerCommandHandler.hpp b/source/server/network/ServerCommandHandler.hpp index aa0471243..4103f9cac 100644 --- a/source/server/network/ServerCommandHandler.hpp +++ b/source/server/network/ServerCommandHandler.hpp @@ -33,6 +33,8 @@ #include +#include + #include "ChatCommandHandler.hpp" struct BlockData; @@ -78,6 +80,8 @@ class ServerCommandHandler { const Server &server() const { return m_server; } + static void initUsertype(sol::state &lua); + private: ServerWorld &getWorldForClient(u16 clientID); diff --git a/source/server/scene/EntityWrapper.cpp b/source/server/scene/EntityWrapper.cpp new file mode 100644 index 000000000..b5608fd1a --- /dev/null +++ b/source/server/scene/EntityWrapper.cpp @@ -0,0 +1,39 @@ +/* + * ===================================================================================== + * + * OpenMiner + * + * Copyright (C) 2018-2020 Unarelith, Quentin Bazin + * Copyright (C) 2019-2020 the OpenMiner contributors (see CONTRIBUTORS.md) + * + * This file is part of OpenMiner. + * + * OpenMiner is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * OpenMiner is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with OpenMiner; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * ===================================================================================== + */ +#include "EntityWrapper.hpp" + +// Please update 'docs/lua-api-cpp.md' if you change this +void EntityWrapper::initUsertype(sol::state &lua) { + lua.new_usertype("EntityWrapper", + "id", &EntityWrapper::id, + + "position", &EntityWrapper::getPositionComponent, + "network", &EntityWrapper::getNetworkComponent, + "item_stack", &EntityWrapper::getItemStack + ); +} + diff --git a/source/server/scene/EntityWrapper.hpp b/source/server/scene/EntityWrapper.hpp index 640c41921..d90288caf 100644 --- a/source/server/scene/EntityWrapper.hpp +++ b/source/server/scene/EntityWrapper.hpp @@ -45,6 +45,8 @@ class EntityWrapper { NetworkComponent *getNetworkComponent() const { return m_registry.try_get(m_id); } ItemStack *getItemStack() const { return m_registry.try_get(m_id); } + static void initUsertype(sol::state &lua); + private: entt::entity m_id; entt::registry &m_registry; diff --git a/source/server/world/ServerBlock.cpp b/source/server/world/ServerBlock.cpp index 85eccefd9..77097d29f 100644 --- a/source/server/world/ServerBlock.cpp +++ b/source/server/world/ServerBlock.cpp @@ -91,3 +91,10 @@ void ServerBlock::onBlockDestroyed(const glm::ivec3 &pos, World &world) const { } } +// Please update 'docs/lua-api-cpp.md' if you change this +void ServerBlock::initUsertype(sol::state &lua) { + lua.new_usertype("ServerBlock", + sol::base_classes, sol::bases() + ); +} + diff --git a/source/server/world/ServerBlock.hpp b/source/server/world/ServerBlock.hpp index 30c89d798..79ff9ba2b 100644 --- a/source/server/world/ServerBlock.hpp +++ b/source/server/world/ServerBlock.hpp @@ -50,6 +50,8 @@ class ServerBlock : public Block { void setOnBlockPlaced(const sol::protected_function &function) { m_onBlockPlaced = function; } void setOnBlockDestroyed(const sol::protected_function &function) { m_onBlockDestroyed = function; } + static void initUsertype(sol::state &lua); + private: sol::protected_function m_onBlockActivated; sol::protected_function m_onTick; diff --git a/source/server/world/ServerPlayer.cpp b/source/server/world/ServerPlayer.cpp index 27ffb1ad2..0a8616392 100644 --- a/source/server/world/ServerPlayer.cpp +++ b/source/server/world/ServerPlayer.cpp @@ -30,3 +30,11 @@ ServerPlayer::ServerPlayer(ClientInfo &client) : m_client(client) { m_clientID = client.id; } +// Please update 'docs/lua-api-cpp.md' if you change this +void ServerPlayer::initUsertype(sol::state &lua) { + lua.new_usertype("ServerPlayer", + sol::base_classes, sol::bases(), + "client", &ServerPlayer::client + ); +} + diff --git a/source/server/world/ServerPlayer.hpp b/source/server/world/ServerPlayer.hpp index dc1241962..781a1a89e 100644 --- a/source/server/world/ServerPlayer.hpp +++ b/source/server/world/ServerPlayer.hpp @@ -36,6 +36,8 @@ class ServerPlayer : public Player { const ClientInfo &client() const { return m_client; } + static void initUsertype(sol::state &lua); + private: ClientInfo &m_client; }; diff --git a/source/server/world/ServerWorld.cpp b/source/server/world/ServerWorld.cpp index fbba54c58..0343d43b9 100644 --- a/source/server/world/ServerWorld.cpp +++ b/source/server/world/ServerWorld.cpp @@ -168,3 +168,12 @@ Chunk *ServerWorld::getChunk(int cx, int cy, int cz) const { return it->second.get(); } +// Please update 'docs/lua-api-cpp.md' if you change this +void ServerWorld::initUsertype(sol::state &lua) { + lua.new_usertype("ServerWorld", + sol::base_classes, sol::bases(), + + "dimension", &ServerWorld::dimension + ); +} + diff --git a/source/server/world/ServerWorld.hpp b/source/server/world/ServerWorld.hpp index 32cba9cdc..12527d9da 100644 --- a/source/server/world/ServerWorld.hpp +++ b/source/server/world/ServerWorld.hpp @@ -71,6 +71,8 @@ class ServerWorld : public World { void setServer(ServerCommandHandler *server) { m_server = server; m_scene.setServer(server); } + static void initUsertype(sol::state &lua); + private: const Dimension &m_dimension;