Skocz do zawartości
  • 0

Blok komendy


Milagors2
 Udostępnij

Pytanie

13 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Myślisz o systemie captcha? Jeżeli tak to dużo łatwiej będzie, jeśli skorzystasz z gotowego rozwiązania:

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

W takim razie stwórz sobie trzy klasy:

- CaptchaStorage
- CaptchaCommand implementuje CommandExecutor
- JoinListener implementuje Listener
- CommandPreprocess implementuje Listener

W CaptchaStorage stwórz sobie HashMapę, w której kluczem będzie UUID, a wartością String, zarejestruj stworzone listenery/ustaw executor komendy i do każdej klasy dodaj w konstruktorze wcześniej stworzony storage.

W JoinListener stwórz sobie handler do PlayerJoinEvent, w tym miejscu odnieś się do storage i dodaj do niego UUID gracza i losowo wygenerowany ciąg znaków.

W CommandPreprocess stwórz handler do PlayerCommandPreprocessEvent, pobieraj sobie UUID gracza i sprawdzaj czy jest obecne w storage. Jeżeli jest to anuluj event.

I nareszcie w CaptchaCommand po prostu sprawdzasz czy pierwszy argument wcześniej wygenerowanej metody onCommand odpowiada temu co pobierzesz ze storage i jeżeli jest to usuwasz UUID gracza, który wykonał metodę.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
10 godzin temu, LeviBoyPL napisał:

W takim razie stwórz sobie trzy klasy:

- CaptchaStorage
- CaptchaCommand implementuje CommandExecutor
- JoinListener implementuje Listener
- CommandPreprocess implementuje Listener

W CaptchaStorage stwórz sobie HashMapę, w której kluczem będzie UUID, a wartością String, zarejestruj stworzone listenery/ustaw executor komendy i do każdej klasy dodaj w konstruktorze wcześniej stworzony storage.

W JoinListener stwórz sobie handler do PlayerJoinEvent, w tym miejscu odnieś się do storage i dodaj do niego UUID gracza i losowo wygenerowany ciąg znaków.

W CommandPreprocess stwórz handler do PlayerCommandPreprocessEvent, pobieraj sobie UUID gracza i sprawdzaj czy jest obecne w storage. Jeżeli jest to anuluj event.

I nareszcie w CaptchaCommand po prostu sprawdzasz czy pierwszy argument wcześniej wygenerowanej metody onCommand odpowiada temu co pobierzesz ze storage i jeżeli jest to usuwasz UUID gracza, który wykonał metodę.

co mam zrobic w tym CommandPreprocess bo jedyne co wywnioskowałem to cos takiego "public void CommandPreprocess(CommandSender sender, Command arg1, String lab, String[] args) {      
    }"

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1

CommandPreprocess powinien implementować Listener, zatem metoda powinna mieć adnotację nad sobą (@EventHandler) i tak jak wcześniej wspomniałem handler powinien obejmować PlayerCommandPreprocessEvent, zatem metoda powinna wyglądać tak:

    @EventHandler
    public void commandPreprocess(PlayerCommandPreprocessEvent event) {
        
    }

Dodatkowo, nazwy metod piszemy camelCase, więc zamiast CommandPreprocess powinieneś użyć commandPreprocess

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
31 minut temu, LeviBoyPL napisał:

CommandPreprocess powinien implementować Listener, zatem metoda powinna mieć adnotację nad sobą (@EventHandler) i tak jak wcześniej wspomniałem handler powinien obejmować PlayerCommandPreprocessEvent, zatem metoda powinna wyglądać tak:

    @EventHandler
    public void commandPreprocess(PlayerCommandPreprocessEvent event) {
        
    }

Dodatkowo, nazwy metod piszemy camelCase, więc zamiast CommandPreprocess powinieneś użyć commandPreprocess

@EventHandler
    public void commandPreprocess(PlayerCommandPreprocessEvent ev) {
		Player p = ev.getPlayer();
		UUID uuid = p.getUniqueId();
    }

Mam juz cos takiego co dalej "pobieraj sobie UUID gracza i sprawdzaj czy jest obecne w storage. Jeżeli jest to anuluj event." co tutaj mam zrobic ?

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

12 godzin temu, LeviBoyPL napisał:

W CaptchaStorage stwórz sobie HashMapę, w której kluczem będzie UUID, a wartością String, zarejestruj stworzone listenery/ustaw executor komendy i do każdej klasy dodaj w konstruktorze wcześniej stworzony storage.

W konstruktorze masz swój storage, więc pobierasz albo za pomocą dostępu do pola czyli storage.uwtorzonaWczesniejMapa.get(uuid) albo robisz sobie getteta w storage

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
18 minut temu, LeviBoyPL napisał:

W konstruktorze masz swój storage, więc pobierasz albo za pomocą dostępu do pola czyli storage.uwtorzonaWczesniejMapa.get(uuid) albo robisz sobie getteta w storage

dalej nie rozumiem jak by to mialo wyglondac

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

potrzebujesz dwa listenery.

pierwszy PlayerJoinEvent który po wejściu gracza na serwer będzie dodawał go do Listy niezautoryzowanych graczy. Musisz oczywiście wcześnie stworzyć taką listę.

drugi OnCommand, który będzie sprawdzał czy gracz jest w liście niezautoryzowanych graczy, jeśli tak to sprawdza następnie czy komenda którą chciał wywołać to ta o którą ci chodzi (np /captacha), jeśli nie to zwracasz false.

Nie zapomnij usunąć gracza z listy niezautoryzowanych graczy po przejściu weryfikacji.

 

Nie wiem czy wyjaśniłem to wystarczająco dobrze, ale z poprzednich twoich wypowiedzi polecam zrobić porządnie kurs javy, a dopiero później brać się za pisanie pluginów. Tutaj masz fajny kurs na youtubie

 

 

Edytowane przez rozumek29
Zła nazwa klasy listenera.
Odnośnik do komentarza
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...