#pragma once #include #include "..\Minecraft.World\ArrayWithLength.h" class ServerPlayer; class PlayerChunkMap; class MinecraftServer; class PlayerIO; class PendingConnection; class Packet; class ServerLevel; class TileEntity; class ProgressListener; class GameType; class LoginPacket; using namespace std; class PlayerList { private: static const int SEND_PLAYER_INFO_INTERVAL = 20 * 10; // 4J - brought forward from 1.2.3 // public static Logger logger = Logger.getLogger("Minecraft"); public: vector > players; private: MinecraftServer *server; unsigned int maxPlayers; // 4J Added vector m_bannedXuids; deque m_smallIdsToKick; CRITICAL_SECTION m_kickPlayersCS; deque m_smallIdsToClose; CRITICAL_SECTION m_closePlayersCS; /* 4J - removed Set bans = new HashSet(); Set ipBans = new HashSet(); Set ops = new HashSet(); Set whitelist = new HashSet(); File banFile, ipBanFile, opFile, whiteListFile; */ PlayerIO *playerIo; bool doWhiteList; GameType *overrideGameMode; bool allowCheatsForAllPlayers; int viewDistance; int sendAllPlayerInfoIn; // 4J Added to maintain which players in which dimensions can receive all packet types vector > receiveAllPlayers[3]; private: shared_ptr findAlivePlayerOnSystem(shared_ptr currentPlayer); public: void removePlayerFromReceiving(shared_ptr player, bool usePlayerDimension = true, int dimension = 0); void addPlayerToReceiving(shared_ptr player); bool canReceiveAllPackets(shared_ptr player); public: PlayerList(MinecraftServer *server); ~PlayerList(); void placeNewPlayer(Connection *connection, shared_ptr player, shared_ptr packet); void setLevel(ServerLevelArray levels); void changeDimension(shared_ptr player, ServerLevel *from); int getMaxRange(); bool load(shared_ptr player); // 4J Changed return val to bool to check if new player or loaded player protected: void save(shared_ptr player); public: void validatePlayerSpawnPosition(shared_ptr player); // 4J Added void add(shared_ptr player); void move(shared_ptr player); void remove(shared_ptr player); shared_ptr getPlayerForLogin(PendingConnection *pendingConnection, const wstring& userName, PlayerUID xuid, PlayerUID OnlineXuid); shared_ptr respawn(shared_ptr serverPlayer, int targetDimension, bool keepAllPlayerData); void toggleDimension(shared_ptr player, int targetDimension); void tick(); bool isTrackingTile(int x, int y, int z, int dimension); // 4J added void prioritiseTileChanges(int x, int y, int z, int dimension); // 4J added void broadcastAll(shared_ptr packet); void broadcastAll(shared_ptr packet, int dimension); wstring getPlayerNames(); public: bool isWhiteListed(const wstring& name); bool isOp(const wstring& name); bool isOp(shared_ptr player); // 4J Added shared_ptr getPlayer(const wstring& name); shared_ptr getPlayer(PlayerUID uid); void sendMessage(const wstring& name, const wstring& message); void broadcast(double x, double y, double z, double range, int dimension, shared_ptr packet); void broadcast(shared_ptr except, double x, double y, double z, double range, int dimension, shared_ptr packet); void broadcastToAllOps(const wstring& message); bool sendTo(const wstring& name, shared_ptr packet); // 4J Added ProgressListener *progressListener param and bDeleteGuestMaps param void saveAll(ProgressListener *progressListener, bool bDeleteGuestMaps = false); void whiteList(const wstring& playerName); void blackList(const wstring& playerName); // Set getWhiteList(); / 4J removed void reloadWhitelist(); void sendLevelInfo(shared_ptr player, ServerLevel *level); void sendAllPlayerInfo(shared_ptr player); int getPlayerCount(); int getPlayerCount(ServerLevel *level); // 4J Added int getMaxPlayers(); MinecraftServer *getServer(); int getViewDistance(); void setOverrideGameMode(GameType *gameMode); private: void updatePlayerGameMode(shared_ptr newPlayer, shared_ptr oldPlayer, Level *level); public: void setAllowCheatsForAllPlayers(bool allowCommands); // 4J Added void kickPlayerByShortId(BYTE networkSmallId); void closePlayerConnectionBySmallId(BYTE networkSmallId); bool isXuidBanned(PlayerUID xuid); // AP added for Vita so the range can be increased once the level starts void setViewDistance(int newViewDistance); };