2014-01-22 5 views
0

У меня есть проблема отправки команд на сервер Bukkit для Minecraft. Мой код отлично работает для Vanilla, но когда я пробую его с Bukkit, он, похоже, больше не хочет работать. Я все еще могу получить весь вывод с сервера, я просто не могу отправлять команды вроде «Справка» или «Стоп». Это мой класс для обработки потока сервера.Не удается отправить команды на сервер 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(); 
     } 
    } 
} 

} 

Так что же здесь происходит? почему он отлично работает для Ваниль, но не Bukkit?

Спасибо!

+0

Люди, живущие по адресу http://gaming.stackexchange.com/, могут иметь больше опыта с вопросами, связанными с bukkit. –

+0

@ChrisZhang При взгляде на этот сайт это не похоже на код, а на проблемы с самими играми. Это не то, что я ищу. Спасибо за предложение. –

ответ

1

Vanilla код полностью отличается от Bukkit. Для команд, которые вы должны использовать

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

Так что, если вы хотите создать простую команду Say (как help и stop уже включены в 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 

Отличный способ узнать API Bukkit я s идя на эти сайты:

Официальный Bukkit Plugin Tutorial: http://wiki.bukkit.org/Plugin_Tutorial

Bukkit API Docs: http://jd.bukkit.org/dev/apidocs/

Опять Bukkit это способ отличается от Vanilla, так что вам придется изменить почти весь ваш код. Удачи!

+0

Я не пишу плагин. Это внешняя программа для управления и запуска обоих типов серверов. Я знаю API Bukkit, но это не очень полезно в этом случае. –

+1

@BrillianceOfBen Опять же, причина в том, что он не работает, потому что Bukkit и Vanilla очень разные. – Jojodmo

+0

Пока вы отвечаете не тем, что я искал, мне стало интересно, как Bukkit взаимодействует иначе, чем Vanilla. Я обнаружил, что в отличие от Vanilla он не привязывается к System.in/out, как к Vanilla. Поэтому я смог написать супер простой плагин, чтобы сделать это, и он полностью решил мою проблему. –

Смежные вопросы