黄总
这是我写得代码

public class Main extends JavaPlugin implements Listener{
public void onEnable(){
  getLogger().info("Test插件已被加载");
  Bukkit.getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent evt){
  Inventory inv = Bukkit.createInventory(null,9);
  ItemStack item=new ItemStack(57);
  inv.setItem(3, item);
  Player p=evt.getPlayer();
  p.openInventory(inv);
  p.sendMessage("Hi");
}
}


想要的效果是玩家进入服务器后能看见一个箱子界面。

实际测试中,我进入服务器后,可以在一瞬间看到箱子界面,然后被踢出服务器。
踢出的提示信息是Internal Exception: java.io.IOException:远程主机强迫关闭了一个现有连接。
后台会出现报错:
[20:02:05 WARN]: Failed to handle packet for /127.0.0.1:62228
java.lang.IllegalArgumentException: Listener already listening
        at net.minecraft.server.v1_10_R1.Container.addSlotListener(Container.java:57) ~[spigot-1.10.jar:git-Spigot-6016ac7-7964365]
        at net.minecraft.server.v1_10_R1.EntityPlayer.syncInventory(EntityPlayer.java:175) ~[spigot-1.10.jar:git-Spigot-6016ac7-7964365]
        at net.minecraft.server.v1_10_R1.PlayerList.a(PlayerList.java:220) ~[spigot-1.10.jar:git-Spigot-6016ac7-7964365]
        at net.minecraft.server.v1_10_R1.LoginListener.b(LoginListener.java:144) ~[spigot-1.10.jar:git-Spigot-6016ac7-7964365]
        at net.minecraft.server.v1_10_R1.LoginListener.E_(LoginListener.java:54) ~[spigot-1.10.jar:git-Spigot-6016ac7-7964365]
        at net.minecraft.server.v1_10_R1.NetworkManager.a(NetworkManager.java:233) ~[spigot-1.10.jar:git-Spigot-6016ac7-7964365]
        at net.minecraft.server.v1_10_R1.ServerConnection.c(ServerConnection.java:140) [spigot-1.10.jar:git-Spigot-6016ac7-7964365]
        at net.minecraft.server.v1_10_R1.MinecraftServer.D(MinecraftServer.java:832) [spigot-1.10.jar:git-Spigot-6016ac7-7964365]
        at net.minecraft.server.v1_10_R1.DedicatedServer.D(DedicatedServer.java:399) [spigot-1.10.jar:git-Spigot-6016ac7-7964365]
        at net.minecraft.server.v1_10_R1.MinecraftServer.C(MinecraftServer.java:672) [spigot-1.10.jar:git-Spigot-6016ac7-7964365]
        at net.minecraft.server.v1_10_R1.MinecraftServer.run(MinecraftServer.java:571) [spigot-1.10.jar:git-Spigot-6016ac7-7964365]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_77]
[20:02:07 INFO]: huangzong lost connection: Internal server error
[20:02:07 INFO]: huangzong left the game.


请大神帮忙看看是哪里写错了?还是我用的方法不对?

a8105
不要在加入时的瞬间打开背包界面
因为有可能界面还没载入好等奇葩原因

hhttll
用 runTaskLater 晚个几tick就好了

TimmyOVO
为什么不晚几个tick打开
就像这样

  1. Inventory inv = Bukkit.createInventory(null,9,"");
  2.   ItemStack item=new ItemStack(57);
  3.   inv.setItem(3, item);
  4.   Player p=evt.getPlayer();
  5. Bukkit.getServer().getScheduler().runTaskLater(plugin, new BukkitRunnable() {
  6. @Override
  7.                                                         public void run() {
  8.                                                           p.openInventory(inv);
  9.                                                         }
  10.                                                 }, 15L);
复制代码

黄总
星燚 发表于 2016-7-31 18:26
为什么不晚几个tick打开
就像这样

那再请问一下,这个runtasklater方法的第一个参数plugin怎么填?是填目前这个插件的名字?

TimmyOVO
黄总 发表于 2016-8-1 20:24
那再请问一下,这个runtasklater方法的第一个参数plugin怎么填?是填目前这个插件的名字? ...

填你plugin的main里面写的插件主类
你在主类调用该方法直接填this

黄总
810587921 发表于 2016-7-30 23:30
不要在加入时的瞬间打开背包界面
因为有可能界面还没载入好等奇葩原因

感谢解答~{:10_492:}其实我更想知道这一段报错的意思,为什么进入那一瞬间载入会被弹出?

黄总
星燚 发表于 2016-8-1 20:25
填你plugin的main里面写的插件主类
你在主类调用该方法直接填this

谢谢,还有一个问题,中间的参数runable task,为什么不能用(runable)p.openinventory(inv),,而是用那一大长串东西?(其实我没看懂那一长串什么意思

a8105
黄总 发表于 2016-8-1 21:00
谢谢,还有一个问题,中间的参数runable task,为什么不能用(runable)p.openinventory(inv),,而是用那 ...

Bukkit自带线程