aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2020-04-11 11:22:15 +0200
committerLoïc Blot <nerzhul@users.noreply.github.com>2020-04-11 16:07:17 +0200
commit5146086a64d5eeb480948d612a008a2ec81455d4 (patch)
tree924bc1191cd251cd48d7f41e7d9b02577985eadf /src
parent894a34aef48024a752a1ef151d046955d83858d0 (diff)
downloadminetest-5146086a64d5eeb480948d612a008a2ec81455d4.tar.gz
minetest-5146086a64d5eeb480948d612a008a2ec81455d4.tar.bz2
minetest-5146086a64d5eeb480948d612a008a2ec81455d4.zip
Drop content_sao.{cpp,h}
Move LuaEntitySAO to a new dedicated file Drop TestSAO (useless object) Drop the old static startup initialized SAO factory, which was pretty useless. This factory was using a std::map for 2 elements, now just use a simple condition owned by ServerEnvironment, which will be lightweight, that will also drop a one time useful test on each LuaEntitySAO creation. This should reduce server load on massive SAO creation
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/clientiface.cpp2
-rw-r--r--src/mapgen/mapgen.cpp1
-rw-r--r--src/mapgen/mapgen_carpathian.cpp1
-rw-r--r--src/mapgen/mapgen_flat.cpp1
-rw-r--r--src/mapgen/mapgen_fractal.cpp1
-rw-r--r--src/mapgen/mapgen_v5.cpp1
-rw-r--r--src/mapgen/mapgen_v6.cpp1
-rw-r--r--src/mapgen/mapgen_v7.cpp1
-rw-r--r--src/script/cpp_api/s_base.cpp1
-rw-r--r--src/script/lua_api/l_env.cpp2
-rw-r--r--src/script/lua_api/l_item.cpp1
-rw-r--r--src/script/lua_api/l_object.cpp2
-rw-r--r--src/server/CMakeLists.txt1
-rw-r--r--src/server/luaentity_sao.cpp (renamed from src/content_sao.cpp)192
-rw-r--r--src/server/luaentity_sao.h (renamed from src/content_sao.h)52
-rw-r--r--src/server/player_sao.h83
-rw-r--r--src/server/serveractiveobject.cpp33
-rw-r--r--src/server/serveractiveobject.h10
-rw-r--r--src/serverenvironment.cpp19
-rw-r--r--src/serverenvironment.h2
-rw-r--r--src/staticobject.cpp2
-rw-r--r--src/unittest/test_player.cpp1
23 files changed, 120 insertions, 291 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index faa117d41..0ebbd628c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -375,7 +375,6 @@ set(common_SRCS
collision.cpp
content_mapnode.cpp
content_nodemeta.cpp
- content_sao.cpp
convert_json.cpp
craftdef.cpp
debug.cpp
diff --git a/src/clientiface.cpp b/src/clientiface.cpp
index 17237f73e..4f954342a 100644
--- a/src/clientiface.cpp
+++ b/src/clientiface.cpp
@@ -19,7 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <sstream>
#include "clientiface.h"
-#include "content_sao.h"
#include "network/connection.h"
#include "network/serveropcodes.h"
#include "remoteplayer.h"
@@ -28,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "serverenvironment.h"
#include "map.h"
#include "emerge.h"
+#include "server/luaentity_sao.h"
#include "server/player_sao.h"
#include "log.h"
#include "util/srp.h"
diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp
index 6c426ba41..0094608ec 100644
--- a/src/mapgen/mapgen.cpp
+++ b/src/mapgen/mapgen.cpp
@@ -28,7 +28,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "emerge.h"
#include "voxelalgorithms.h"
diff --git a/src/mapgen/mapgen_carpathian.cpp b/src/mapgen/mapgen_carpathian.cpp
index 0dc1d33be..bd7ae5e7c 100644
--- a/src/mapgen/mapgen_carpathian.cpp
+++ b/src/mapgen/mapgen_carpathian.cpp
@@ -26,7 +26,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
diff --git a/src/mapgen/mapgen_flat.cpp b/src/mapgen/mapgen_flat.cpp
index 879435948..272964b51 100644
--- a/src/mapgen/mapgen_flat.cpp
+++ b/src/mapgen/mapgen_flat.cpp
@@ -25,7 +25,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
diff --git a/src/mapgen/mapgen_fractal.cpp b/src/mapgen/mapgen_fractal.cpp
index 96febb4f4..97f77d947 100644
--- a/src/mapgen/mapgen_fractal.cpp
+++ b/src/mapgen/mapgen_fractal.cpp
@@ -26,7 +26,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
diff --git a/src/mapgen/mapgen_v5.cpp b/src/mapgen/mapgen_v5.cpp
index 447fe8c50..3bd7615c4 100644
--- a/src/mapgen/mapgen_v5.cpp
+++ b/src/mapgen/mapgen_v5.cpp
@@ -25,7 +25,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
diff --git a/src/mapgen/mapgen_v6.cpp b/src/mapgen/mapgen_v6.cpp
index f473f725d..da9ae1428 100644
--- a/src/mapgen/mapgen_v6.cpp
+++ b/src/mapgen/mapgen_v6.cpp
@@ -27,7 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
diff --git a/src/mapgen/mapgen_v7.cpp b/src/mapgen/mapgen_v7.cpp
index 325c4957a..82556cc4f 100644
--- a/src/mapgen/mapgen_v7.cpp
+++ b/src/mapgen/mapgen_v7.cpp
@@ -26,7 +26,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
-#include "content_sao.h"
#include "nodedef.h"
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp
index 150baf77e..df07206d7 100644
--- a/src/script/cpp_api/s_base.cpp
+++ b/src/script/cpp_api/s_base.cpp
@@ -43,7 +43,6 @@ extern "C" {
#include <cstdio>
#include <cstdarg>
#include "script/common/c_content.h"
-#include "content_sao.h"
#include <sstream>
diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp
index 438669feb..40e50e64a 100644
--- a/src/script/lua_api/l_env.cpp
+++ b/src/script/lua_api/l_env.cpp
@@ -33,12 +33,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "nodedef.h"
#include "daynightratio.h"
#include "util/pointedthing.h"
-#include "content_sao.h"
#include "mapgen/treegen.h"
#include "emerge.h"
#include "pathfinder.h"
#include "face_position_cache.h"
#include "remoteplayer.h"
+#include "server/luaentity_sao.h"
#include "server/player_sao.h"
#ifndef SERVER
#include "client/client.h"
diff --git a/src/script/lua_api/l_item.cpp b/src/script/lua_api/l_item.cpp
index ff77cba32..9f12d3ac7 100644
--- a/src/script/lua_api/l_item.cpp
+++ b/src/script/lua_api/l_item.cpp
@@ -25,7 +25,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "itemdef.h"
#include "nodedef.h"
#include "server.h"
-#include "content_sao.h"
#include "inventory.h"
#include "log.h"
diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp
index 95c96235e..fa34260bf 100644
--- a/src/script/lua_api/l_object.cpp
+++ b/src/script/lua_api/l_object.cpp
@@ -27,11 +27,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_content.h"
#include "log.h"
#include "tool.h"
-#include "content_sao.h"
#include "remoteplayer.h"
#include "server.h"
#include "hud.h"
#include "scripting_server.h"
+#include "server/luaentity_sao.h"
#include "server/player_sao.h"
/*
diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt
index 26eaed5ac..4d94504f6 100644
--- a/src/server/CMakeLists.txt
+++ b/src/server/CMakeLists.txt
@@ -1,5 +1,6 @@
set(server_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/activeobjectmgr.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/luaentity_sao.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mods.cpp
${CMAKE_CURRENT_SOURCE_DIR}/player_sao.cpp
${CMAKE_CURRENT_SOURCE_DIR}/serveractiveobject.cpp
diff --git a/src/content_sao.cpp b/src/server/luaentity_sao.cpp
index 7ec17aa82..125939241 100644
--- a/src/content_sao.cpp
+++ b/src/server/luaentity_sao.cpp
@@ -1,6 +1,7 @@
/*
Minetest
Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2013-2020 Minetest core developers & community
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -17,114 +18,65 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include "content_sao.h"
-#include "util/serialize.h"
+#include "luaentity_sao.h"
#include "collision.h"
-#include "environment.h"
-#include "tool.h" // For ToolCapabilities
-#include "gamedef.h"
-#include "nodedef.h"
-#include "remoteplayer.h"
-#include "server.h"
+#include "constants.h"
+#include "player_sao.h"
#include "scripting_server.h"
-#include "server/player_sao.h"
-#include "settings.h"
-#include <algorithm>
-#include <cmath>
-
-std::map<u16, ServerActiveObject::Factory> ServerActiveObject::m_types;
-
-/*
- TestSAO
-*/
+#include "server.h"
+#include "serverenvironment.h"
-class TestSAO : public ServerActiveObject
+LuaEntitySAO::LuaEntitySAO(ServerEnvironment *env, v3f pos, const std::string &data)
+ : UnitSAO(env, pos)
{
-public:
- TestSAO(ServerEnvironment *env, v3f pos):
- ServerActiveObject(env, pos),
- m_timer1(0),
- m_age(0)
- {
- ServerActiveObject::registerType(getType(), create);
- }
- ActiveObjectType getType() const
- { return ACTIVEOBJECT_TYPE_TEST; }
+ std::string name;
+ std::string state;
+ u16 hp = 1;
+ v3f velocity;
+ v3f rotation;
- static ServerActiveObject* create(ServerEnvironment *env, v3f pos,
- const std::string &data)
- {
- return new TestSAO(env, pos);
- }
+ while (!data.empty()) { // breakable, run for one iteration
+ std::istringstream is(data, std::ios::binary);
+ // 'version' does not allow to incrementally extend the parameter list thus
+ // we need another variable to build on top of 'version=1'. Ugly hack but works™
+ u8 version2 = 0;
+ u8 version = readU8(is);
- void step(float dtime, bool send_recommended)
- {
- m_age += dtime;
- if(m_age > 10)
- {
- m_pending_removal = true;
- return;
- }
+ name = deSerializeString(is);
+ state = deSerializeLongString(is);
- m_base_position.Y += dtime * BS * 2;
- if(m_base_position.Y > 8*BS)
- m_base_position.Y = 2*BS;
+ if (version < 1)
+ break;
- if (!send_recommended)
- return;
+ hp = readU16(is);
+ velocity = readV3F1000(is);
+ // yaw must be yaw to be backwards-compatible
+ rotation.Y = readF1000(is);
- m_timer1 -= dtime;
- if(m_timer1 < 0.0)
- {
- m_timer1 += 0.125;
+ if (is.good()) // EOF for old formats
+ version2 = readU8(is);
- std::string data;
+ if (version2 < 1) // PROTOCOL_VERSION < 37
+ break;
- data += itos(0); // 0 = position
- data += " ";
- data += itos(m_base_position.X);
- data += " ";
- data += itos(m_base_position.Y);
- data += " ";
- data += itos(m_base_position.Z);
+ // version2 >= 1
+ rotation.X = readF1000(is);
+ rotation.Z = readF1000(is);
- ActiveObjectMessage aom(getId(), false, data);
- m_messages_out.push(aom);
- }
+ // if (version2 < 2)
+ // break;
+ // <read new values>
+ break;
}
+ // create object
+ infostream << "LuaEntitySAO::create(name=\"" << name << "\" state=\""
+ << state << "\")" << std::endl;
- bool getCollisionBox(aabb3f *toset) const { return false; }
-
- virtual bool getSelectionBox(aabb3f *toset) const { return false; }
-
- bool collideWithObjects() const { return false; }
-
-private:
- float m_timer1;
- float m_age;
-};
-
-// Prototype (registers item for deserialization)
-TestSAO proto_TestSAO(NULL, v3f(0,0,0));
-
-/*
- LuaEntitySAO
-*/
-
-// Prototype (registers item for deserialization)
-LuaEntitySAO proto_LuaEntitySAO(NULL, v3f(0,0,0), "_prototype", "");
-
-LuaEntitySAO::LuaEntitySAO(ServerEnvironment *env, v3f pos,
- const std::string &name, const std::string &state):
- UnitSAO(env, pos),
- m_init_name(name),
- m_init_state(state)
-{
- // Only register type if no environment supplied
- if(env == NULL){
- ServerActiveObject::registerType(getType(), create);
- return;
- }
+ m_init_name = name;
+ m_init_state = state;
+ m_hp = hp;
+ m_velocity = velocity;
+ m_rotation = rotation;
}
LuaEntitySAO::~LuaEntitySAO()
@@ -160,58 +112,6 @@ void LuaEntitySAO::addedToEnvironment(u32 dtime_s)
}
}
-ServerActiveObject* LuaEntitySAO::create(ServerEnvironment *env, v3f pos,
- const std::string &data)
-{
- std::string name;
- std::string state;
- u16 hp = 1;
- v3f velocity;
- v3f rotation;
-
- while (!data.empty()) { // breakable, run for one iteration
- std::istringstream is(data, std::ios::binary);
- // 'version' does not allow to incrementally extend the parameter list thus
- // we need another variable to build on top of 'version=1'. Ugly hack but works™
- u8 version2 = 0;
- u8 version = readU8(is);
-
- name = deSerializeString(is);
- state = deSerializeLongString(is);
-
- if (version < 1)
- break;
-
- hp = readU16(is);
- velocity = readV3F1000(is);
- // yaw must be yaw to be backwards-compatible
- rotation.Y = readF1000(is);
-
- if (is.good()) // EOF for old formats
- version2 = readU8(is);
-
- if (version2 < 1) // PROTOCOL_VERSION < 37
- break;
-
- // version2 >= 1
- rotation.X = readF1000(is);
- rotation.Z = readF1000(is);
-
- // if (version2 < 2)
- // break;
- // <read new values>
- break;
- }
- // create object
- infostream << "LuaEntitySAO::create(name=\"" << name << "\" state=\""
- << state << "\")" << std::endl;
- LuaEntitySAO *sao = new LuaEntitySAO(env, pos, name, state);
- sao->m_hp = hp;
- sao->m_velocity = velocity;
- sao->m_rotation = rotation;
- return sao;
-}
-
void LuaEntitySAO::step(float dtime, bool send_recommended)
{
if(!m_properties_sent)
diff --git a/src/content_sao.h b/src/server/luaentity_sao.h
index 5387fd108..2520c8f5d 100644
--- a/src/content_sao.h
+++ b/src/server/luaentity_sao.h
@@ -1,6 +1,7 @@
/*
Minetest
Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2013-2020 Minetest core developers & community
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -19,38 +20,32 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
-#include "network/networkprotocol.h"
-#include "util/numeric.h"
-#include "server/unit_sao.h"
-#include "itemgroup.h"
-#include "constants.h"
-
-/*
- LuaEntitySAO needs some internals exposed.
-*/
+#include "unit_sao.h"
class LuaEntitySAO : public UnitSAO
{
public:
- LuaEntitySAO(ServerEnvironment *env, v3f pos,
- const std::string &name, const std::string &state);
+ LuaEntitySAO() = delete;
+ // Used by the environment to load SAO
+ LuaEntitySAO(ServerEnvironment *env, v3f pos, const std::string &data);
+ // Used by the Lua API
+ LuaEntitySAO(ServerEnvironment *env, v3f pos, const std::string &name,
+ const std::string &state) :
+ UnitSAO(env, pos),
+ m_init_name(name), m_init_state(state)
+ {
+ }
~LuaEntitySAO();
- ActiveObjectType getType() const
- { return ACTIVEOBJECT_TYPE_LUAENTITY; }
- ActiveObjectType getSendType() const
- { return ACTIVEOBJECT_TYPE_GENERIC; }
+ ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_LUAENTITY; }
+ ActiveObjectType getSendType() const { return ACTIVEOBJECT_TYPE_GENERIC; }
virtual void addedToEnvironment(u32 dtime_s);
- static ServerActiveObject* create(ServerEnvironment *env, v3f pos,
- const std::string &data);
void step(float dtime, bool send_recommended);
std::string getClientInitializationData(u16 protocol_version);
- bool isStaticAllowed() const
- { return m_prop.static_save; }
+ bool isStaticAllowed() const { return m_prop.static_save; }
void getStaticData(std::string *result) const;
- u16 punch(v3f dir,
- const ToolCapabilities *toolcap = nullptr,
- ServerActiveObject *puncher = nullptr,
- float time_from_last_punch = 1000000.0f);
+ u16 punch(v3f dir, const ToolCapabilities *toolcap = nullptr,
+ ServerActiveObject *puncher = nullptr,
+ float time_from_last_punch = 1000000.0f);
void rightClick(ServerActiveObject *clicker);
void setPos(const v3f &pos);
void moveTo(v3f pos, bool continuous);
@@ -61,10 +56,7 @@ public:
/* LuaEntitySAO-specific */
void setVelocity(v3f velocity);
- void addVelocity(v3f velocity)
- {
- m_velocity += velocity;
- }
+ void addVelocity(v3f velocity) { m_velocity += velocity; }
v3f getVelocity();
void setAcceleration(v3f acceleration);
v3f getAcceleration();
@@ -77,12 +69,13 @@ public:
bool getCollisionBox(aabb3f *toset) const;
bool getSelectionBox(aabb3f *toset) const;
bool collideWithObjects() const;
+
private:
std::string getPropertyPacket();
void sendPosition(bool do_interpolate, bool is_movement_end);
std::string generateSetTextureModCommand() const;
- static std::string generateSetSpriteCommand(v2s16 p, u16 num_frames, f32 framelength,
- bool select_horiz_by_yawpitch);
+ static std::string generateSetSpriteCommand(v2s16 p, u16 num_frames,
+ f32 framelength, bool select_horiz_by_yawpitch);
std::string m_init_name;
std::string m_init_state;
@@ -98,4 +91,3 @@ private:
float m_last_sent_move_precision = 0.0f;
std::string m_current_texture_modifier = "";
};
-
diff --git a/src/server/player_sao.h b/src/server/player_sao.h
index ce1cb1677..8571bd4f9 100644
--- a/src/server/player_sao.h
+++ b/src/server/player_sao.h
@@ -1,4 +1,3 @@
-
/*
Minetest
Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
@@ -19,6 +18,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#pragma once
+
#include "constants.h"
#include "network/networkprotocol.h"
#include "unit_sao.h"
@@ -32,33 +33,31 @@ class LagPool
{
float m_pool = 15.0f;
float m_max = 15.0f;
+
public:
LagPool() = default;
void setMax(float new_max)
{
m_max = new_max;
- if(m_pool > new_max)
+ if (m_pool > new_max)
m_pool = new_max;
}
void add(float dtime)
{
m_pool -= dtime;
- if(m_pool < 0)
+ if (m_pool < 0)
m_pool = 0;
}
- void empty()
- {
- m_pool = m_max;
- }
+ void empty() { m_pool = m_max; }
bool grab(float dtime)
{
- if(dtime <= 0)
+ if (dtime <= 0)
return true;
- if(m_pool + dtime > m_max)
+ if (m_pool + dtime > m_max)
return false;
m_pool += dtime;
return true;
@@ -73,10 +72,8 @@ public:
PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t peer_id_,
bool is_singleplayer);
- ActiveObjectType getType() const
- { return ACTIVEOBJECT_TYPE_PLAYER; }
- ActiveObjectType getSendType() const
- { return ACTIVEOBJECT_TYPE_GENERIC; }
+ ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_PLAYER; }
+ ActiveObjectType getSendType() const { return ACTIVEOBJECT_TYPE_GENERIC; }
std::string getDescription();
/*
@@ -111,10 +108,8 @@ public:
Interaction interface
*/
- u16 punch(v3f dir,
- const ToolCapabilities *toolcap,
- ServerActiveObject *puncher,
- float time_from_last_punch);
+ u16 punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher,
+ float time_from_last_punch);
void rightClick(ServerActiveObject *clicker) {}
void setHP(s32 hp, const PlayerHPChangeReason &reason);
void setHPRaw(u16 hp) { m_hp = hp; }
@@ -144,10 +139,7 @@ public:
// Cheat prevention
- v3f getLastGoodPosition() const
- {
- return m_last_good_position;
- }
+ v3f getLastGoodPosition() const { return m_last_good_position; }
float resetTimeFromLastPunch()
{
float r = m_time_from_last_punch;
@@ -159,30 +151,17 @@ public:
m_nocheat_dig_pos = p;
m_nocheat_dig_time = 0;
}
- v3s16 getNoCheatDigPos()
- {
- return m_nocheat_dig_pos;
- }
- float getNoCheatDigTime()
- {
- return m_nocheat_dig_time;
- }
- void noCheatDigEnd()
- {
- m_nocheat_dig_pos = v3s16(32767, 32767, 32767);
- }
- LagPool& getDigPool()
- {
- return m_dig_pool;
- }
+ v3s16 getNoCheatDigPos() { return m_nocheat_dig_pos; }
+ float getNoCheatDigTime() { return m_nocheat_dig_time; }
+ void noCheatDigEnd() { m_nocheat_dig_pos = v3s16(32767, 32767, 32767); }
+ LagPool &getDigPool() { return m_dig_pool; }
void setMaxSpeedOverride(const v3f &vel);
// Returns true if cheated
bool checkMovementCheat();
// Other
- void updatePrivileges(const std::set<std::string> &privs,
- bool is_singleplayer)
+ void updatePrivileges(const std::set<std::string> &privs, bool is_singleplayer)
{
m_privs = privs;
m_is_singleplayer = is_singleplayer;
@@ -236,6 +215,7 @@ private:
s16 m_wanted_range = 0.0f;
Metadata m_meta;
+
public:
float m_physics_override_speed = 1.0f;
float m_physics_override_jump = 1.0f;
@@ -246,9 +226,10 @@ public:
bool m_physics_override_sent = false;
};
-
-struct PlayerHPChangeReason {
- enum Type : u8 {
+struct PlayerHPChangeReason
+{
+ enum Type : u8
+ {
SET_HP,
PLAYER_PUNCH,
FALL,
@@ -266,10 +247,7 @@ struct PlayerHPChangeReason {
// For NODE_DAMAGE
std::string node;
- inline bool hasLuaReference() const
- {
- return lua_reference >= 0;
- }
+ inline bool hasLuaReference() const { return lua_reference >= 0; }
bool setTypeFromString(const std::string &typestr)
{
@@ -311,15 +289,12 @@ struct PlayerHPChangeReason {
}
}
- PlayerHPChangeReason(Type type):
- type(type)
- {}
+ PlayerHPChangeReason(Type type) : type(type) {}
- PlayerHPChangeReason(Type type, ServerActiveObject *object):
+ PlayerHPChangeReason(Type type, ServerActiveObject *object) :
type(type), object(object)
- {}
+ {
+ }
- PlayerHPChangeReason(Type type, std::string node):
- type(type), node(node)
- {}
+ PlayerHPChangeReason(Type type, std::string node) : type(type), node(node) {}
};
diff --git a/src/server/serveractiveobject.cpp b/src/server/serveractiveobject.cpp
index 3aa78c7d5..8345ebd47 100644
--- a/src/server/serveractiveobject.cpp
+++ b/src/server/serveractiveobject.cpp
@@ -30,39 +30,6 @@ ServerActiveObject::ServerActiveObject(ServerEnvironment *env, v3f pos):
{
}
-ServerActiveObject* ServerActiveObject::create(ActiveObjectType type,
- ServerEnvironment *env, u16 id, v3f pos,
- const std::string &data)
-{
- // Find factory function
- std::map<u16, Factory>::iterator n;
- n = m_types.find(type);
- if(n == m_types.end()) {
- // These are 0.3 entity types, return without error.
- if (ACTIVEOBJECT_TYPE_ITEM <= type && type <= ACTIVEOBJECT_TYPE_MOBV2) {
- return NULL;
- }
-
- // If factory is not found, just return.
- warningstream<<"ServerActiveObject: No factory for type="
- <<type<<std::endl;
- return NULL;
- }
-
- Factory f = n->second;
- ServerActiveObject *object = (*f)(env, pos, data);
- return object;
-}
-
-void ServerActiveObject::registerType(u16 type, Factory f)
-{
- std::map<u16, Factory>::iterator n;
- n = m_types.find(type);
- if(n != m_types.end())
- return;
- m_types[type] = f;
-}
-
float ServerActiveObject::getMinimumSavedMovement()
{
return 2.0*BS;
diff --git a/src/server/serveractiveobject.h b/src/server/serveractiveobject.h
index 2e013a6b6..927009aef 100644
--- a/src/server/serveractiveobject.h
+++ b/src/server/serveractiveobject.h
@@ -244,12 +244,6 @@ protected:
virtual void onAttach(int parent_id) {}
virtual void onDetach(int parent_id) {}
- // Used for creating objects based on type
- typedef ServerActiveObject* (*Factory)
- (ServerEnvironment *env, v3f pos,
- const std::string &data);
- static void registerType(u16 type, Factory f);
-
ServerEnvironment *m_env;
v3f m_base_position;
std::unordered_set<u32> m_attached_particle_spawners;
@@ -258,8 +252,4 @@ protected:
Queue of messages to be sent to the client
*/
std::queue<ActiveObjectMessage> m_messages_out;
-
-private:
- // Used for creating objects based on type
- static std::map<u16, Factory> m_types;
};
diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp
index c2ab5c07d..32d10f8c0 100644
--- a/src/serverenvironment.cpp
+++ b/src/serverenvironment.cpp
@@ -44,6 +44,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#if USE_POSTGRESQL
#include "database/database-postgresql.h"
#endif
+#include "server/luaentity_sao.h"
#include "server/player_sao.h"
#define LBM_NAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyz0123456789_:"
@@ -1778,6 +1779,18 @@ static void print_hexdump(std::ostream &o, const std::string &data)
}
}
+ServerActiveObject* ServerEnvironment::createSAO(ActiveObjectType type, v3f pos,
+ const std::string &data)
+{
+ switch (type) {
+ case ACTIVEOBJECT_TYPE_LUAENTITY:
+ return new LuaEntitySAO(this, pos, data);
+ default:
+ warningstream << "ServerActiveObject: No factory for type=" << type << std::endl;
+ }
+ return nullptr;
+}
+
/*
Convert stored objects from blocks near the players to active.
*/
@@ -1811,10 +1824,10 @@ void ServerEnvironment::activateObjects(MapBlock *block, u32 dtime_s)
std::vector<StaticObject> new_stored;
for (const StaticObject &s_obj : block->m_static_objects.m_stored) {
// Create an active object from the data
- ServerActiveObject *obj = ServerActiveObject::create
- ((ActiveObjectType) s_obj.type, this, 0, s_obj.pos, s_obj.data);
+ ServerActiveObject *obj = createSAO((ActiveObjectType) s_obj.type, s_obj.pos,
+ s_obj.data);
// If couldn't create object, store static data back.
- if(obj == NULL) {
+ if (!obj) {
errorstream<<"ServerEnvironment::activateObjects(): "
<<"failed to create active object from static object "
<<"in block "<<PP(s_obj.pos/BS)
diff --git a/src/serverenvironment.h b/src/serverenvironment.h
index bf10e3ca8..e10658249 100644
--- a/src/serverenvironment.h
+++ b/src/serverenvironment.h
@@ -468,4 +468,6 @@ private:
IntervalLimiter m_particle_management_interval;
std::unordered_map<u32, float> m_particle_spawners;
std::unordered_map<u32, u16> m_particle_spawner_attachments;
+
+ ServerActiveObject* createSAO(ActiveObjectType type, v3f pos, const std::string &data);
};
diff --git a/src/staticobject.cpp b/src/staticobject.cpp
index bebca12ec..5ccb7baf5 100644
--- a/src/staticobject.cpp
+++ b/src/staticobject.cpp
@@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "staticobject.h"
#include "util/serialize.h"
-#include "content_sao.h"
+#include "server/serveractiveobject.h"
StaticObject::StaticObject(const ServerActiveObject *s_obj, const v3f &pos_):
type(s_obj->getType()),
diff --git a/src/unittest/test_player.cpp b/src/unittest/test_player.cpp
index e2b1cd855..6990b4016 100644
--- a/src/unittest/test_player.cpp
+++ b/src/unittest/test_player.cpp
@@ -21,7 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "exceptions.h"
#include "remoteplayer.h"
-#include "content_sao.h"
#include "server.h"
class TestPlayer : public TestBase