TPAccept Problem

Discussion in 'Plugin Development' started by Venican, Sep 12, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    Venican

    Code:java
    1. if (cmd.getName().equalsIgnoreCase("tpa")) {
    2. if (args.length == 0) {
    3. p.sendMessage(ChatColor.RED + "Vennligst skriv inn en spiller.");
    4. return true;
    5. }
    6. Player target = Bukkit.getServer().getPlayer(args[0]);
    7. if (target == null) {
    8. p.sendMessage(ChatColor.RED + "Kunne ikke finne spilleren " + args[0] + "!");
    9. return true;
    10. }
    11. target.sendMessage(ChatColor.GREEN + " Ønsker å teleportere til deg, skriv /tpaccept for å godkjenne.");
    12. return true;
    13. }else if (cmd.getName().equalsIgnoreCase("tpaccept")) {
    14. Player target = Bukkit.getServer().getPlayer(args[0]);
    15. target.teleport(p.getLocation());
    16. }

    Why won't this work?
     
  2. Offline

    1Rogue

    How are you keeping track of who sent requests to who?

    For instance, what if I just joined your server and typed, /tpaccept with no requests, then what?
     
  3. Offline

    Venican

    What should i do for keeping that information?

    1Rogue
    Okey i tried hashmaps look at this:
    Code:java
    1. if (cmd.getName().equalsIgnoreCase("tpa")) {
    2. Player target = Bukkit.getServer().getPlayer(args[0]);
    3. Player requester = (Player)sender;
    4. if (args.length == 0) {
    5. requester.sendMessage(ChatColor.RED + "Vennligst skriv inn en spiller.");
    6. return true;
    7. }
    8. else if (args.length == 1) {
    9. final Player targetPlayer = requester.getServer().getPlayer(args[0]);
    10. requester.sendMessage(ChatColor.GREEN + "Forespørsel sendt...");
    11. target.sendMessage(ChatColor.GREEN + sender.getName() + " Ønsker å teleportere til deg, skriv /tpaccept for å godkjenne.");
    12. this.tpa.put(targetPlayer, requester);
    13. return true;
    14. }
    15.  
    16. }else if (cmd.getName().equalsIgnoreCase("tpaccept")) {
    17. Player player1 = (Player)sender;
    18. try
    19. {
    20. if (!this.tpa.containsKey(player1))
    21. ((Player)this.tpa.get(player1)).teleport(player1);
    22. this.tpa.remove(player1);
    23. ((Player)this.tpa.get(player1)).sendMessage(ChatColor.GREEN + "Teleportert til " + ChatColor.GOLD + player1.getName().toString());
    24. return true;
    25. }
    26. catch (Exception localException1)
    27. {
    28. }
    29.  
    30. }


    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 4, 2016
  4. Offline

    1Rogue

    Looks alright. The only things I would really key in on is that you want to be thread-safe, so either use synchronization on the map or use a ConcurrentHashMap.

    Also make sure you check the instanceof on the sender before casting it as a Player.

    Code:java
    1. Player p;
    2. if (sender instanceof Player) {
    3. p = (Player)sender;
    4. } else {
    5. return;
    6. }
     
  5. Offline

    Venican

    Well the code i sent you doesn't work..
     
  6. Offline

    1Rogue


    Are you getting an error? What specifically, does not work?
     
  7. Offline

    Venican

    It doesn't work when i type /tpaccept, i did some debuging, and it adds you to the hashmap successfully. But after that it just doesn't work, it doesn't teleport you.
     
  8. Offline

    1Rogue

    Hm.

    try not casting Player to the object you get from the hashmap, and as a second thought, when you use .teleport try .teleport(player.getLocation()); and see if that has any effect.
     
  9. Offline

    Venican

    I get an NullPointer error.
     
  10. Offline

    1Rogue

    Can you copy the line as-is where you get the nullpointer?
     
  11. Offline

    Venican

    This line: ((Player)this.tpa.get(player1)).sendMessage(ChatColor.GREEN + "Teleportert til " + ChatColor.GOLD + player1.getName().toString());
     
Thread Status:
Not open for further replies.

Share This Page