Find what a player writes inside of onCommand?

Discussion in 'Plugin Development' started by stelar7, Sep 11, 2011.

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

    stelar7

    Is there a way of getting a players message fks, "/m helloe all", into another command?

    TL;DR:
    how to get a command inside another command?
     
  2. Offline

    Baummann

    For the 2nd word in the command:
    Code:
    args[0]
    For the 3rd word in the command:
    Code:
    args[1]
    etc.

    If you want to broadcast a message:
    Code:
    String message = "";
    for (int i = 0; i < args.length; i++)
           message = args[i];
    getServer().broadcastMessage(message);
     
  3. Offline

    stelar7

    @Baummann

    if I want to get the command /m from the command /msg how would i do that?

    if player1 uses" /msg player2"
    then he gets every message that player2 sends when using the "/m" command
     
  4. Offline

    Baummann

    Code:
    Player player2 = getServer().getPlayer(args[0]);
    That'll try to find the player given in the command. If the player is offline it'll throw an IndexOutOfBoundsException.
     
  5. Offline

    stelar7

    @Baummann

    but how do i get the message he wrote?
     
  6. Offline

    Baummann

    Without making your own /msg command, you can't.
     
  7. Offline

    stelar7

    @Baummann

    I make the /m and the /msg.

    How do i get whatever player1 wrote with /m inside the /msg command?
     
  8. Offline

    Baummann

    Try to store the message and the player in a HashMap.
     
  9. Offline

    stelar7

    @Baummann

    I need it to be a realtime update, so when player1 types the command "/m hello" player 2 gets the command if he has used "/msg player1"

    I.E.
    player2: /msg player1
    player1: /m i win

    then player2 gets a message "i win"
     
  10. Offline

    Baummann

    Use a HashMap to store the players.

    Code:
    public HashMap<Player, Player> players = new HashMap<Player, Player>();
    public boolean onCommand(...) {
            //Code for /msg
            players.put(player, getServer().getPlayer(args[0]));
            player.sendMessage("You are now sending messages to " + getServer().getPlayer(args[0]).getDisplayName());
            return true;
            //Code for /m
            Player target = players.get(player);
            String message = "";
            for (int i = 0; i < args.length; i++)
                    message = args[i];
            target.sendMessage("[" + player.getDisplayName() + "->Me] " + message);
            player.sendMessage("[Me->" + target.getDisplayName() + "] " + message);
            return true;
    }
    That should be working
     
  11. Offline

    stelar7

    @Baummann
    Player target = players.get(player);
    returns null....
     
  12. Offline

    Baummann

    You need to use /msg [player] first.
     
  13. Offline

    stelar7

    @Baummann
    I have, but it's still null...

    I never get the message...

    Code:java
    1. Player op = players.get(player);
    2. if (op != null) {
    3. op.sendMessage(ChatColor.GREEN + msender + " -> " + reciver + ": " + temp);
    4. }
     
  14. Offline

    Baummann

    How do you know that it's null? Post your NPE if there's one.
     
  15. Offline

    stelar7

    @Baummann
    Code:
    151 recipes
    16 achievements
    13:27:59 [INFO] Starting minecraft server version Beta 1.7.3
    13:27:59 [INFO] Loading properties
    13:27:59 [INFO] Starting Minecraft server on *:25565
    13:27:59 [INFO] This server is running Craftbukkit version git-Bukkit-0.0.0-980-
    g4ed23b1-b1060jnks (MC: 1.7.3)
    13:27:59 [INFO] Preparing level "World"
    13:27:59 [INFO] Preparing start region for level 0 (Seed: 6651205974854271449)
    13:27:59 [INFO] Preparing start region for level 1 (Seed: 6651205974854271449)
    13:28:00 [INFO] [Messenger]V1.0 : Enabled!
    13:28:00 [INFO] Server permissions file permissions.yml is empty, ignoring it
    13:28:00 [INFO] Done (0,097s)! For help, type "help" or "?"
    13:28:09 [INFO] stelar7 [/127.0.0.1:11167] logged in with entity id 1 at ([World
    ] -26.59375, 83.0, -187.25)
    13:28:22 [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'm' i
    n plugin Messenger v1.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:37)
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:12
    9)
            at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:3
    52)
            at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.
    java:737)
            at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:701)
    
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:694)
            at net.minecraft.server.Packet3Chat.a(Packet3Chat.java:33)
            at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:89)
            at net.minecraft.server.NetworkListenThread.a(SourceFile:105)
            at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:454)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:363)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:422)
    Caused by: java.lang.NullPointerException
            at my.plugin.stelar7.Messenger.MSEX.onCommand(MSEX.java:53)
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:35)
            ... 12 more
    13:28:43 [INFO] stelar7 lost connection: disconnect.quitting
    13:28:43 [INFO] Connection reset
    >
    this is line 53:
    Code:java
    1. op.sendMessage(ChatColor.GREEN + msender + " -> " + reciver + ": " + temp);
     
  16. Offline

    Baummann

    What's msender and what's receiver? A String?
     
  17. Offline

    stelar7

    @Baummann
    Code:java
    1. String msender = ((Player) sender).getName();
    Code:java
    1. String reciver = mreciver.getName();
    Code:java
    1. Player mreciver = findPlayerByName(args[0]);
    Code:java
    1. private Player findPlayerByName(String playerName) {
    2. for (Player player : Bukkit.getServer().getOnlinePlayers()) {
    3. if (player.getName().equalsIgnoreCase(playerName)) {
    4. return player;
    5. }
    6. }
    7. return null;
    8. }
    Code:java
    1. if (mreciver == null) {
    2. player.sendMessage(ChatColor.RED + "Spilleren er ikke online!");
    3. return true;
    4. }
     
  18. Offline

    Baummann

    put this in your findPlayerByName method:
    Code:
    Player player = Bukkit.getServer().getPlayer(playerName);
    if (!player.isOnline()) return null;
    else return player;
     
  19. Offline

    stelar7

    @Baummann
    it's already there...
    Code:
    private Player findPlayerByName(String playerName) {
        for (Player player : Bukkit.getServer().getOnlinePlayers()) {
            if (player.getName().equalsIgnoreCase(playerName)) {
                return player;
            }
        }
        return null;
    }
    
     
  20. Offline

    Baummann

    Code:
    private Player findPlayerByName(String playerName) {
         Player player = getServer().getPlayer(playerName);
         if (!player.isOnline()) return null;
         else return player;
    }
    That's what I meant
     
  21. Offline

    stelar7

  22. Offline

    Baummann

    Your code:
    Code:
    private Player findPlayerByName(String playerName) {
        for (Player player : Bukkit.getServer().getOnlinePlayers()) {
            if (player.getName().equalsIgnoreCase(playerName)) {
                return player;
            }
        }
        return null;
    }
    My code:
    Code:
    private Player findPlayerByName(String playerName) {
         Player player = getServer().getPlayer(playerName);
         if (!player.isOnline()) return null;
         else return player;
    }
    It's a huge difference.
     
  23. Offline

    stelar7

  24. Code:
    private Player findPlayerByName(String playerName) {
         Player player = getServer().getPlayer(playerName);
         if (player == null || !player.isOnline()) return null;
         else return player;
    }
     
  25. Offline

    stelar7

    @V10lator
    Like i said, it's the same...
    there is a null check in my code and a online check..
    it's still the same result...
     
  26. Then show the full sources, please...
     
  27. Offline

    stelar7

  28. That aren't the sources which triggered the error (line 53 is wrong)...
    Anyway:
    Player op = (Player) players.get(player);
    What if the player isn't stored in your HashMap? It stores null in op... And if you try to use op (like op.sendMessage()) it will give you a NPE... ;)
     
  29. Offline

    stelar7

    that's the updated code,

    this would work right?

    Code:
    if (players.containsValue(player)) {
    op.sendMessage(ChatColor.BLUE + "[" + msender
    + "] Til [" + player.getName() + "] : " + temp);
    }
     
  30. It should, yes.
     
Thread Status:
Not open for further replies.

Share This Page