#include "gamedef.h"
#include "inventorymanager.h"
#include "localplayer.h"
-#include "hud.h"
+#include "client/hud.h"
#include "particles.h"
#include "mapnode.h"
#include "tileanimation.h"
class IWritableTextureSource;
class IWritableShaderSource;
class IWritableItemDefManager;
-class IWritableNodeDefManager;
+class ISoundManager;
+class NodeDefManager;
//class IWritableCraftDefManager;
class ClientMediaDownloader;
struct MapDrawControl;
+class ModChannelMgr;
class MtEventManager;
struct PointedThing;
class MapDatabase;
};
class ClientScripting;
-struct GameUIFlags;
+class GameUI;
class Client : public con::PeerHandler, public InventoryManager, public IGameDef
{
IWritableTextureSource *tsrc,
IWritableShaderSource *shsrc,
IWritableItemDefManager *itemdef,
- IWritableNodeDefManager *nodedef,
+ NodeDefManager *nodedef,
ISoundManager *sound,
MtEventManager *event,
bool ipv6,
- GameUIFlags *game_ui_flags
+ GameUI *game_ui
);
~Client();
DISABLE_CLASS_COPY(Client);
// Load local mods into memory
- void loadMods();
+ void loadBuiltin();
void scanModSubfolder(const std::string &mod_name, const std::string &mod_path,
std::string mod_subpath);
inline void scanModIntoMemory(const std::string &mod_name, const std::string &mod_path)
scanModSubfolder(mod_name, mod_path, "");
}
- // Initizle the mods
- void initMods();
-
/*
request all threads managed by client to be stopped
*/
void handleCommand_AuthAccept(NetworkPacket* pkt);
void handleCommand_AcceptSudoMode(NetworkPacket* pkt);
void handleCommand_DenySudoMode(NetworkPacket* pkt);
- void handleCommand_InitLegacy(NetworkPacket* pkt);
void handleCommand_AccessDenied(NetworkPacket* pkt);
void handleCommand_RemoveNode(NetworkPacket* pkt);
void handleCommand_AddNode(NetworkPacket* pkt);
void handleCommand_BlockData(NetworkPacket* pkt);
void handleCommand_Inventory(NetworkPacket* pkt);
void handleCommand_TimeOfDay(NetworkPacket* pkt);
- void handleCommand_ChatMessageOld(NetworkPacket *pkt);
void handleCommand_ChatMessage(NetworkPacket *pkt);
void handleCommand_ActiveObjectRemoveAdd(NetworkPacket* pkt);
void handleCommand_ActiveObjectMessages(NetworkPacket* pkt);
void handleCommand_LocalPlayerAnimations(NetworkPacket* pkt);
void handleCommand_EyeOffset(NetworkPacket* pkt);
void handleCommand_UpdatePlayerList(NetworkPacket* pkt);
- void handleCommand_SrpBytesSandB(NetworkPacket* pkt);
- void handleCommand_CSMFlavourLimits(NetworkPacket *pkt);
+ void handleCommand_ModChannelMsg(NetworkPacket *pkt);
+ void handleCommand_ModChannelSignal(NetworkPacket *pkt);
+ void handleCommand_SrpBytesSandB(NetworkPacket *pkt);
+ void handleCommand_FormspecPrepend(NetworkPacket *pkt);
+ void handleCommand_CSMRestrictionFlags(NetworkPacket *pkt);
void ProcessData(NetworkPacket *pkt);
void sendChangePassword(const std::string &oldpassword,
const std::string &newpassword);
void sendDamage(u8 damage);
- void sendBreath(u16 breath);
void sendRespawn();
void sendReady();
static const std::string &getBuiltinLuaPath();
static const std::string &getClientModsLuaPath();
- virtual const std::vector<ModSpec> &getMods() const;
- virtual const ModSpec* getModSpec(const std::string &modname) const;
+ const std::vector<ModSpec> &getMods() const override;
+ const ModSpec* getModSpec(const std::string &modname) const override;
// Causes urgent mesh updates (unlike Map::add/removeNodeWithEvent)
void removeNode(v3s16 p);
/**
* Helper function for Client Side Modding
- * Flavour is applied there, this should not be used for core engine
+ * CSM restrictions are applied there, this should not be used for core engine
* @param p
* @param is_valid_position
* @return
void getLocalInventory(Inventory &dst);
/* InventoryManager interface */
- Inventory* getInventory(const InventoryLocation &loc);
- void inventoryAction(InventoryAction *a);
+ Inventory* getInventory(const InventoryLocation &loc) override;
+ void inventoryAction(InventoryAction *a) override;
const std::list<std::string> &getConnectedPlayerNames()
{
{ return m_proto_ver; }
bool connectedToServer();
+ void confirmRegistration();
+ bool m_is_registration_confirmation_state = false;
+ bool m_simple_singleplayer_mode;
float mediaReceiveProgress();
bool shouldShowMinimap() const;
// IGameDef interface
- virtual IItemDefManager* getItemDefManager();
- virtual INodeDefManager* getNodeDefManager();
- virtual ICraftDefManager* getCraftDefManager();
+ IItemDefManager* getItemDefManager() override;
+ const NodeDefManager* getNodeDefManager() override;
+ ICraftDefManager* getCraftDefManager() override;
ITextureSource* getTextureSource();
virtual IShaderSource* getShaderSource();
- IShaderSource *shsrc() { return getShaderSource(); }
- virtual u16 allocateUnknownNodeId(const std::string &name);
+ u16 allocateUnknownNodeId(const std::string &name) override;
virtual ISoundManager* getSoundManager();
- virtual MtEventManager* getEventManager();
+ MtEventManager* getEventManager();
virtual ParticleManager* getParticleManager();
bool checkLocalPrivilege(const std::string &priv)
{ return checkPrivilege(priv); }
- virtual scene::IAnimatedMesh* getMesh(const std::string &filename);
+ virtual scene::IAnimatedMesh* getMesh(const std::string &filename, bool cache = false);
const std::string* getModFile(const std::string &filename);
- virtual std::string getModStoragePath() const;
- virtual bool registerModStorage(ModMetadata *meta);
- virtual void unregisterModStorage(const std::string &name);
+ std::string getModStoragePath() const override;
+ bool registerModStorage(ModMetadata *meta) override;
+ void unregisterModStorage(const std::string &name) override;
// The following set of functions is used by ClientMediaDownloader
// Insert a media file appropriately into the appropriate manager
void pushToEventQueue(ClientEvent *event);
- void showGameChat(bool show = true);
- void showGameHud(bool show = true);
void showMinimap(bool show = true);
- void showProfiler(bool show = true);
- void showGameFog(bool show = true);
- void showGameDebug(bool show = true);
const Address getServerAddress();
return m_address_name;
}
- inline bool checkCSMFlavourLimit(CSMFlavourLimit flag) const
+ inline bool checkCSMRestrictionFlag(CSMRestrictionFlags flag) const
{
- return m_csm_flavour_limits & flag;
+ return m_csm_restriction_flags & flag;
}
u32 getCSMNodeRangeLimit() const
{
- return m_csm_noderange_limit;
+ return m_csm_restriction_noderange;
+ }
+
+ inline std::unordered_map<u32, u32> &getHUDTranslationMap()
+ {
+ return m_hud_server_to_client;
}
+ bool joinModChannel(const std::string &channel) override;
+ bool leaveModChannel(const std::string &channel) override;
+ bool sendModChannelMessage(const std::string &channel,
+ const std::string &message) override;
+ ModChannel *getModChannel(const std::string &channel) override;
+
+ const std::string &getFormspecPrepend() const
+ {
+ return m_env.getLocalPlayer()->formspec_prepend;
+ }
private:
+ void loadMods();
+ bool checkBuiltinIntegrity();
// Virtual methods from con::PeerHandler
- void peerAdded(con::Peer *peer);
- void deletingPeer(con::Peer *peer, bool timeout);
+ void peerAdded(con::Peer *peer) override;
+ void deletingPeer(con::Peer *peer, bool timeout) override;
void initLocalMapSaving(const Address &address,
const std::string &hostname,
// helper method shared with clientpackethandler
static AuthMechanism choseAuthMech(const u32 mechs);
- void sendLegacyInit(const char* playerName, const char* playerPassword);
void sendInit(const std::string &playerName);
+ void promptConfirmRegistration(AuthMechanism chosen_auth_mechanism);
void startAuth(AuthMechanism chosen_auth_mechanism);
void sendDeletedBlocks(std::vector<v3s16> &blocks);
void sendGotBlocks(v3s16 block);
float m_connection_reinit_timer = 0.1f;
float m_avg_rtt_timer = 0.0f;
float m_playerpos_send_timer = 0.0f;
- float m_ignore_damage_timer = 0.0f; // Used after server moves player
IntervalLimiter m_map_timer_and_unload_interval;
IWritableTextureSource *m_tsrc;
IWritableShaderSource *m_shsrc;
IWritableItemDefManager *m_itemdef;
- IWritableNodeDefManager *m_nodedef;
+ NodeDefManager *m_nodedef;
ISoundManager *m_sound;
MtEventManager *m_event;
std::queue<ClientEvent *> m_client_event_queue;
bool m_itemdef_received = false;
bool m_nodedef_received = false;
+ bool m_mods_loaded = false;
ClientMediaDownloader *m_media_downloader;
// time_of_day speed approximation for old protocol
// And relations to objects
std::unordered_map<int, u16> m_sounds_to_objects;
+ // CSM/client IDs to SSM/server IDs Mapping
+ // Map server particle spawner IDs to client IDs
+ std::unordered_map<u32, u32> m_particles_server_to_client;
+ // Map server hud ids to client hud ids
+ std::unordered_map<u32, u32> m_hud_server_to_client;
+
// Privileges
std::unordered_set<std::string> m_privileges;
// own state
LocalClientState m_state;
+ GameUI *m_game_ui;
+
// Used for saving server map to disk client-side
MapDatabase *m_localdb = nullptr;
IntervalLimiter m_localdb_save_interval;
std::unordered_map<std::string, ModMetadata *> m_mod_storages;
float m_mod_storage_save_timer = 10.0f;
std::vector<ModSpec> m_mods;
- GameUIFlags *m_game_ui_flags;
bool m_shutdown = false;
- // CSM flavour limits byteflag
- u64 m_csm_flavour_limits = CSMFlavourLimit::CSM_FL_NONE;
- u32 m_csm_noderange_limit = 8;
+ // CSM restrictions byteflag
+ u64 m_csm_restriction_flags = CSMRestrictionFlags::CSM_RF_NONE;
+ u32 m_csm_restriction_noderange = 8;
+
+ std::unique_ptr<ModChannelMgr> m_modchannel_mgr;
};