Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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 4 - Programování v Minecraftu - Pozicování - část II.

V minulé lekci kurzu o programování v Minecraftu jsme se naučili problematiku pozicování a představili si příkazy /tp a /teleport. V dnešním tutoriálu téma dokončíme ukázkou argumentů pro selektory týkající se pozic. Je jich poměrně mnoho - x, y, z, r, rm, rx, rxm, ry, rym, dx, dy, dz. Žádný z těchto selektorů neumožňuje použít "!" předznamenání hodnoty.

Argumenty vzdálenostní - r a rm

Tyto selektory použijete většinou v kombinaci. Selektor r označuje "radius" (rádius, dosah), rm označuje "minimal radius" (minimální rádius, minimální dosah). Používají se pokud hledáte entitu v určité blízkosti k vykonavateli (executorovi) příkazu, zadáváte tedy příslušný počet bloků (vzdálenost). Argument r pátrá po entitách ve specifikovaném dosahu, rm pátrá po entitách mimo specifikovaný dosah.

Na ilustračním obrázku můžete vidět, kde bude oblast hledání obou argumentů - je kruhová. Dále můžete vidět, kam na jednotlivých blocích číselně sahají vzdálenosti - hranice celých čísel je vždy uprostřed bloku v dané vzdálenosti od bloku, kde se nachází executor. Na obrázku jsem použil dřevo, aby byly více patrné blokové hranice.

Ukázka chování vzdálenostních argumentů v Minecraftu - Programování v Minecraftu

r=3 vybere všechny entity v zelené zóně, rm=3 všechny v modré. Samozřejmě analogický kruh platí i pro osu y.

Nyní si povíme jak kombinovat selektorové argumenty dohromady. Ve složené závorce se oddělují čárkou bez mezer. Selektor poté argumenty bere jako hradlo AND, tedy musí být všechny splněné, aby selektor danou entitu zvolil, tedy například příkaz

/say @e[name=Krepsy3,m=1]

řekne jméno entity pouze, pokud se jmenuje „Krepsy3“ a zároveň má gamemode creative. Této vlastnosti lze nádherně využít třeba pro vybrání entit z určitého pásu, vyzkoušejme si to:

/testfor @e[r=8,rm=3]

Příkaz zareaguje, pokud nalezne entitu alespoň 3 bloky od command bloku, ve kterém je vepsán, ale ne dále, než 8 bloků od něj (tzn. alespoň jedna entita musí v onom pásu být).

Argumenty poziční - x, y a z

Používají se ke hledání podle pozice. Do každého z nich zapíšete souřadnici bloku, který se stane centrem hledání. Je povinné vyplnit všechny 3 souřadnice. Toto centrum se poté bude chovat stejně, jako by se na jeho souřadnicích nacházel command blok s příslušným r (resp. rm) argumentem.

Upozornění - Bývá častou chybou napsat pouze tyto tři argumenty a už neuvést argument pro rádius. Takto to ale nefunguje a selektor bude vždy pozitivní a na změny pozice nebude vůbec reagovat. Chcete-li tedy vybrat entitu nacházející se dva bloky od určité souřadnice, provedete to takto:

/testfor @e[x=-764,y=56,z=309,r=2]

Nechci před vámi nic tajit a proto prozradím, že výše uvedený příkaz lze také zapsat takto:

/testfor @e[-764,56,309,2]

Pokud bezprostředně za "[" otevírací hranatou závorku zapíšete v tomto pořadí argumenty x, y, z, r, můžete poté jejich názvy vynechat. U žádných jiných argumentů se nic takového nedá použít. Já osobně se však většinou vyvaruji tomuto zápisu - ušetříte sice 8 znaků, ale mohlo by se stát, že to v kombinaci s více argumenty nebude fungovat.

Samozřejmě můžete opět použít techniku vybrání entit z kruhového pásu kolem specifikovaného bloku, pomocí rm specifikujete vnitřní obvod, pomocí r vnější obvod:

/testfor @e[x=-764,y=56.z=309,r=5,rm=3]

Argumenty rotační - rx, rxm, ry a rym

Asi jste uhodli, že argumenty označují určitou rotaci hlavy, jmenují se přesně podle os. Písmenko m opět reprezentuje "minimal". Pokud tedy chcete najít entitu, která se dívá "skoro na zem", použijete

/testfor @e[rxm=80]

Nechcete-li ale aby se dívala úplně na zem, doplníte zápis

/testfor @e[rxm=80,rx=89]

Dále si ještě třeba specifikujte světovou stranu, ta má vždy svůj rozsah 90°. Pokud si vyberete sever, budete muset dělat výběr nadvakrát, a to kvůli přechodu mezi ry 180° a -180°. Já zvolím třeba jih, s rozsahem <-45°;45°>, finální příkaz bude:

/testfor @e[rxm=80,rx=89,rym=-45,ry=45]

A tím vybereme entitu, která se dívá na jih a téměř do země.

Vidíte, že vybírání "pásu viditelnosti" je plně analogické s výběrem pozice.

Argumenty prostorové - dx, dy a dz

Tyto argumenty opět využívají centrální blok, kterým je buď executor nebo blok specifikovaný argumenty x, y, z. Tyto argumenty specifikují kvádr, ze kterého entitu vybíráme. Nechová se tedy jako r a rm, kdy entita leží v kouli kolem centrálního bloku. Jako centrální blok působí spodní severozápadní roh tohoto kvádru (má nejnižší x, y i z souřadnici - do těchto argumentů totiž nelze zadat záporné číslo), nazývejme tento blok rohem. Jednotlivými argumenty pak specifikujete jak je kvádr dlouhý (po ose x od rohu - argumentem dx), široký (po ose z od rohu - argumentem dz) a vysoký (po ose y od rohu - argumentem dy). Pro ilustraci tu opět máte obrázek - s popisky os a vzdáleností, také můžete vidět osní kříž dosazený z debug screen. Celá čísla jdou opět mezi středy bloků:

Ukázka chování prostorových argumentů v Minecraft - Programování v Minecraftu

Použil jsem příkaz

/testfor @e[dx=3,dy=4,dz=6]

, který vybere všechny entity z kvádru 3x4x6 - počínaje od středu (geometricky těžiště) command blocku, který příkaz provádí.

Pozor: Pokud potřebujete dělat výběr prostorovými či radiovými argumenty "přesně na blok", tedy s použitím desetinných čísel, tak vás asi zklamu, protože to nejde. Jedná se bohužel o omezení hry, přes které je třeba se přenést, a vybírat vždy "o ten půlblok navíc".

Procvičení pozicování

Na závěr si procvičíme znalosti z celého třetího dílu:

  • Napište příkaz, který teleportuje každého hráče ven z místnosti o velikosti 5x5x5 bloků, pouze pokud se v ní hráč nachází.
  • Napište příkaz, který narovná hlavu každému hráči, který se dívá do země či nad sebe pod úhlem přesahujícím 60° (budete potřebovat 2 command bloky, které napojíte na stejný redstonový signál)
  • Napište příkaz, který teleportuje entitu Josef 2 bloky nad executora, pokud se nenachází dál než 4 bloky od něj

Řešení úloh máte ke stažení spolu s ostatními příkazy. V příštím díle si doplníme nějaké chybějící znalosti z oblasti "mapmakerství", budou to nějaké užitečné argumenty a příkazy pro nastavování světa.


 

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 21x (533.96 kB)
Aplikace je včetně zdrojových kódů v jazyce Minecraft

 

Předchozí článek
Programování v Minecraftu - Pozicování - část I.
Všechny články v sekci
Programování v Minecraftu
Přeskočit článek
(nedoporučujeme)
Programování v Minecraftu - Příkazy pro manipulaci se světem
Článek pro vás napsal krepsy3
Avatar
Uživatelské hodnocení:
5 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