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 - Programovanie v Minecraftu - selektorové argumenty, entity

V minulej lekcii kurzu o programovaní v Minecraftu sme si ukázali príkaz / say, tiež sme použili / give a začali sme prácu so selektory. V dnešnom tutoriále v nich tiež budeme pokračovať, ukážeme si príkazy / Gamemody, / give (podrobnejšie), / kill, / tell a / testfor. Všetky slúži k manipulácii s hráčom (niektoré aj s ostatnými entitami), takže si na nich precvičíme selektory.

Dnes budete potrebovať:

  • command block
  • redstone block
  • tlačidlo
  • nejaká spawn vajíčka
  • name tag (menovku)
  • anvil (nákovu)

Príkaz / Gamemody

Teraz vám ukážem syntax príkazu / Gamemody, ktorý umožňuje meniť hráčom herné módy:

/gamemode <mód> [hráč]

Než sa pozrieme ďalej, vysvetlíme si zápisnicu (syntax) príkazu. Každý príkaz má samozrejme nejaké argumenty (pre programátorov myslím parametre metód), ktorými špecifikujeme, ako sa má príkaz vykonať (napríklad / say má jediný argument, a to text, ktorý má povedať).

Argumenty, ktoré sú písané vo špicatých zátvorkách, sú povinné. To znamená, že ak je neuvediete, príkaz nebude fungovať. Naopak argumenty písané v hranatých zátvorkách sú voliteľné, tzn. ak je neuvediete, hra automaticky dosadí predvolené hodnoty (pre programátorov sa vlastne jedná o predvolené hodnoty parametrov metód).

POZOR: Takto špecifikované nájdete príkazy v dokumentácii (viď. Http://minecraf­t.gamepedia.com/Com­mands), ak je však už naozaj vykonávate, argumenty sa nepíšu do žiadnych hranatých či špicatých zátvoriek. Odsek vyššie len ukazuje, ako dokumentáciu chápať.

Vidíte, že / Gamemody má 2 argumenty, povinná je špecifikácia Gamemody, ktorú urobíte pomocou čísla (pozri. Minulý diel), alebo pomocou kľúčového slova (survival, creative, adventure, spectator), či len prvého písmenka (s, c, a, sp). Nepovinná je špecifikácia hráča. Ovšem, ak do command bloku napíšete iba

/gamemode 0

Nestane sa vôbec nič, pretože hra tu nič nedokáže dosadiť. Ak však vyššie spomínaný príkaz napíšete rovno do chatu, zmení sa priamo váš mód a nemusíte sa zdržiavať so špecifikáciou hráča, keď ste to vlastne priamo vy.

Teraz si teda zmeňte herný mód a aplikujte

/say @p[m=0]

Vaše meno sa zobrazí v chate.

Upozornenie: V argumente m možno použiť len číselnú špecifikáciu Gamemody.

Argument name

Ďalší argument, na ktorý sa dnes pozrieme, je name. Name špecifikuje meno hráča (resp. Aj meno inej entity) a zapíšete ho úplne rovnako, ako m:

/gamemode 1 @p[name=Krepsy3]

Dobre ho môžeme otestovať, ak hráte s kamarátom. Samozrejme ho je možné otestovať aj na iné entite. Na nákove si premenujte name tag a použite ho na nejakú entitu, ja to urobím na prasaťu, ktoré si pomenujem "Franta".

S argumenty ešte súvisí predznamenanie "!" výkričník. Ten možno napísať hneď za symbol "=" rovná sa, teda tesne pred hodnotu. Možno to iba u niektorých argumentov, u oboch z dnešného tutoriálu to dá. Výkričník neguje daný argument, teda @a [m =! 2] znamená "všetci hráči, ktorí majú iný Gamemody než adventure". @a [name =! Krepsy3] znamená "všetci hráči, ktorí sa nevolajú" Krepsy3 "".

Z príkladu vyššie ešte použijeme naše prasa Franta, a vykonáme príkaz

/say @e[name=!Krepsy3]

(Samozrejme použite svoje meno)

A príkaz by mal oznámiť meno prasaťa.

Ďalšie príkazy pre manipuláciu s entitami

Pozrime sa teraz na príkaz / give, ktorý sme už použili minule. Syntax má nasledujúce:

/give <hráč> <předmět> [data] [množství] [data tag]

Ako vidíte, / give má voliteľný argument "dáta tag". Zatiaľ ho nebudeme používať, ale zapamätajme si, že ho možno u / give použiť (čo možno u mnohých príkazov), tento "dáta tag" je vlastne NBT tag, o ktorom si povieme viac až v ďalších lekciách (raz sem vložím odkaz).

Inak obaja povinné argumenty sme už použili, je to hráč (selektor alebo meno) a meno predmetu (item). To si môžete zistiť, keď stlačíte naraz F3 + H - v popise predmetu v inventári by sa teraz malo jeho meno objaviť šedým písmom (napr. "Minecraft: stone", "minecraft: quartz_block" a podobne). Toto meno použijete ako druhý argument. Slovo "minecraft:" môžete vypustiť, ak však požívate Tab pre automatické doplnenie príkazu, je automaticky doplnené.

Tretie argument sú "dáta", v tých je uložená doplňujúce informácie o predmete, defaultné (predvolené) hodnota nula. Skúste použiť tieto príkazy:

/give @p minecraft:stone 0
/give @p minecraft:stone 1
/give @p minecraft:stone 2
/give @p minecraft:stone 3
/give @p minecraft:stone 4
/give @p minecraft:stone 5
/give @p minecraft:stone 6

A postupne dostanete rôzne modifikácie kameňa - klasický, granite, polished granite, diorite, polished diorite, andesite a polished andesite.

Ako štvrté ešte môžete špecifikovať množstvo - defaultná hodnota je jedna. Skúste si schválne dosadiť nulu, ale pozor, nezabudnite na argument dáta, ktorý predchádza, takže ho nemôžete vynechať - napíšte proste nulu:

/give @p minecraft:command_block_minecart 0 0

Príkaz / clear

V rýchlosti sa ešte pozrieme na príkaz / clear, ktorý z inventára predmety naopak zmaže. Syntax je nasledovná:

/clear [hráč] [předmět] [data] [maximální množství] [data tag]

Vidíte, že opäť obsahuje voliteľne "dáta tag", ktorým sa zatiaľ nezaoberáme. Ak nezadáte špecifikovaný predmet, je zmazaný celý inventár. Pri manuálnom zadávaní nemusíte uviesť ani hráča, príkaz sa tak aplikuje na vás, v command bloku musíte cieleného hráčov špecifikovať (funguje podobne, ako u / Gamemody). Dáta je rovnaký argument ako u / give, maximálne množstvo špecifikuje, koľko predmetov má príkaz vymazať. Pokiaľ ale hráč toľko predmetov nemá, sú mu vymazané všetky, čo má, preto "maximálny". Až budete raz zadávať aj dáta tag a budete tak potrebovať nutne zadať i množstvo, budete možno chcieť zmazať všetko. Do hráčovho inventára sa zmestí maximálne 37 x 64 = 2368 predmetov, použijete teda toto číslo.

Príkaz / kill

Asi uhádnete, že / kill zabije špecifikovanú entitu - a iné argumenty ani nemá. Len pre poriadok skúsime zabiť naše prasa:

/kill @e[name=Franta]

A nech v tom nie je samo, tak ešte:

/kill @a

Príkaz / tell

Možno si hovoríte, že je to trochu zbytočnosť, keď máme / say. A máte vlastne pravdu, však ešte vo verzii 1.4.6 by ste ju nemali, pretože s 1.5 prišiel príkaz / tellraw, o ňom však inokedy. Naviac je využívaný minecraftovými servery, ktoré ho používajú na posielanie privátnych správ po chatu. Príkaz má nasledujúcu syntax:

/tell <hráč> <zpráva>

Skúste si napísať tento príkaz (musíte do command bloku):

/tell @a Jsi mrtvý...

A výstup:

@ whispers to you: Jsi mrtvý...

Ako vidíte, opäť sa ukazuje znamienko "@" zavináč ako meno bloku, zmeniť ho môžete na nákove (premenujte command block, do ktorého príkaz píšete).

Príkaz / testfor

Testfor je trochu špeciálny príkaz, pretože neslúži ako manipulačný príkaz, ale iba príkaz zisťujúci. Do inventára si pripravte Comparator (z karty redstone) a postavte ho za command blok tak, že ide akoby z neho. K výstupu z Comparator ešte dajte treba lampu, bude indikovať výstup.

Ukážková zostava pre / testfor v Minecfraftu - Programovanie v Minecraftu

A teraz - testfor prijíma iba jediný argument a to informácie o entite, ktorú má hľadať. Akonáhle je príkaz vykonaný (tzn. Privediete redstonový signál a tým blok updatuje), skúsi podľa zadaných kritérií vyhľadať entitu (poťažmo hráča). Podľa výsledku sa interne zmení priamo command block, ak je entita nájdená, akýkoľvek Comparator z bloku vychádzajúce sa aktivuje, pokiaľ nie je, akýkoľvek Comparator sa vypne. Inými slovami, ak raz stlačíte tlačidlo a príkaz nájde špecifikovanú entitu, svieti Comparator minimálne do tej doby, než ho stlačíte druhýkrát.

Pokiaľ chcete mať hľadanie dynamickej, musíte napojiť command block na redstonový obvod "clock" (hodiny - opakujúce obvod, návod nájdete napr. Tu: https://www.youtube.com/watch...), vďaka čomu bude Comparator aktivovaný počas platnosti. Príklad zapojenia s hodinami máte v pripojenom svete. Zároveň sa pri každom updatu, ktorý je úspešný, objaví v chate nová správa ohlasujúci úspešne vykonaný príkaz.

Na tomto príkaze si môžete vyskúšať dnes nadobudnuté vedomosti o selektorových argumentoch, len pre poriadok uvediem príkladový príkaz:

/testfor @e[name=!Krepsy3]

znamená "je tu entita s iným menom ako Krepsy3?".

/testfor @a[m=2]

znamená "majú všetci hráči Gamemody adventure?".

Odteraz budem príkaz testfor používať na demonštrácie nových selektorových argumentov, pretože v zostave s obvodom "clock" a lampou za Comparator nám môže krásne ukazovať či selektor entitu našiel či nenašiel. Môžete si tak ľahko skúšať, čo všetko selektory vie.

Dnes sme si vysvetlili spôsob zápisu syntax príkazov a naučili sme sa nejaké nové. Svet je opäť nižšie k stiahnutiu, takže ak ste niečo neuchvatnul, nevadí, môžete si ho stiahnuť, je v ňom aj druhé prasa "Josef", aby ste si vyskúšali ako vyberanie pracuje ;) . Nabudúce sa pozrieme na príkazy / tp a / teleport, vysvetlíme spôsob práce s pozíciami entít - absolútne a relatívne súradnice as tým súvisiace argumenty x, y, z, r, rm, rx, rxm, ry, rým a navyše si ukážeme ako argumenty kombinovať .


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 28x (512.35 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Minecraft

 

Predchádzajúci článok
Programovanie v Minecraftu - Úvod a Hello world
Všetky články v sekcii
Programovanie v Minecraftu
Preskočiť článok
(neodporúčame)
Programovanie v Minecraftu - Pozíciovanie - časť I.
Článok pre vás napísal krepsy3
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se učí programovat zde na itnetworku, zatím zejména jazyk C#. Znalosti chce mít ucelené, proto při vývoji aplikací studuje potřebné funkce do hloubky. Vyzná se v programování ve hrách, jako je Minecraft či Ricochet.
Aktivity