Bukkit如何从字符串中获取参数?

时间:2014-04-06 15:16:41

标签: console arguments bukkit

我正在尝试制作一个可以检测人们聊天时间的插件 “#say”它会用这些参数广播一条消息。 我需要知道的是如何从字符串中获取参数。 请帮忙。

主要

package com.gong.say;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{
    String sayMessage = ChatColor.GREEN + "Your message has been said!";
    public void onEnable()
    {
        Bukkit.getLogger().info("[BukkitAPIEnhancer] Plugin started!");
    Bukkit.getPluginManager().registerEvents(new ChatListener(this), this);
    }
    public void onDisable()
    {
        Bukkit.getLogger().info("[BukkitAPIEnhancer] Plugin disabled!");
    }

}

ChatListener:

package com.gong.say;

import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;

public class ChatListener implements Listener {
    Main plugin;
    public ChatListener(Main plugin)
    {
        this.plugin = plugin;
    }
    @EventHandler
    public void onChat(AsyncPlayerChatEvent e)
    {
        if(e.isAsynchronous())
        {
                String message = e.getMessage();
            if(message.contains("#say"))
            {
                //String[] args = Arguments after #say
                //Bukkit.broadcastMessage(args);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您通常应该使用前缀为/的命令,因此,通常您会执行/say String[args],并且获取参数会更容易,但如果您希望它以{{1为前缀>然后那是另一个故事。你可以这样做:

#

所以,这就是你的活动应该是什么样的:

if(message.contains("#say")){
    String messageToSend = message.replaceAll("#say", "");//get the arguments
    if(messageToSend.length <= 0){//make sure there's something after #say
        e.getPlayer().sendMessage("Correct usage: #say <arguments>"); //the user didn't put anything after #say
        return;
    }
    else{
        e.setCancelled(true);//cancel the event
        Bukkit.getServer().broadcastMessage(messageToSend);//send the message that comes after "#say"
        //you may want to add a chat color to the message to make it stand out more
    }
}

答案 1 :(得分:0)

@EventHandler
public void onChat2(AsyncPlayerChatEvent e) {
    if(e.isAsynchronous()) {
        String msg = e.getMessage();
        /** Verify if message starts with #say **/
        if(msg.startsWith("#say")) {
            /** Split message for get the args **/
            String[] args = e.getMessage().split(" ");
            /** Verify if have something after #say **/
            if(args.length > 1) {
                /** Cancel message and broadcast **/
                e.setCancelled(true);

                StringBuilder sb = new StringBuilder();
                for(int i = 1; i <args.length; i++) {
                    sb.append(args[i] + " ");
                }
                /** Add color to broadcast */
                String broadcast = ChatColor.translateAlternateColorCodes('&', sb.toString());
                /** Broadcast prefix **/
                String prefix = "§c[Broadcast] §r";
                /** Broadcast **/
                Bukkit.broadcastMessage(prefix + broadcast);
            }
        }
    }
}