From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/PlayerList.h | 127 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 Minecraft.Client/PlayerList.h (limited to 'Minecraft.Client/PlayerList.h') diff --git a/Minecraft.Client/PlayerList.h b/Minecraft.Client/PlayerList.h new file mode 100644 index 00000000..14bd6b2d --- /dev/null +++ b/Minecraft.Client/PlayerList.h @@ -0,0 +1,127 @@ +#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); +}; -- cgit v1.2.3