Bukkit插件的TCP连接

马克·欧文

我正在尝试创建一个bukkit插件,该插件将连接到tcp服务器并在事件触发时发送消息。

我已经掌握了基础知识,但是我缺少了一些东西,我也不知道从这儿去哪里。我可以看到该插件建立了与服务器的连接,但随后引发了错误,并且未发送任何消息。

我试图了解事件发生时如何向tcp客户端发送字符串。为了进行测试,我使用了播放器移动事件。

启动时,我在craftbukkit服务器日志中看到以下内容:

Loading libraries, please wait...
[19:53:25 INFO]: Starting minecraft server version 1.7.10
[19:53:25 INFO]: Loading properties
[19:53:25 INFO]: Default game type: SURVIVAL
[19:53:25 INFO]: Generating keypair
[19:53:26 INFO]: Starting Minecraft server on *:25565
[19:53:26 INFO]: This server is running CraftBukkit version git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks (MC: 1.7.10) (Implementing API version 1.7.10-R0.1-SNAPSHOT)
[19:53:27 INFO]: [Compass] Loading Compass v0.1
[19:53:27 INFO]: Preparing level "world"
[19:53:27 INFO]: Preparing start region for level 0 (Seed: 7985848474339719790)
[19:53:27 WARN]: Could not get information about this CraftBukkit version; perhaps you are running a custom one?: FileNotFoundException
[19:53:28 INFO]: Preparing spawn area: 66%
[19:53:28 WARN]: Could not get latest artifact information: FileNotFoundException
[19:53:28 INFO]: Preparing start region for level 1 (Seed: 524789769407484853)
[19:53:29 INFO]: Preparing spawn area: 70%
[19:53:30 INFO]: Preparing start region for level 2 (Seed: 524789769407484853)
[19:53:30 INFO]: [Compass] Enabling Compass v0.1
[19:53:30 INFO]: [Compass] Start up.
[19:53:30 INFO]: [Compass] trying connect0
[19:53:30 INFO]: [Compass] getOutputStream()
[19:53:30 INFO]: [Compass] getInputStream()
[19:53:30 INFO]: Server permissions file permissions.yml is empty, ignoring it
[19:53:30 INFO]: Done (3.312s)! For help, type "help" or "?"
[19:54:25 INFO]: UUID of player MagicPixelPunk is 0322446d-6b92-4b63-af77-98d6739ec53b
[19:54:25 INFO]: MagicPixelPunk[/127.0.0.1:55376] logged in with entity id 206 at ([world] -164.16068813003193, 65.0, -141.0983355740641)

当我与Minecraft客户端连接并移动播放器时,在craftbukkit服务器日志中看到以下错误:

21:52:01 INFO]: outToServer is null
21:52:01 INFO]: [CompassTask] writing to outToServer
21:52:01 INFO]: [CompassTask] Send failed: exception:
21:52:01 WARN]: java.lang.NullPointerException
21:52:01 WARN]:        at compass.Compass.onMove(Compass.java:61)

Java类Compass.java如下:

package compass;

import java.util.logging.Logger;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.CommandException;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.scheduler.BukkitRunnable;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import java.lang.Exception;
import java.lang.Error;
import java.io.*; 
import java.net.*; 

public class Compass extends JavaPlugin implements Listener{
  public static Logger log = Logger.getLogger("Minecraft");
  public DataOutputStream outToServer;

  public void onEnable() {
    log.info("[Compass] Start up.");
    String sentence;   
    String modifiedSentence;   
    BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));  
    log.info("[Compass] trying connect0"); 
    try{
      Socket clientSocket = new Socket("localhost", 6789);  
      log.info("[Compass] getOutputStream()");
      DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());   
      log.info("[Compass] getInputStream()");
      BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    }
    catch (Exception e){
      log.info("[Compass] Send failed: Exception: ");
      e.printStackTrace();
    }

    getServer().getPluginManager().registerEvents(this, this);
  }
  public void onReload() {
    log.info("[Compass] Server reloaded.");
  }
  public void onDisable() {
    log.info("[Compass] Server stopping.");
  }

    @EventHandler
    public void onMove(PlayerMoveEvent event) {
        try{
          if (outToServer == null) {
            log.info("outToServer is null");
          }
          log.info("[CompassTask] writing to outToServer");
          outToServer.writeBytes("test"+"\n");
          log.info(" [x] Sent '" + "test" + "'");
        }
        catch (Exception e){
          log.info("[CompassTask] Send failed: exception:");
          e.printStackTrace();
        }
        catch (Error e){
          log.info("[CompassTask] Send failed: error:");
          e.printStackTrace();
        }
    }

}

我尝试写入outToServer为何为null时有任何想法吗?

马克·欧文

似乎问题出在线路上:

DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());

我猜这是在创建局部变量,所以当我尝试在onEnable()之外使用它时,outToServer为null

我改为:

outToServer = new DataOutputStream(clientSocket.getOutputStream());

现在工作正常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法打开与插件的TCP连接:8140

来自分类Dev

Java NullPointException Bukkit插件

来自分类Dev

如何首先启用bukkit插件?

来自分类Dev

参考价目表-Bukkit插件

来自分类Dev

Bukkit插件-监听器未运行?

来自分类Dev

创建Bukkit插件时Maven错误

来自分类Dev

java.lang.IndexOutOfBoundsException错误Bukkit插件

来自分类Dev

我的世界的Java编程Bukkit插件

来自分类Dev

Minecraft Bukkit API插件启用时崩溃

来自分类Dev

Bukkit插件EventHandler注册表错误

来自分类Dev

单独服务器上Bukkit插件之间的通信

来自分类Dev

单独服务器上Bukkit插件之间的通信

来自分类Dev

Mc Bukkit Heal插件提供/ usage而不是命令

来自分类Dev

创建权限插件(aplugin。*)-Spigot / Bukkit-Java

来自分类Dev

在Minecraft Bukkit插件中构建金字塔

来自分类Dev

bukkit 插件内的套接字在使用后关闭

来自分类Dev

使用Ruppell的Sockets插件在Heroku上托管TCP服务器时,出现“外部主机关闭连接”错误

来自分类Dev

jenkins中的另一个云插件未使用ec2实例连接到tcp:// docker:2376

来自分类Dev

多个TCP连接与单个连接

来自分类Dev

缺少TCP连接重用

来自分类Dev

TCP / IP长期连接

来自分类Dev

LabView TCP连接

来自分类Dev

MarkLogic TCP连接

来自分类Dev

使用服务的TCP连接

来自分类Dev

半建立的TCP连接

来自分类Dev

Linux TCP连接超时

来自分类Dev

Unity中的TCP连接

来自分类Dev

服务用尽TCP连接

来自分类Dev

TCP连接协助