aboutsummaryrefslogtreecommitdiff
path: root/src/script/lua_api/l_inventory.cpp
diff options
context:
space:
mode:
authorLoïc Blot <nerzhul@users.noreply.github.com>2020-05-07 22:38:41 +0200
committerGitHub <noreply@github.com>2020-05-07 22:38:41 +0200
commit454dbf83a9bf292910c1495a2aa49fd8b960c28f (patch)
treed3f53bb5914bae385198d3290863ee1c94832dfd /src/script/lua_api/l_inventory.cpp
parent650168cadac2a45277a9527ae79efb288ba7a4a4 (diff)
downloadminetest-454dbf83a9bf292910c1495a2aa49fd8b960c28f.tar.gz
minetest-454dbf83a9bf292910c1495a2aa49fd8b960c28f.tar.bz2
minetest-454dbf83a9bf292910c1495a2aa49fd8b960c28f.zip
Server class code cleanups (#9769)
* Server::overrideDayNightRatio doesn't require to return bool There is no sense to sending null player, the caller should send a valid object * Server::init: make private & cleanup This function is always called before start() and loads some variables which can be loaded in constructor directly. Make it private and call it directly in start * Split Server inventory responsibility to a dedicated object This splits permit to found various historical issues: * duplicate lookups on player connection * sending inventory to non related player when a player connects * non friendly lookups on detached inventories ownership This reduce the detached inventory complexity and also increased the lookup performance in a quite interesting way for servers with thousands of inventories.
Diffstat (limited to 'src/script/lua_api/l_inventory.cpp')
-rw-r--r--src/script/lua_api/l_inventory.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/script/lua_api/l_inventory.cpp b/src/script/lua_api/l_inventory.cpp
index 4c8977898..e41b5cb41 100644
--- a/src/script/lua_api/l_inventory.cpp
+++ b/src/script/lua_api/l_inventory.cpp
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_converter.h"
#include "common/c_content.h"
#include "server.h"
+#include "server/serverinventorymgr.h"
#include "remoteplayer.h"
/*
@@ -38,7 +39,7 @@ InvRef* InvRef::checkobject(lua_State *L, int narg)
Inventory* InvRef::getinv(lua_State *L, InvRef *ref)
{
- return getServer(L)->getInventory(ref->m_loc);
+ return getServerInventoryMgr(L)->getInventory(ref->m_loc);
}
InventoryList* InvRef::getlist(lua_State *L, InvRef *ref,
@@ -54,7 +55,7 @@ InventoryList* InvRef::getlist(lua_State *L, InvRef *ref,
void InvRef::reportInventoryChange(lua_State *L, InvRef *ref)
{
// Inform other things that the inventory has changed
- getServer(L)->setInventoryModified(ref->m_loc);
+ getServerInventoryMgr(L)->setInventoryModified(ref->m_loc);
}
// Exported functions
@@ -497,7 +498,7 @@ int ModApiInventory::l_get_inventory(lua_State *L)
v3s16 pos = check_v3s16(L, -1);
loc.setNodeMeta(pos);
- if (getServer(L)->getInventory(loc) != NULL)
+ if (getServerInventoryMgr(L)->getInventory(loc) != NULL)
InvRef::create(L, loc);
else
lua_pushnil(L);
@@ -515,7 +516,7 @@ int ModApiInventory::l_get_inventory(lua_State *L)
lua_pop(L, 1);
}
- if (getServer(L)->getInventory(loc) != NULL)
+ if (getServerInventoryMgr(L)->getInventory(loc) != NULL)
InvRef::create(L, loc);
else
lua_pushnil(L);
@@ -530,7 +531,7 @@ int ModApiInventory::l_create_detached_inventory_raw(lua_State *L)
NO_MAP_LOCK_REQUIRED;
const char *name = luaL_checkstring(L, 1);
std::string player = readParam<std::string>(L, 2, "");
- if (getServer(L)->createDetachedInventory(name, player) != NULL) {
+ if (getServerInventoryMgr(L)->createDetachedInventory(name, getServer(L)->idef(), player) != NULL) {
InventoryLocation loc;
loc.setDetached(name);
InvRef::create(L, loc);
@@ -545,7 +546,7 @@ int ModApiInventory::l_remove_detached_inventory_raw(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
const std::string &name = luaL_checkstring(L, 1);
- lua_pushboolean(L, getServer(L)->removeDetachedInventory(name));
+ lua_pushboolean(L, getServerInventoryMgr(L)->removeDetachedInventory(name));
return 1;
}