001package net.minecraft.scoreboard; 002 003import java.util.ArrayList; 004import java.util.Arrays; 005import java.util.Collection; 006import java.util.HashSet; 007import java.util.Iterator; 008import java.util.List; 009import java.util.Map; 010import net.minecraft.command.CommandBase; 011import net.minecraft.command.CommandException; 012import net.minecraft.command.ICommandSender; 013import net.minecraft.command.SyntaxErrorException; 014import net.minecraft.command.WrongUsageException; 015import net.minecraft.entity.player.EntityPlayer; 016import net.minecraft.server.MinecraftServer; 017import net.minecraft.util.EnumChatFormatting; 018 019public class ServerCommandScoreboard extends CommandBase 020{ 021 public String getCommandName() 022 { 023 return "scoreboard"; 024 } 025 026 /** 027 * Return the required permission level for this command. 028 */ 029 public int getRequiredPermissionLevel() 030 { 031 return 2; 032 } 033 034 public void processCommand(ICommandSender par1ICommandSender, String[] par2ArrayOfStr) 035 { 036 if (par2ArrayOfStr.length >= 1) 037 { 038 if (par2ArrayOfStr[0].equalsIgnoreCase("objectives")) 039 { 040 if (par2ArrayOfStr.length == 1) 041 { 042 throw new WrongUsageException("commands.scoreboard.objectives.usage", new Object[0]); 043 } 044 045 if (par2ArrayOfStr[1].equalsIgnoreCase("list")) 046 { 047 this.func_96336_d(par1ICommandSender); 048 } 049 else if (par2ArrayOfStr[1].equalsIgnoreCase("add")) 050 { 051 if (par2ArrayOfStr.length < 4) 052 { 053 throw new WrongUsageException("commands.scoreboard.objectives.add.usage", new Object[0]); 054 } 055 056 this.func_96350_b(par1ICommandSender, par2ArrayOfStr, 2); 057 } 058 else if (par2ArrayOfStr[1].equalsIgnoreCase("remove")) 059 { 060 if (par2ArrayOfStr.length != 3) 061 { 062 throw new WrongUsageException("commands.scoreboard.objectives.remove.usage", new Object[0]); 063 } 064 065 this.func_96337_e(par1ICommandSender, par2ArrayOfStr[2]); 066 } 067 else 068 { 069 if (!par2ArrayOfStr[1].equalsIgnoreCase("setdisplay")) 070 { 071 throw new WrongUsageException("commands.scoreboard.objectives.usage", new Object[0]); 072 } 073 074 if (par2ArrayOfStr.length != 3 && par2ArrayOfStr.length != 4) 075 { 076 throw new WrongUsageException("commands.scoreboard.objectives.setdisplay.usage", new Object[0]); 077 } 078 079 this.func_96347_j(par1ICommandSender, par2ArrayOfStr, 2); 080 } 081 082 return; 083 } 084 085 if (par2ArrayOfStr[0].equalsIgnoreCase("players")) 086 { 087 if (par2ArrayOfStr.length == 1) 088 { 089 throw new WrongUsageException("commands.scoreboard.players.usage", new Object[0]); 090 } 091 092 if (par2ArrayOfStr[1].equalsIgnoreCase("list")) 093 { 094 if (par2ArrayOfStr.length > 3) 095 { 096 throw new WrongUsageException("commands.scoreboard.players.list.usage", new Object[0]); 097 } 098 099 this.func_96341_k(par1ICommandSender, par2ArrayOfStr, 2); 100 } 101 else if (par2ArrayOfStr[1].equalsIgnoreCase("add")) 102 { 103 if (par2ArrayOfStr.length != 5) 104 { 105 throw new WrongUsageException("commands.scoreboard.players.add.usage", new Object[0]); 106 } 107 108 this.func_96339_l(par1ICommandSender, par2ArrayOfStr, 2); 109 } 110 else if (par2ArrayOfStr[1].equalsIgnoreCase("remove")) 111 { 112 if (par2ArrayOfStr.length != 5) 113 { 114 throw new WrongUsageException("commands.scoreboard.players.remove.usage", new Object[0]); 115 } 116 117 this.func_96339_l(par1ICommandSender, par2ArrayOfStr, 2); 118 } 119 else if (par2ArrayOfStr[1].equalsIgnoreCase("set")) 120 { 121 if (par2ArrayOfStr.length != 5) 122 { 123 throw new WrongUsageException("commands.scoreboard.players.set.usage", new Object[0]); 124 } 125 126 this.func_96339_l(par1ICommandSender, par2ArrayOfStr, 2); 127 } 128 else 129 { 130 if (!par2ArrayOfStr[1].equalsIgnoreCase("reset")) 131 { 132 throw new WrongUsageException("commands.scoreboard.players.usage", new Object[0]); 133 } 134 135 if (par2ArrayOfStr.length != 3) 136 { 137 throw new WrongUsageException("commands.scoreboard.players.reset.usage", new Object[0]); 138 } 139 140 this.func_96351_m(par1ICommandSender, par2ArrayOfStr, 2); 141 } 142 143 return; 144 } 145 146 if (par2ArrayOfStr[0].equalsIgnoreCase("teams")) 147 { 148 if (par2ArrayOfStr.length == 1) 149 { 150 throw new WrongUsageException("commands.scoreboard.teams.usage", new Object[0]); 151 } 152 153 if (par2ArrayOfStr[1].equalsIgnoreCase("list")) 154 { 155 if (par2ArrayOfStr.length > 3) 156 { 157 throw new WrongUsageException("commands.scoreboard.teams.list.usage", new Object[0]); 158 } 159 160 this.func_96344_f(par1ICommandSender, par2ArrayOfStr, 2); 161 } 162 else if (par2ArrayOfStr[1].equalsIgnoreCase("add")) 163 { 164 if (par2ArrayOfStr.length < 3) 165 { 166 throw new WrongUsageException("commands.scoreboard.teams.add.usage", new Object[0]); 167 } 168 169 this.func_96340_c(par1ICommandSender, par2ArrayOfStr, 2); 170 } 171 else if (par2ArrayOfStr[1].equalsIgnoreCase("remove")) 172 { 173 if (par2ArrayOfStr.length != 3) 174 { 175 throw new WrongUsageException("commands.scoreboard.teams.remove.usage", new Object[0]); 176 } 177 178 this.func_96343_e(par1ICommandSender, par2ArrayOfStr, 2); 179 } 180 else if (par2ArrayOfStr[1].equalsIgnoreCase("empty")) 181 { 182 if (par2ArrayOfStr.length != 3) 183 { 184 throw new WrongUsageException("commands.scoreboard.teams.empty.usage", new Object[0]); 185 } 186 187 this.func_96346_i(par1ICommandSender, par2ArrayOfStr, 2); 188 } 189 else if (par2ArrayOfStr[1].equalsIgnoreCase("join")) 190 { 191 if (par2ArrayOfStr.length < 4 && (par2ArrayOfStr.length != 3 || !(par1ICommandSender instanceof EntityPlayer))) 192 { 193 throw new WrongUsageException("commands.scoreboard.teams.join.usage", new Object[0]); 194 } 195 196 this.func_96342_g(par1ICommandSender, par2ArrayOfStr, 2); 197 } 198 else if (par2ArrayOfStr[1].equalsIgnoreCase("leave")) 199 { 200 if (par2ArrayOfStr.length < 3 && !(par1ICommandSender instanceof EntityPlayer)) 201 { 202 throw new WrongUsageException("commands.scoreboard.teams.leave.usage", new Object[0]); 203 } 204 205 this.func_96349_h(par1ICommandSender, par2ArrayOfStr, 2); 206 } 207 else 208 { 209 if (!par2ArrayOfStr[1].equalsIgnoreCase("option")) 210 { 211 throw new WrongUsageException("commands.scoreboard.teams.usage", new Object[0]); 212 } 213 214 if (par2ArrayOfStr.length != 4 && par2ArrayOfStr.length != 5) 215 { 216 throw new WrongUsageException("commands.scoreboard.teams.option.usage", new Object[0]); 217 } 218 219 this.func_96348_d(par1ICommandSender, par2ArrayOfStr, 2); 220 } 221 222 return; 223 } 224 } 225 226 throw new WrongUsageException("commands.scoreboard.usage", new Object[0]); 227 } 228 229 protected Scoreboard func_96334_d() 230 { 231 return MinecraftServer.getServer().worldServerForDimension(0).getScoreboard(); 232 } 233 234 protected ScoreObjective func_96345_a(String par1Str, boolean par2) 235 { 236 Scoreboard scoreboard = this.func_96334_d(); 237 ScoreObjective scoreobjective = scoreboard.func_96518_b(par1Str); 238 239 if (scoreobjective == null) 240 { 241 throw new CommandException("commands.scoreboard.objectiveNotFound", new Object[] {par1Str}); 242 } 243 else if (par2 && scoreobjective.func_96680_c().func_96637_b()) 244 { 245 throw new CommandException("commands.scoreboard.objectiveReadOnly", new Object[] {par1Str}); 246 } 247 else 248 { 249 return scoreobjective; 250 } 251 } 252 253 protected ScorePlayerTeam func_96338_a(String par1Str) 254 { 255 Scoreboard scoreboard = this.func_96334_d(); 256 ScorePlayerTeam scoreplayerteam = scoreboard.func_96508_e(par1Str); 257 258 if (scoreplayerteam == null) 259 { 260 throw new CommandException("commands.scoreboard.teamNotFound", new Object[] {par1Str}); 261 } 262 else 263 { 264 return scoreplayerteam; 265 } 266 } 267 268 protected void func_96350_b(ICommandSender par1ICommandSender, String[] par2ArrayOfStr, int par3) 269 { 270 String s = par2ArrayOfStr[par3++]; 271 String s1 = par2ArrayOfStr[par3++]; 272 Scoreboard scoreboard = this.func_96334_d(); 273 ScoreObjectiveCriteria scoreobjectivecriteria = (ScoreObjectiveCriteria)ScoreObjectiveCriteria.field_96643_a.get(s1); 274 275 if (scoreobjectivecriteria == null) 276 { 277 String[] astring1 = (String[])ScoreObjectiveCriteria.field_96643_a.keySet().toArray(new String[0]); 278 throw new WrongUsageException("commands.scoreboard.objectives.add.wrongType", new Object[] {joinNiceString(astring1)}); 279 } 280 else if (scoreboard.func_96518_b(s) != null) 281 { 282 throw new CommandException("commands.scoreboard.objectives.add.alreadyExists", new Object[] {s}); 283 } 284 else if (s.length() > 16) 285 { 286 throw new SyntaxErrorException("commands.scoreboard.objectives.add.tooLong", new Object[] {s, Integer.valueOf(16)}); 287 } 288 else 289 { 290 ScoreObjective scoreobjective = scoreboard.func_96535_a(s, scoreobjectivecriteria); 291 292 if (par2ArrayOfStr.length > par3) 293 { 294 String s2 = func_82360_a(par1ICommandSender, par2ArrayOfStr, par3); 295 296 if (s2.length() > 32) 297 { 298 throw new SyntaxErrorException("commands.scoreboard.objectives.add.displayTooLong", new Object[] {s2, Integer.valueOf(32)}); 299 } 300 301 if (s2.length() > 0) 302 { 303 scoreobjective.func_96681_a(s2); 304 } 305 } 306 307 notifyAdmins(par1ICommandSender, "commands.scoreboard.objectives.add.success", new Object[] {s}); 308 } 309 } 310 311 protected void func_96340_c(ICommandSender par1ICommandSender, String[] par2ArrayOfStr, int par3) 312 { 313 String s = par2ArrayOfStr[par3++]; 314 Scoreboard scoreboard = this.func_96334_d(); 315 316 if (scoreboard.func_96508_e(s) != null) 317 { 318 throw new CommandException("commands.scoreboard.teams.add.alreadyExists", new Object[] {s}); 319 } 320 else if (s.length() > 16) 321 { 322 throw new SyntaxErrorException("commands.scoreboard.teams.add.tooLong", new Object[] {s, Integer.valueOf(16)}); 323 } 324 else 325 { 326 ScorePlayerTeam scoreplayerteam = scoreboard.func_96527_f(s); 327 328 if (par2ArrayOfStr.length > par3) 329 { 330 String s1 = func_82360_a(par1ICommandSender, par2ArrayOfStr, par3); 331 332 if (s1.length() > 32) 333 { 334 throw new SyntaxErrorException("commands.scoreboard.teams.add.displayTooLong", new Object[] {s1, Integer.valueOf(32)}); 335 } 336 337 if (s1.length() > 0) 338 { 339 scoreplayerteam.func_96664_a(s1); 340 } 341 } 342 343 notifyAdmins(par1ICommandSender, "commands.scoreboard.teams.add.success", new Object[] {s}); 344 } 345 } 346 347 protected void func_96348_d(ICommandSender par1ICommandSender, String[] par2ArrayOfStr, int par3) 348 { 349 ScorePlayerTeam scoreplayerteam = this.func_96338_a(par2ArrayOfStr[par3++]); 350 String s = par2ArrayOfStr[par3++].toLowerCase(); 351 352 if (!s.equalsIgnoreCase("color") && !s.equalsIgnoreCase("friendlyfire") && !s.equalsIgnoreCase("seeFriendlyInvisibles")) 353 { 354 throw new WrongUsageException("commands.scoreboard.teams.option.usage", new Object[0]); 355 } 356 else if (par2ArrayOfStr.length == 4) 357 { 358 if (s.equalsIgnoreCase("color")) 359 { 360 throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, func_96333_a(EnumChatFormatting.func_96296_a(true, false))}); 361 } 362 else if (!s.equalsIgnoreCase("friendlyfire") && !s.equalsIgnoreCase("seeFriendlyInvisibles")) 363 { 364 throw new WrongUsageException("commands.scoreboard.teams.option.usage", new Object[0]); 365 } 366 else 367 { 368 throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, func_96333_a(Arrays.asList(new String[]{"true", "false"}))}); 369 } 370 } 371 else 372 { 373 String s1 = par2ArrayOfStr[par3++]; 374 375 if (s.equalsIgnoreCase("color")) 376 { 377 EnumChatFormatting enumchatformatting = EnumChatFormatting.func_96300_b(s1); 378 379 if (s1 == null) 380 { 381 throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, func_96333_a(EnumChatFormatting.func_96296_a(true, false))}); 382 } 383 384 scoreplayerteam.func_96666_b(enumchatformatting.toString()); 385 scoreplayerteam.func_96662_c(EnumChatFormatting.RESET.toString()); 386 } 387 else if (s.equalsIgnoreCase("friendlyfire")) 388 { 389 if (!s1.equalsIgnoreCase("true") && !s1.equalsIgnoreCase("false")) 390 { 391 throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, func_96333_a(Arrays.asList(new String[]{"true", "false"}))}); 392 } 393 394 scoreplayerteam.func_96660_a(s1.equalsIgnoreCase("true")); 395 } 396 else if (s.equalsIgnoreCase("seeFriendlyInvisibles")) 397 { 398 if (!s1.equalsIgnoreCase("true") && !s1.equalsIgnoreCase("false")) 399 { 400 throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, func_96333_a(Arrays.asList(new String[]{"true", "false"}))}); 401 } 402 403 scoreplayerteam.func_98300_b(s1.equalsIgnoreCase("true")); 404 } 405 406 notifyAdmins(par1ICommandSender, "commands.scoreboard.teams.option.success", new Object[] {s, scoreplayerteam.func_96661_b(), s1}); 407 } 408 } 409 410 protected void func_96343_e(ICommandSender par1ICommandSender, String[] par2ArrayOfStr, int par3) 411 { 412 Scoreboard scoreboard = this.func_96334_d(); 413 ScorePlayerTeam scoreplayerteam = this.func_96338_a(par2ArrayOfStr[par3++]); 414 scoreboard.func_96511_d(scoreplayerteam); 415 notifyAdmins(par1ICommandSender, "commands.scoreboard.teams.remove.success", new Object[] {scoreplayerteam.func_96661_b()}); 416 } 417 418 protected void func_96344_f(ICommandSender par1ICommandSender, String[] par2ArrayOfStr, int par3) 419 { 420 Scoreboard scoreboard = this.func_96334_d(); 421 422 if (par2ArrayOfStr.length > par3) 423 { 424 ScorePlayerTeam scoreplayerteam = this.func_96338_a(par2ArrayOfStr[par3++]); 425 Collection collection = scoreplayerteam.func_96670_d(); 426 427 if (collection.size() <= 0) 428 { 429 throw new CommandException("commands.scoreboard.teams.list.player.empty", new Object[] {scoreplayerteam.func_96661_b()}); 430 } 431 432 par1ICommandSender.sendChatToPlayer(EnumChatFormatting.DARK_GREEN + par1ICommandSender.translateString("commands.scoreboard.teams.list.player.count", new Object[] {Integer.valueOf(collection.size()), scoreplayerteam.func_96661_b()})); 433 par1ICommandSender.sendChatToPlayer(joinNiceString(collection.toArray())); 434 } 435 else 436 { 437 Collection collection1 = scoreboard.func_96525_g(); 438 439 if (collection1.size() <= 0) 440 { 441 throw new CommandException("commands.scoreboard.teams.list.empty", new Object[0]); 442 } 443 444 par1ICommandSender.sendChatToPlayer(EnumChatFormatting.DARK_GREEN + par1ICommandSender.translateString("commands.scoreboard.teams.list.count", new Object[] {Integer.valueOf(collection1.size())})); 445 Iterator iterator = collection1.iterator(); 446 447 while (iterator.hasNext()) 448 { 449 ScorePlayerTeam scoreplayerteam1 = (ScorePlayerTeam)iterator.next(); 450 par1ICommandSender.sendChatToPlayer(par1ICommandSender.translateString("commands.scoreboard.teams.list.entry", new Object[] {scoreplayerteam1.func_96661_b(), scoreplayerteam1.func_96669_c(), Integer.valueOf(scoreplayerteam1.func_96670_d().size())})); 451 } 452 } 453 } 454 455 protected void func_96342_g(ICommandSender par1ICommandSender, String[] par2ArrayOfStr, int par3) 456 { 457 Scoreboard scoreboard = this.func_96334_d(); 458 ScorePlayerTeam scoreplayerteam = scoreboard.func_96508_e(par2ArrayOfStr[par3++]); 459 HashSet hashset = new HashSet(); 460 String s; 461 462 if (par1ICommandSender instanceof EntityPlayer && par3 == par2ArrayOfStr.length) 463 { 464 s = getCommandSenderAsPlayer(par1ICommandSender).getEntityName(); 465 scoreboard.func_96521_a(s, scoreplayerteam); 466 hashset.add(s); 467 } 468 else 469 { 470 while (par3 < par2ArrayOfStr.length) 471 { 472 s = func_96332_d(par1ICommandSender, par2ArrayOfStr[par3++]); 473 scoreboard.func_96521_a(s, scoreplayerteam); 474 hashset.add(s); 475 } 476 } 477 478 if (!hashset.isEmpty()) 479 { 480 notifyAdmins(par1ICommandSender, "commands.scoreboard.teams.join.success", new Object[] {Integer.valueOf(hashset.size()), scoreplayerteam.func_96661_b(), joinNiceString(hashset.toArray(new String[0]))}); 481 } 482 } 483 484 protected void func_96349_h(ICommandSender par1ICommandSender, String[] par2ArrayOfStr, int par3) 485 { 486 Scoreboard scoreboard = this.func_96334_d(); 487 HashSet hashset = new HashSet(); 488 HashSet hashset1 = new HashSet(); 489 String s; 490 491 if (par1ICommandSender instanceof EntityPlayer && par3 == par2ArrayOfStr.length) 492 { 493 s = getCommandSenderAsPlayer(par1ICommandSender).getEntityName(); 494 495 if (scoreboard.func_96524_g(s)) 496 { 497 hashset.add(s); 498 } 499 else 500 { 501 hashset1.add(s); 502 } 503 } 504 else 505 { 506 while (par3 < par2ArrayOfStr.length) 507 { 508 s = func_96332_d(par1ICommandSender, par2ArrayOfStr[par3++]); 509 510 if (scoreboard.func_96524_g(s)) 511 { 512 hashset.add(s); 513 } 514 else 515 { 516 hashset1.add(s); 517 } 518 } 519 } 520 521 if (!hashset.isEmpty()) 522 { 523 notifyAdmins(par1ICommandSender, "commands.scoreboard.teams.leave.success", new Object[] {Integer.valueOf(hashset.size()), joinNiceString(hashset.toArray(new String[0]))}); 524 } 525 526 if (!hashset1.isEmpty()) 527 { 528 throw new CommandException("commands.scoreboard.teams.leave.failure", new Object[] {Integer.valueOf(hashset1.size()), joinNiceString(hashset1.toArray(new String[0]))}); 529 } 530 } 531 532 protected void func_96346_i(ICommandSender par1ICommandSender, String[] par2ArrayOfStr, int par3) 533 { 534 Scoreboard scoreboard = this.func_96334_d(); 535 ScorePlayerTeam scoreplayerteam = this.func_96338_a(par2ArrayOfStr[par3++]); 536 ArrayList arraylist = new ArrayList(scoreplayerteam.func_96670_d()); 537 538 if (arraylist.isEmpty()) 539 { 540 throw new CommandException("commands.scoreboard.teams.empty.alreadyEmpty", new Object[] {scoreplayerteam.func_96661_b()}); 541 } 542 else 543 { 544 Iterator iterator = arraylist.iterator(); 545 546 while (iterator.hasNext()) 547 { 548 String s = (String)iterator.next(); 549 scoreboard.func_96512_b(s, scoreplayerteam); 550 } 551 552 notifyAdmins(par1ICommandSender, "commands.scoreboard.teams.empty.success", new Object[] {Integer.valueOf(arraylist.size()), scoreplayerteam.func_96661_b()}); 553 } 554 } 555 556 protected void func_96337_e(ICommandSender par1ICommandSender, String par2Str) 557 { 558 Scoreboard scoreboard = this.func_96334_d(); 559 ScoreObjective scoreobjective = this.func_96345_a(par2Str, false); 560 scoreboard.func_96519_k(scoreobjective); 561 notifyAdmins(par1ICommandSender, "commands.scoreboard.objectives.remove.success", new Object[] {par2Str}); 562 } 563 564 protected void func_96336_d(ICommandSender par1ICommandSender) 565 { 566 Scoreboard scoreboard = this.func_96334_d(); 567 Collection collection = scoreboard.func_96514_c(); 568 569 if (collection.size() <= 0) 570 { 571 throw new CommandException("commands.scoreboard.objectives.list.empty", new Object[0]); 572 } 573 else 574 { 575 par1ICommandSender.sendChatToPlayer(EnumChatFormatting.DARK_GREEN + par1ICommandSender.translateString("commands.scoreboard.objectives.list.count", new Object[] {Integer.valueOf(collection.size())})); 576 Iterator iterator = collection.iterator(); 577 578 while (iterator.hasNext()) 579 { 580 ScoreObjective scoreobjective = (ScoreObjective)iterator.next(); 581 par1ICommandSender.sendChatToPlayer(par1ICommandSender.translateString("commands.scoreboard.objectives.list.entry", new Object[] {scoreobjective.func_96679_b(), scoreobjective.func_96678_d(), scoreobjective.func_96680_c().func_96636_a()})); 582 } 583 } 584 } 585 586 protected void func_96347_j(ICommandSender par1ICommandSender, String[] par2ArrayOfStr, int par3) 587 { 588 Scoreboard scoreboard = this.func_96334_d(); 589 String s = par2ArrayOfStr[par3++]; 590 int j = Scoreboard.func_96537_j(s); 591 ScoreObjective scoreobjective = null; 592 593 if (par2ArrayOfStr.length == 4) 594 { 595 scoreobjective = this.func_96345_a(par2ArrayOfStr[par3++], false); 596 } 597 598 if (j < 0) 599 { 600 throw new CommandException("commands.scoreboard.objectives.setdisplay.invalidSlot", new Object[] {s}); 601 } 602 else 603 { 604 scoreboard.func_96530_a(j, scoreobjective); 605 606 if (scoreobjective != null) 607 { 608 notifyAdmins(par1ICommandSender, "commands.scoreboard.objectives.setdisplay.successSet", new Object[] {Scoreboard.func_96517_b(j), scoreobjective.func_96679_b()}); 609 } 610 else 611 { 612 notifyAdmins(par1ICommandSender, "commands.scoreboard.objectives.setdisplay.successCleared", new Object[] {Scoreboard.func_96517_b(j)}); 613 } 614 } 615 } 616 617 protected void func_96341_k(ICommandSender par1ICommandSender, String[] par2ArrayOfStr, int par3) 618 { 619 Scoreboard scoreboard = this.func_96334_d(); 620 621 if (par2ArrayOfStr.length > par3) 622 { 623 String s = func_96332_d(par1ICommandSender, par2ArrayOfStr[par3++]); 624 Map map = scoreboard.func_96510_d(s); 625 626 if (map.size() <= 0) 627 { 628 throw new CommandException("commands.scoreboard.players.list.player.empty", new Object[] {s}); 629 } 630 631 par1ICommandSender.sendChatToPlayer(EnumChatFormatting.DARK_GREEN + par1ICommandSender.translateString("commands.scoreboard.players.list.player.count", new Object[] {Integer.valueOf(map.size()), s})); 632 Iterator iterator = map.values().iterator(); 633 634 while (iterator.hasNext()) 635 { 636 Score score = (Score)iterator.next(); 637 par1ICommandSender.sendChatToPlayer(par1ICommandSender.translateString("commands.scoreboard.players.list.player.entry", new Object[] {Integer.valueOf(score.func_96652_c()), score.func_96645_d().func_96678_d(), score.func_96645_d().func_96679_b()})); 638 } 639 } 640 else 641 { 642 Collection collection = scoreboard.func_96526_d(); 643 644 if (collection.size() <= 0) 645 { 646 throw new CommandException("commands.scoreboard.players.list.empty", new Object[0]); 647 } 648 649 par1ICommandSender.sendChatToPlayer(EnumChatFormatting.DARK_GREEN + par1ICommandSender.translateString("commands.scoreboard.players.list.count", new Object[] {Integer.valueOf(collection.size())})); 650 par1ICommandSender.sendChatToPlayer(joinNiceString(collection.toArray())); 651 } 652 } 653 654 protected void func_96339_l(ICommandSender par1ICommandSender, String[] par2ArrayOfStr, int par3) 655 { 656 String s = par2ArrayOfStr[par3 - 1]; 657 String s1 = func_96332_d(par1ICommandSender, par2ArrayOfStr[par3++]); 658 ScoreObjective scoreobjective = this.func_96345_a(par2ArrayOfStr[par3++], true); 659 int j = s.equalsIgnoreCase("set") ? parseInt(par1ICommandSender, par2ArrayOfStr[par3++]) : parseIntWithMin(par1ICommandSender, par2ArrayOfStr[par3++], 1); 660 Scoreboard scoreboard = this.func_96334_d(); 661 Score score = scoreboard.func_96529_a(s1, scoreobjective); 662 663 if (s.equalsIgnoreCase("set")) 664 { 665 score.func_96647_c(j); 666 } 667 else if (s.equalsIgnoreCase("add")) 668 { 669 score.func_96649_a(j); 670 } 671 else 672 { 673 score.func_96646_b(j); 674 } 675 676 notifyAdmins(par1ICommandSender, "commands.scoreboard.players.set.success", new Object[] {scoreobjective.func_96679_b(), s1, Integer.valueOf(score.func_96652_c())}); 677 } 678 679 protected void func_96351_m(ICommandSender par1ICommandSender, String[] par2ArrayOfStr, int par3) 680 { 681 Scoreboard scoreboard = this.func_96334_d(); 682 String s = func_96332_d(par1ICommandSender, par2ArrayOfStr[par3++]); 683 scoreboard.func_96515_c(s); 684 notifyAdmins(par1ICommandSender, "commands.scoreboard.players.reset.success", new Object[] {s}); 685 } 686 687 /** 688 * Adds the strings available in this command to the given list of tab completion options. 689 */ 690 public List addTabCompletionOptions(ICommandSender par1ICommandSender, String[] par2ArrayOfStr) 691 { 692 if (par2ArrayOfStr.length == 1) 693 { 694 return getListOfStringsMatchingLastWord(par2ArrayOfStr, new String[] {"objectives", "players", "teams"}); 695 } 696 else 697 { 698 if (par2ArrayOfStr[0].equalsIgnoreCase("objectives")) 699 { 700 if (par2ArrayOfStr.length == 2) 701 { 702 return getListOfStringsMatchingLastWord(par2ArrayOfStr, new String[] {"list", "add", "remove", "setdisplay"}); 703 } 704 705 if (par2ArrayOfStr[1].equalsIgnoreCase("add")) 706 { 707 if (par2ArrayOfStr.length == 4) 708 { 709 return getListOfStringsFromIterableMatchingLastWord(par2ArrayOfStr, ScoreObjectiveCriteria.field_96643_a.keySet()); 710 } 711 } 712 else if (par2ArrayOfStr[1].equalsIgnoreCase("remove")) 713 { 714 if (par2ArrayOfStr.length == 3) 715 { 716 return getListOfStringsFromIterableMatchingLastWord(par2ArrayOfStr, this.func_96335_a(false)); 717 } 718 } 719 else if (par2ArrayOfStr[1].equalsIgnoreCase("setdisplay")) 720 { 721 if (par2ArrayOfStr.length == 3) 722 { 723 return getListOfStringsMatchingLastWord(par2ArrayOfStr, new String[] {"list", "sidebar", "belowName"}); 724 } 725 726 if (par2ArrayOfStr.length == 4) 727 { 728 return getListOfStringsFromIterableMatchingLastWord(par2ArrayOfStr, this.func_96335_a(false)); 729 } 730 } 731 } 732 else if (par2ArrayOfStr[0].equalsIgnoreCase("players")) 733 { 734 if (par2ArrayOfStr.length == 2) 735 { 736 return getListOfStringsMatchingLastWord(par2ArrayOfStr, new String[] {"set", "add", "remove", "reset", "list"}); 737 } 738 739 if (!par2ArrayOfStr[1].equalsIgnoreCase("set") && !par2ArrayOfStr[1].equalsIgnoreCase("add") && !par2ArrayOfStr[1].equalsIgnoreCase("remove")) 740 { 741 if ((par2ArrayOfStr[1].equalsIgnoreCase("reset") || par2ArrayOfStr[1].equalsIgnoreCase("list")) && par2ArrayOfStr.length == 3) 742 { 743 return getListOfStringsFromIterableMatchingLastWord(par2ArrayOfStr, this.func_96334_d().func_96526_d()); 744 } 745 } 746 else 747 { 748 if (par2ArrayOfStr.length == 3) 749 { 750 return getListOfStringsMatchingLastWord(par2ArrayOfStr, MinecraftServer.getServer().getAllUsernames()); 751 } 752 753 if (par2ArrayOfStr.length == 4) 754 { 755 return getListOfStringsFromIterableMatchingLastWord(par2ArrayOfStr, this.func_96335_a(true)); 756 } 757 } 758 } 759 else if (par2ArrayOfStr[0].equalsIgnoreCase("teams")) 760 { 761 if (par2ArrayOfStr.length == 2) 762 { 763 return getListOfStringsMatchingLastWord(par2ArrayOfStr, new String[] {"add", "remove", "join", "leave", "empty", "list", "option"}); 764 } 765 766 if (par2ArrayOfStr[1].equalsIgnoreCase("join")) 767 { 768 if (par2ArrayOfStr.length == 3) 769 { 770 return getListOfStringsFromIterableMatchingLastWord(par2ArrayOfStr, this.func_96334_d().func_96531_f()); 771 } 772 773 if (par2ArrayOfStr.length >= 4) 774 { 775 return getListOfStringsMatchingLastWord(par2ArrayOfStr, MinecraftServer.getServer().getAllUsernames()); 776 } 777 } 778 else 779 { 780 if (par2ArrayOfStr[1].equalsIgnoreCase("leave")) 781 { 782 return getListOfStringsMatchingLastWord(par2ArrayOfStr, MinecraftServer.getServer().getAllUsernames()); 783 } 784 785 if (!par2ArrayOfStr[1].equalsIgnoreCase("empty") && !par2ArrayOfStr[1].equalsIgnoreCase("list") && !par2ArrayOfStr[1].equalsIgnoreCase("remove")) 786 { 787 if (par2ArrayOfStr[1].equalsIgnoreCase("option")) 788 { 789 if (par2ArrayOfStr.length == 3) 790 { 791 return getListOfStringsFromIterableMatchingLastWord(par2ArrayOfStr, this.func_96334_d().func_96531_f()); 792 } 793 794 if (par2ArrayOfStr.length == 4) 795 { 796 return getListOfStringsMatchingLastWord(par2ArrayOfStr, new String[] {"color", "friendlyfire", "seeFriendlyInvisibles"}); 797 } 798 799 if (par2ArrayOfStr.length == 5) 800 { 801 if (par2ArrayOfStr[3].equalsIgnoreCase("color")) 802 { 803 return getListOfStringsFromIterableMatchingLastWord(par2ArrayOfStr, EnumChatFormatting.func_96296_a(true, false)); 804 } 805 806 if (par2ArrayOfStr[3].equalsIgnoreCase("friendlyfire") || par2ArrayOfStr[3].equalsIgnoreCase("seeFriendlyInvisibles")) 807 { 808 return getListOfStringsMatchingLastWord(par2ArrayOfStr, new String[] {"true", "false"}); 809 } 810 } 811 } 812 } 813 else if (par2ArrayOfStr.length == 3) 814 { 815 return getListOfStringsFromIterableMatchingLastWord(par2ArrayOfStr, this.func_96334_d().func_96531_f()); 816 } 817 } 818 } 819 820 return null; 821 } 822 } 823 824 protected List func_96335_a(boolean par1) 825 { 826 Collection collection = this.func_96334_d().func_96514_c(); 827 ArrayList arraylist = new ArrayList(); 828 Iterator iterator = collection.iterator(); 829 830 while (iterator.hasNext()) 831 { 832 ScoreObjective scoreobjective = (ScoreObjective)iterator.next(); 833 834 if (!par1 || !scoreobjective.func_96680_c().func_96637_b()) 835 { 836 arraylist.add(scoreobjective.func_96679_b()); 837 } 838 } 839 840 return arraylist; 841 } 842 843 /** 844 * Return whether the specified command parameter index is a username parameter. 845 */ 846 public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2) 847 { 848 return par1ArrayOfStr[0].equalsIgnoreCase("players") ? par2 == 2 : (!par1ArrayOfStr[0].equalsIgnoreCase("teams") ? false : par2 == 2 || par2 == 3); 849 } 850}