Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 3 - Prank plugin (Opakování)

V předchozí lekci, Více o příkazech a barvy, jsme si popsali, jak vytvořit příkaz a používat jeho argumenty, dnes budeme pokračovat v příkazech.

Vítejte u třetího tutoriálu.

Co dnes budeme tvořit?

V dnešním třetím díle si opět budeme hrát s příkazy a jeho argumenty. Vytvoříme si dva příkazy. První bude příkaz /fakeop <hráč>, který bude mít za úkol oznámit danému hráči, že dostal OP, zatímco nic nedostane. Dalším příkazem bude /fakejoin <hráč>, který bude mít za úkol oznámit do veřejného chatu, že se připojil nějaký hráč, zatímco se vůbec nepřipojí. Bude to jen FAKE! V poslední řadě se podíváme na rozšíření zpráv při vypnutí a zapnutí serveru, abych upřesnil, podíváme se blíž na plugin.yml.

Příkaz FakeOP (/fakeop <hráč>)

Uděláme si jako vždy úplný základ, naše dvě metody + metodu na příkaz:

package cz.pandap.fake;

public class Main extends JavaPlugin {

        public void onEnable() {
                Bukkit.getServer().getLogger().info(&quot;Plugin Fake se zapnul!&quot;);
        }

        public void onDisable() {
                Bukkit.getServer().getLogger().info(&quot;Plugin Fake se vypnul!&quot;);
        }

        public boolean onCommand(CommandSender sender, Command cmd, String labels, String[] args) {
                if (!(sender instanceof Player)) {
                        sender.sendMessage(&quot;Konzole nemůže vykonat tento příkaz!&quot;);
                        return true;
                }

                Player player = (Player) sender;


                return false;
        }
}

Toto bude náš základ, toto však již známe. Nyní si napíšeme samotný příkaz:

if (cmd.getName().equalsIgnoreCase("fakeop")) {

}

Tento kód již taktéž známe. Ale abych to naposledy upřesnil, udáváme tím, že toto bude příkaz /fakeop a bude zaregistrován na serveru. Zatím nám nic nevykonává, my to ale napravíme. Co budeme potřebovat a chtít ověřovat?

  • Uděláme podmínku, aby hráč musel určit hráče, jinak mu to vypíše chybovou zprávu
  • Dále jestli je cíl online na serveru

Prvně začneme tou podmínkou, aby hráč (sender) určil cíl:

if (cmd.getName().equalsIgnoreCase("fakeop")) {
        if (args.length == 0) {
                sender.sendMessage(ChatColor.RED + "Prosím specifikuj hráče!");
                return true;
        }
}

Barvičky taky již známe. :-) Abych ještě jednou zopakoval, pokud argument se rovná nule, tedy příkaz nějak dal nepokračuje, napíše se, aby hráč určil svůj cíl - hráče.

Nyní potřebujeme určit, co je vlastně cil (target):

Player target = Bukkit.getServer().getPlayer(args[0]);

target je instance Player, target je hráč, který je prvním argumentem v příkazu.

Dále potřebujeme zajistit, aby se ověřilo, zda cíl je online:

if (target == null) {
        sender.sendMessage(ChatColor.RED + "Nemůžu najít hráče jménem " + args[0] + ".";);
        return true;
}

Máme hotové podmínky, teď se vrhneme na samotné zprávy. Napíšeme-li příkaz /fakeop hráč, vypíšeme se nám, že daný hráč dostal OP a příjemci se oznámí, že se stal OP. Jdeme na to! Bude to opravdu jednoduché!

target.sendMessage(ChatColor.YELLOW + "Stal jsi se OP!");
sender.sendMessage(ChatColor.GREEN + "Vykonáno!");

Výborně, příkaz /fakeop máme hotový. Nyní bych se chtěl podívat na příkaz /fakejoin <hráč>

Začneme naprosto stejně jako minule. Co budeme potřebovat?

  • Musíme ověřit, jestli hráč specifikoval jméno, využijeme k tomu opět argument 0.
if (cmd.getName().equalsIgnoreCase("fakejoin")) {
        if (args.length == 0) {
                sender.sendMessage(ChatColor.RED + "Prosím specifikuj hráče!");
                return true;
        }
}

Definoval jsem příkaz /fakejoin a poté jsem zadal, jestli příkaz nebude mít žádný argument, vypíše se, aby daný odesílatel specifikoval hráče.

Pokud podmínka projde, musí se něco vykonat. My potřebujeme, aby se do chatu napsalo, že se připojil hráč, kterého jsem definovali. Jeho jméno je uloženo v args[0] - prvním argumentu.

Bukkit.getServer().broadcastMessage(ChatColor.YELLOW + args[0] + " se připojil");

Zde je finální kód:

package cz.pandap.fake;

public class Main extends JavaPlugin {

        public void onEnable() {
                Bukkit.getServer().getLogger().info(&quot;Plugin Fake se zapnul!&quot;);
        }

        public void onDisable() {
                Bukkit.getServer().getLogger().info(&quot;Plugin Fake se vypnul!&quot;);
        }

        public boolean onCommand(CommandSender sender, Command cmd, String labels, String[] args) {
                if (!(sender instanceof Player)) {
                        sender.sendMessage(&quot;Konzole nemůže vykonat tento příkaz!&quot;);
                        return true;
                }

                Player player = (Player) sender;

        if (cmd.getName().equalsIgnoreCase("fakeop")) {
            if (args.length == 0) {
                        sender.sendMessage(ChatColor.RED + "Prosím specifikuj hráče!");
                        return true;
                }

            Player target = Bukkit.getServer().getPlayer(args[0]);

            if (target == null) {
                sender.sendMessage(ChatColor.RED + "Nemůžu najít hráče jménem " + args[0]);
                    return true;
            }

            target.sendMessage(ChatColor.YELLOW + "Stal jsi se OP!");
            sender.sendMessage(ChatColor.GREEN + "Vykonáno!")
        }

        if (cmd.getName().equalsIgnoreCase("fakejoin")) {
                if (args.length == 0) {
                        sender.sendMessage(ChatColor.RED + "Prosím specifikuj hráče!");
                        return true;
                }

            Bukkit.getServer().broadcastMessage(ChatColor.YELLOW + args[0] + " se připojil");
        }
                return false;
        }
}

Nyní si ještě popíšeme slíbenou funkci. Bude to čtení hodnot z plugin.yml. Chceme-li, aby se nám při startu, či nějaké zprávě vypsala např. verze, jméno či autor plugin, musíme to nějakým způsobem přečíst. Přečtení bude naprosto jednoduché. Ukážeme si to na metodě onEnable():

public void onEnable() {
     Bukkit.getServer().getLogger().info("Prank v" + this.getDescription().getVersion() + " se zapnul!");
}

Jak vidíte, získáme deskripci pluginu a její verzi, můžeme tak získat jméno, autora a mnoho další hodnot.

Co jsme se naučili?

V tomto díle jsme si zopakovali příkazy a jeho argumenty, podívali jsem se také na vypisování hodnot z plugin.yml

Závěr

Toto by bylo vše k tomuto třetímu dílu.

V příštím díle, První event a konfigurace (MOTD), bychom se podívali, jak vytvořit a spravovat konfiguraci. Děkuji za přečtení! V případě problémů se obraťte do komentářů nebo do zpráv!


 

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