Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem] Rejestrowanie Eventu. Bukkit


Rekomendowane odpowiedzi

Opublikowano

Dzień dobry. Natknąłem się na pewien problem przy pisaniu Pluginu, a mianowicie chodzi o rejestracji eventów w głównej klasie odwołującej się do innej w której są owe eventy. tzn mam główną klase main.java i w niej jest onEnble itp. mam też klasę uzywanie.java w której mam owe eventy.

W onEnable mam takie coś:

        Bukkit.getServer().getPluginManager().registerEvents(this, this);  

(this, this) wydaje mi się być lokalizacją eventów. Jak to zmienić aby zarejestrować eventy w innej klasie ? ;__;

Opublikowano

robisz nowa klase i implementujesz Listener, potem zamiast

1
Bukkit.getServer().getPluginManager().registerEvents(this, this);

Dajesz:

1
Bukkit.getServer().getPluginManager().registerEvents(new nazwaklasy(), this);

Potem w tamtej klasie nasłuchujesz eventy ;) Proste.

//gif w sygnie

Opublikowano

Dzięki problem niby rozwiązany ale nie do końca. nie wyświeta błędów ale Nadal nie działa. Pozwoliłem sobie dodać testowy kod do klasy z listnerami. Wszystko jest w nim ok prawda ?

	@EventHandler(priority=EventPriority.HIGH)
    public void onPlayerLogin(PlayerLoginEvent event) 
	{
		Player t = event.getPlayer();
		t.sendMessage("no i sie zjebalo");
         }
Opublikowano

W teorii dobrze, ale z tego co pamiętam to przy PlayerLoginEvent nie możesz od razu niczego robić z tym playerem. Nie pamiętam czy to na pewno to, ale kiedyś musiałem ustawiać po evencie taki timer na sekunę i potem wykonywałem instrukcję. Ale tak jak mówię - pamięć może mnie mylić i mówię o czymś zupełnie innym.

Opublikowano

Też o tm właśnie myślałem byłby ktoś tak miły i podpowiedział jak zrobić taki opóźniający timer

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Robi cos po 100 milisekundach
}
}, 100);
Opublikowano

Zimplementowałeś listener i dodałeś EventHandlera przed nim?
Widzę, że jesteś początkującym, zatem:

Bukkit.getServer().getPluginManager().registerEvents(this, this);  

To powyżej możesz używać, gdy w klasie w której ta część się znajduje jest Event.


A to:

Bukkit.getServer().getPluginManager().registerEvents(new nazwaklasy(), this);  

Używa się przy np. dwóch klasach, ale można i w jednej.

!UWAGA! REJESTROWAĆ EVENTY MUSISZ W onEnable - czyli przy załadowaniu pluginu! INACZEJ EVENT NIE ZADZIAŁA.

public void onEnable()
  {
    getServer().getPluginManager().registerEvents(this, this);
   //oraz jakas wiadomosc o aktywowanym pluginie 
    ConsoleCommandSender console = this.getServer().getConsoleSender();
    console.sendMessage(ChatColor.LIGHT_PURPLE + "[Wtyczka] AKTYWOWANA..");
  }

 

A teraz implementujemy:

public class nazwaKlasy extends JavaPlugin implements Listener
{

}

 


Czyli kod powinien wyglądać mniej więcej tak:

public class nazwaKlasy extends JavaPlugin implements Listener
{
    public void onEnable()
    {
        getServer().getPluginManager().registerEvents(this, this);
        //oraz jakas wiadomosc o aktywowanym pluginie 
        ConsoleCommandSender console = this.getServer().getConsoleSender();
        console.sendMessage(ChatColor.LIGHT_PURPLE + "[Wtyczka] AKTYWOWANA..");
    }
    @EventHandler
    public void NaZalogowaniuGracza(PlayerLoginEvent e)
    {
        Player t = e.getPlayer();
        t.sendMessage("Wiadomosc");
    }
}
   

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...