NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

Lekce 4 - První event a konfigurace (MOTD)

V předchozí lekci, Prank plugin (Opakování), jsme si udělali odpočinkový díl, kdy jsem si zopakovali tvorbu příkazů a ovládaní argumentů.

Vítejte u čtvrtého tutoriálu. Dnes se podíváme, co to jsou eventy a jak je zapisovat, poté jak vytvořit konfigurační soubor.

Co dnes budeme tvořit?

Dnes se podíváme, jak tvořit konfigurační soubor. V první řadě si řekneme něco o eventu - co to je a jak ho ovládat, zapíšeme si zprávu při připojení na server. Musíme event registrovat, to si taktéž ukážeme. Dále si řekneme, jak vytvářet a registrovat konfigurační soubory. Budeme vytahovat zprávu z konfigurace, kterou následně budeme vypisovat.

Eventy

Event je událost. Událost je nějaký pohyb anebo činnost. Event může být skok, pohyb, kopání, sbírání, zabíjení, všechny události, co Minecraft dělá nebo vy děláte. Eventy musíme registrovat (implementovat), a registrovat v metodě onEnable(), v poslední řadě před každou metodou, co vyjadřuje event, dáme anotaci @EventHandler.

Jak použit Event a Konfiguraci v praxi?

Pro příklad budeme chtít, aby se po připojení vypsala danému hráči zpráva, kterou uvidí pouze on. Vytvoříme si nový projekt, balíček, třídu a vyplním základní konstrukci včetně hlavní metod:

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 vytvořený základní konstruktor. Co budeme potřebovat dál? Bude nutné, abychom implementovali třídu Listener, tímto řekneme, že právě zde se nachází nějaká registrace eventu. Uděláme to jednoduše:

public class Main extends JavaPlugin implements Listener {

Půjdeme popořadě, vždy když plugin registruje nějaký Event, musíme tyto eventy zaznamenávat. Pravidlo zní: Pokud se v projektu nachází event, musíme ho v metodě onEnable() zaznamenat:

public void onEnable() {
    Bukkit.getServer().getLogger().info("Plugin Join se zapnul!");
    Bukkit.getServer().getPluginManager().registerEvents(this, this);
}

Ovládá nám to metoda registerEvents(mís­to, kde se registrace eventů nachází, místo, kde se event nachází, a kde je implementace Listener);

Trochu odejdeme od tématu a ukážeme si, jak zaregistrovat event v jiné třídě. Event se bude nacházet ve třídě Pohyb a budeme registrovat, zda se hráč hýbe. Pokud se bude hýbat, vypíše se mu zpráva. Jdeme na to, prvně si vytvoříme třídu Pohyb:

public class Pohyb implements Listener {

}

Máme vytvořenou třídu, dáme si do ní Event. Event si vytvoříme tak, jak jsem říkal. Musíme prvně dát anotaci @EventHandler.

public class Pohyb implements Listener {

    @EventHandler
}

Nyní musíme vytvořit metodu, která je ve formátu:

public void onNěco(NázevEventu proměnná) {}

V praxi:

public class Pohyb implements Listener {

    @EventHandler
    public void onMove(PlayerMoveEvent event) {

    }
}

Mám vytvořen event a nyní si musíme definovat hráče, který event vykonává:

@EventHandler
public void onMove(PlayerMoveEvent event) {
    Player p = event.getPlayer();
}

Máme definovaného hráče, následně budeme vypisovat zprávu:

@EventHandler
public void onMove(PlayerMoveEvent event) {
    Player p = event.getPlayer();
    p.sendMessage("§aNyní ses pohnul.");
}

Hotovo, vytvořili jsme třídu Pohyb, poté vytvoříme třídu Main1. (UPOZORNĚNÍ! Třída Pohyb a Main je od tématu, tedy nyní třída Main1 není totožná s původní třídou Main, kde budeme tvořit event na připojení. Toto pouze demonstruje příklad, jak vytvořit event mimo třídu Main1).

public class Main1 extends JavaPlugin {

    public void onEnable() {
        Bukkit.getServer().getPluginManager().registerEvents(new Pohyb(), this);
    }
}

Máme registrovaný event mimo třídu. :-) Přesuneme se zpět k aktuálnímu projektu. Máme hotovou registraci v třídě onEnable(). V této třídě si vytvoříme opět registraci eventu:

@EventHandler

Metoda na připojení:

@EventHandler
public void onJoin(PlayerJoinEvent event) {

}

Definujeme si hráče:

@EventHandler
public void onJoin(PlayerJoinEvent event) {
    Player p = event.getPlayer();
}

Budeme odesílat tomuto hráči zprávu, že se připojil. Zprávu, která se mu bude vypisovat zjistíme z konfigurace. Potřebujeme:

  • Vytvoříme si konfiguraci, budeme ji registrovat v třídě onEnable()
  • Zjistíme si v metodě sendMessage();, co je ve řetězci message v konfiguraci

My si přidáme do metody onEnable():

public void onEnable() {
    Bukkit.getServer().getLogger().info("Plugin Join se zapnul!");
    Bukkit.getServer().getPluginManager().registerEvents(this, this);
    getConfig().options().copyDefaults(true);
    saveConfig();
}

Vysvětlení metod:

  • saveConfig(); Metoda zajistí, aby se config uložil
  • copyDefaults(tru­e); Zkontroluje, zda se zkopírovaly hodnoty z výchozího configu

Abych ještě důkladněji vysvětlil tuto metodu, config můžeme vytvářet dvěma způsoby:

  • Vytvořit si ho a předepsat si hodnoty
  • Vytvořit ho v kódu a přidávat do něho hodnoty z kódu

Tato metoda je právě pro první metodu, takže my nyní vytvoříme podobu configu:

message: Připojil ses do hry!

Nyní se přesuneme k samotnému eventu, máme ho následující:

@EventHandler
public void onJoin(PlayerJoinEvent event) {
    Player p = event.getPlayer();
}

Přidáme mu metodu sendMessage();:

@EventHandler
public void onJoin(PlayerJoinEvent event) {
    Player p = event.getPlayer();
    p.sendMessage(ChatColor.GREEN + getConfig().getString("message"));
}

Z configu vytáhneme řetězec message. Nebylo to nic těžkého, že? config.yml musíme taktéž jako plugin.yml přidat k projektu.

Zde 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"));
    }


}

Co jsme se naučili?

V tomto díle jsme se naučili, co je to Event a jak ho použít v praxi, dále jsme si vytvořili a použili konfiguraci.

Závěr

Toto by bylo vše k tomuto čtvrtému dílu.

V příštím díle, Dynamická konfigurace a práva (MOTD), bychom se podívali, na pokračování konfigurací (dynamika za běhu serveru) a vysvětlíme si a použijeme práva. Děkuji za přečtení! V případě problémů se obraťte do komentářů nebo do zpráv!


 

Předchozí článek
Prank plugin (Opakování)
Všechny články v sekci
Tvorba pluginů pro Spigot
Přeskočit článek
(nedoporučujeme)
Dynamická konfigurace a práva (MOTD)
Článek pro vás napsal PandaP968
Avatar
Uživatelské hodnocení:
3 hlasů
Autor se zabývá programováním v Javě. Většinu času programuje pluginy pro Minecraft servery.
Aktivity