这是我写得代码
 
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.
 
请大神帮忙看看是哪里写错了?还是我用的方法不对?
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.
请大神帮忙看看是哪里写错了?还是我用的方法不对?
不要在加入时的瞬间打开背包界面
因为有可能界面还没载入好等奇葩原因
因为有可能界面还没载入好等奇葩原因
用 runTaskLater 晚个几tick就好了
为什么不晚几个tick打开
就像这样
复制代码
就像这样
 
- Inventory inv = Bukkit.createInventory(null,9,"");
 
-   ItemStack item=new ItemStack(57);
 
-   inv.setItem(3, item);
 
-   Player p=evt.getPlayer();
 
- Bukkit.getServer().getScheduler().runTaskLater(plugin, new BukkitRunnable() {
 
- @Override
 
-                                                         public void run() {
 
-                                                           p.openInventory(inv);
 
-                                                         }
 
-                                                 }, 15L);
 
星燚 发表于 2016-7-31 18:26
为什么不晚几个tick打开
就像这样
那再请问一下,这个runtasklater方法的第一个参数plugin怎么填?是填目前这个插件的名字?
黄总 发表于 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),,而是用那一大长串东西?(其实我没看懂那一长串什么意思
黄总 发表于 2016-8-1 21:00
谢谢,还有一个问题,中间的参数runable task,为什么不能用(runable)p.openinventory(inv),,而是用那 ...
Bukkit自带线程