Robię wtyczkę bukkit dla mojego przyjaciela i chcę dowiedzieć się, jak wywołać funkcję co 2 tiki (1/10 sekundy).Jak wywołać funkcję co 2 tiki
Odpowiedz
Cóż, to prawdopodobnie nie jest miejsce, w którym chcesz wyglądać. Powinieneś używać this dla swoich potrzeb rozwojowych.
Tak czy inaczej, mogę odpowiedzieć na twoje pytanie. Chcesz użyć wbudowanego programu planującego. Możesz uzyskać do niego dostęp, podając
server.getScheduler();
W szczególności, będziesz chciał utworzyć Runnable i sprawić, by wywoływał twoją metodę co 2 ticks.
int id = server.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
public void run() {
myMethod();
}, 0, 2);
Wyjaśnię różnicę z synchronizacją i asynchronizacją w sekundę, ale to powinno osiągnąć to, co chcesz. Pierwszy argument to tylko odnośnik do wtyczki (Normalnie this
lub plugin
). Drugi to działający, i powinieneś oczywiście zastąpić myMethod
metodą, którą chcesz wywołać. Trzecim argumentem jest wielkość opóźnienia (w tikach), aż do pierwszej metody. Przyjąłem 0, ale może to być również dwa w zależności od tego, co chcesz zrobić. Ostatnim argumentem jest ilość czasu między przebiegami, którą chciałbyś mieć dwa.
Zauważysz, że metoda zwraca liczbę całkowitą, której można użyć, aby anulować zadanie tak:
server.getScheduler().cancelTask(id);
ważne jest, aby omówić różnicę między Async i Sync. Zauważysz, że metoda, którą wywołaliśmy na początku, określa harmonogram Sync Powtarzanie zadań. Synchronizacja oznacza, że Runnable, który określiliśmy jako drugi argument, zostanie uruchomiony na głównym wątku serwera. Dowolna metoda wywołująca metodę Bukkit/CraftBukkit/Minecraft MUSI być uruchomiona jako synchronizacja. Jeśli uruchomisz coś, co mówi, modyfikuje blok, Async może całkowicie uszkodzić serwer. Po prostu tego nie rób;) Async, z drugiej strony, tworzy osobny wątek dla Runnable, służy do zadań tła, takich jak kopiowanie i wklejanie pliku lub sprawdzanie, która jest godzina. Ponownie, NIGDY uruchomić metodę, która zmodyfikuje świat jako Async.
Na koniec, jeśli chciałbyś tylko raz uruchomić metodę, a potem nie chcesz jej powtórzyć, możesz po prostu użyć metody int id = scheduleSyncDelayedTask(plugin, Runnable, 2)
, przy czym pierwsze dwa argumenty są takie same, a trzeci to opóźnienie do uruchomienia prowadzony jest (kleszcze)
powodzenia
Porady
- 1. Jak wywołać funkcję co 2 minuty w kanale kątowym2?
- 2. Miesiąc tiki, jak ustawić
- 3. Jak wywołać funkcję co godzinę? Jak mogę to zapętlić?
- 4. Jak wywołać funkcję członka szablonu?
- 5. Jak mogę wywołać funkcję co 3 sekundy przez 15 sekund?
- 6. Jak wywołać funkcję * po * onPreferenceChange?
- 7. Jak dynamicznie wywołać funkcję TryParse?
- 8. Jak wywołać funkcję zdefiniowaną przez funkcję boost_compute "BOOST_COMPUTE_FUNCTION"?
- 9. wywołać funkcję przed głównym
- 10. Jak wywołać wieloznaczną funkcję ogólną w Swift?
- 11. Jak wywołać funkcję javascript w ZK
- 12. Jak wywołać funkcję jquery jak w javascript
- 13. emitujących IL wywołać funkcję Math
- 14. geochart: wywołać funkcję „select”
- 15. Hibernate: jak wywołać funkcję przechowywaną zwracającą varchar?
- 16. Jak wywołać funkcję jquery za pomocą href
- 17. Kiedy wywołać funkcję glEnable (GL_FRAMEBUFFER_SRGB)?
- 18. Jak wywołać funkcję skalarną w procedurze przechowywanej?
- 19. Jak wywołać funkcję GWT java z Javascript?
- 20. jak wywołać funkcję aktualizacji niestandardowej wiązania nokaut
- 21. Swift3 iOS - Jak wywołać funkcję wyzwalacza UITapGestureRecognizer
- 22. Jak wywołać funkcję CMake z add_custom_target/command?
- 23. Jak wywołać funkcję DLL C++ z C#
- 24. Jak wywołać funkcję C++ z java
- 25. Jak wywołać funkcję asynchroniczną z subskrypcji rx?
- 26. Jak wywołać funkcję vue.js podczas ładowania strony
- 27. jak wywołać funkcję managed (C#) z C++?
- 28. Jak wywołać funkcję CreateOleObject za pomocą dwscript?
- 29. jak wywołać operatora jako funkcję w C++
- 30. jak wywołać funkcję django na przycisku kliknij
Dlaczego downvote? Jak to jest mniej ważne niż pytanie, jak korzystać z dowolnego innego API? Bukkit jest dość popularnym opublikowanym interfejsem API, jeśli nie ma sensu pytać o to, lepiej zacznij głosowanie na pytania dotyczące każdego API - MySQL, Hibernate ... –
możliwe duplikowanie [Java Loop co minutę] (http: //stackoverflow.com/questions/2702980/java-loop-every-minute) –
@DavidZ Używanie 'BukkitAPI' do tego jest dużo inne niż używanie go tylko dla' Java'. Użycie opcji "Uśpienie" zatrzyma cały serwer na "x" sekund, powodując opóźnienie i wiele innych problemów. – Jojodmo