Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 687 lines 27 kB view raw
1package net.minecraft.server; 2 3import com.legacyminecraft.poseidon.Poseidon; 4import com.legacyminecraft.poseidon.PoseidonConfig; 5 6import uk.betacraft.uberbukkit.packet.Packet62Sound; 7 8import org.bukkit.Bukkit; 9import org.bukkit.Location; 10import org.bukkit.craftbukkit.CraftServer; 11import org.bukkit.craftbukkit.CraftWorld; 12import org.bukkit.craftbukkit.command.ColouredConsoleSender; 13import org.bukkit.entity.Player; 14import org.bukkit.event.player.*; 15 16import java.io.*; 17import java.util.*; 18import java.util.logging.Logger; 19 20public class ServerConfigurationManager { 21 22 public static Logger a = Logger.getLogger("Minecraft"); 23 public List players = new ArrayList(); 24 public MinecraftServer server; // CraftBukkit - private -> public 25 // private PlayerManager[] d = new PlayerManager[2]; // CraftBukkit - removed 26 public int maxPlayers; // CraftBukkit - private -> public 27 public Set banByName = new HashSet(); // CraftBukkit - private -> public 28 public Set banByIP = new HashSet(); // CraftBukkit - private -> public 29 private Set h = new HashSet(); 30 private Set i = new HashSet(); 31 private File j; 32 private File k; 33 private File l; 34 private File m; 35 public PlayerFileData playerFileData; // CraftBukkit - private - >public 36 public boolean o; // Craftbukkit - private -> public 37 38 // CraftBukkit start 39 private CraftServer cserver; 40 private final String msgKickBanned, msgKickIPBanned, msgKickWhitelist, msgKickServerFull, msgPlayerJoin, msgPlayerLeave; 41 42 public ServerConfigurationManager(MinecraftServer minecraftserver) { 43 minecraftserver.server = new CraftServer(minecraftserver, this); 44 minecraftserver.console = new ColouredConsoleSender(minecraftserver.server); 45 this.cserver = minecraftserver.server; 46 // CraftBukkit end 47 this.msgKickBanned = PoseidonConfig.getInstance().getConfigString("message.kick.banned"); 48 this.msgKickIPBanned = PoseidonConfig.getInstance().getConfigString("message.kick.ip-banned"); 49 this.msgKickWhitelist = PoseidonConfig.getInstance().getConfigString("message.kick.not-whitelisted"); 50 this.msgKickServerFull = PoseidonConfig.getInstance().getConfigString("message.kick.full"); 51 this.msgPlayerJoin = PoseidonConfig.getInstance().getConfigString("message.player.join"); 52 this.msgPlayerLeave = PoseidonConfig.getInstance().getConfigString("message.player.leave"); 53 54 this.server = minecraftserver; 55 this.j = minecraftserver.a("banned-players.txt"); 56 this.k = minecraftserver.a("banned-ips.txt"); 57 this.l = minecraftserver.a("ops.txt"); 58 this.m = minecraftserver.a("white-list.txt"); 59 int i = minecraftserver.propertyManager.getInt("view-distance", 10); 60 61 // CraftBukkit - removed playermanagers 62 this.maxPlayers = minecraftserver.propertyManager.getInt("max-players", 20); 63 this.o = minecraftserver.propertyManager.getBoolean("white-list", false); 64 this.g(); 65 this.i(); 66 this.k(); 67 this.m(); 68 this.h(); 69 this.j(); 70 this.l(); 71 this.n(); 72 } 73 74 public void setPlayerFileData(WorldServer[] aworldserver) { 75 if (this.playerFileData != null) return; // CraftBukkit 76 this.playerFileData = aworldserver[0].p().d(); 77 } 78 79 public void a(EntityPlayer entityplayer) { 80 // CraftBukkit - removed playermanagers 81 for (WorldServer world : this.server.worlds) { 82 if (world.manager.managedPlayers.contains(entityplayer)) { 83 world.manager.removePlayer(entityplayer); 84 break; 85 } 86 } 87 this.getPlayerManager(entityplayer.dimension).addPlayer(entityplayer); 88 WorldServer worldserver = this.server.getWorldServer(entityplayer.dimension); 89 90 worldserver.chunkProviderServer.getChunkAt((int) entityplayer.locX >> 4, (int) entityplayer.locZ >> 4); 91 } 92 93 public int a() { 94 // CraftBukkit start 95 if (this.server.worlds.size() == 0) { 96 return this.server.propertyManager.getInt("view-distance", 10) * 16 - 16; 97 } 98 return this.server.worlds.get(0).manager.getFurthestViewableBlock(); 99 // CraftBukkit end 100 } 101 102 private PlayerManager getPlayerManager(int i) { 103 return this.server.getWorldServer(i).manager; // CraftBukkit 104 } 105 106 public void b(EntityPlayer entityplayer) { 107 this.playerFileData.b(entityplayer); 108 } 109 110 public void c(EntityPlayer entityplayer) { 111 this.players.add(entityplayer); 112 //PlayerTracker.getInstance().addPlayer(entityplayer.name); 113 WorldServer worldserver = this.server.getWorldServer(entityplayer.dimension); 114 115 worldserver.chunkProviderServer.getChunkAt((int) entityplayer.locX >> 4, (int) entityplayer.locZ >> 4); 116 117 if ((boolean) PoseidonConfig.getInstance().getConfigOption("world-settings.teleport-to-highest-safe-block")) { 118 while (worldserver.getEntities(entityplayer, entityplayer.boundingBox).size() != 0) { 119 entityplayer.setPosition(entityplayer.locX, entityplayer.locY + 1.0D, entityplayer.locZ); 120 } 121 } 122 123 // CraftBukkit start 124 Player player = this.cserver.getPlayer(entityplayer); 125 PlayerJoinEvent playerJoinEvent = new PlayerJoinEvent(player, msgPlayerJoin.replace("%player%", entityplayer.name)); 126 this.cserver.getPluginManager().callEvent(playerJoinEvent); 127 128 String joinMessage = playerJoinEvent.getJoinMessage(); 129 130 if (joinMessage != null) { 131 this.server.serverConfigurationManager.sendAll(new Packet3Chat(joinMessage)); 132 } 133 // CraftBukkit end 134 135 // Poseidon Start 136 // Notify staff of Poseidon update if they are op or have poseidon.update permission 137 if (PoseidonConfig.getInstance().getConfigBoolean("settings.update-checker.notify-staff.enabled", true) && Poseidon.getServer().isUpdateAvailable()) { 138 if (player.isOp() || player.hasPermission("poseidon.update")) { 139 String updateMessage = PoseidonConfig.getInstance().getConfigString("message.update.available"); 140 updateMessage = updateMessage.replace("%newversion%", Poseidon.getServer().getNewestVersion()); 141 updateMessage = updateMessage.replace("%currentversion%", Poseidon.getServer().getReleaseVersion()); 142 player.sendMessage(updateMessage); 143 } 144 } 145 // Poseidon End 146 147 worldserver.addEntity(entityplayer); 148 this.getPlayerManager(entityplayer.dimension).addPlayer(entityplayer); 149 } 150 151 public void d(EntityPlayer entityplayer) { 152 this.getPlayerManager(entityplayer.dimension).movePlayer(entityplayer); 153 } 154 155 public String disconnect(EntityPlayer entityplayer) { // CraftBukkit - changed return type 156 //if(entityplayer.netServerHandler.disconnected) return null; // CraftBukkit - exploits fix https://github.com/OvercastNetwork/CraftBukkit/commit/6f79ca5c54d30d04803143975757713a01bf4e35 157 158 159 // CraftBukkit start 160 // Quitting must be before we do final save of data, in case plugins need to modify it 161 this.getPlayerManager(entityplayer.dimension).removePlayer(entityplayer); 162 PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(this.cserver.getPlayer(entityplayer), this.msgPlayerLeave.replace("%player%", entityplayer.name)); 163 this.cserver.getPluginManager().callEvent(playerQuitEvent); 164 // CraftBukkit end 165 166 //Project POSEIDON Start 167 // boolean found = false; 168 // for (int i = 0; i < this.players.size(); ++i) { 169 // EntityPlayer ep = (EntityPlayer) this.players.get(i); 170 // if (entityplayer.name.equalsIgnoreCase(ep.name)) { 171 // found = true; 172 // break; 173 // } 174 // } 175 // if (!found) { 176 // //return null; - This caused a bug which could block future connections if a quit event occurs before a join event, i think 177 // playerQuitEvent.setQuitMessage(null); 178 // } 179 // PlayerTracker.getInstance().removePlayer(entityplayer.name); 180 //Project POSEIDON End 181 182 this.playerFileData.a(entityplayer); 183 this.server.getWorldServer(entityplayer.dimension).kill(entityplayer); 184 this.players.remove(entityplayer); 185 this.getPlayerManager(entityplayer.dimension).removePlayer(entityplayer); 186 187 return playerQuitEvent.getQuitMessage(); // CraftBukkit 188 } 189 190 public EntityPlayer a(NetLoginHandler netloginhandler, String s) { 191 // CraftBukkit start - note: this entire method needs to be changed 192 // Instead of kicking then returning, we need to store the kick reason 193 // in the event, check with plugins to see if it's ok, and THEN kick 194 // depending on the outcome. Also change any reference to this.e.c to entity.world 195 EntityPlayer entity = new EntityPlayer(this.server, this.server.getWorldServer(0), s, new ItemInWorldManager(this.server.getWorldServer(0)), netloginhandler.networkManager.pvn); 196 Player player = (entity == null) ? null : (Player) entity.getBukkitEntity(); 197 PlayerLoginEvent event = new PlayerLoginEvent(player, netloginhandler); //Project Poseidon - pass player IP through 198 199 String s1 = netloginhandler.networkManager.getSocketAddress().toString(); 200 201 s1 = s1.substring(s1.indexOf("/") + 1); 202 s1 = s1.substring(0, s1.indexOf(":")); 203 204 PlayerLoginEvent.Result result = this.banByName.contains(s.trim().toLowerCase()) ? PlayerLoginEvent.Result.KICK_BANNED : this.banByIP.contains(s1) ? PlayerLoginEvent.Result.KICK_BANNED_IP : !this.isWhitelisted(s) ? PlayerLoginEvent.Result.KICK_WHITELIST : this.players.size() >= this.maxPlayers ? PlayerLoginEvent.Result.KICK_FULL : PlayerLoginEvent.Result.ALLOWED; 205 206 String kickMessage = result.equals(PlayerLoginEvent.Result.KICK_BANNED) ? this.msgKickBanned : result.equals(PlayerLoginEvent.Result.KICK_BANNED_IP) ? this.msgKickIPBanned : result.equals(PlayerLoginEvent.Result.KICK_WHITELIST) ? this.msgKickWhitelist : result.equals(PlayerLoginEvent.Result.KICK_FULL) ? msgKickServerFull : s1; 207 208 event.disallow(result, kickMessage); 209 210 this.cserver.getPluginManager().callEvent(event); 211 if (event.getResult() != PlayerLoginEvent.Result.ALLOWED) { 212 netloginhandler.disconnect(event.getKickMessage()); 213 return null; 214 } 215 216 for (int i = 0; i < this.players.size(); ++i) { 217 EntityPlayer entityplayer = (EntityPlayer) this.players.get(i); 218 219 if (entityplayer.name.equalsIgnoreCase(s)) { 220 entityplayer.netServerHandler.disconnect("You logged in from another location"); 221 } 222 } 223 224 return entity; 225 // CraftBukkit end 226 } 227 228 // CraftBukkit start 229 public EntityPlayer moveToWorld(EntityPlayer entityplayer, int i) { 230 return this.moveToWorld(entityplayer, i, null); 231 } 232 233 public EntityPlayer moveToWorld(EntityPlayer entityplayer, int i, Location location) { 234 this.server.getTracker(entityplayer.dimension).untrackPlayer(entityplayer); 235 // this.server.getTracker(entityplayer.dimension).untrackEntity(entityplayer); // CraftBukkit 236 this.getPlayerManager(entityplayer.dimension).removePlayer(entityplayer); 237 this.players.remove(entityplayer); 238 //PlayerTracker.getInstance().removePlayer(entityplayer.name); //Project POSEIDON 239 this.server.getWorldServer(entityplayer.dimension).removeEntity(entityplayer); 240 ChunkCoordinates chunkcoordinates = entityplayer.getBed(); 241 242 // CraftBukkit start 243 EntityPlayer entityplayer1 = entityplayer; 244 org.bukkit.World fromWorld = entityplayer1.getBukkitEntity().getWorld(); 245 246 if (location == null) { 247 boolean isBedSpawn = false; 248 CraftWorld cworld = (CraftWorld) this.server.server.getWorld(entityplayer.spawnWorld); 249 if (cworld != null && chunkcoordinates != null) { 250 ChunkCoordinates chunkcoordinates1 = EntityHuman.getBed(cworld.getHandle(), chunkcoordinates); 251 if (chunkcoordinates1 != null) { 252 isBedSpawn = true; 253 location = new Location(cworld, chunkcoordinates1.x + 0.5, chunkcoordinates1.y, chunkcoordinates1.z + 0.5); 254 } else { 255 entityplayer1.netServerHandler.sendPacket(new Packet70Bed(0)); 256 } 257 } 258 259 if (location == null) { 260 cworld = (CraftWorld) this.server.server.getWorlds().get(0); 261 chunkcoordinates = cworld.getHandle().getSpawn(); 262 location = new Location(cworld, chunkcoordinates.x + 0.5, chunkcoordinates.y, chunkcoordinates.z + 0.5); 263 } 264 265 Player respawnPlayer = this.cserver.getPlayer(entityplayer); 266 PlayerRespawnEvent respawnEvent = new PlayerRespawnEvent(respawnPlayer, location, isBedSpawn); 267 this.cserver.getPluginManager().callEvent(respawnEvent); 268 269 location = respawnEvent.getRespawnLocation(); 270 entityplayer.health = 20; 271 entityplayer.fireTicks = 0; 272 entityplayer.fallDistance = 0; 273 } else { 274 location.setWorld(this.server.getWorldServer(i).getWorld()); 275 } 276 WorldServer worldserver = ((CraftWorld) location.getWorld()).getHandle(); 277 entityplayer1.setLocation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); 278 // CraftBukkit end 279 280 worldserver.chunkProviderServer.getChunkAt((int) entityplayer1.locX >> 4, (int) entityplayer1.locZ >> 4); 281 282 while (worldserver.getEntities(entityplayer1, entityplayer1.boundingBox).size() != 0) { 283 entityplayer1.setPosition(entityplayer1.locX, entityplayer1.locY + 1.0D, entityplayer1.locZ); 284 } 285 286 // CraftBukkit start 287 byte actualDimension = (byte) (worldserver.getWorld().getEnvironment().getId()); 288 entityplayer1.netServerHandler.sendPacket(new Packet9Respawn((byte) (actualDimension >= 0 ? -1 : 0), worldserver.getSeed())); 289 entityplayer1.netServerHandler.sendPacket(new Packet9Respawn(actualDimension, worldserver.getSeed())); 290 entityplayer1.spawnIn(worldserver); 291 entityplayer1.dead = false; 292 entityplayer1.netServerHandler.teleport(new Location(worldserver.getWorld(), entityplayer1.locX, entityplayer1.locY, entityplayer1.locZ, entityplayer1.yaw, entityplayer1.pitch)); 293 // CraftBukkit end 294 this.a(entityplayer1, worldserver); 295 this.getPlayerManager(entityplayer1.dimension).addPlayer(entityplayer1); 296 worldserver.addEntity(entityplayer1); 297 this.players.add(entityplayer1); 298 //PlayerTracker.getInstance().addPlayer(entityplayer1.name); //Project POSEIDON 299 this.updateClient(entityplayer1); // CraftBukkit 300 entityplayer1.x(); 301 // CraftBukkit start - don't fire on respawn 302 if (fromWorld != location.getWorld()) { 303 org.bukkit.event.player.PlayerChangedWorldEvent event = new org.bukkit.event.player.PlayerChangedWorldEvent((Player) entityplayer1.getBukkitEntity(), fromWorld); 304 Bukkit.getServer().getPluginManager().callEvent(event); 305 } 306 // CraftBukkit end 307 return entityplayer1; 308 } 309 310 public void f(EntityPlayer entityplayer) { 311 // CraftBukkit start -- Replaced the standard handling of portals with a more customised method. 312 int dimension = entityplayer.dimension; 313 WorldServer fromWorld = this.server.getWorldServer(dimension); 314 WorldServer toWorld = null; 315 if (dimension < 10) { 316 int toDimension = dimension == -1 ? 0 : -1; 317 for (WorldServer world : this.server.worlds) { 318 if (world.dimension == toDimension) { 319 toWorld = world; 320 } 321 } 322 } 323 double blockRatio = dimension == -1 ? 8 : 0.125; 324 325 Location fromLocation = new Location(fromWorld.getWorld(), entityplayer.locX, entityplayer.locY, entityplayer.locZ, entityplayer.yaw, entityplayer.pitch); 326 Location toLocation = toWorld == null ? null : new Location(toWorld.getWorld(), (entityplayer.locX * blockRatio), entityplayer.locY, (entityplayer.locZ * blockRatio), entityplayer.yaw, entityplayer.pitch); 327 328 org.bukkit.craftbukkit.PortalTravelAgent pta = new org.bukkit.craftbukkit.PortalTravelAgent(); 329 PlayerPortalEvent event = new PlayerPortalEvent((Player) entityplayer.getBukkitEntity(), fromLocation, toLocation, pta); 330 Bukkit.getServer().getPluginManager().callEvent(event); 331 if (event.isCancelled() || event.getTo() == null) { 332 return; 333 } 334 335 Location finalLocation = event.getTo(); 336 if (event.useTravelAgent()) { 337 finalLocation = event.getPortalTravelAgent().findOrCreate(finalLocation); 338 } 339 toWorld = ((CraftWorld) finalLocation.getWorld()).getHandle(); 340 341 this.sendPacketNearby(entityplayer, finalLocation.getX(), finalLocation.getY(), finalLocation.getZ(), 64D, toWorld.dimension, new Packet62Sound("portal.travel", finalLocation.getX(), finalLocation.getY(), finalLocation.getZ(), 1.0F, toWorld.random.nextFloat() * 0.4F + 0.8F)); 342 343 this.moveToWorld(entityplayer, toWorld.dimension, finalLocation); 344 // CraftBukkit end 345 } 346 347 public void b() { 348 // CraftBukkit start 349 for (int i = 0; i < this.server.worlds.size(); ++i) { 350 this.server.worlds.get(i).manager.flush(); 351 } 352 // CraftBukkit end 353 } 354 355 public void flagDirty(int i, int j, int k, int l) { 356 this.getPlayerManager(l).flagDirty(i, j, k); 357 } 358 359 public void sendAll(Packet packet) { 360 for (int i = 0; i < this.players.size(); ++i) { 361 EntityPlayer entityplayer = (EntityPlayer) this.players.get(i); 362 363 entityplayer.netServerHandler.sendPacket(packet); 364 } 365 } 366 367 public void a(Packet packet, int i) { 368 for (int j = 0; j < this.players.size(); ++j) { 369 EntityPlayer entityplayer = (EntityPlayer) this.players.get(j); 370 371 if (entityplayer.dimension == i) { 372 entityplayer.netServerHandler.sendPacket(packet); 373 } 374 } 375 } 376 377 public String c() { 378 String s = ""; 379 380 for (int i = 0; i < this.players.size(); ++i) { 381 if (i > 0) { 382 s = s + ", "; 383 } 384 385 s = s + ((EntityPlayer) this.players.get(i)).name; 386 } 387 388 return s; 389 } 390 391 public void a(String s) { 392 this.banByName.add(s.toLowerCase()); 393 this.h(); 394 } 395 396 public void b(String s) { 397 this.banByName.remove(s.toLowerCase()); 398 this.h(); 399 } 400 401 private void g() { 402 try { 403 this.banByName.clear(); 404 BufferedReader bufferedreader = new BufferedReader(new FileReader(this.j)); 405 String s = ""; 406 407 while ((s = bufferedreader.readLine()) != null) { 408 this.banByName.add(s.trim().toLowerCase()); 409 } 410 411 bufferedreader.close(); 412 } catch (Exception exception) { 413 a.warning("Failed to load ban list: " + exception); 414 } 415 } 416 417 private void h() { 418 try { 419 PrintWriter printwriter = new PrintWriter(new FileWriter(this.j, false)); 420 Iterator iterator = this.banByName.iterator(); 421 422 while (iterator.hasNext()) { 423 String s = (String) iterator.next(); 424 425 printwriter.println(s); 426 } 427 428 printwriter.close(); 429 } catch (Exception exception) { 430 a.warning("Failed to save ban list: " + exception); 431 } 432 } 433 434 public void c(String s) { 435 this.banByIP.add(s.toLowerCase()); 436 this.j(); 437 } 438 439 public void d(String s) { 440 this.banByIP.remove(s.toLowerCase()); 441 this.j(); 442 } 443 444 private void i() { 445 try { 446 this.banByIP.clear(); 447 BufferedReader bufferedreader = new BufferedReader(new FileReader(this.k)); 448 String s = ""; 449 450 while ((s = bufferedreader.readLine()) != null) { 451 this.banByIP.add(s.trim().toLowerCase()); 452 } 453 454 bufferedreader.close(); 455 } catch (Exception exception) { 456 a.warning("Failed to load ip ban list: " + exception); 457 } 458 } 459 460 private void j() { 461 try { 462 PrintWriter printwriter = new PrintWriter(new FileWriter(this.k, false)); 463 Iterator iterator = this.banByIP.iterator(); 464 465 while (iterator.hasNext()) { 466 String s = (String) iterator.next(); 467 468 printwriter.println(s); 469 } 470 471 printwriter.close(); 472 } catch (Exception exception) { 473 a.warning("Failed to save ip ban list: " + exception); 474 } 475 } 476 477 public void e(String s) { 478 this.h.add(s.toLowerCase()); 479 this.l(); 480 481 // Craftbukkit start 482 Player player = server.server.getPlayer(s); 483 if (player != null) { 484 player.recalculatePermissions(); 485 } 486 // Craftbukkit end 487 } 488 489 public void f(String s) { 490 this.h.remove(s.toLowerCase()); 491 this.l(); 492 493 // Craftbukkit start 494 Player player = server.server.getPlayer(s); 495 if (player != null) { 496 player.recalculatePermissions(); 497 } 498 // Craftbukkit end 499 } 500 501 private void k() { 502 try { 503 this.h.clear(); 504 BufferedReader bufferedreader = new BufferedReader(new FileReader(this.l)); 505 String s = ""; 506 507 while ((s = bufferedreader.readLine()) != null) { 508 this.h.add(s.trim().toLowerCase()); 509 } 510 511 bufferedreader.close(); 512 } catch (Exception exception) { 513 // CraftBukkit - corrected text 514 a.warning("Failed to load ops: " + exception); 515 } 516 } 517 518 private void l() { 519 try { 520 PrintWriter printwriter = new PrintWriter(new FileWriter(this.l, false)); 521 Iterator iterator = this.h.iterator(); 522 523 while (iterator.hasNext()) { 524 String s = (String) iterator.next(); 525 526 printwriter.println(s); 527 } 528 529 printwriter.close(); 530 } catch (Exception exception) { 531 // CraftBukkit - corrected text 532 a.warning("Failed to save ops: " + exception); 533 } 534 } 535 536 private void m() { 537 try { 538 this.i.clear(); 539 BufferedReader bufferedreader = new BufferedReader(new FileReader(this.m)); 540 String s = ""; 541 542 while ((s = bufferedreader.readLine()) != null) { 543 this.i.add(s.trim().toLowerCase()); 544 } 545 546 bufferedreader.close(); 547 } catch (Exception exception) { 548 a.warning("Failed to load white-list: " + exception); 549 } 550 } 551 552 private void n() { 553 try { 554 PrintWriter printwriter = new PrintWriter(new FileWriter(this.m, false)); 555 Iterator iterator = this.i.iterator(); 556 557 while (iterator.hasNext()) { 558 String s = (String) iterator.next(); 559 560 printwriter.println(s); 561 } 562 563 printwriter.close(); 564 } catch (Exception exception) { 565 a.warning("Failed to save white-list: " + exception); 566 } 567 } 568 569 public boolean isWhitelisted(String s) { 570 s = s.trim().toLowerCase(); 571 return !this.o || this.h.contains(s) || this.i.contains(s); 572 } 573 574 public boolean isOp(String s) { 575 return this.h.contains(s.trim().toLowerCase()); 576 } 577 578 public EntityPlayer i(String s) { 579 for (int i = 0; i < this.players.size(); ++i) { 580 EntityPlayer entityplayer = (EntityPlayer) this.players.get(i); 581 582 if (entityplayer.name.equalsIgnoreCase(s)) { 583 return entityplayer; 584 } 585 } 586 587 return null; 588 } 589 590 public void a(String s, String s1) { 591 EntityPlayer entityplayer = this.i(s); 592 593 if (entityplayer != null) { 594 entityplayer.netServerHandler.sendPacket(new Packet3Chat(s1)); 595 } 596 } 597 598 public void sendPacketNearby(double d0, double d1, double d2, double d3, int i, Packet packet) { 599 this.sendPacketNearby((EntityHuman) null, d0, d1, d2, d3, i, packet); 600 } 601 602 public void sendPacketNearbyToScale(EntityHuman entityhuman, double d0, double d1, double d2, double d3, int i, Packet packet) { 603 float var10 = 16.0F; 604 if (d3 > 1.0F) { 605 var10 *= d3; 606 } 607 this.sendPacketNearby(entityhuman, d0, d1, d2, var10, i, packet); 608 } 609 610 public void sendPacketNearby(EntityHuman entityhuman, double d0, double d1, double d2, double d3, int i, Packet packet) { 611 for (int j = 0; j < this.players.size(); ++j) { 612 EntityPlayer entityplayer = (EntityPlayer) this.players.get(j); 613 614 if (entityplayer != entityhuman && entityplayer.dimension == i) { 615 double d4 = d0 - entityplayer.locX; 616 double d5 = d1 - entityplayer.locY; 617 double d6 = d2 - entityplayer.locZ; 618 619 if (d4 * d4 + d5 * d5 + d6 * d6 < d3 * d3) { 620 entityplayer.netServerHandler.sendPacket(packet); 621 } 622 } 623 } 624 } 625 626 public void j(String s) { 627 Packet3Chat packet3chat = new Packet3Chat(s); 628 629 for (int i = 0; i < this.players.size(); ++i) { 630 EntityPlayer entityplayer = (EntityPlayer) this.players.get(i); 631 632 if (this.isOp(entityplayer.name)) { 633 entityplayer.netServerHandler.sendPacket(packet3chat); 634 } 635 } 636 } 637 638 public boolean a(String s, Packet packet) { 639 EntityPlayer entityplayer = this.i(s); 640 641 if (entityplayer != null) { 642 entityplayer.netServerHandler.sendPacket(packet); 643 return true; 644 } else { 645 return false; 646 } 647 } 648 649 public void savePlayers() { 650 for (int i = 0; i < this.players.size(); ++i) { 651 this.playerFileData.a((EntityHuman) this.players.get(i)); 652 } 653 } 654 655 public void a(int i, int j, int k, TileEntity tileentity) { 656 } 657 658 public void k(String s) { 659 this.i.add(s); 660 this.n(); 661 } 662 663 public void l(String s) { 664 this.i.remove(s); 665 this.n(); 666 } 667 668 public Set e() { 669 return this.i; 670 } 671 672 public void f() { 673 this.m(); 674 } 675 676 public void a(EntityPlayer entityplayer, WorldServer worldserver) { 677 entityplayer.netServerHandler.sendPacket(new Packet4UpdateTime(worldserver.getTime())); 678 if (worldserver.v()) { 679 entityplayer.netServerHandler.sendPacket(new Packet70Bed(1)); 680 } 681 } 682 683 public void updateClient(EntityPlayer entityplayer) { 684 entityplayer.updateInventory(entityplayer.defaultContainer); 685 entityplayer.C(); 686 } 687}