2. díl - Programování v Minecraftu - Selektorové argumenty, entity

Ostatní jazyky Minecraft Programování v Minecraftu - Selektorové argumenty, entity

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

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.


 

Stáhnout

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

 

  Aktivity (13)

Článek pro vás napsal krepsy3
Avatar
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.

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


 



 

 

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