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 7 - Programování v Minecraftu - Řetězení Command Bloků

Vítejte u dalšího tutoriálu ze série o programování v Minecraftu. Minule jsme dokončili problematiku manipulace se světem, dnes si vysvětlíme řetězení command blocků a zakončíme tak první kapitolku těch nejjednodušších věcí.

Teorie

Nejspíše jste si všimli, že command blok není na všech stěnách stejný, na čtyřech stěnách jsou šipky, které směřují ke straně s osmiúhelníkem a na protější straně je čtverec. Teď trocha historie - až do verze 1.8 byl command blok symetrický, na každé straně byl čtverec. Ve verzi 1.9 přibylo právě řetězení, kvůli kterému byl změněn vzhled command bloků na současný.

Asi je vám již jasné, jak řetězení provedete. Bloky postavíte tak, aby šipkami ukazovaly vždy do následujícího bloku, tedy např. takto:

Ukázka řetězce bloků v Minecraftu - Programování v Minecraftu

Princip řetězení spočívá v tom, že se blok po bloku předává signál k provedení příkazu přesně v daném pořadí. Je to stejné, jako byste bloky napojili na redstone signál. Výhodou ovšem je, že se příkazy vykonají "naráz" (resp. v jednom ticku - pokud jejich počet přesahuje 65536, vykoná se prvních 65536 v jednom ticku, dalších 65536 v dalším ticku atd.) a zároveň ve správném pořadí -toho se dá dosáhnout i s obyčejným redstone šířením, ale je to složité, protože musíte hlídat, podél kterých os bloky stavíte. Také vůbec nepotřebujete redstone - jen pro vstup do prvního bloku. Je tedy výhodné řetězení používat kdykoli potřebujete vykonat několik příkazů v řadě - což jsou skoro všechny případy.

Chain command block

Nyní si postavte a rozklikněte command block a podívejte se dolů, je tam řada tří tlačítek:

  • Impulse
  • Unconditional
  • Needs Redstone

Stiskněte "Impulse" tak, aby se změnilo na "Chain". Command block by měl zezelenat. Nyní jste změnili blok z klasického "impulzního", který jednou vykoná svůj příkaz, když mu přijde redstone signál, na "řetězový", který jednou vykoná svůj příkaz, když mu přijde řetězový signál z předchozího command blocku.

Tento blok má také rozdílné id, klasický command block má, jak víte, id "command_block", kdežto tento má "chain_comman­d_block".

Aktivace redstonem

Nyní opět rozklikněte command block a klikněte na "Needs Redstone", mělo by se změnit na "Always active". Tato volba nám říká, že command block nepotřebuje být aktivovaný redstone signálem, aby příkaz vykonal.

Jak se dá této mechaniky využít? Pokud máte nějakou podmínku, která vychází z redstonu (např. že hráč stojí na stupátku), a chcete, aby se příkaz vykonal pouze pokud podmínka platí, navedete signál z podmínky do daného chain command blocku, ve kterém vyberete "Needs Redstone". Výhodou je, že i když podmínka není splněna, signál se v řetězci posune dál a příkaz se jednoduše přeskočí.

Každý command block, nehledě na to jestli vykoná svůj příkaz (z jakéhokoliv důvodu), pošle po aktivaci řetězový signál dále.

Nyní si uděláme praktickou zkoušku. Zobrazíme několikařádkovou zprávu. Ať to není suché, sdělíme hráči stav jeho domku. Ke vstupním dveřím dejte stupátko, kterým řetězec aktivujeme, dále si připravte ještě další dveře, které napojte na páčku.

Nyní si připravte bloky, budeme potřebovat 4, v této konfiguraci (po sobě v řetězci):

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

A příkazy:

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

Do prvního bloku naveďte signál ze stupátka vstupních dveří, do posledního signál z páčky ovládající kuchyňské dveře.

Nyní nezbývá, než vyzkoušet:

Minecraft – Při vstupu do domu se nám ukáže zpráva - Programování v Minecraftu

Možná vás napadla otázka, proč že musí být první block impulzní. V popisu chain command blocku jsem zmiňoval, že vykoná příkaz jednou, když mu přijde řetězový signál s předchozího bloku - Chain command block je aktivován pouze řetězovým signálem, redstone mu slouží pro podmínky, popsáno výše. Naopak Impulznímu slouží redstone pro aktivaci, pokud tedy v klasickém command bloku překliknete z "Needs Redstone" na "Always Active", příkaz se okamžitě vykoná a blok se stane inertním - chová se jako kdyby do něj vedl zapnutý redstone signál při volbě "Needs Redstone" - je skutečně "stále napájen". Po překliknutí zpět na "Needs Redstone" se chová opět normálně.

Repeating command block

Nyní ještě jednou stiskněte tlačítko pro změnu typu command blocku, až se změní na "Repeat" a blok zfialoví. Tento blok se dá také použít, stejně jako impulzní, pro vstup do řetězce. Tento ale nevykoná příkaz jednou, ale v každém ticku, tedy 20x za sekundu. Chová se tedy stejně, jako když do klasického impulzního navedete redstone z obvodu clock. Pokud je "Needs Redstone", vykonává příkaz pouze, pokud do něj vede zapnutý redstone signál, při "Always Active" opakuje neustále.

Využijeme jej, když potřebujeme, aby systém něco stále sledoval. Např. když jsme dělali systém, který dal hráči vědět, jak je na tom s xp levely - příkazy byly potřeba vykonávat znovu a znovu, aby systém oznámil hráči aktuální stav. Jak odstranit neustálé opakování systému si povíme v díle o scoreboard systému.

Podmínky

Poslední z tlačítek nastavení command blocku je "Unconditional"/"Con­ditional", tedy nepodmíněný či podmíněný. Pokud překliknete na podmíněný, změní se šipka na stranách command blocku z hladké na ostrou.

Jak jistě víte, pokud za command block s příkazem /testfor umístíte comparator, bude napájen, pokud poslední vykonání příkazu nalezlo zadanou entitu. Stejně to funguje pro každý příkaz - je-li vykonán úspěšně, comparator se rozsvítí, je-li vykonán neúspěšně, comparator zhasne. Např. příkaz /give @p minecraft:repeating_command_block 0 0 skončí neúspěšně, jelikož nemůžete dát hráči 0 předmětů nějakého typu.

Command Block v podmíněném módu se chová úplně stejně, jako by do něj z dané strany vedl comparator od minulého command blocku v řetězci. Vykoná tedy příkaz pouze tehdy, je-li zároveň aktivován a předchozí příkaz skončil úspěšně. Výhodou je opět, že i když se příkaz nevykoná, řetězový signál projde do dalšího bloku.

Existuje však jedno omezení, které asi naštve dost lidí, kteří reálně programují, a to je, že můžete reagovat pouze na úspěšné provedení předchozího příkazu (analogie s if), ale nikoliv na neúspěšné (analogie s else). Tedy buď příkaz provedete pouze pokud byl předchozí příkaz úspěšný, nebo ať dopadl jak chtěl.

Cvičení

Vytvoříme systém, který postupně odteleportuje hráče, pokud se příliš přiblíží k nějakému bloku, např. totemu. Budeme jej teleportovat vždy po malých úsecích směrem od bloku, aby "vycouval". Dále ještě po každé teleportaci vypíšeme osu, po které jsme hráče teleportovali, abychom si vyzkoušeli podmínky. Využijeme k tomu prostorové argumenty dx, dy a dz. Vybírat budeme celkem čtyři oblasti - vždy celou hranu čtverce směrem od bloku (z půdorysu). Výhodou je, že pokud bude hráč v rohové oblasti, bude teleportován šikmo.

Totem, od kterého budeme hráče teleportovat - Programování v Minecraftu

Budeme potřebovat celkem 8 command blocků. Všechny až na první budou always active, první bude repeating (ostatní samozřejmě chain), položte si k němu páčku na zapínání a vypínání systému. Každý druhý blok bude conditional. Do lichých command blocků napíšeme vždy příkaz /tp, ve kterém bude daný selektor pro výběr hráče a malá teleportace po příslušné ose relativně (~0.3 ~ ~ - odpovídá rychlosti 6 bloků za sekundu). V každém následujícím (podmíněném) bloku bude jednoduše /say s příslušnou osou. Tak jdeme na to.

Náš totem má souřadnice -739 56 183. Budeme vybírat vzdálenost 5 od totemu, tedy 4.5 bloku skutečné vzdálenosti od jeho okraje. Výšku zvolíme normálně 2, protože bude fungovat i když hráč poskočí.

Pří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-

Nyní by vám mělo fungovat. K otestování můžete třeba vyletět nad totem a skočit do oblasti blízko k němu.

Při stavbě samozřejmě musíte doplnit vaše souřadnice, pomůže vám násl. Obrázek:

Oblasti kolem totemu, ze kterých hráče teleportujeme - Programování v Minecraftu

podle osového kříže (vlevo dole) si naorientujete blok s nejnižšími souřadnicemi (Označené kolečkem) dané zóny. Dále si tyto souřadnice položte blok a s otevřenou debug screen se na něj podívejte. Spodní řádek "looking at" vám prozradí kýžené souřadnice. Dále je to myslím jasné.

To by bylo pro tento díl vše. Příště se podíváme na již pokročilejší téma, budeme vkládat do světa bloky. Dále se můžete těšit na cvičení k procvičení látky těchto prvních lehkých tutoriálů, budeme stavět jednoduchou mapu. Svět máte jako obvykle ke stažení.


 

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

 

Předchozí článek
Programování v Minecraftu - Příkaz /gamerule
Všechny články v sekci
Programování v Minecraftu
Článek pro vás napsal krepsy3
Avatar
Uživatelské hodnocení:
9 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