package net.minecraft.server; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.mojang.authlib.GameProfile; import io.netty.buffer.Unpooled; import java.io.File; import java.net.SocketAddress; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.UUID; import javax.annotation.Nullable; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public abstract class PlayerList { public static final File b = new File("banned-players.json"); public static final File c = new File("banned-ips.json"); public static final File d = new File("ops.json"); public static final File e = new File("whitelist.json"); private static final Logger LOGGER = LogManager.getLogger(); private static final SimpleDateFormat g = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z"); private final MinecraftServer server; public final List<EntityPlayer> players = Lists.newArrayList(); private final Map<UUID, EntityPlayer> j = Maps.newHashMap(); private final GameProfileBanList k; private final IpBanList l; private final OpList operators; private final WhiteList whitelist; private final Map<UUID, ServerStatisticManager> o; private final Map<UUID, AdvancementDataPlayer> p; public IPlayerFileData playerFileData; private boolean hasWhitelist; protected final int maxPlayers; private int viewDistance; private EnumGamemode t; private boolean u; private int v; public PlayerList(MinecraftServer minecraftserver, int i) { this.k = new GameProfileBanList(PlayerList.b); this.l = new IpBanList(PlayerList.c); this.operators = new OpList(PlayerList.d); this.whitelist = new WhiteList(PlayerList.e); this.o = Maps.newHashMap(); this.p = Maps.newHashMap(); this.server = minecraftserver; this.maxPlayers = i; this.getProfileBans().a(true); this.getIPBans().a(true); } public void a(NetworkManager networkmanager, EntityPlayer entityplayer) { GameProfile gameprofile = entityplayer.getProfile(); UserCache usercache = this.server.getUserCache(); GameProfile gameprofile1 = usercache.getProfile(gameprofile.getId()); String s = gameprofile1 == null ? gameprofile.getName() : gameprofile1.getName(); usercache.a(gameprofile); NBTTagCompound nbttagcompound = this.a(entityplayer); WorldServer worldserver = this.server.getWorldServer(entityplayer.dimension); entityplayer.spawnIn(worldserver); entityplayer.playerInteractManager.a((WorldServer) entityplayer.world); String s1 = "local"; if (networkmanager.getSocketAddress() != null) { s1 = networkmanager.getSocketAddress().toString(); } PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ({}, {}, {})", entityplayer.getDisplayName().getString(), s1, entityplayer.getId(), entityplayer.locX(), entityplayer.locY(), entityplayer.locZ()); WorldData worlddata = worldserver.getWorldData(); this.a(entityplayer, (EntityPlayer) null, worldserver); PlayerConnection playerconnection = new PlayerConnection(this.server, networkmanager, entityplayer); GameRules gamerules = worldserver.getGameRules(); boolean flag = gamerules.getBoolean(GameRules.DO_IMMEDIATE_RESPAWN); boolean flag1 = gamerules.getBoolean(GameRules.REDUCED_DEBUG_INFO); playerconnection.sendPacket(new PacketPlayOutLogin(entityplayer.getId(), entityplayer.playerInteractManager.getGameMode(), WorldData.c(worlddata.getSeed()), worlddata.isHardcore(), worldserver.worldProvider.getDimensionManager(), this.getMaxPlayers(), worlddata.getType(), this.viewDistance, flag1, !flag)); playerconnection.sendPacket(new PacketPlayOutCustomPayload(PacketPlayOutCustomPayload.a, (new PacketDataSerializer(Unpooled.buffer())).a(this.getServer().getServerModName()))); playerconnection.sendPacket(new PacketPlayOutServerDifficulty(worlddata.getDifficulty(), worlddata.isDifficultyLocked())); playerconnection.sendPacket(new PacketPlayOutAbilities(entityplayer.abilities)); playerconnection.sendPacket(new PacketPlayOutHeldItemSlot(entityplayer.inventory.itemInHandIndex)); playerconnection.sendPacket(new PacketPlayOutRecipeUpdate(this.server.getCraftingManager().b())); playerconnection.sendPacket(new PacketPlayOutTags(this.server.getTagRegistry())); this.d(entityplayer); entityplayer.getStatisticManager().c(); entityplayer.B().a(entityplayer); this.sendScoreboard(worldserver.getScoreboard(), entityplayer); this.server.invalidatePingSample(); ChatMessage chatmessage; if (entityplayer.getProfile().getName().equalsIgnoreCase(s)) { chatmessage = new ChatMessage("multiplayer.player.joined", new Object[]{entityplayer.getScoreboardDisplayName()}); } else { chatmessage = new ChatMessage("multiplayer.player.joined.renamed", new Object[]{entityplayer.getScoreboardDisplayName(), s}); } this.sendMessage(chatmessage.a(EnumChatFormat.YELLOW)); playerconnection.a(entityplayer.locX(), entityplayer.locY(), entityplayer.locZ(), entityplayer.yaw, entityplayer.pitch); this.players.add(entityplayer); this.j.put(entityplayer.getUniqueID(), entityplayer); this.sendAll(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, new EntityPlayer[]{entityplayer})); for (int i = 0; i < this.players.size(); ++i) { entityplayer.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, new EntityPlayer[]{(EntityPlayer) this.players.get(i)})); } worldserver.addPlayerJoin(entityplayer); this.server.getBossBattleCustomData().a(entityplayer); this.a(entityplayer, worldserver); if (!this.server.getResourcePack().isEmpty()) { entityplayer.setResourcePack(this.server.getResourcePack(), this.server.getResourcePackHash()); } Iterator iterator = entityplayer.getEffects().iterator(); while (iterator.hasNext()) { MobEffect mobeffect = (MobEffect) iterator.next(); playerconnection.sendPacket(new PacketPlayOutEntityEffect(entityplayer.getId(), mobeffect)); } if (nbttagcompound != null && nbttagcompound.hasKeyOfType("RootVehicle", 10)) { NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("RootVehicle"); Entity entity = EntityTypes.a(nbttagcompound1.getCompound("Entity"), worldserver, (entity1) -> { return !worldserver.addEntitySerialized(entity1) ? null : entity1; }); if (entity != null) { UUID uuid = nbttagcompound1.a("Attach"); Iterator iterator1; Entity entity1; if (entity.getUniqueID().equals(uuid)) { entityplayer.a(entity, true); } else { iterator1 = entity.getAllPassengers().iterator(); while (iterator1.hasNext()) { entity1 = (Entity) iterator1.next(); if (entity1.getUniqueID().equals(uuid)) { entityplayer.a(entity1, true); break; } } } if (!entityplayer.isPassenger()) { PlayerList.LOGGER.warn("Couldn't reattach entity to player"); worldserver.removeEntity(entity); iterator1 = entity.getAllPassengers().iterator(); while (iterator1.hasNext()) { entity1 = (Entity) iterator1.next(); worldserver.removeEntity(entity1); } } } } entityplayer.syncInventory(); } public void sendScoreboard(ScoreboardServer scoreboardserver, EntityPlayer entityplayer) { Set<ScoreboardObjective> set = Sets.newHashSet(); Iterator iterator = scoreboardserver.getTeams().iterator(); while (iterator.hasNext()) { ScoreboardTeam scoreboardteam = (ScoreboardTeam) iterator.next(); entityplayer.playerConnection.sendPacket(new PacketPlayOutScoreboardTeam(scoreboardteam, 0)); } for (int i = 0; i < 19; ++i) { ScoreboardObjective scoreboardobjective = scoreboardserver.getObjectiveForSlot(i); if (scoreboardobjective != null && !set.contains(scoreboardobjective)) { List<Packet<?>> list = scoreboardserver.getScoreboardScorePacketsForObjective(scoreboardobjective); Iterator iterator1 = list.iterator(); while (iterator1.hasNext()) { Packet<?> packet = (Packet) iterator1.next(); entityplayer.playerConnection.sendPacket(packet); } set.add(scoreboardobjective); } } } public void setPlayerFileData(WorldServer worldserver) { this.playerFileData = worldserver.getDataManager(); worldserver.getWorldBorder().a(new IWorldBorderListener() { @Override public void a(WorldBorder worldborder, double d0) { PlayerList.this.sendAll(new PacketPlayOutWorldBorder(worldborder, PacketPlayOutWorldBorder.EnumWorldBorderAction.SET_SIZE)); } @Override public void a(WorldBorder worldborder, double d0, double d1, long i) { PlayerList.this.sendAll(new PacketPlayOutWorldBorder(worldborder, PacketPlayOutWorldBorder.EnumWorldBorderAction.LERP_SIZE)); } @Override public void a(WorldBorder worldborder, double d0, double d1) { PlayerList.this.sendAll(new PacketPlayOutWorldBorder(worldborder, PacketPlayOutWorldBorder.EnumWorldBorderAction.SET_CENTER)); } @Override public void a(WorldBorder worldborder, int i) { PlayerList.this.sendAll(new PacketPlayOutWorldBorder(worldborder, PacketPlayOutWorldBorder.EnumWorldBorderAction.SET_WARNING_TIME)); } @Override public void b(WorldBorder worldborder, int i) { PlayerList.this.sendAll(new PacketPlayOutWorldBorder(worldborder, PacketPlayOutWorldBorder.EnumWorldBorderAction.SET_WARNING_BLOCKS)); } @Override public void b(WorldBorder worldborder, double d0) {} @Override public void c(WorldBorder worldborder, double d0) {} }); } @Nullable public NBTTagCompound a(EntityPlayer entityplayer) { NBTTagCompound nbttagcompound = this.server.getWorldServer(DimensionManager.OVERWORLD).getWorldData().h(); NBTTagCompound nbttagcompound1; if (entityplayer.getDisplayName().getString().equals(this.server.getSinglePlayerName()) && nbttagcompound != null) { nbttagcompound1 = nbttagcompound; entityplayer.f(nbttagcompound); PlayerList.LOGGER.debug("loading single player"); } else { nbttagcompound1 = this.playerFileData.load(entityplayer); } return nbttagcompound1; } protected void savePlayerFile(EntityPlayer entityplayer) { this.playerFileData.save(entityplayer); ServerStatisticManager serverstatisticmanager = (ServerStatisticManager) this.o.get(entityplayer.getUniqueID()); if (serverstatisticmanager != null) { serverstatisticmanager.a(); } AdvancementDataPlayer advancementdataplayer = (AdvancementDataPlayer) this.p.get(entityplayer.getUniqueID()); if (advancementdataplayer != null) { advancementdataplayer.c(); } } public void disconnect(EntityPlayer entityplayer) { WorldServer worldserver = entityplayer.getWorldServer(); entityplayer.a(StatisticList.LEAVE_GAME); this.savePlayerFile(entityplayer); if (entityplayer.isPassenger()) { Entity entity = entityplayer.getRootVehicle(); if (entity.hasSinglePlayerPassenger()) { PlayerList.LOGGER.debug("Removing player mount"); entityplayer.stopRiding(); worldserver.removeEntity(entity); Iterator iterator = entity.getAllPassengers().iterator(); while (iterator.hasNext()) { Entity entity1 = (Entity) iterator.next(); worldserver.removeEntity(entity1); } worldserver.getChunkAt(entityplayer.chunkX, entityplayer.chunkZ).markDirty(); } } entityplayer.decouple(); worldserver.removePlayer(entityplayer); entityplayer.getAdvancementData().a(); this.players.remove(entityplayer); this.server.getBossBattleCustomData().b(entityplayer); UUID uuid = entityplayer.getUniqueID(); EntityPlayer entityplayer1 = (EntityPlayer) this.j.get(uuid); if (entityplayer1 == entityplayer) { this.j.remove(uuid); this.o.remove(uuid); this.p.remove(uuid); } this.sendAll(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, new EntityPlayer[]{entityplayer})); } @Nullable public IChatBaseComponent attemptLogin(SocketAddress socketaddress, GameProfile gameprofile) { ChatMessage chatmessage; if (this.k.isBanned(gameprofile)) { GameProfileBanEntry gameprofilebanentry = (GameProfileBanEntry) this.k.get(gameprofile); chatmessage = new ChatMessage("multiplayer.disconnect.banned.reason", new Object[]{gameprofilebanentry.getReason()}); if (gameprofilebanentry.getExpires() != null) { chatmessage.addSibling(new ChatMessage("multiplayer.disconnect.banned.expiration", new Object[]{PlayerList.g.format(gameprofilebanentry.getExpires())})); } return chatmessage; } else if (!this.isWhitelisted(gameprofile)) { return new ChatMessage("multiplayer.disconnect.not_whitelisted", new Object[0]); } else if (this.l.isBanned(socketaddress)) { IpBanEntry ipbanentry = this.l.get(socketaddress); chatmessage = new ChatMessage("multiplayer.disconnect.banned_ip.reason", new Object[]{ipbanentry.getReason()}); if (ipbanentry.getExpires() != null) { chatmessage.addSibling(new ChatMessage("multiplayer.disconnect.banned_ip.expiration", new Object[]{PlayerList.g.format(ipbanentry.getExpires())})); } return chatmessage; } else { return this.players.size() >= this.maxPlayers && !this.f(gameprofile) ? new ChatMessage("multiplayer.disconnect.server_full", new Object[0]) : null; } } public EntityPlayer processLogin(GameProfile gameprofile) { UUID uuid = EntityHuman.a(gameprofile); List<EntityPlayer> list = Lists.newArrayList(); for (int i = 0; i < this.players.size(); ++i) { EntityPlayer entityplayer = (EntityPlayer) this.players.get(i); if (entityplayer.getUniqueID().equals(uuid)) { list.add(entityplayer); } } EntityPlayer entityplayer1 = (EntityPlayer) this.j.get(gameprofile.getId()); if (entityplayer1 != null && !list.contains(entityplayer1)) { list.add(entityplayer1); } Iterator iterator = list.iterator(); while (iterator.hasNext()) { EntityPlayer entityplayer2 = (EntityPlayer) iterator.next(); entityplayer2.playerConnection.disconnect(new ChatMessage("multiplayer.disconnect.duplicate_login", new Object[0])); } Object object; if (this.server.isDemoMode()) { object = new DemoPlayerInteractManager(this.server.getWorldServer(DimensionManager.OVERWORLD)); } else { object = new PlayerInteractManager(this.server.getWorldServer(DimensionManager.OVERWORLD)); } return new EntityPlayer(this.server, this.server.getWorldServer(DimensionManager.OVERWORLD), gameprofile, (PlayerInteractManager) object); } public EntityPlayer moveToWorld(EntityPlayer entityplayer, DimensionManager dimensionmanager, boolean flag) { this.players.remove(entityplayer); entityplayer.getWorldServer().removePlayer(entityplayer); BlockPosition blockposition = entityplayer.getBed(); boolean flag1 = entityplayer.isRespawnForced(); entityplayer.dimension = dimensionmanager; Object object; if (this.server.isDemoMode()) { object = new DemoPlayerInteractManager(this.server.getWorldServer(entityplayer.dimension)); } else { object = new PlayerInteractManager(this.server.getWorldServer(entityplayer.dimension)); } EntityPlayer entityplayer1 = new EntityPlayer(this.server, this.server.getWorldServer(entityplayer.dimension), entityplayer.getProfile(), (PlayerInteractManager) object); entityplayer1.playerConnection = entityplayer.playerConnection; entityplayer1.copyFrom(entityplayer, flag); entityplayer1.e(entityplayer.getId()); entityplayer1.a(entityplayer.getMainHand()); Iterator iterator = entityplayer.getScoreboardTags().iterator(); while (iterator.hasNext()) { String s = (String) iterator.next(); entityplayer1.addScoreboardTag(s); } WorldServer worldserver = this.server.getWorldServer(entityplayer.dimension); this.a(entityplayer1, entityplayer, worldserver); if (blockposition != null) { Optional<Vec3D> optional = EntityHuman.getBed(this.server.getWorldServer(entityplayer.dimension), blockposition, flag1); if (optional.isPresent()) { Vec3D vec3d = (Vec3D) optional.get(); entityplayer1.setPositionRotation(vec3d.x, vec3d.y, vec3d.z, 0.0F, 0.0F); entityplayer1.setRespawnPosition(blockposition, flag1, false); } else { entityplayer1.playerConnection.sendPacket(new PacketPlayOutGameStateChange(0, 0.0F)); } } while (!worldserver.getCubes(entityplayer1) && entityplayer1.locY() < 256.0D) { entityplayer1.setPosition(entityplayer1.locX(), entityplayer1.locY() + 1.0D, entityplayer1.locZ()); } WorldData worlddata = entityplayer1.world.getWorldData(); entityplayer1.playerConnection.sendPacket(new PacketPlayOutRespawn(entityplayer1.dimension, WorldData.c(worlddata.getSeed()), worlddata.getType(), entityplayer1.playerInteractManager.getGameMode())); BlockPosition blockposition1 = worldserver.getSpawn(); entityplayer1.playerConnection.a(entityplayer1.locX(), entityplayer1.locY(), entityplayer1.locZ(), entityplayer1.yaw, entityplayer1.pitch); entityplayer1.playerConnection.sendPacket(new PacketPlayOutSpawnPosition(blockposition1)); entityplayer1.playerConnection.sendPacket(new PacketPlayOutServerDifficulty(worlddata.getDifficulty(), worlddata.isDifficultyLocked())); entityplayer1.playerConnection.sendPacket(new PacketPlayOutExperience(entityplayer1.exp, entityplayer1.expTotal, entityplayer1.expLevel)); this.a(entityplayer1, worldserver); this.d(entityplayer1); worldserver.addPlayerRespawn(entityplayer1); this.players.add(entityplayer1); this.j.put(entityplayer1.getUniqueID(), entityplayer1); entityplayer1.syncInventory(); entityplayer1.setHealth(entityplayer1.getHealth()); return entityplayer1; } public void d(EntityPlayer entityplayer) { GameProfile gameprofile = entityplayer.getProfile(); int i = this.server.b(gameprofile); this.a(entityplayer, i); } public void tick() { if (++this.v > 600) { this.sendAll(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.UPDATE_LATENCY, this.players)); this.v = 0; } } public void sendAll(Packet<?> packet) { for (int i = 0; i < this.players.size(); ++i) { ((EntityPlayer) this.players.get(i)).playerConnection.sendPacket(packet); } } public void a(Packet<?> packet, DimensionManager dimensionmanager) { for (int i = 0; i < this.players.size(); ++i) { EntityPlayer entityplayer = (EntityPlayer) this.players.get(i); if (entityplayer.dimension == dimensionmanager) { entityplayer.playerConnection.sendPacket(packet); } } } public void a(EntityHuman entityhuman, IChatBaseComponent ichatbasecomponent) { ScoreboardTeamBase scoreboardteambase = entityhuman.getScoreboardTeam(); if (scoreboardteambase != null) { Collection<String> collection = scoreboardteambase.getPlayerNameSet(); Iterator iterator = collection.iterator(); while (iterator.hasNext()) { String s = (String) iterator.next(); EntityPlayer entityplayer = this.getPlayer(s); if (entityplayer != null && entityplayer != entityhuman) { entityplayer.sendMessage(ichatbasecomponent); } } } } public void b(EntityHuman entityhuman, IChatBaseComponent ichatbasecomponent) { ScoreboardTeamBase scoreboardteambase = entityhuman.getScoreboardTeam(); if (scoreboardteambase == null) { this.sendMessage(ichatbasecomponent); } else { for (int i = 0; i < this.players.size(); ++i) { EntityPlayer entityplayer = (EntityPlayer) this.players.get(i); if (entityplayer.getScoreboardTeam() != scoreboardteambase) { entityplayer.sendMessage(ichatbasecomponent); } } } } public String[] e() { String[] astring = new String[this.players.size()]; for (int i = 0; i < this.players.size(); ++i) { astring[i] = ((EntityPlayer) this.players.get(i)).getProfile().getName(); } return astring; } public GameProfileBanList getProfileBans() { return this.k; } public IpBanList getIPBans() { return this.l; } public void addOp(GameProfile gameprofile) { this.operators.add(new OpListEntry(gameprofile, this.server.j(), this.operators.b(gameprofile))); EntityPlayer entityplayer = this.a(gameprofile.getId()); if (entityplayer != null) { this.d(entityplayer); } } public void removeOp(GameProfile gameprofile) { this.operators.remove(gameprofile); EntityPlayer entityplayer = this.a(gameprofile.getId()); if (entityplayer != null) { this.d(entityplayer); } } private void a(EntityPlayer entityplayer, int i) { if (entityplayer.playerConnection != null) { byte b0; if (i <= 0) { b0 = 24; } else if (i >= 4) { b0 = 28; } else { b0 = (byte) (24 + i); } entityplayer.playerConnection.sendPacket(new PacketPlayOutEntityStatus(entityplayer, b0)); } this.server.getCommandDispatcher().a(entityplayer); } public boolean isWhitelisted(GameProfile gameprofile) { return !this.hasWhitelist || this.operators.d(gameprofile) || this.whitelist.d(gameprofile); } public boolean isOp(GameProfile gameprofile) { return this.operators.d(gameprofile) || this.server.a(gameprofile) && this.server.getWorldServer(DimensionManager.OVERWORLD).getWorldData().t() || this.u; } @Nullable public EntityPlayer getPlayer(String s) { Iterator iterator = this.players.iterator(); EntityPlayer entityplayer; do { if (!iterator.hasNext()) { return null; } entityplayer = (EntityPlayer) iterator.next(); } while (!entityplayer.getProfile().getName().equalsIgnoreCase(s)); return entityplayer; } public void sendPacketNearby(@Nullable EntityHuman entityhuman, double d0, double d1, double d2, double d3, DimensionManager dimensionmanager, Packet<?> packet) { for (int i = 0; i < this.players.size(); ++i) { EntityPlayer entityplayer = (EntityPlayer) this.players.get(i); if (entityplayer != entityhuman && entityplayer.dimension == dimensionmanager) { double d4 = d0 - entityplayer.locX(); double d5 = d1 - entityplayer.locY(); double d6 = d2 - entityplayer.locZ(); if (d4 * d4 + d5 * d5 + d6 * d6 < d3 * d3) { entityplayer.playerConnection.sendPacket(packet); } } } } public void savePlayers() { for (int i = 0; i < this.players.size(); ++i) { this.savePlayerFile((EntityPlayer) this.players.get(i)); } } public WhiteList getWhitelist() { return this.whitelist; } public String[] getWhitelisted() { return this.whitelist.getEntries(); } public OpList getOPs() { return this.operators; } public String[] m() { return this.operators.getEntries(); } public void reloadWhitelist() {} public void a(EntityPlayer entityplayer, WorldServer worldserver) { WorldBorder worldborder = this.server.getWorldServer(DimensionManager.OVERWORLD).getWorldBorder(); entityplayer.playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldborder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE)); entityplayer.playerConnection.sendPacket(new PacketPlayOutUpdateTime(worldserver.getTime(), worldserver.getDayTime(), worldserver.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE))); BlockPosition blockposition = worldserver.getSpawn(); entityplayer.playerConnection.sendPacket(new PacketPlayOutSpawnPosition(blockposition)); if (worldserver.isRaining()) { entityplayer.playerConnection.sendPacket(new PacketPlayOutGameStateChange(1, 0.0F)); entityplayer.playerConnection.sendPacket(new PacketPlayOutGameStateChange(7, worldserver.d(1.0F))); entityplayer.playerConnection.sendPacket(new PacketPlayOutGameStateChange(8, worldserver.b(1.0F))); } } public void updateClient(EntityPlayer entityplayer) { entityplayer.updateInventory(entityplayer.defaultContainer); entityplayer.triggerHealthUpdate(); entityplayer.playerConnection.sendPacket(new PacketPlayOutHeldItemSlot(entityplayer.inventory.itemInHandIndex)); } public int getPlayerCount() { return this.players.size(); } public int getMaxPlayers() { return this.maxPlayers; } public boolean getHasWhitelist() { return this.hasWhitelist; } public void setHasWhitelist(boolean flag) { this.hasWhitelist = flag; } public List<EntityPlayer> b(String s) { List<EntityPlayer> list = Lists.newArrayList(); Iterator iterator = this.players.iterator(); while (iterator.hasNext()) { EntityPlayer entityplayer = (EntityPlayer) iterator.next(); if (entityplayer.v().equals(s)) { list.add(entityplayer); } } return list; } public int getViewDistance() { return this.viewDistance; } public MinecraftServer getServer() { return this.server; } public NBTTagCompound save() { return null; } private void a(EntityPlayer entityplayer, EntityPlayer entityplayer1, GeneratorAccess generatoraccess) { if (entityplayer1 != null) { entityplayer.playerInteractManager.setGameMode(entityplayer1.playerInteractManager.getGameMode()); } else if (this.t != null) { entityplayer.playerInteractManager.setGameMode(this.t); } entityplayer.playerInteractManager.b(generatoraccess.getWorldData().getGameType()); } public void shutdown() { for (int i = 0; i < this.players.size(); ++i) { ((EntityPlayer) this.players.get(i)).playerConnection.disconnect(new ChatMessage("multiplayer.disconnect.server_shutdown", new Object[0])); } } public void sendMessage(IChatBaseComponent ichatbasecomponent, boolean flag) { this.server.sendMessage(ichatbasecomponent); ChatMessageType chatmessagetype = flag ? ChatMessageType.SYSTEM : ChatMessageType.CHAT; this.sendAll(new PacketPlayOutChat(ichatbasecomponent, chatmessagetype)); } public void sendMessage(IChatBaseComponent ichatbasecomponent) { this.sendMessage(ichatbasecomponent, true); } public ServerStatisticManager getStatisticManager(EntityHuman entityhuman) { UUID uuid = entityhuman.getUniqueID(); ServerStatisticManager serverstatisticmanager = uuid == null ? null : (ServerStatisticManager) this.o.get(uuid); if (serverstatisticmanager == null) { File file = new File(this.server.getWorldServer(DimensionManager.OVERWORLD).getDataManager().getDirectory(), "stats"); File file1 = new File(file, uuid + ".json"); if (!file1.exists()) { File file2 = new File(file, entityhuman.getDisplayName().getString() + ".json"); if (file2.exists() && file2.isFile()) { file2.renameTo(file1); } } serverstatisticmanager = new ServerStatisticManager(this.server, file1); this.o.put(uuid, serverstatisticmanager); } return serverstatisticmanager; } public AdvancementDataPlayer f(EntityPlayer entityplayer) { UUID uuid = entityplayer.getUniqueID(); AdvancementDataPlayer advancementdataplayer = (AdvancementDataPlayer) this.p.get(uuid); if (advancementdataplayer == null) { File file = new File(this.server.getWorldServer(DimensionManager.OVERWORLD).getDataManager().getDirectory(), "advancements"); File file1 = new File(file, uuid + ".json"); advancementdataplayer = new AdvancementDataPlayer(this.server, file1, entityplayer); this.p.put(uuid, advancementdataplayer); } advancementdataplayer.a(entityplayer); return advancementdataplayer; } public void a(int i) { this.viewDistance = i; this.sendAll(new PacketPlayOutViewDistance(i)); Iterator iterator = this.server.getWorlds().iterator(); while (iterator.hasNext()) { WorldServer worldserver = (WorldServer) iterator.next(); if (worldserver != null) { worldserver.getChunkProvider().setViewDistance(i); } } } public List<EntityPlayer> getPlayers() { return this.players; } @Nullable public EntityPlayer a(UUID uuid) { return (EntityPlayer) this.j.get(uuid); } public boolean f(GameProfile gameprofile) { return false; } public void reload() { Iterator iterator = this.p.values().iterator(); while (iterator.hasNext()) { AdvancementDataPlayer advancementdataplayer = (AdvancementDataPlayer) iterator.next(); advancementdataplayer.b(); } this.sendAll(new PacketPlayOutTags(this.server.getTagRegistry())); PacketPlayOutRecipeUpdate packetplayoutrecipeupdate = new PacketPlayOutRecipeUpdate(this.server.getCraftingManager().b()); Iterator iterator1 = this.players.iterator(); while (iterator1.hasNext()) { EntityPlayer entityplayer = (EntityPlayer) iterator1.next(); entityplayer.playerConnection.sendPacket(packetplayoutrecipeupdate); entityplayer.B().a(entityplayer); } } public boolean v() { return this.u; } }