这是我写得代码
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