4. diel - Prvý event a konfigurácia (MOTD)
Vitajte u štvrtého tutoriálu. Minule som si urobili odpočinkový diel, kedy som si zopakovali tvorbu príkazov a ovládanie argumentov. Dnes sa pozrieme, čo to sú eventy a ako ich zapisovať, potom ako vytvoriť konfiguračný súbor.
Čo dnes budeme tvoriť?
Dnes sa pozrieme, ako tvoriť konfiguračný súbor. V prvom rade si povieme niečo o eventu - čo to je a ako ho ovládať, zapíšeme si správu pri pripojení na server. Musíme event registrovať, to si taktiež ukážeme. Ďalej si povieme, ako vytvárať a registrovať konfiguračné súbory. Budeme vyťahovať správu z konfigurácie, ktorú následne budeme vypisovať.
Eventy
Event je udalosť. Udalosť je nejaký pohyb alebo činnosť. Event môže byť skok, pohyb, kopanie, zbieranie, zabíjanie, všetky udalosti, čo Minecraft robí alebo vy robíte. Eventy musíme registrovať (implementovať), a registrovať v metóde onEnable (), v poslednom rade pred každou metódou, čo vyjadruje event, dáme anotáciu @EventHandler.
Ako použitý Event a Konfiguráciu v praxi?
Pre príklad budeme chcieť, aby sa po pripojení vypísala danému hráčovi správa, ktorú uvidí iba on. Vytvoríme si nový projekt, balíček, triedu a vyplním základnú konštrukciu vrátane hlavnej metód:
package cz.pandap.join; public class Main extends JavaPlugin { public void onEnable() { Bukkit.getServer().getLogger().info("Plugin Join se zapnul!"); } public void onDisable() { Bukkit.getServer().getLogger().info("Plugin Join se vypnul!"); } }
Máme vytvorený základný konštruktor. Čo budeme potrebovať ďalej? Bude nutné, aby sme implementovali triedu Listener, týmto povieme, že práve tu sa nachádza nejaká registrácia eventu. Urobíme to jednoducho:
public class Main extends JavaPlugin implements Listener {
Pôjdeme poporiadku, vždy keď plugin registruje nejaký Event, musíme tieto eventy zaznamenávať. Pravidlo znie: Ak sa v projekte nachádza event, musíme ho v metóde onEnable () zaznamenať:
public void onEnable() { Bukkit.getServer().getLogger().info("Plugin Join se zapnul!"); Bukkit.getServer().getPluginManager().registerEvents(this, this); }
Ovláda nám to metóda registerEvents (miesto, kde sa registrácia eventov nachádza, miesto, kde sa event nachádza, a kde je implementácia Listener);
Trochu odídeme od témy a ukážeme si, ako zaregistrovať event v inej triede. Event sa bude nachádzať v triede Pohyb a budeme registrovať, či sa hráč hýbe. Pokiaľ sa bude hýbať, vypíše sa mu správa. Ideme na to, prvýkrát si vytvoríme triedu Pohyb:
public class Pohyb implements Listener { }
Máme vytvorenú triedu, dáme si do nej Event. Event si vytvoríme tak, ako som hovoril. Musíme prvýkrát dať anotáciu @EventHandler.
public class Pohyb implements Listener { @EventHandler }
Teraz musíme vytvoriť metódu, ktorá je vo formáte:
public void onNěco(NázevEventu proměnná) {}
V praxi:
public class Pohyb implements Listener { @EventHandler public void onMove(PlayerMoveEvent event) { } }
Mám vytvorený event a teraz si musíme definovať hráča, ktorý event vykonáva:
@EventHandler public void onMove(PlayerMoveEvent event) { Player p = event.getPlayer(); }
Máme definovaného hráča, následne budeme vypisovať správu:
@EventHandler public void onMove(PlayerMoveEvent event) { Player p = event.getPlayer(); p.sendMessage("§aNyní ses pohnul."); }
Hotovo, vytvorili sme triedu Pohyb, potom vytvoríme triedu Main1. (UPOZORNENIE! Trieda Pohyb a Main je od témy, teda teraz trieda Main1 nie je totožná s pôvodnou triedou Main, kde budeme tvoriť event na pripojenie. Toto iba demonštruje príklad, ako vytvoriť event mimo triedu Main1).
public class Main1 extends JavaPlugin { public void onEnable() { Bukkit.getServer().getPluginManager().registerEvents(new Pohyb(), this); } }
Máme registrovaný event mimo triedu. Presunieme sa späť k aktuálnemu projektu. Máme hotovú registráciu v triede onEnable (). V tejto triede si vytvoríme opäť registráciu eventu:
@EventHandler
Metóda na pripojenie:
@EventHandler public void onJoin(PlayerJoinEvent event) { }
Definujeme si hráča:
@EventHandler public void onJoin(PlayerJoinEvent event) { Player p = event.getPlayer(); }
Budeme odosielať tomuto hráčovi správu, že sa pripojil. Správu, ktorá sa mu bude vypisovať zistíme z konfigurácie. potrebujeme:
- Vytvoríme si konfiguráciu, budeme ju registrovať v triede onEnable ()
- Zistíme si v metóde SendMessage ();, čo je vo reťazci message v konfigurácii
My si pridáme do metódy onEnable ():
public void onEnable() { Bukkit.getServer().getLogger().info("Plugin Join se zapnul!"); Bukkit.getServer().getPluginManager().registerEvents(this, this); getConfig().options().copyDefaults(true); saveConfig(); }
Vysvetlenie metód:
- saveConfig (); Metóda zabezpečí, aby sa config uložil
- copyDefaults (true); Skontroluje, či sa skopírovali hodnoty z východiskového configu
Aby som ešte dôkladnejšie vysvetlil túto metódu, config môžeme vytvárať dvoma spôsobmi:
- Vytvoriť si ho a predpísať si hodnoty
- Vytvoriť ho v kóde a pridávať do neho hodnoty z kódu
Táto metóda je práve pre prvú metódu, takže my teraz vytvoríme podobu configu:
message: Připojil ses do hry!
Teraz sa presunieme k samotnému eventu, máme ho nasledujúce:
@EventHandler public void onJoin(PlayerJoinEvent event) { Player p = event.getPlayer(); }
Pridáme mu metódu SendMessage ();:
@EventHandler public void onJoin(PlayerJoinEvent event) { Player p = event.getPlayer(); p.sendMessage(ChatColor.GREEN + getConfig().getString("message")); }
Z configu vytiahneme reťazec message. Nebolo to nič ťažké, že? config.yml musíme taktiež ako plugin.yml pridať k projektu.
Tu máme celý výpis kódu:
package cz.pandap.join; public class Main extends JavaPlugin implements Listener { public void onEnable() { Bukkit.getServer().getLogger().info("Plugin Join se zapnul!"); Bukkit.getServer().getPluginManager().registerEvents(this, this); getConfig().options().copyDefaults(true); saveConfig(); } public void onDisable() { Bukkit.getServer().getLogger().info("Plugin Join se vypnul!"); } @EventHandler public void onJoin(PlayerJoinEvent event) { Player p = event.getPlayer(); p.sendMessage(ChatColor.GREEN + getConfig().getString("message")); } }
Čo sme sa naučili?
V tomto diele sme sa naučili, čo je to Event a ako ho použiť v praxi, ďalej sme si vytvorili a použili konfiguráciu.
Záver
Toto by bolo všetko k tomuto štvrtému dielu, v budúcom diele by sme sa pozreli, na pokračovanie konfigurácií (dynamika za behu servera) a vysvetlíme si a použijeme práva. Ďakujem za prečítanie! V prípade problémov sa obráťte do komentárov alebo do správ!