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í.

Lekce 2 - Programování v Minecraftu - Selektorové argumenty, entity

V minulé lekci, Programování v Minecraftu - Úvod a Hello world, jsme začali s programováním v Minecraftu. Ukázali jsme si příkazy /give, /say a začali práci se selektory.

V minulé lekci kurzu o programování v Minecraftu jsme si ukázali příkaz /say, také jsme použili /give a začali jsme práci se selektory. V dnešním tutoriálu v nich také budeme pokračovat, ukážeme si příkazy /gamemode, /give (podrobněji), /kill, /tell a /testfor. Všechny slouží k manipulaci s hráčem (některé i s ostatními entitami), takže si na nich procvičíme selektory.

Dnes budete potřebovat:

  • command block
  • redstone block
  • tlačítko
  • nějaká spawn vajíčka
  • name tag (jmenovku)
  • anvil (kovadlinu)

Příkaz /gamemode

Nyní vám ukáži syntaxi příkazu /gamemode, který umožňuje měnit hráčům herní módy:

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

Než se podíváme dále, vysvětlíme si zápis (syntaxi) příkazu. Každý příkaz má samozřejmě nějaké argumenty (pro programátory myslím parametry metod), kterými specifikujeme, jak se má příkaz vykonat (například /say má jediný argument, a to text, který má říci).

Argumenty, které jsou psány ve špičatých závorkách, jsou povinné. To znamená, že pokud je neuvedete, příkaz nebude fungovat. Naopak argumenty psané v hranatých závorkách jsou volitelné, tzn. pokud je neuvedete, hra automaticky dosadí výchozí hodnoty (pro programátory se vlastně jedná o výchozí hodnoty parametrů metod).

POZOR: Takto specifikované najdete příkazy v dokumentaci (viz. http://minecraft.gamepedia.com/Commands), pokud je však už doopravdy provádíte, argumenty se nepíší do žádných hranatých či špičatých závorek. Odstavec výše jen ukazuje, jak dokumentaci chápat.

Vidíte, že /gamemode má 2 argumenty, povinná je specifikace gamemodu, kterou provedete pomocí čísla (viz. minulý díl), nebo pomocí klíčového slova (survival, creative, adventure, spectator), či jen prvního písmenka (s,c,a,sp). Nepovinná je specifikace hráče. Ovšem, pokud do command bloku napíšete pouze

/gamemode 0

Nestane se vůbec nic, protože hra zde nic nedokáže dosadit. Pokud však výše zmíněný příkaz napíšete rovnou do chatu, změní se přímo váš mód a nemusíte se zdržovat se specifikací hráče, když jste to vlastně přímo vy.

Nyní si tedy změňte herní mód a aplikujte

/say @p[m=0]

Vaše jméno se zobrazí v chatu.

Upozornění: V argumentu m lze použít pouze číselnou specifikaci gamemodu.

Argument name

Další argument, na který se dnes podíváme, je name. Name specifikuje jméno hráče (resp. i jméno jiné entity) a zapíšete jej úplně stejně, jako m:

/gamemode 1 @p[name=Krepsy3]

Dobře ho můžeme otestovat, pokud hrajete s kamarádem. Samozřejmě ho je možné otestovat i na jiné entitě. Na kovadlině si přejmenujte name tag a použijte ho na nějakou entitu, já to udělám na praseti, které si pojmenuji "Franta".

S argumenty ještě souvisí předznamenání "!" vykřičník. Ten lze napsat hned za symbol "=" rovná se, tedy těsně před hodnotu. Lze to pouze u některých argumentů, u obou z dnešního tutoriálu to lze. Vykřičník neguje daný argument, tedy @a[m=!2] znamená "všichni hráči, kteří mají jiný gamemode než adventure". @a[name=!Krepsy3] znamená "všichni hráči, kteří se nejmenují "Krepsy3"".

Z příkladu výše ještě použijeme naše prase Franta, a provedeme příkaz

/say @e[name=!Krepsy3]

(samozřejmě použijte své jméno)

A příkaz by měl sdělit jméno prasete.

Další příkazy pro manipulaci s entitami

Podívejme se nyní na příkaz /give, který jsme již použili minule. Syntaxi má následující:

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

Jak vidíte, /give má volitelný argument "data tag". Zatím ho nebudeme používat, ale zapamatujme si, že ho lze u /give použít (což lze u spousty příkazů), tento "data tag" je vlastně NBT tag, o kterém si řekneme více až v dalších lekcích (jednou sem vložím odkaz).

Jinak oba povinné argumenty jsme již použili, je to hráč (selektor nebo jméno) a jméno předmětu (itemu). To si můžete zjistit, když zmáčknete naráz F3 + H - v popisu předmětu v inventáři by se nyní mělo jeho jméno objevit šedým písmem (např. "minecraft:stone", "minecraft:qu­artz_block" a podobně). Toto jméno použijete jako druhý argument. Slovo "minecraft:" můžete vypustit, pokud však požíváte Tab pro automatické doplnění příkazu, je automaticky doplněno.

Třetí argument jsou "data", v těch je uložena doplňující informace o předmětu, defaultní (výchozí) hodnota je nula. Zkuste použít tyto pří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 postupně dostanete různé modifikace kamene - klasický, granite, polished granite, diorite, polished diorite, andesite a polished andesite.

Jako čtvrté ještě můžete specifikovat množství - defaultní hodnota je jedna. Zkuste si schválně dosadit nulu, ale pozor, nezapomeňte na argument data, který předchází, takže jej nemůžete vynechat - napište prostě nulu:

/give @p minecraft:command_block_minecart 0 0

Příkaz /clear

V rychlosti se ještě podíváme na příkaz /clear, který z inventáře předměty naopak smaže. Syntaxe je následující:

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

Vidíte, že opět obsahuje volitelně "data tag", kterým se zatím nezabýváme. Pokud nezadáte specifikovaný předmět, je smazán celý inventář. Při manuálním zadávání nemusíte uvést ani hráče, příkaz se tak aplikuje na vás, v command bloku musíte cíleného hráče specifikovat (funguje obdobně, jako u /gamemode). Data je stejný argument jako u /give, maximální množství specifikuje, kolik předmětů má příkaz vymazat. Pokud ale hráč tolik předmětů nemá, jsou mu vymazány všechny, co má, proto "maximální". Až budete jednou zadávat i data tag a budete tak potřebovat nutně zadat i množství, budete možná chtít smazat vše. Do hráčova inventáře se vejde maximálně 37 x 64 = 2368 předmětů, použijete tedy toto číslo.

Příkaz /kill

Asi uhodnete, že /kill zabije specifikovanou entitu - a jiné argumenty ani nemá. Jen pro pořádek zkusíme zabít naše prase:

/kill @e[name=Franta]

A ať v tom není samo, tak ještě:

/kill @a

Příkaz /tell

Možná si říkáte, že je to trochu zbytečnost, když máme /say. A máte vlastně pravdu, nicméně ještě ve verzi 1.4.6 byste ji neměli, protože s 1.5 přišel příkaz /tellraw, o něm však jindy. Navíc je využíván minecraftovými servery, které jej používají k posílání privátních zpráv po chatu. Příkaz má následující syntaxi:

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

Zkuste si napsat tento příkaz (musíte do command bloku):

/tell @a Jsi mrtvý...

A výstup:

@ whispers to you: Jsi mrtvý...

Jak vidíte, opět se ukazuje znaménko „@“ zavináč jako jméno bloku, změnit jej můžete na kovadlině (přejmenujte command block, do kterého příkaz píšete).

Příkaz /testfor

Testfor je trochu speciální příkaz, jelikož neslouží jako manipulační příkaz, ale pouze příkaz zjišťující. Do inventáře si připravte comparator (z karty redstone) a postavte jej za command blok tak, že jde jakoby z něj. K výstupu z comparatoru ještě dejte třeba lampu, bude indikovat výstup.

Ukázková sestava pro /testfor v Minecfraftu - Programování v Minecraftu

A teď - testfor přijímá pouze jediný argument a to informace o entitě, kterou má hledat. Jakmile je příkaz proveden (tzn. přivedete redstonový signál a tím blok updatujete), zkusí podle zadaných kritérií vyhledat entitu (potažmo hráče). Podle výsledku se interně změní přímo command block, pokud je entita nalezena, jakýkoliv comparator z bloku vycházející se aktivuje, pokud není, jakýkoliv comparator se vypne. Jinými slovy, pokud jednou stisknete tlačítko a příkaz najde specifikovanou entitu, svítí comparator minimálně do té doby, než ho stisknete podruhé.

Pokud chcete mít hledání dynamické, musíte napojit command block na redstonový obvod "clock" (hodiny - opakující obvod, návod najdete např. zde: https://www.youtube.com/watch?…), díky čemuž bude comparator aktivován po dobu platnosti. Příklad zapojení s hodinami máte v připojeném světě. Zároveň se při každém updatu, který je úspěšný, objeví v chatu nová zpráva ohlašující úspěšně provedený příkaz.

Na tomto příkazu si můžete vyzkoušet dnes nabyté znalosti o selektorových argumentech, jen pro pořádek uvedu příkladový příkaz:

/testfor @e[name=!Krepsy3]

znamená "je zde entita s jiným jménem než Krepsy3?".

/testfor @a[m=2]

znamená "mají všichni hráči gamemode adventure?".

Odteď budu příkaz testfor používat na demonstrace nových selektorových argumentů, protože v sestavě s obvodem "clock" a lampou za comparatorem nám může krásně ukazovat zda selektor entitu našel či nenašel. Můžete si tak snadno zkoušet, co všechno selektory umí.

Dnes jsme si vysvětlili způsob zápisu syntaxe příkazů a naučili jsme se nějaké nové. Svět je opět níže ke stažení, takže pokud jste něco nepochytili, nevadí, můžete si jej stáhnout, je v něm i druhé prase "Josef", abyste si vyzkoušeli jak vybírání pracuje ;). Příště se podíváme na příkazy /tp a /teleport, vysvětlíme způsob práce s pozicemi entit – absolutní a relativní souřadnice a s tím související argumenty x, y, z, r, rm, rx, rxm, ry, rym a navíc si ukážeme jak argumenty kombinovat.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 28x (512.35 kB)
Aplikace je včetně zdrojových kódů v jazyce Minecraft

 

Předchozí článek
Programování v Minecraftu - Úvod a Hello world
Všechny články v sekci
Programování v Minecraftu
Přeskočit článek
(nedoporučujeme)
Programování v Minecraftu - Pozicování - část I.
Článek pro vás napsal krepsy3
Avatar
Uživatelské hodnocení:
7 hlasů
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