public void b(EntityPlayer entityplayer) { if (this.c.contains(entityplayer)) { // CraftBukkit start - If we haven't loaded yet don't load the chunk just so we can clean it up if (!this.done) { this.c.remove(entityplayer); if (this.c.isEmpty()) { ChunkIOExecutor.dropQueuedChunkLoad(this.playerChunkMap.getWorld(), this.location.x, this.location.z, this.loadedRunnable); this.playerChunkMap.b(this); } return; } // CraftBukkit end if (this.done) { entityplayer.playerConnection.sendPacket(new PacketPlayOutUnloadChunk(this.location.x, this.location.z)); } this.c.remove(entityplayer); if (this.c.isEmpty()) { this.playerChunkMap.b(this); } } }
@Nullable public Chunk getOrLoadChunkAt(int i, int j) { Chunk chunk = this.getLoadedChunkAt(i, j); if (chunk == null) { // CraftBukkit start ChunkRegionLoader loader = null; if (this.chunkLoader instanceof ChunkRegionLoader) { loader = (ChunkRegionLoader) this.chunkLoader; } if (loader != null && loader.chunkExists(world, i, j)) { chunk = ChunkIOExecutor.syncChunkLoad(world, loader, this, i, j); } /* chunk = this.loadChunk(i, j); if (chunk != null) { this.chunks.put(ChunkCoordIntPair.a(i, j), chunk); chunk.addEntities(); chunk.loadNearby(this, this.chunkGenerator); } */ // CraftBukkit end } return chunk; }
public Chunk getChunkAt(int i, int j, Runnable runnable) { this.unloadQueue.remove(i, j); Chunk chunk = this.chunks.get(LongHash.toLong(i, j)); ChunkRegionLoader loader = null; if (this.f instanceof ChunkRegionLoader) { loader = (ChunkRegionLoader) this.f; } // We can only use the queue for already generated chunks if (chunk == null && loader != null && loader.chunkExists(this.world, i, j)) { if (runnable != null) { ChunkIOExecutor.queueChunkLoad(this.world, loader, this, i, j, runnable); return null; } else { chunk = ChunkIOExecutor.syncChunkLoad(this.world, loader, this, i, j); } } else if (chunk == null) { chunk = this.originalGetChunkAt(i, j); } // If we didn't load the chunk async and have a callback run it now if (runnable != null) { runnable.run(); } return chunk; }
public String disconnect(EntityPlayer entityplayer) { // CraftBukkit - return string if (entityplayer.playerConnection.disconnected) return null; // CraftBukkit - exploitsies fix // CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it org.bukkit.craftbukkit.event.CraftEventFactory.handleInventoryCloseEvent(entityplayer); PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(this.cserver.getPlayer(entityplayer), "\u00A7e" + entityplayer.name + " left the game."); this.cserver.getPluginManager().callEvent(playerQuitEvent); entityplayer.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage()); // CraftBukkit end this.b(entityplayer); WorldServer worldserver = entityplayer.p(); if (entityplayer.vehicle != null && !(entityplayer.vehicle instanceof EntityPlayer)) { // CraftBukkit - Don't remove players worldserver.removeEntity(entityplayer.vehicle); // System.out.println("removing player mount"); // CraftBukkit - Removed debug message } worldserver.kill(entityplayer); worldserver.getPlayerChunkMap().removePlayer(entityplayer); this.players.remove(entityplayer); removePlayer(entityplayer); // Almura ChunkIOExecutor.adjustPoolSize(this.getPlayerCount()); // CraftBukkit // CraftBukkit start - .name -> .listName, replace sendAll with loop Packet201PlayerInfo packet = new Packet201PlayerInfo(entityplayer.listName, false, 9999); for (int i = 0; i < this.players.size(); ++i) { EntityPlayer entityplayer1 = (EntityPlayer) this.players.get(i); if (entityplayer1.getBukkitEntity().canSee(entityplayer.getBukkitEntity())) { entityplayer1.playerConnection.sendPacket(packet); } } // This removes the scoreboard (and player reference) for the specific player in the manager this.cserver.getScoreboardManager().removePlayer(entityplayer.getBukkitEntity()); return playerQuitEvent.getQuitMessage(); // CraftBukkit end }
public Chunk getChunkAt(int i, int j, Runnable runnable, boolean generate) { Chunk chunk = getChunkIfLoaded(i, j); ChunkRegionLoader loader = null; if (this.chunkLoader instanceof ChunkRegionLoader) { loader = (ChunkRegionLoader) this.chunkLoader; } // We can only use the queue for already generated chunks if (chunk == null && loader != null && loader.chunkExists(world, i, j)) { if (runnable != null) { ChunkIOExecutor.queueChunkLoad(world, loader, this, i, j, runnable); return null; } else { chunk = ChunkIOExecutor.syncChunkLoad(world, loader, this, i, j); } } else if (chunk == null && generate) { chunk = originalGetChunkAt(i, j); } // If we didn't load the chunk async and have a callback run it now if (runnable != null) { runnable.run(); } return chunk; }
public String disconnect(EntityPlayer entityplayer) { // CraftBukkit - return string if (entityplayer.playerConnection.disconnected) return null; // CraftBukkit - exploitsies fix // CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(this.cserver.getPlayer(entityplayer), "\u00A7e" + entityplayer.name + " left the game."); this.cserver.getPluginManager().callEvent(playerQuitEvent); entityplayer.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage()); // CraftBukkit end this.b(entityplayer); WorldServer worldserver = entityplayer.o(); if (entityplayer.vehicle != null) { worldserver.kill(entityplayer.vehicle); System.out.println("removing player mount"); } worldserver.kill(entityplayer); worldserver.getPlayerChunkMap().removePlayer(entityplayer); this.players.remove(entityplayer); ChunkIOExecutor.adjustPoolSize(this.getPlayerCount()); // CraftBukkit // CraftBukkit start - .name -> .listName, replace sendAll with loop Packet201PlayerInfo packet = new Packet201PlayerInfo(entityplayer.listName, false, 9999); for (int i = 0; i < this.players.size(); ++i) { EntityPlayer entityplayer1 = (EntityPlayer) this.players.get(i); if (entityplayer1.getBukkitEntity().canSee(entityplayer.getBukkitEntity())) { entityplayer1.playerConnection.sendPacket(packet); } } // This removes the scoreboard (and player reference) for the specific player in the manager this.cserver.getScoreboardManager().removePlayer(entityplayer.getBukkitEntity()); return playerQuitEvent.getQuitMessage(); // CraftBukkit end }
public String disconnect(EntityPlayer entityplayer) { // CraftBukkit - return string entityplayer.a(StatisticList.f); // CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it org.bukkit.craftbukkit.event.CraftEventFactory.handleInventoryCloseEvent(entityplayer); PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(this.cserver.getPlayer(entityplayer), "\u00A7e" + entityplayer.getName() + " left the game."); this.cserver.getPluginManager().callEvent(playerQuitEvent); entityplayer.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage()); // CraftBukkit end this.b(entityplayer); WorldServer worldserver = entityplayer.r(); if (entityplayer.vehicle != null && !(entityplayer.vehicle instanceof EntityPlayer)) { // CraftBukkit - Don't remove players worldserver.removeEntity(entityplayer.vehicle); g.debug("removing player mount"); } worldserver.kill(entityplayer); worldserver.getPlayerChunkMap().removePlayer(entityplayer); this.players.remove(entityplayer); this.n.remove(entityplayer.getUniqueID()); ChunkIOExecutor.adjustPoolSize(this.getPlayerCount()); // CraftBukkit // CraftBukkit start - .name -> .listName, replace sendAll with loop // this.sendAll(new PacketPlayOutPlayerInfo(entityplayer.getName(), false, 9999)); PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(entityplayer.listName, false, 9999); for (int i = 0; i < this.players.size(); ++i) { EntityPlayer entityplayer1 = (EntityPlayer) this.players.get(i); if (entityplayer1.getBukkitEntity().canSee(entityplayer.getBukkitEntity())) { entityplayer1.playerConnection.sendPacket(packet); } else { entityplayer1.getBukkitEntity().removeDisconnectingPlayer(entityplayer.getBukkitEntity()); } } // This removes the scoreboard (and player reference) for the specific player in the manager this.cserver.getScoreboardManager().removePlayer(entityplayer.getBukkitEntity()); return playerQuitEvent.getQuitMessage(); // CraftBukkit end }
public void onPlayerJoin(EntityPlayer entityplayer, String joinMessage) { // CraftBukkit added param this.players.add(entityplayer); this.playersByName.put(entityplayer.getName(), entityplayer); // Spigot this.j.put(entityplayer.getUniqueID(), entityplayer); // this.sendAll(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, new EntityPlayer[] { entityplayer})); // CraftBukkit - replaced with loop below WorldServer worldserver = this.server.getWorldServer(entityplayer.dimension); // CraftBukkit start PlayerJoinEvent playerJoinEvent = new PlayerJoinEvent(cserver.getPlayer(entityplayer), joinMessage); cserver.getPluginManager().callEvent(playerJoinEvent); joinMessage = playerJoinEvent.getJoinMessage(); if (joinMessage != null && joinMessage.length() > 0) { for (IChatBaseComponent line : org.bukkit.craftbukkit.util.CraftChatMessage.fromString(joinMessage)) { server.getPlayerList().sendAll(new PacketPlayOutChat(line)); } } ChunkIOExecutor.adjustPoolSize(getPlayerCount()); // CraftBukkit end // CraftBukkit start - sendAll above replaced with this loop PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, entityplayer); for (int i = 0; i < this.players.size(); ++i) { EntityPlayer entityplayer1 = (EntityPlayer) this.players.get(i); if (entityplayer1.getBukkitEntity().canSee(entityplayer.getBukkitEntity())) { entityplayer1.playerConnection.sendPacket(packet); } if (!entityplayer.getBukkitEntity().canSee(entityplayer1.getBukkitEntity())) { continue; } entityplayer.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, new EntityPlayer[] { entityplayer1})); } // CraftBukkit end // CraftBukkit start - Only add if the player wasn't moved in the event if (entityplayer.world == worldserver && !worldserver.players.contains(entityplayer)) { worldserver.addEntity(entityplayer); this.a(entityplayer, (WorldServer) null); } // CraftBukkit end }
public String disconnect(EntityPlayer entityplayer) { // CraftBukkit - return string WorldServer worldserver = entityplayer.x(); entityplayer.b(StatisticList.f); // CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it org.bukkit.craftbukkit.event.CraftEventFactory.handleInventoryCloseEvent(entityplayer); PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(cserver.getPlayer(entityplayer), "\u00A7e" + entityplayer.getName() + " left the game."); cserver.getPluginManager().callEvent(playerQuitEvent); entityplayer.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage()); // CraftBukkit end this.savePlayerFile(entityplayer); if (entityplayer.isPassenger()) { Entity entity = entityplayer.getVehicle(); if (entity.b(EntityPlayer.class).size() == 1) { PlayerList.f.debug("Removing player mount"); entityplayer.stopRiding(); worldserver.removeEntity(entity); Iterator iterator = entity.bw().iterator(); while (iterator.hasNext()) { Entity entity1 = (Entity) iterator.next(); worldserver.removeEntity(entity1); } worldserver.getChunkAt(entityplayer.ab, entityplayer.ad).e(); } } worldserver.kill(entityplayer); worldserver.getPlayerChunkMap().removePlayer(entityplayer); this.players.remove(entityplayer); this.playersByName.remove(entityplayer.getName()); // Spigot UUID uuid = entityplayer.getUniqueID(); EntityPlayer entityplayer1 = (EntityPlayer) this.j.get(uuid); if (entityplayer1 == entityplayer) { this.j.remove(uuid); this.o.remove(uuid); } // CraftBukkit start // this.sendAll(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, new EntityPlayer[] { entityplayer})); PacketPlayOutPlayerInfo packet = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entityplayer); for (int i = 0; i < players.size(); i++) { EntityPlayer entityplayer2 = (EntityPlayer) this.players.get(i); if (entityplayer2.getBukkitEntity().canSee(entityplayer.getBukkitEntity())) { entityplayer2.playerConnection.sendPacket(packet); } else { entityplayer2.getBukkitEntity().removeDisconnectingPlayer(entityplayer.getBukkitEntity()); } } // This removes the scoreboard (and player reference) for the specific player in the manager cserver.getScoreboardManager().removePlayer(entityplayer.getBukkitEntity()); // CraftBukkit end ChunkIOExecutor.adjustPoolSize(this.getPlayerCount()); // CraftBukkit return playerQuitEvent.getQuitMessage(); // CraftBukkit }