Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

7. diel - Programovanie v Minecraftu - Reťazenie Command Blokov

Vitajte u ďalšieho tutoriálu zo série o programovaní v Minecraftu. Minule sme dokončili problematiku manipulácie so svetom, dnes si vysvetlíme reťazenie command bločky a zakončíme tak prvé kapitolku tých najjednoduchších vecí.

Teória

Pravdepodobne ste si všimli, že command blok nie je na všetkých stenách rovnaký, na štyroch stenách sú šípky, ktoré smerujú ku strane s osemuholník a na protiľahlej strane je štvorec. Teraz trocha histórie - až do verzie 1.8 bol command blok symetrický, na každej strane bol štvorec. Vo verzii 1.9 pribudlo práve reťazenie, kvôli ktorému bol zmenený vzhľad command blokov na súčasný.

Asi je vám už jasné, ako reťazenie urobíte. Bloky postavíte tak, aby šípkami ukazovali vždy do nasledujúceho bloku, teda napr. Nasledovne:

Ukážka reťazca blokov v Minecraftu - Programovanie v Minecraftu

Princíp reťazenie spočíva v tom, že sa blok po bloku odovzdáva signál na vykonanie príkazu presne v danom poradí. Je to rovnaké, ako by ste bloky napojili na redstone signál. Výhodou však je, že sa príkazy vykonajú "naraz" (resp. V jednom ticku - pokiaľ ich počet presahuje 65536, vykoná sa prvých 65536 v jednom ticku, ďalších 65536 v ďalšom ticku atď.) A zároveň v správnom poradí -toho sa dá dosiahnuť aj s obyčajným redstone šírením, ale je to zložité, pretože musíte strážiť, pozdĺž ktorých os bloky staviate. Tiež vôbec nepotrebujete redstone - len pre vstup do prvého bloku. Je teda výhodné reťazenie používať kedykoľvek potrebujete vykonať niekoľko príkazov v rade - čo sú skoro všetky prípady.

Chain command block

Teraz si postavte a rozkliknite command block a pozrite sa dole, je tam rad troch tlačidiel:

  • Impulse
  • Unconditional
  • Needs Redstone

Stlačte "Impulse" tak, aby sa zmenilo na "Chain". Command block by mal zlosťou. Teraz ste zmenili blok z klasického "impulzného", ktorý raz vykoná svoj príkaz, keď mu príde redstone signál, na "reťazový", ktorý raz vykoná svoj príkaz, keď mu príde reťazový signál z predchádzajúceho command blocku.

Tento blok má tiež rozdielne id, klasický command block má, ako viete, id "command_block", kdežto tento má "chain_comman­d_block".

Aktivácia Redstonom

Teraz opäť rozkliknite command block a kliknite na "Needs Redstone", malo by sa zmeniť na "Always active". Táto voľba nám hovorí, že command block nepotrebuje byť aktivovaný redstone signálom, aby príkaz vykonal.

Ako sa dá tejto mechaniky využiť? Pokiaľ máte nejakú podmienku, ktorá vychádza z Redstone (napr. Že hráč stojí na stúpadlo), a chcete, aby sa príkaz vykonal iba ak podmienka platí, navediete signál z podmienky do daného chain command blocku, v ktorom vyberiete "Needs Redstone". Výhodou je, že aj keď podmienka nie je splnená, signál sa v reťazci posunie ďalej a príkaz sa jednoducho preskočí.

Každý command block, nehľadiac na to či vykoná svoj príkaz (z akéhokoľvek dôvodu), pošle po aktivácii reťazový signál ďalej.

Teraz si urobíme praktickú skúšku. Zobrazíme niekoľkoriadkový správu. Či to nie je suchý, oznámime hráči stav jeho domčeka. Ku vstupným dverám dajte stúpadlo, ktorým reťazec aktivujeme, ďalej si pripravte ešte ďalšie dvere, ktoré napojte na páčku.

Teraz si pripravte bloky, budeme potrebovať 4, v tejto konfigurácii (po sebe v reťazci):

  • Impulse, needs redstone
  • 2x Chain, always active
  • Chain, needs redstone

A príkazy:

/say Vítej doma,
/say @p
/say Jak se dnes máš?
/say *Dveře do kuchyně jsou otevřené*

Do prvého bloku naveďte signál zo stúpadlá vstupných dverí, do posledného signál z páčky ovládajúci kuchynskej dvere.

Teraz nezostáva, než vyskúšať:

Minecraft – Pri vstupe do domu sa nám ukáže správa - Programovanie v Minecraftu

Možno vás napadla otázka, prečo že musí byť prvý block impulzné. V popise chain command blocku som spomínal, že vykoná príkaz raz, keď mu príde reťazový signál s predchádzajúceho bloku - Chain command block je aktivovaný len reťazovým signálom, redstone mu slúži pre podmienky, popísané vyššie. Naopak impulznému slúži redstone pre aktiváciu, pokiaľ teda v klasickom command bloku prekliknite z "Needs Redstone" na "Always Active", príkaz sa okamžite vykoná a blok sa stane inertným - správa sa ako keby do neho viedol zapnutý redstone signál pri voľbe "Needs Redstone "- je skutočne" stále napájaný ". Po překliknutí späť na "Needs Redstone" sa chová opäť normálne.

Repeating command block

Teraz ešte raz stlačte tlačidlo pre zmenu typu command blocku, až sa zmení na "Repeat" a blok sfialovejú. Tento blok sa dá tiež použiť, rovnako ako impulzné, pre vstup do reťazca. Tento ale nevykoná príkaz raz, ale v každom ticku, teda 20x za sekundu. Chová sa teda rovnako, ako keď do klasického impulzného navediete redstone z obvodu clock. Ak je "Needs Redstone", vykonáva príkaz len, ak do neho vedie zapnutý redstone signál, pri "Always Active" opakuje neustále.

Využijeme ho, keď potrebujeme, aby systém niečo stále sledoval. Napr. keď sme robili systém, ktorý dal hráči vedieť, ako je na tom s xp levelmi - príkazy boli potrebné vykonávať znovu a znovu, aby systém oznámil hráči aktuálny stav. Ako odstrániť neustále opakovanie systému si povieme v diele o scoreboard systému.

Podmienky

Posledný z tlačidiel nastavenia command blocku je "Unconditional" / "podmieneného", teda nepodmienečný či podmienečný. Ak prekliknite na podmienečný, zmení sa šípka na stranách command blocku z hladkej na ostrú.

Ako iste viete, ak za command block s príkazom /testfor umiestnite Comparator, bude napájaný, ak posledný vykonanie príkazu našlo zadanú entitu. Rovnako to funguje pre každý príkaz - ak je vykonaný úspešne, Comparator sa rozsvieti, keď je vykonaný neúspešne, Comparator zhasne. Napr. príkaz /give @p minecraft:repeating_command_block 0 0 skončí neúspešne, pretože nemôžete dať hráči 0 predmetov nejakého typu.

Command Block v podmienečnom móde sa chová úplne rovnako, ako by do neho z danej strany viedol Comparator od minulého command blocku v reťazci. Vykoná teda príkaz len vtedy, ak je zároveň aktivovaný a predchádzajúci príkaz skončil úspešne. Výhodou je opäť, že aj keď sa príkaz nevykoná, reťazový signál prejde do ďalšieho bloku.

Existuje však jedno obmedzenie, ktoré asi naštve dosť ľudí, ktorí reálne programujú, a to je, že môžete reagovať iba na úspešné vykonanie predchádzajúceho príkazu (analógia s if), ale nie na neúspešné (analógia s else). Teda buď príkaz vykonáte iba ak bol predchádzajúci príkaz úspešný, alebo nech dopadol ako chcel.

Cvičenie

Vytvoríme systém, ktorý postupne odteleportuje hráča, ak sa príliš priblíži k nejakému bloku, napr. Totemu. Budeme ho teleportovať vždy po malých úsekoch smerom od bloku, aby "vycúval". Ďalej ešte po každej teleportáciu vypíšeme os, po ktorej sme hráča teleportoval, aby sme si vyskúšali podmienky. Využijeme na to priestorové argumenty dx, dy a dz. Vyberať budeme celkom štyri oblasti - vždy celú hranu štvorca smerom od bloku (z pôdorysu). Výhodou je, že ak bude hráč v rohovej oblasti, bude teleportovaných šikmo.

Totem, od ktorého budeme hráčov teleportovať - Programovanie v Minecraftu

Budeme potrebovať celkom 8 command bločkov. Všetky až na prvé budú always active, prvý bude repeating (ostatné samozrejme chain), položte si k nemu páčku na zapínanie a vypínanie systému. Každý druhý blok bude conditional. Do nepárnych command Block napíšeme vždy príkaz /tp, v ktorom bude daný selektor pre výber hráčov a malá teleportácie po príslušnej osi relatívne (~0.3 ~ ~ - zodpovedá rýchlosti 6 blokov za sekundu). V každom nasledujúcom (podmienečný) bloku bude jednoducho / say s príslušnou osou. Tak ideme na to.

Náš totem má súradnice -739 56 183. Budeme vyberať vzdialenosť 5 od totemu, teda 4.5 bloku skutočnej vzdialenosti od jeho okraja. Výšku zvolíme normálne 2, pretože bude fungovať aj keď hráč poskočí.

príkazy:

/tp @a[x=-744,y=56,z=180,dx=5,dy=2,dz=11] ~0.3 ~ ~
/say X+
/tp @a[x=-749,y=56,z=180,dx=5,dy=2,dz=11] ~-0.3 ~ ~
/say X-
/tp @a[x=-749,y=56,z=186,dx=11,dy=2,dz=5] ~ ~ ~0.3
/say Z+
/tp @a[x=-749,y=56,z=180,dx=11,dy=2,dz=5] ~ ~ ~-0.3
/say Z-

Teraz by vám malo fungovať. K otestovaniu môžete napríklad vyletieť nad totem a skočiť do oblasti blízko k nemu.

Pri stavbe samozrejme musíte doplniť vaše súradnice, pomôže vám nasl. obrázok:

Oblasti okolo totemu, z ktorých hráčov teleportuje - Programovanie v Minecraftu

podľa osového kríža (vľavo dole) si naorientujete blok s najnižšími súradnicami (Označené kolieskom) danej zóny. Ďalej si tieto súradnice položte blok as otvorenou debug screen sa na neho pozrite. Spodný riadok "looking at" vám prezradí vytúženú súradnice. Ďalej je to myslím jasné.

To by bolo pre tento diel všetko. Nabudúce sa pozrieme na už pokročilejšie tému, budeme vkladať do sveta bloky. Ďalej sa môžete tešiť na cvičenie na precvičenie látky týchto prvých ľahkých tutoriálov, budeme stavať jednoduchú mapu. Svet máte ako zvyčajne k stiahnutiu.


 

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é 39x (615.98 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Minecraft

 

Predchádzajúci článok
Programovanie v Minecraftu - Príkaz / gamerule
Všetky články v sekcii
Programovanie v Minecraftu
Č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