#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; class ServerScoreboard; 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(); bool placeNewPlayer(Connection *connection, shared_ptr player, shared_ptr packet); protected: void updateEntireScoreboard(ServerScoreboard *scoreboard, shared_ptr player); public: void setLevel(ServerLevelArray levels); void changeDimension(shared_ptr player, ServerLevel *from); int getMaxRange(); CompoundTag *load(shared_ptr 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 repositionAcrossDimension(shared_ptr entity, int lastDimension, ServerLevel *oldLevel, ServerLevel *newLevel); 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); shared_ptr getNearestPlayer(Pos *position, int range); vector *getPlayers(Pos *position, int rangeMin, int rangeMax, int count, int mode, int levelMin, int levelMax, unordered_map *scoreRequirements, const wstring &playerName, const wstring &teamName, Level *level); private: bool meetsScoreRequirements(shared_ptr player, unordered_map scoreRequirements); public: 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); // 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); };