the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#pragma once
2#include <deque>
3#include "..\Minecraft.World\ArrayWithLength.h"
4
5class ServerPlayer;
6class PlayerChunkMap;
7class MinecraftServer;
8class PlayerIO;
9class PendingConnection;
10class Packet;
11class ServerLevel;
12class TileEntity;
13class ProgressListener;
14class GameType;
15class LoginPacket;
16class ServerScoreboard;
17
18using namespace std;
19
20class PlayerList
21{
22private:
23 static const int SEND_PLAYER_INFO_INTERVAL = 20 * 10; // 4J - brought forward from 1.2.3
24// public static Logger logger = Logger.getLogger("Minecraft");
25public:
26 vector<shared_ptr<ServerPlayer> > players;
27
28private:
29 MinecraftServer *server;
30 unsigned int maxPlayers;
31
32 // 4J Added
33 vector<PlayerUID> m_bannedXuids;
34 deque<BYTE> m_smallIdsToKick;
35 CRITICAL_SECTION m_kickPlayersCS;
36 deque<BYTE> m_smallIdsToClose;
37 CRITICAL_SECTION m_closePlayersCS;
38/* 4J - removed
39 Set<String> bans = new HashSet<String>();
40 Set<String> ipBans = new HashSet<String>();
41 Set<String> ops = new HashSet<String>();
42 Set<String> whitelist = new HashSet<String>();
43 File banFile, ipBanFile, opFile, whiteListFile;
44 */
45 PlayerIO *playerIo;
46 bool doWhiteList;
47
48 GameType *overrideGameMode;
49 bool allowCheatsForAllPlayers;
50 int viewDistance;
51
52 int sendAllPlayerInfoIn;
53
54 // 4J Added to maintain which players in which dimensions can receive all packet types
55 vector<shared_ptr<ServerPlayer> > receiveAllPlayers[3];
56private:
57 shared_ptr<ServerPlayer> findAlivePlayerOnSystem(shared_ptr<ServerPlayer> currentPlayer);
58
59public:
60 void removePlayerFromReceiving(shared_ptr<ServerPlayer> player, bool usePlayerDimension = true, int dimension = 0);
61 void addPlayerToReceiving(shared_ptr<ServerPlayer> player);
62 bool canReceiveAllPackets(shared_ptr<ServerPlayer> player);
63
64public:
65 PlayerList(MinecraftServer *server);
66 ~PlayerList();
67 void placeNewPlayer(Connection *connection, shared_ptr<ServerPlayer> player, shared_ptr<LoginPacket> packet);
68
69protected:
70 void updateEntireScoreboard(ServerScoreboard *scoreboard, shared_ptr<ServerPlayer> player);
71
72public:
73 void setLevel(ServerLevelArray levels);
74 void changeDimension(shared_ptr<ServerPlayer> player, ServerLevel *from);
75 int getMaxRange();
76 CompoundTag *load(shared_ptr<ServerPlayer> player);
77protected:
78 void save(shared_ptr<ServerPlayer> player);
79public:
80 void validatePlayerSpawnPosition(shared_ptr<ServerPlayer> player); // 4J Added
81 void add(shared_ptr<ServerPlayer> player);
82 void move(shared_ptr<ServerPlayer> player);
83 void remove(shared_ptr<ServerPlayer> player);
84 shared_ptr<ServerPlayer> getPlayerForLogin(PendingConnection *pendingConnection, const wstring& userName, PlayerUID xuid, PlayerUID OnlineXuid);
85 shared_ptr<ServerPlayer> respawn(shared_ptr<ServerPlayer> serverPlayer, int targetDimension, bool keepAllPlayerData);
86 void toggleDimension(shared_ptr<ServerPlayer> player, int targetDimension);
87 void repositionAcrossDimension(shared_ptr<Entity> entity, int lastDimension, ServerLevel *oldLevel, ServerLevel *newLevel);
88 void tick();
89 bool isTrackingTile(int x, int y, int z, int dimension); // 4J added
90 void prioritiseTileChanges(int x, int y, int z, int dimension); // 4J added
91 void broadcastAll(shared_ptr<Packet> packet);
92 void broadcastAll(shared_ptr<Packet> packet, int dimension);
93
94 wstring getPlayerNames();
95
96public:
97 bool isWhiteListed(const wstring& name);
98 bool isOp(const wstring& name);
99 bool isOp(shared_ptr<ServerPlayer> player); // 4J Added
100 shared_ptr<ServerPlayer> getPlayer(const wstring& name);
101 shared_ptr<ServerPlayer> getPlayer(PlayerUID uid);
102 shared_ptr<ServerPlayer> getNearestPlayer(Pos *position, int range);
103 vector<ServerPlayer> *getPlayers(Pos *position, int rangeMin, int rangeMax, int count, int mode, int levelMin, int levelMax, unordered_map<wstring, int> *scoreRequirements, const wstring &playerName, const wstring &teamName, Level *level);
104
105private:
106 bool meetsScoreRequirements(shared_ptr<Player> player, unordered_map<wstring, int> scoreRequirements);
107
108public:
109 void sendMessage(const wstring& name, const wstring& message);
110 void broadcast(double x, double y, double z, double range, int dimension, shared_ptr<Packet> packet);
111 void broadcast(shared_ptr<Player> except, double x, double y, double z, double range, int dimension, shared_ptr<Packet> packet);
112 // 4J Added ProgressListener *progressListener param and bDeleteGuestMaps param
113 void saveAll(ProgressListener *progressListener, bool bDeleteGuestMaps = false);
114 void whiteList(const wstring& playerName);
115 void blackList(const wstring& playerName);
116// Set<String> getWhiteList(); / 4J removed
117 void reloadWhitelist();
118 void sendLevelInfo(shared_ptr<ServerPlayer> player, ServerLevel *level);
119 void sendAllPlayerInfo(shared_ptr<ServerPlayer> player);
120 int getPlayerCount();
121 int getPlayerCount(ServerLevel *level); // 4J Added
122 int getMaxPlayers();
123 MinecraftServer *getServer();
124 int getViewDistance();
125 void setOverrideGameMode(GameType *gameMode);
126
127private:
128 void updatePlayerGameMode(shared_ptr<ServerPlayer> newPlayer, shared_ptr<ServerPlayer> oldPlayer, Level *level);
129
130public:
131 void setAllowCheatsForAllPlayers(bool allowCommands);
132
133 // 4J Added
134 void kickPlayerByShortId(BYTE networkSmallId);
135 void closePlayerConnectionBySmallId(BYTE networkSmallId);
136 bool isXuidBanned(PlayerUID xuid);
137 // AP added for Vita so the range can be increased once the level starts
138 void setViewDistance(int newViewDistance);
139};