Skocz do zawartości
  • 0

Event onCommand nie triggeruje się


Pytanie

Siemano, mam kod:
 

@EventHandler(priority = EventPriority.HIGHEST)
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    getLogger().info("Wykonano komende " + cmd.getName());
    if (sender instanceof Player) {
        Player player = (Player) sender;
        String perms = cmd.getPermission();
        if (player.hasPermission(perms)){
            player.sendMessage("Masz permisje do tej komendy - " + perms);
            return true;
        } else {
            player.sendMessage("Nie masz do tego permisji! - " + perms);
        }
    }
    return false;
}

I żadna jego cześć nie jest wykonywana, nawet pierwszy argument, ktoś wie dlaczego?

Glicz

Wstawiam kod w code.

Notatka dodana przez Glicz

Odnośnik do komentarza
https://skript.pl/temat/47792-event-oncommand-nie-triggeruje-si%C4%99/
Udostępnij na innych stronach

15 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Ten temat został przeniesiony.

 

8 godzin temu, _xXCichyMleczXx_ napisał:

Siemano, mam kod:
 



@EventHandler(priority = EventPriority.HIGHEST)
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    getLogger().info("Wykonano komende " + cmd.getName());
    if (sender instanceof Player) {
        Player player = (Player) sender;
        String perms = cmd.getPermission();
        if (player.hasPermission(perms)){
            player.sendMessage("Masz permisje do tej komendy - " + perms);
            return true;
        } else {
            player.sendMessage("Nie masz do tego permisji! - " + perms);
        }
    }
    return false;
}

I żadna jego cześć nie jest wykonywana, nawet pierwszy argument, ktoś wie dlaczego?

Mam rozumieć, że chcesz uzyskać efekt sprawdzania czy gracz ma permisję do komendy i dopiero ją wykonywać? Jeżeli tak, to użyj eventu, który jest wywoływany przy użyciu komendy, gdyż boolean onCommand jest raczej do tworzenia komend :/ 

Odnośnik do komentarza
https://skript.pl/temat/47792-event-oncommand-nie-triggeruje-si%C4%99/#findComment-299332
Udostępnij na innych stronach

  • 0

eventHandler przy komendzie?? o.0?

przy metodzie onCommand używa się @Override...

należy również komendę zarejestrować w sposób getCommand("kom").setExecutor(new Klasa());

Godzinę temu, Glitchtrap napisał:

chcesz uzyskać efekt sprawdzania czy gracz ma permisję do komendy i dopiero ją wykonywać? Jeżeli tak, to użyj eventu, który jest wywoływany przy użyciu komendy

CO? XD

Odnośnik do komentarza
https://skript.pl/temat/47792-event-oncommand-nie-triggeruje-si%C4%99/#findComment-299368
Udostępnij na innych stronach

  • 0

Wytłumacz jeszcze raz po polsku bo nie kumam. 

"czy gracz ma permisję do komendy i dopiero ją wykonywać?"

Da się to zrobić w komendzie, po co jakieś eventy?

Odnośnik do komentarza
https://skript.pl/temat/47792-event-oncommand-nie-triggeruje-si%C4%99/#findComment-299380
Udostępnij na innych stronach

  • 0

W plugin.yml musi być zawarte:

 

commands:
  nazwakomendy:

 

I w klasie głównej musisz zarejestrować komendę w ten sposób:

 

public void onEnable(){
	getCommand("nazwakomendy").setExecutor(new KlasaKomendy());
}

 

"@EventHandler" zamień na "@Override".

 

Zaimplementuj również CommandExecutor w klasie z komendą w ten sposób:

public class NazwaKlasyZKomenda implements CommandExecutor {

 

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/47792-event-oncommand-nie-triggeruje-si%C4%99/#findComment-299430
Udostępnij na innych stronach

  • 0
1 minutę temu, _xXCichyMleczXx_ napisał:

Tylko bardziej mi chodzi o to ze dla kazdego pluginu podmienic permission message jednym pluginem a nie rejestrowanie nowych komend

no to używasz eventu 'PlayerCommandPreprocessEvent', potem pobierasz komendę, ustawiasz stringa na permisję, sprawdzasz czy nie jest nullem i czy gracz ma do niej permisję, no i anulujesz event i wysyłasz wiadomość. 

Odnośnik do komentarza
https://skript.pl/temat/47792-event-oncommand-nie-triggeruje-si%C4%99/#findComment-299475
Udostępnij na innych stronach

  • 0

Dobra, dam znać jak przerobie

 

private final PreCommandHandler cmdHandler = new PreCommandHandler();

@Override
public void onEnable() {
    getServer().getPluginManager().registerEvents(this.cmdHandler, this);
}

Main /\

 

public void onPreCommand(PlayerCommandPreprocessEvent event) {
    String command = event.getMessage().substring(1).split(" ")[0];
    System.out.print("Wykonano komende " + command);
    if (event.getPlayer() instanceof Player) {
        Player player = (Player) event.getPlayer();
        System.out.print("Executor jest playerem - " + player.getDisplayName());
    }
}

PreCommandHandler /\

 

Ale event i tak się nie wykonuje, 0 printów

Glicz

Łączę posty.

Notatka dodana przez Glicz

Odnośnik do komentarza
https://skript.pl/temat/47792-event-oncommand-nie-triggeruje-si%C4%99/#findComment-299476
Udostępnij na innych stronach

  • 0

WTF. Nazwa eventu: PLAYER command... Mówi ci coś PLAYER?

Tak, że event ten wykonuje GRACZ a nie szkielet bądź zombie, który prankuje graczy komendami. Także wszelkie sprawdzanie czy event.getPlayer() jest playerem i castowanie go do niego jest bardzo głupie. Po 2. aby w tym evencie otrzymać komendę użyj następującego polecenia:

String cmd = event.getMessage().split(" ")[0];

 

Odnośnik do komentarza
https://skript.pl/temat/47792-event-oncommand-nie-triggeruje-si%C4%99/#findComment-299642
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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