Do nového roku jako lepší programátoři? Znovu otevíráme večerní školu programování. Nette framework, návrhové vzory, testování nebo vůbec poprvé kurzy ASP.NET dostupné odkudkoli v republice.

3. díl - Prank plugin (Opakování)

Java Minecraft Modding Spigot Prank plugin (Opakování)

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Vítejte u třetího tutoriálu. Minule jsme si popsali, jak vytvořit příkaz a používat jeho argumenty, dnes budeme pokračovat v příkazech.

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 /fakejon <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 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!


 

  Aktivity (3)

Článek pro vás napsal PandaP968
Avatar
Autor se zabývá programováním v Javě. Většinu času programuje pluginy pro Minecraft servery.

Jak se ti líbí článek?
Celkem (4 hlasů) :
55555


 


Miniatura
Předchozí článek
Více o příkazech a barvy
Miniatura
Všechny články v sekci
Tvorba pluginů pro Spigot
Miniatura
Následující článek
První event a konfigurace (MOTD)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!