Skocz do zawartości

Problem z kodem listener'a w własnym pluginie - problem z rejstracją eventu


Kohnel
 Udostępnij

Rekomendowane odpowiedzi

Mam problem z Listenerem w pluginie :( 

@SuppressWarnings("unused")
public class LevelListener implements Listener
{
    private Player user;
    private Entity p1;

    @EventHandler
    public void PlaceLevel(final PlayerInteractEvent e) {
        if (e.isCancelled()) {
            return;
        }
        final ItemStack lvl = new ItemBuilder(Material.PAPER).setTitle(ChatUtil.fixColor("&7Odbierz &a&lLevel")).build();
        final User user = UserManager.getUser(p1.getUniqueId());
        ItemStack b =  user.getItemInHand();
        if(b.getType() == Material.PAPER && e.getPlayer().getItemInHand().getItemMeta().getDisplayName() != null){
            if (((CommandSender) b.getItemMeta()).getName().contains("&7Odbierz &a&lLevel"))
            user.setLevel(user.getLevel() + 1);
            ((Player) p1).updateInventory();
            b.setType(Material.AIR);
        }
    }
}

 

a error:

[20:04:03] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to ZETHCTools v1.0
org.bukkit.event.EventException
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[serwer39865.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[serwer39865.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:228) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.PlayerInteractManager.interact(PlayerInteractManager.java:463) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:759) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:52) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:1) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_171]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_171]
at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [serwer39865.jar:git-Spigot-db6de12-18fbb24]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_171]
Caused by: java.lang.NullPointerException
at pl.zethc.tools.listeners.LevelListener.PlaceLevel(LevelListener.java:36) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_171]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_171]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_171]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_171]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[serwer39865.jar:git-Spigot-db6de12-18fbb24]
... 17 more

banner forum.jpg

Odnośnik do komentarza
Udostępnij na innych stronach

Gotowa klasa: https://hastebin.com/bulurapole.java

Błędy jakie popełniłęs:

  1. @SuppressWarnings("unused") - posiadałeś oznaczenie iż klasa jest nieużywana nie wiem po co...
  2. private Entity p1; - zostawiłeś tą wartość pustą, a po zatem wystarczyło dać Player'a o to już w listenerze
    
  3. private Player user; - Miałeś tą zmienną jako globalną dla klasy po czym w funkcji z eventem miałeś final User user = UserManager.getUser(p1.getUniqueId()); wieć ta 1 nie byla kompletnie potrzebna
  4. posiadasz item lvl (zmieniłęm na levelItem) które go nawet nie używasz ale uznałem że może go jeszcze użyjesz więc zostawiłęm, ale jeżeli go nie użyjesz to go po prostu usuń.

 

CWeKkdQ.png

Odnośnik do komentarza
Udostępnij na innych stronach

4 minuty temu, PalaTime napisał:

Gotowa klasa: https://hastebin.com/bulurapole.java

Błędy jakie popełniłęs:

  1. @SuppressWarnings("unused") - posiadałeś oznaczenie iż klasa jest nieużywana nie wiem po co...
  2. private Entity p1; - zostawiłeś tą wartość pustą, a po zatem wystarczyło dać Player'a o to już w listenerze
    
  3. private Player user; - Miałeś tą zmienną jako globalną dla klasy po czym w funkcji z eventem miałeś final User user = UserManager.getUser(p1.getUniqueId()); wieć ta 1 nie byla kompletnie potrzebna
  4. posiadasz item lvl (zmieniłęm na levelItem) które go nawet nie używasz ale uznałem że może go jeszcze użyjesz więc zostawiłęm, ale jeżeli go nie użyjesz to go po prostu usuń.

hmm tak wygląda eclipse :/

image.png

banner forum.jpg

Odnośnik do komentarza
Udostępnij na innych stronach

  • Marosking zmienił(a) tytuł na Problem z kodem listener'a w własnym pluginie - problem z rejstracją eventu

eEe e eE gdzie sypie ja wiem ze to trudno tak podac kod bledu i pokazac ktora to linijka ale bez tego to jak szukanie igły (choc nawet z bledem ciezko czasami odszukac problem)

 

        final User user = UserManager.getUser(player); <- moze walic nullem
         user.setLevel(user.getLevel() + 1);           < albo klasa user skopana

tak mi sie tylko wydaje ale czy

        final ItemStack itemInHand =  player.getItemInHand();

moze przypadkiem zwrocic null gdy nie masz nic w reku (na najnowszych wersjach masz 2 rece do wyboru < a sam event

PlayerInteractEvent jest chyba 2 razy wykonywany dla pojedynczej iterakcji i osobnych rak (ale nie pamietam sprawdz w api)

najpierw sprawdz czy przedmiot posiada ITemMeta ponieważ metoda getItemMeta za kazdym razem zwroci obiekt gdy przedmiot nie ma itemMeta stworzy nowy obiekt korzystajac z ItemFactory ...
 

              player.updateInventory();
              itemInHand.setType(Material.AIR);

nie powinno byc na odwrot ??? zreszra wydaje mi sie niepotrzebne updateinventory bo aktualizuje CALE inventory a ty zmieniasz tylko jeden przedmiot poza tym powinno z automatu wyslac pakiet ze zmiana przedmiotu w rece do gracza wiec jest to niepotrzebne ...

"final"

nie wiem czy wiesz ale nie musisz wszędzie dawac final w zasadzie ma to jedynie znaczenie przy zagniezdzonych klasach lub po to aby wiedziec ze danego pola nie wolno zmienic

 

Odnośnik do komentarza
Udostępnij na innych stronach

Dnia 15.08.2018 o 20:29, PalaTime napisał:

Gotowa klasa: https://hastebin.com/bulurapole.java

Błędy jakie popełniłęs:

  1. @SuppressWarnings("unused") - posiadałeś oznaczenie iż klasa jest nieużywana nie wiem po co...
  2. private Entity p1; - zostawiłeś tą wartość pustą, a po zatem wystarczyło dać Player'a o to już w listenerze
    
  3. private Player user; - Miałeś tą zmienną jako globalną dla klasy po czym w funkcji z eventem miałeś final User user = UserManager.getUser(p1.getUniqueId()); wieć ta 1 nie byla kompletnie potrzebna
  4. posiadasz item lvl (zmieniłęm na levelItem) które go nawet nie używasz ale uznałem że może go jeszcze użyjesz więc zostawiłęm, ale jeżeli go nie użyjesz to go po prostu usuń.

1. @PalaTime Dlaczego dajesz ludziom gotowe rozwiązania? Poza tym po co zmienne finalne? I nazwy metod w listenerach zaczynamy z małej litery.

Dnia 16.08.2018 o 13:00, damianq20 napisał:

eEe e eE gdzie sypie ja wiem ze to trudno tak podac kod bledu i pokazac ktora to linijka ale bez tego to jak szukanie igły (choc nawet z bledem ciezko czasami odszukac problem)

 

        final User user = UserManager.getUser(player); <- moze walic nullem
         user.setLevel(user.getLevel() + 1);           < albo klasa user skopana

tak mi sie tylko wydaje ale czy

        final ItemStack itemInHand =  player.getItemInHand();

moze przypadkiem zwrocic null gdy nie masz nic w reku (na najnowszych wersjach masz 2 rece do wyboru < a sam event

PlayerInteractEvent jest chyba 2 razy wykonywany dla pojedynczej iterakcji i osobnych rak (ale nie pamietam sprawdz w api)

najpierw sprawdz czy przedmiot posiada ITemMeta ponieważ metoda getItemMeta za kazdym razem zwroci obiekt gdy przedmiot nie ma itemMeta stworzy nowy obiekt korzystajac z ItemFactory ...
 

              player.updateInventory();
              itemInHand.setType(Material.AIR);

nie powinno byc na odwrot ??? zreszra wydaje mi sie niepotrzebne updateinventory bo aktualizuje CALE inventory a ty zmieniasz tylko jeden przedmiot poza tym powinno z automatu wyslac pakiet ze zmiana przedmiotu w rece do gracza wiec jest to niepotrzebne ...

"final"

nie wiem czy wiesz ale nie musisz wszędzie dawac final w zasadzie ma to jedynie znaczenie przy zagniezdzonych klasach lub po to aby wiedziec ze danego pola nie wolno zmienic

 

2. Może walić null'em, jeżeli autor zwraca null'a. @Kohnel Nie wiem jak masz, ale podczas pobierania user'a, jeśli jest on null'em zwróć nowego.

3. Zmień setLevel na addLevel ._.

4. Po co zakrywasz package, skoro i tak go pokazujesz? at pl.zethc.tools.listeners.LevelListener.PlaceLevel(LevelListener.java:36) ~[?:?]

Edytowane przez xannydev
Odnośnik do komentarza
Udostępnij na innych stronach

Dnia 20.08.2018 o 08:50, xannydev napisał:

1. @PalaTime Dlaczego dajesz ludziom gotowe rozwiązania? Poza tym po co zmienne finalne? I nazwy metod w listenerach zaczynamy z małej litery.

2. Może walić null'em, jeżeli autor zwraca null'a. @Kohnel Nie wiem jak masz, ale podczas pobierania user'a, jeśli jest on null'em zwróć nowego.

3. Zmień setLevel na addLevel ._.

4. Po co zakrywasz package, skoro i tak go pokazujesz? at pl.zethc.tools.listeners.LevelListener.PlaceLevel(LevelListener.java:36) ~[?:?]

Nie wiem skąd się typie urwałeś ale chociaż nie pisz jak nie wiesz o co masz się przyjebać.

"Dlaczego dajesz ludziom gotowe rozwiązania?"

według ciebie:

"private Entity p1; - zostawiłeś tą wartość pustą, a po zatem wystarczyło dać Player'a o to już w listenerze" jest gotowym rozwiązaniem? No przecież wcale nie wytłumaczyłem że jest to puste i nie używane.

 

"Zmień setLevel na addLevel" - a co jeżeli nie ma zrobionej w Obiekcie metody addLevel?

+ jak by miał zmienić na addLevel to powinno zaraz user.setLevel(user.getLevel + 1); być user.addLevel(1);.

 

"Poza tym po co zmienne finalne?" - nie wiem, może po to że jeżeli coś już mamy ustalone na 100% to powinno się dawać final po coś to istnieje.

 

 

CWeKkdQ.png

Odnośnik do komentarza
Udostępnij na innych stronach

7 minut temu, PalaTime napisał:

Nie wiem skąd się typie urwałeś ale chociaż nie pisz jak nie wiesz o co masz się przyjebać.

"Dlaczego dajesz ludziom gotowe rozwiązania?"

według ciebie:

"private Entity p1; - zostawiłeś tą wartość pustą, a po zatem wystarczyło dać Player'a o to już w listenerze" jest gotowym rozwiązaniem? No przecież wcale nie wytłumaczyłem że jest to puste i nie używane.

 

"Zmień setLevel na addLevel" - a co jeżeli nie ma zrobionej w Obiekcie metody addLevel?

+ jak by miał zmienić na addLevel to powinno zaraz user.setLevel(user.getLevel + 1); być user.addLevel(1);.

 

"Poza tym po co zmienne finalne?" - nie wiem, może po to że jeżeli coś już mamy ustalone na 100% to powinno się dawać final po coś to istnieje.

 

Gotowe rozwiązanie - poprawiony kod. Autor chyba nie jest ograniczony umysłowo i skoro mu napisałeś powinien sobie poradzić. Jeśli nie ma w obiekcie zrobionej metody addLevel niech ją zrobi, co w tym trudnego? No to chyba oczywiste, że podczas dodawania daje liczbę którą chce dodać. Może też zrobić metodę bez określania dodawanej liczby. "Jeżeli coś mamy ustalone" - idiotyzm.

Final używamy, gdy nie chcemy by wartość pola była zmieniona. 

 

Edytowane przez xannydev
Odnośnik do komentarza
Udostępnij na innych stronach

19 minut temu, xannydev napisał:

Gotowe rozwiązanie - poprawiony kod. Autor chyba nie jest ograniczony umysłowo i skoro mu napisałeś powinien sobie poradzić. Jeśli nie ma w obiekcie zrobionej metody addLevel niech ją zrobi, co w tym trudnego? No to chyba oczywiste, że podczas dodawania daje liczbę którą chce dodać. Może też zrobić metodę bez określania dodawanej liczby. "Jeżeli coś mamy ustalone" - idiotyzm.

Final używamy, gdy nie chcemy by wartość pola była zmieniona. 

 

"Jeżeli coś mamy ustalone" - idiotyzm.

po czym piszesz:

Final używamy, gdy nie chcemy by wartość pola była zmieniona.

 

Widzę że nawet sam nie ogarniasz co piszesz.

 

"Gotowe rozwiązanie - poprawiony kod" - no racja będę mu tłumaczył linijke po linijce w całkowicie rozpierdolonym kodzie zaraz dać mu poprawny i wytłumaczyć co i jak.

 

"Autor chyba nie jest ograniczony umysłowo i skoro mu napisałeś powinien sobie poradzić." - skoro gotowy kod mu nie działał to znaczy że jest ograniczony umysłowo.

 

CWeKkdQ.png

Odnośnik do komentarza
Udostępnij na innych stronach

8 minut temu, PalaTime napisał:

"Jeżeli coś mamy ustalone" - idiotyzm.

po czym piszesz:

Final używamy, gdy nie chcemy by wartość pola była zmieniona.

 

Widzę że nawet sam nie ogarniasz co piszesz.

 

"Gotowe rozwiązanie - poprawiony kod" - no racja będę mu tłumaczył linijke po linijce w całkowicie rozpierdolonym kodzie zaraz dać mu poprawny i wytłumaczyć co i jak.

 

"Autor chyba nie jest ograniczony umysłowo i skoro mu napisałeś powinien sobie poradzić." - skoro gotowy kod mu nie działał to znaczy że jest ograniczony umysłowo.

String someString = "mpcforum.pl";

Tutaj zmienna jest ustalona, czyli wg. ciebie skoro zmienna jest ustalona trzeba napierdalać ją final'em?

- Nie. Jeśli zmienna jest ustalona i nie chcemy aby jej wartość mogła być ustalana drugi raz wtedy dajemy final. 

Jeśli masz zamiar komuś wyjaśniać (tak jak mi po co w środku listenera dałeś 3 zmienne finalne) to objaśniaj całe znaczenie, a nie podawaj jego "połówkę" i kłóć się, że "ktoś nie ogarnia tego co pisze". 

Edytowane przez xannydev
Odnośnik do komentarza
Udostępnij na innych stronach

3 minuty temu, xannydev napisał:
String someString = "mpcforum.pl";

Tutaj zmienna jest ustalona, czyli wg. ciebie skoro zmienna jest ustalona trzeba napierdalać ją final'em?

- Nie. Jeśli zmienna jest ustalona i nie chcemy aby jej wartość mogła być ustalana drugi raz wtedy dajemy final. 

Jeśli masz zamiar komuś wyjaśniać (tak jak mi po co w środku listenera dałeś 3 zmienne finalne) to objaśniaj całe znaczenie, a nie podawaj jego "połówkę" i kłóć się, że "ktoś nie ogarnia tego co pisze". 

"Tutaj zmienna jest ustalona, czyli wg. ciebie skoro zmienna jest ustalona trzeba napierdalać ją final'em?

- Nie. Jeśli zmienna jest ustalona i nie chcemy aby jej wartość mogła być ustalana drugi raz wtedy dajemy final."

widzę że dalej sam nie rozumiesz po co jest tam ta zmienna.

 

5 minut temu, xannydev napisał:

"Gotowe rozwiązanie - poprawiony kod" - no racja będę mu tłumaczył linijke po linijce w całkowicie rozpierdolonym kodzie zaraz dać mu poprawny i wytłumaczyć co i jak.

dalej nie nauczyłeś się czytać?

 

CWeKkdQ.png

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający forum Problem z kodem listener'a w własnym pluginie   0 użytkowników
    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...