2015-04-23 43 views
7

Próbuję otworzyć mój ekwipunek za każdym razem, gdy odbieram przedmiot. To jest w Bukkit.Jak mogę otworzyć własny ekwipunek poprzez wydarzenie?

Oto dotychczasowe wydarzenie, argumenty dotyczące player.openInventory są puste.

@EventHandler 
public void blank(PlayerDropItemEvent e){ 
    Player player = e.getPlayer(); 
    player.openInventory(); 
} 
+0

Czy "zarejestrowałeś" słuchacza? – CoderMusgrove

+2

Wtyczka działa, player.openInventory() potrzebuje argumentu –

Odpowiedz

6

Spróbuj użyć player.getInventory() odzyskać swój inwentarz następnie używając player.openInventory(inventory) aby go otworzyć.

@EventHandler 
public void blank(PlayerDropItemEvent e) { 
    Player player = e.getPlayer(); 
    Inventory inventory = player.getInventory(); 
    player.openInventory(inventory); 
} 
+3

Chciałbym tylko dodać, lubię zrobić szybki 'player.closeInventory()' zanim otworzę ekwipunek. Prawdopodobnie nie jest to konieczne, ale serwer nie wie, czy klient ma już otwarty ekwipunek, a znając mojang, może po prostu złamać klienta, jeśli serwer spróbuje powiedzieć mu, żeby otworzył inny ekwipunek, gdy już ma otwarty. – hintss

+1

@hintss faktycznie zrobili to dobrze, otwarcie ekwipunku automatycznie zamknie ostatni ekwipunek, a nawet wywoła InventoryCloseEvent.^_^ –

+0

i czy klient zawsze będzie na tyle mądry, aby robić to na zawsze? To ważne pytanie. – hintss

3

Aby uzyskać inwentarz gracza, można użyć:

player.getInventory(); 

Jeśli chciał otworzyć inwentarz odtwarzacza, można użyć:

player.openInventory(player.getInventory()); 

Więc kodzie może wyglądać mniej więcej tak:

@EventHandler 
public void dropItem(PlayerDropItemEvent e){ 
    Player player = e.getPlayer(); //get the player that dropped the item 
    player.openInventory(player.getInventory()); //open the player's inventory 
}