Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
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}