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 2 - Více o příkazech a barvy

V předchozí lekci, Úvod, první příkaz a zpráva, jsme si popsali základní metody, dnes budeme pokračovat v příkazech.

Vítejte u druhého tutoriálu.

Co dnes budeme tvořit?

V dnešním díle se podíváme, jak efektivně udělat příkaz na uzdravení a nakrmení hráče. Popíšeme si jak fungují argumenty (budeme je využívat) a v poslední řadě se podíváme na použití barvy. Můžeme se do toho pustit!

Příkaz Heal (/heal <hráč>)

Začneme stejně jako minule, tedy vytvoříme si balíček a třídu.

package cz.pandap.heal;

public class Main extends JavaPlugin {

    public void onEnable() {
        Bukkit.getServer().getLogger().info("Plugin Health se zapnul!");
    }

    public void onDisable() {
        Bukkit.getServer().getLogger().info("Plugin Health se vypnul!");
    }

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

        Player player = (Player) sender;


        return false;
    }
}

Toto je náš základ. Co dál? Potřebujeme udělat příkazy, který vyléčí (doplní HP) mě samotného. Bude to naprosto jednoduché:

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

}

Máme samotný příkaz, který nebude vykonávat nic, ale ve hře bude zaregistrován. My k tomuto příkazu přidáme argument, pod kterým bude uzdravení:

if (cmd.getName().equalsIgnoreCase("heal")) {
    if (args.length == 0) {
        player.setHealth(20);
                player.sendMessage(ChatColor.GREEN + "Byl jsi uzdraven!");
                return true;

        }
}

Teď to pravděpodobně pro vás bude trochu španělská vesnička. Kdo by uhodl, co bude dělat tato podmínka? Zkuste pouvažovat, co by to mohlo umět, poté se podívejte na pokračování tohoto textu.

V zásadě budeme chtít používat /heal dvěmi způsoby - na sebe a případně na jiného hráče. Pokud napíšeme do konzole /heal, má tento příkaz nula argumentů. V druhém případě by měl jeden argument a by to vypadlo např. takhle: /heal <hráč>. Tento jeden argument specifikuje hráče, kterému má být doplněn život.

Pokud napíšeme /heal bez argumentů, bude náš příkaz zavolán bez argumentů a to můžeme zjistit právě podmínkou v ukázce výše. Pak se vykoná následující:

  • Hráči doplní srdíčka na plno (20), např. půlka by byla deset
  • Napíše hráči, že byl uzdraven

return true; Ukončí příkaz a říká, že byl proveden správně.

Skvěle! Máme udělaný příkaz pro uzdravení sama sebe. Dále bychom chtěli, abychom mohli uzdravit jiného hráče - tedy příkaz /heal <hráč> Bude to opět jednoduché:

if (cmd.getName().equalsIgnoreCase("heal")) {
    if (args.length == 0) {
        player.setHealth(20);
                player.sendMessage(ChatColor.GREEN + "Byl jsi uzdraven!");
                return true;
        }

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

    if (target == null) {
        player.sendMessage("Tento hráč není online!");
        return true;
    }

    target.setHealth(20);
    target.sendMessage("Byl jsi uzdraven hráčem " + player.getName());
}

Máme to tu! Opět to není ani moc těžké. Nejprve získáme instanci hráče, tedy target (cíl). Tato instance bude vyjadřovat, že se jedná o hráče, který je určen prvním argumentem za příkazem /heal. Argument je vlastně sekvence znaků oddělená jednou nebo více mezerami. Příkaz /heal PandaP968 tedy uzdraví hráče se jménem PandaP968.

Možná vás napadá, co se stane, když napíšeme něco jako: /heal PandaP968 dsds sdsd sdsdd sds. Tak, jak to máme napsané teď, to bude fungovat v pořádku - náš plugin se na další argumenty vůbec nedívá. V kódu vidíme příkaz getPlayer(args[0]) - ten vezme první argument (s indexem 0) a použije ho jako jméno hráče.

Kdybychom toto chtěli ošetřit, museli bychom udělat další podmínku na počet argumentů podobnou té první. Ale to zase v příštích dílech. Máme určeny cíl, teď si ověříme pomocí podmínky, jestli tu vůbec ten náš cíl je. Pokud takový hráč není, vypíše se zpráva a vrátí tuto zprávu odesílateli. Pokud zde hráč je, uzdraví se a odešle se mu zpráva. Abych vysvětlil opět:

  • player = odesílatel, určovali jsem si ho, než jsem začali dělat příkaz, tedy Player player = (Player) sender;
  • target = cíl, určovali jsem si ho už v příkazu Player target = (Bukkit.getServer().getPlayer(args[0]));

Toto bychom měli. Teď bych se chtěl přesunout k problému, jak hráče nakrmit (doplnit mu hunger bar). Bude to opět úplně stejné, jen se naše metody setHealth() zamění metodou setFoodLevel().

if (cmd.getName().equalsIgnoreCase("feed")) {
    if (args.length == 0) {
                  player.setFoodLevel(20);
                  player.sendMessage(ChatColor.GREEN + "Byl jsi nakrmen!");
                  return true;
        }

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

    if (target == null) {
        player.sendMessage("Tento hráč není online!");
        return true;
    }

    target.setFoodLevel(20);
    target.sendMessage("Byl jsi nakrmen hráčem " + player.getName());
}

Barvy

Barvy tvoří celý Minecraft. Barevné jsou blocky, barevný je chat. Barvy jsou vše! My ale zatím nevíme, jak tyto barvy použít. Bude to podobné, jako to píšete v Minecraftu pod znakem "&". My si to ale uděláme naprosto jinak. Máme tři možnosti jak tento barevný chat udělat. Já je teď vyjmenuji:

  • Pomocí znaku "§"
  • Pomocí třídy ChatColor.<bar­va>, u tohoto se zastavím máme zde několik barev na výběr:
    • BLACK
    • DARK_BLUE
    • DARK_GREEN
    • DARK_AQUA
    • DARK_RED
    • DARK_PURPLE
    • GOLD
    • GRAY
    • DARK_GRAY
    • GREEN
    • AQUA
    • RED
    • PINK
    • YELLOW
    • WHITE
    • Poté máme ještě další třídy, které slouží např. na podtržení atd.
  • V poslední řadě můžeme barvu zapsat také pomocí kódu.

Když napíšete např. do metody sendMessage() znak "&", musíte tento znak nejprve nějak přeložit Spigotu. Můžeme to udělat tímto příkazem: ChatColor.translateAlternateColorCodes('&', "&czpráva");

Nyní si to předvedeme v praxi:

player.sendMessage("§cToto je zpráva!");
player.sendMessage(ChatColor.RED + "Toto je zpráva!");
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cToto je zpráva!"));

Poslední možnost nedoporučuji, nejlepší je možnost první, je rychlá a také přehledná. U druhé možnosti musíme určení barvy oddělovat znaménkem +.

Co jsme se naučili?

V tomto díle jsem se naučili, jak používat argumenty, dvě nové metody a jak nastavit barvu.

Závěr

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

V příštím díle, Prank plugin (Opakování), bychom pokračovali opět v příkazech. Děkuji za přečtení! V případě problémů se obraťte do komentářů nebo do zpráv!


 

Předchozí článek
Úvod, první příkaz a zpráva
Všechny články v sekci
Tvorba pluginů pro Spigot
Přeskočit článek
(nedoporučujeme)
Prank plugin (Opakování)
Č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