Informacje: Spigot: 1.12 & amp; Wersja Java: 8

Próbuję zrobić to, gdy gracz GUI może wziąć przedmioty po zamknięciu GUI od: HTTPS: // Gyazo. COM / 27CCC89E0B5C8F0780BCDCA906EAB5AF Stworzyłem więc nową klasę do interakcji z wydarzeniem (InventoryClikevent) Problem polega na tym, że gdy stosuje się stosować od początku do końca, z wyjątkiem tego, że chciałbym umieścić go w stanie: jeśli gracz otworzy GUI, który może "T ruszaj przedmioty w tym GUI, a jeśli zamyka to, wydarzenie będzie nieprawidłowe, a gracz będzie mógł wziąć przedmioty w gamemode / lub przeniesie przedmioty z jego zapasów (na przykład)

I problem, który mam, to nie wiem, jak zastosować go w pętli, którą stworzyłem (dla mojego GUI) Używam komandexecutor / który nie pozwala mi używać zdarzenia (myślę)

mój kod: Polecenia: https://bin.readthedocs.fr/jeedur.txt CLICKEVENT: https://bin.readthedocs.fr/nermit.txt

0
Antyss77 14 kwiecień 2021, 20:20

1 odpowiedź

Najlepsza odpowiedź

Użyj listy statycznej (jako pola), która przechowuje wszystkich graczy, którzy mają otwarte GUI. Gdy gracz wykonuje polecenie, dodasz je do listy. Kiedy zamyka inwentaryzację (InventoryCloseevent), usuniesz odtwarzacz. W InventoryClikevent sprawdź, czy gracz znajduje się na liście. Jeśli tak, blokujesz wydarzenie.

Części kodu:

Umieść to na szczycie swojej klasy komend (Import lista i arraylista z Java.util. *) [Linia poleceń 20]:

public static List<Player> playersInInventory = new ArrayList<>(); 

Tuż przed otworzeniem zapasów [Polecenia Linia 142]:

Commands.playersInInventory.add(player);

W twoim inventorycloseevent [Utwórz to wydarzenie]:

Commands.playersInInventory.remove(event.getPlayer());

Następnie możesz użyć tego w inventoryClikevent [jedynej zawartości swojego zdarzenia]:

if (Commands.playersInInventory.contains((Player) (event.getWhoClicked()))) {
    event.setCancelled(true);
}

Ten kod powinien działać dobrze, ale go nie przetestowałem. Jeśli to nie zadziała, daj mi znać.

1
Japhei 16 kwiecień 2021, 00:00