IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

2. diel - Viac o príkazoch a farby

Vitajte u druhého tutoriálu. Minule sme si popísali základné metódy, dnes budeme pokračovať v príkazoch.

Čo dnes budeme tvoriť?

V dnešnom dieli sa pozrieme, ako efektívne urobiť príkaz na uzdravenie a nakŕmenie hráča. Popíšeme si ako fungujú argumenty (budeme ich využívať) a v poslednom rade sa pozrieme na použitie farby. Môžeme sa do toho pustiť!

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

Začneme rovnako ako minule, teda vytvoríme si balíček a triedu.

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. Čo ďalej? Potrebujeme urobiť príkazy, ktorý vylieči (doplní HP) ma samého. Bude to úplne jednoduché:

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

}

Máme samotný príkaz, ktorý nebude vykonávať nič, ale v hre bude zaregistrovaný. My k tomuto príkazu pridáme argument, pod ktorým bude uzdravenie:

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

        }
}

Teraz to pravdepodobne pre vás bude trochu španielska dedinka. Kto by uhádol, čo bude robiť táto podmienka? Skúste pouvažovať, čo by to mohlo vedieť, potom sa pozrite na pokračovanie tohto textu.

V zásade budeme chcieť používať / heal dvoma spôsobmi - na seba a prípadne na iného hráča. Ak napíšeme do konzoly / heal, má tento príkaz nula argumentov. V druhom prípade by mal jeden argument a by to vypadlo napr. Takhle: / heal <hráč>. Tento jeden argument špecifikuje hráča, ktorému má byť doplnený život.

Ak napíšeme / heal bez argumentov, bude náš príkaz zavolaný bez argumentov a to môžeme zistiť práve podmienkou v ukážke vyššie. Potom sa vykoná nasledovné:

  • Hráči doplní srdiečka na plno (20), napr. Polovica by bola desať
  • Napíše hráči, že bol uzdravený

return true; Ukončí príkaz a hovorí, že bol vykonaný správne.

Skvele! Máme urobený príkaz pre uzdravenie sama seba. Ďalej by sme chceli, aby sme mohli uzdraviť iného hráča - teda príkaz / heal <hráč> Bude to opäť 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äť to nie je ani veľmi ťažké. Najprv získame inštanciu hráča, teda target (cieľ). Táto inštancia bude vyjadrovať, že sa jedná o hráča, ktorý je určený prvým argumentom za príkazom / heal. Argument je vlastne sekvencia znakov oddelené jednou alebo viacerými medzerami. Príkaz / heal PandaP968 teda uzdraví hráčov s menom PandaP968.

Možno vás napadá, čo sa stane, keď napíšeme niečo ako: / heal PandaP968 DSDS sdsd sdsdd sds. Tak, ako to máme napísané teraz, to bude fungovať v poriadku - náš plugin sa na ďalšie argumenty vôbec nepozerá. V kóde vidíme príkaz getPlayer(args[0]) - ten vezme prvý argument (s indexom 0) a použije ho ako meno hráča.

Keby sme toto chceli ošetriť, museli by sme urobiť ďalšiu podmienku na počet argumentov podobnú tej prvej. Ale to zase v najbližších dieloch. Máme určené cieľ, teraz si overíme pomocou podmienky, či tu vôbec ten náš cieľ je. Ak takýto hráč nie je, vypíše sa správa a vráti túto správu odosielateľovi. Ak tu hráč je, uzdraví sa a odošle sa mu správa. Aby som vysvetlil opäť:

  • player = odosielateľ, určovali som si ho, ako som začali robiť príkaz, teda Player player = (Player) sender ;
  • target = cieľ, určovali som si ho už v príkaze Player target = (Bukkit.getServer().getPlayer(args[0]));

Toto by sme mali. Teraz by som sa chcel presunúť k problému, ako hráča nakŕmiť (doplniť mu hunger bar). Bude to opäť úplne rovnaké, len sa naše metódy setHealth () zamení metódou 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());
}

Farby

Farby tvorí celý Minecraft. Farebné sú blocky, farebný je chat. Farby sú všetko! My ale zatiaľ nevieme, ako tieto farby použiť. Bude to podobné, ako to píšete v Minecraftu pod znakom "&". My si to ale urobíme úplne inak. Máme tri možnosti ako tento farebný chat urobiť. Ja je teraz vymenujem:

  • Pomocou znaku "§"
  • Pomocou triedy ChatColor. <Farba>, u tohto sa zastavím máme tu niekoľko farieb na výber: - BLACK
    • DARK_BLUE
    • DARK_GREEN
    • DARK_AQUA
    • DARK_RED
    • DARK_PURPLE
    • GOLD
    • GRAY
    • DARK_GRAY
    • GREEN
    • AQUA
    • RED
    • PINK
    • YELLOW
    • WHITE
    • Potom máme ešte ďalšie triedy, ktoré slúžia napr. Na podčiarknutie atď.
  • V poslednom rade môžeme farbu zapísať aj pomocou kódu.
Keď napíšete napr. Do metódy SendMessage () znak "&", musíte tento znak najprv nejako preložiť spigot. Môžeme to urobiť týmto príkazom: ChatColor.translateAlternateColorCodes('&', "&czpráva");

Teraz si to predvedieme 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žnosť neodporúčam, najlepšie je možnosť prvý, je rýchla a tiež prehľadná. Pri druhej možnosti musíme určenie farby oddeľovať znamienkom +.

Čo sme sa naučili?

V tomto diele som sa naučili, ako používať argumenty, dve nové metódy a ako nastaviť farbu.

Záver

Toto by bolo všetko k tomuto druhému dielu, v budúcom diele by sme pokračovali opäť v príkazoch. Ďakujem za prečítanie! V prípade problémov sa obráťte do komentárov alebo do správ!


 

Predchádzajúci článok
Úvod, prvý príkaz a správa
Všetky články v sekcii
Tvorba pluginov pre spigot
Preskočiť článok
(neodporúčame)
Prank plugin (Opakovanie)
Článok pre vás napísal PandaP968
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se zabývá programováním v Javě. Většinu času programuje pluginy pro Minecraft servery.
Aktivity