【问题标题】:Unable to send commands to Bukkit Server无法向 Bukkit 服务器发送命令
【发布时间】:2014-01-22 04:55:11
【问题描述】:

我在向 Minecraft 的 Bukkit 服务器发送命令时遇到问题。 我的代码非常适合 Vanilla,但是当我使用 Bukkit 尝试它时,它似乎不想再工作了。我仍然可以接收来自服务器的所有输出,我只是无法发送诸如“帮助”或“停止”之类的命令。 这是我处理服务器线程的类。

public class Sender{

ConsoleWriter cWriter = new ConsoleWriter();
    private BufferedWriter writer;
private OutputStreamWriter out;
public void execute(){
    this.ui = ui;
    try{
        ProcessBuilder pb = new ProcessBuilder(path_to_server+"launch.bat");
        Process process = pb.start();

        StreamGobbler sgError = new StreamGobbler(process.getErrorStream());

        new Thread( sgError ).start();
        out = new OutputStreamWriter(process.getOutputStream());
        writer = new PrintWriter(out);

    } catch ( IOException e ){
        e.printStackTrace();
    }
}

private class StreamGobbler implements Runnable 
{
    private InputStream is;
    public StreamGobbler( InputStream is ){
        this.is = is;
    }
    @Override
    public void run() {
        try {
            InputStreamReader isr = new InputStreamReader( is );
            BufferedReader br = new BufferedReader( isr );
            String line = null;
            while ( ( line = br.readLine() ) != null ){
                cWriter.writer(line, ui);
            }
        } catch ( IOException e ){
            e.printStackTrace();
        }
    }
}

}

那么这里发生了什么?为什么它适用于 Vanilla 而不是 Bukkit?

谢谢!

【问题讨论】:

  • gaming.stackexchange.com 的朋友可能对 bukkit 特定问题有更多经验。
  • @ChrisZhang 在查看该站点时,它似乎与代码无关,而是与游戏本身有关。这不是我想要的。不过感谢您的建议。

标签: java outputstream bukkit writer


【解决方案1】:

Vanilla 代码与Bukkit 代码完全不同。对于您必须使用的命令

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){

所以如果你想创建一个简单的 Say 命令(因为 helpstop 已经包含在 bukkit 中),你可以这样做:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    if(cmd.getName().equalsIgnoreCase("say")){
        if(args.length != 0){
            Bukkit.getServer().broadcastMessage(args);
        }
        return true;
    }
    return false;
}  

您还必须创建一个plugin.yml 文件,并在其中声明您的命令

commands:
    say:
        description: Say something
        usage: /say

访问以下网站是学习 Bukkit API 的好方法:

官方 Bukkit 插件教程http://wiki.bukkit.org/Plugin_Tutorial

Bukkit API 文档http://jd.bukkit.org/dev/apidocs/

同样,Bukkit 与 Vanilla 完全不同,因此您必须修改几乎所有代码。祝你好运!

【讨论】:

  • 我不是在写插件。它是管理和运行这两种类型的服务器的外部程序。我知道 Bukkit API,但这在这种情况下并不是最有用的。
  • @BrillianceOfBen 不过,它不起作用的原因还是因为 Bukkit 和 Vanilla 非常不同。
  • 虽然你的答案不是我想要的,但它确实让我想到了 Bukkit 与 Vanilla 的交互方式有何不同。我发现与 Vanilla 不同的是,它不像 Vanilla 那样绑定到 System.in/out。所以我能够编写一个超级简单的插件来做到这一点,它完全解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 2016-04-27
  • 2018-01-03
  • 2019-01-15
相关资源
最近更新 更多