-           @EventHandler
 
-           public void closeingInvetory(InventoryCloseEvent event)
 
-           {
 
-             Inventory inventory = event.getInventory();
 
-             Player whoClosePlayer = (Player)event.getPlayer();
 
-             if (inventory.getName().equalsIgnoreCase("§a§l? §f§l重铸"))
 
-             {
 
-               List<ItemStack> itemStacks = new ArrayList();
 
-               if (inventory.getItem(13) != null) {
 
-                 itemStacks.add(inventory.getItem(13));
 
-               }
 
-               Thread sendItemThread = new Thread(new Runnable()
 
-               {
 
-                 public void run()
 
-                 {
 
-                   for (ItemStack itemStack : itemStacks) {
 
-                     whoClosePlayer.getInventory().addItem(new ItemStack[] { itemStack });
 
-                   }
 
-                 }
 
-               });
 
-               sendItemThread.start();
 
-             }
 
- }
应该怎么写才能避免这种问题..
据我所知现在很多插件都是用这种方法,比如以前的sas...
你是想,Gui的物品东西在退出游戏或关闭服务器的时候返回玩家的背包?
这是关闭服务器时的例子
复制代码
这是关闭服务器时的例子
 
-     @Override
 
-     public void onDisable() {
 
-         for (Player player : Bukkit.getServer().getOnlinePlayers()) {
 
-             if (player.getOpenInventory().getTopInventory().getItem(3) != null) {
 
-                 player.getInventory().addItem(player.getOpenInventory().getTopInventory().getItem(3));
 
-             }
 
-         }
 
-     }
 
- itemStacks.add(inventory.getItem(13));
 
- inventory.setItem(13, null);
在获取物品后将物品删掉。
因为玩家离线时会触发两次 InventoryCloseEvent 事件。
判断一下玩家在线的状态 如果是离线导致的 就要防止重复判断