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 5 - Programování v Minecraftu - Příkazy pro manipulaci se světem

Vítám vás u další lekce kurzu o programování v Minecraftu. Minule jsme si vysvětlili systém pozicování a s ním související příkazy a argumenty. Dnes si doplníme téměř kompletně znalost selektorových argumentů (chybět nám budou již jen ty související se scoreboard systémem, což je poměrně dlouhá kapitola) a ukážeme si některé příkazy nutné pro "mapmakerství", což znamená stavění hratelných map - více se dozvíte např. na http://www.wikihow.com/…dventure-Map. Právě tvorba hratelných map je důvod, proč se většinou chtějí lidé naučit používat command bloky. Pokud jste zde právě z tohoto důvodu, můžete se těšit na další lekce, které již budou na mapmakerství zaměřené.

Ostatní selektorové argumenty

Nejprve doplníme znalost o chybějící argumenty.

Argument c

Argument "c" jako "count" (počet) navrací počet entit. Použijete jej pouze u selektorů "@a" a "@e" (protože @r i @p vybírají pouze jednoho hráče, takže by to nemělo moc smysl). Jeho výhodou je, že při výběru entit postupuje vždy od té nejbližší po tu nejzazší, a to ve smyslu argumentu r, tedy po kružnicích. Zápis @p lze tedy nahradit zápisem @a[c=1], což sice nemá smysl, ale @e[c=1] již smysl má, protože neexistuje selektor pro "nejbližší entitu", a výše uvedený zápis je pro tuto selekci zcela dostačující. Příklad najdete u následujícího argumentu.

Argument type

Tento argument, jak vám asi došlo, navrací "typ" a to "typ entity", jinými slovy o kterou entitu se jedná. Použijete jej tedy pouze u @e, jelikož ostatní selektory vybírají pouze hráče. Můžete použít i předznamenání "!", čímž zajistíte výběr entit odlišného typu. Seznam použitelných typů najdete zde: http://minecraft.gamepedia.com/…s/Entity_IDs Poslední sloupec ze zmíněné tabulky ("Savegame ID") obsahuje právě hodnotu argumentu type pro danou entitu. Doplním, že pokud chcete entitu hráče, zapíšete "Player".

Pojďme nyní vyzkoušet, co jsme se právě naučili. Najděme nejbližší z našich dvou prasat:

/say @e[type=Pig,c=1]

Nebo pokud provádíte výběr ze všech entit, ale nechcete hráče:

/testfor @e[type=!Player]

Příkaz výše nebude fungovat (respektive ukáže selector @e[type=!Player] found nothing), pokud všechny ostatní entity zabijete, samozřejmě si to zkuste pomocí příkazu /kill.

Minule jste se dozvěděli, že argumenty x, y a z přesouvají centrum výběru, ale fungují pouze v kombinaci s r a rm. Fungují také v kombinaci s c, můžete zkusit dosadit souřadnice středu ohrádky, abyste zjistili, které prase je dále:

/say @e[type=Pig,c=-1,x=-776,y=56,z=271]

Jak vidíte, dosazením záporného čísla obrátíte směr výběru - nyní již vybíráte ve smyslu argumentu rm, tedy v kruzích od nejzazší entity po nejbližší.

Argumenty pro xp

A konečně, argumenty "l" a "lm" (m opět jako minimal). Tyto argumenty zastupují "levels of experience", čili počet "úrovní" zkušeností, což je "to zelené", co používáte na enchantování. Váš momentální level je zobrazen nad aktivním inventářem zeleným číslem. Jak hráčům xp měnit si povíme jindy. Napišme si tedy jednoduchý oznamovací skriptík, který bude dávat hráči vědět, jak na tom je. Budete potřebovat dva command bloky, které napojíte na obvod clock:

/tell @a[lm=30] Hej, už máš dost levelů na plné enchantování!
/tell @a[l=5] Máš poměrně málo levelů, měl bys jít zabít pár příšer.

Jediný problém je, že skript bude spamovat chat hráčů při každém průběhu obvodu, jak to ošetřit si povíme u tutoriálu o scoreboard systému. Jedná se ovšem o reálně použitelný skript, kterých dokážete s patřičnou znalostí vymyslet tisíce.

Příkazy pro manipulaci se světem

Nyní si představíme příkazy používané pro manipulaci se světem, které se vám budou hodit např. až budete sami vytvářet nějakou hratelnou mapu, nebo jen když si budete chtít přizpůsobit testovací svět.

Příkaz /defaultgamemode

Příkaz /gamemode již znáte, tak jistě nebude problém uhodnout, že příkaz nastaví světu výchozí herní mód. Tento výchozí mód jste nastavovali při vytváření světa, byl to creative. Zkuste jej nyní změnit na survival (použít můžete, stejně jako u /difficulty, různý druh zápisu):

/defaultgamemode 0
/defaultgamemode s
/defaultgamemode survival

Když se nyní přihlásí do světa nový hráč, bude mít herní mód nastaven na survival.

Příkaz /difficulty

Jak možná uhodnete, tento příkaz mění obtížnost. Obdobně jako u /defaultgamemode, bere i tento příkaz jediný argument a tím je kýžená obtížnost. Ve hře jsou celkem čtyři a opět je můžete specifikovat různým způsobem:

  • Peaceful (Mírumilovná) – 0, p, peaceful
  • Easy (Jednoduchá) – 1, e, easy
  • Normal (Normální) – 2, n, normal
  • Hard (Těžká) – 3, h, hard

Obtížnost je uložená pro každý svět samostatně, proto pokud přejdete do nastavení, vidíte zde obtížnost naposled načteného světa. Jak možná víte, obtížnost lze pro daný svět "zamknout", čímž ji už nejde z nastavení měnit. Tento příkaz se však na zámek neohlíží, takže ani to není 100% ochrana, nicméně v momentě, kdy jsou vypnuté cheaty, hráč na zamknutém světě ji nebude moci změnit. Pokud je příkaz proveden na serveru, obtížnost je změněna, nicméně při následujícím startu serveru bude opět na pro server výchozí hodnotě, protože si ji během spouštění nastaví podle server properties.

Příkaz /seed

Tento příkaz můžete jako jeden z mála provést i s vypnutými cheaty. Nemá žádné argumenty a svému executorovi zobrazí seed (semeno) světa, na kterém se nachází. Toto číslo udává generátoru světa „jak ho má generovat“, čili dva nově vygenerované světy se stejným seedem budou vypadat stejně. Toto číslo lze zadat při vytváření světa.

Výstup příkazu seed v Minecraftu - Programování v Minecraftu

Příkazy pro počasí

Můžete provést příkaz /toggledownfall (čili něco jako "přepnout padání z oblohy"), který nebere žádné argumenty. Pokud prší (resp. sněží), přestane a pokud neprší, začne.

Komplexnějším příkazem je /weather, nejprve jeho syntaxe:

/weather <clear|rain|thunder> [délka trvání]

Prvním povinným argumentem je stav počasí, který má příkaz nastavit

  • clear znamená, že neprší
  • rain znamená, že prší (resp. sněží, záleží na teplotě biomu)
  • thunder znamená, že prší a bijí blesky (blesk je entita). Pokud blesk uhodí do creepera, nabije ho. Pokud uhodí do prasete, udělá z něj Pigmana (prasečího muže - příšera z Netheru).

Dále je možné specifikovat délku trvání. To je minimální doba, po kterou bude bezpodmínečně nastavený stav trvat. Po jejím uplynutí opět bude v moci hry náhodně nastavit nový stav (neznamená to tedy, že po uplynutí stanovené doby se nutně počasí ihned změní). Tato doba se udává v tzv. "ticks" (tiky - programátoři jistě vědí, že se jedná o nejmenší časovou jednotku, se kterou program počítá), můžete zadat hodnotu mezi 1 - 1000000. Jeden minecraftový tik odpovídá 1/20 sekundy, čili dvacet tiků dá jednu vteřinu. Jeden celý minecraftový den trvá 24 000 ticks, což je dvacet min. Pokud tento argument neuvedete, hra automaticky dosadí náhodně mezi 6 000 - 18 000 ticks.

Zkusme tedy nyní zapnout bouři:

/weather thunder

Pokud hrajete, stejně jako já, v biomu poušť, uvidíte pouze zataženou oblohu, ale žádný déšť ani blesky. Je to proto, že každý biom má svou teplotu, která určuje, zda v něm prší, sněží či vůbec nic. Od y=64 se navíc výchozí teplota biomu snižuje s přibývající nadmořskou výškou, což například způsobí, že v biomu Extreme Hills u úpatí kopce prší, ale nahoře už sněží (tím jak jsou hory vysoké). Více se dočtete zde: http://minecraft.gamepedia.com/Biome#….

Příkazy pro spawnpoint

Spawnpoint je místo, na kterém se objeví hráč po té, co zemře ("spawn point" - bod objevení se) a stiskne tlačítko respawn. Každý svět má svůj výchozí spawnpoint, který nastavíte příkazem /setworldspawn:

/setworldspawn [souřadnice x, y a z]

Buď příkaz provedete jen tak, pak je místo nastaveno dle souřadnic executora, nebo souřadnice zadáte. Výchozí světový spawnpoint se vždy nachází v jednom z prostředních čtyř spawnchunků, jeho přenastavením tedy přemístíte i lokalitu spawnchunků.

Ještě uvedu příkaz, který změní spawnpoint individuálně hráčům. Jak vám možná došlo, tento osobní spawnpoint je vždy nastaven vedle postele, ve které vyspíte - po smrti se objevíte na své základně a nikoliv na výchozím bodě. Zároveň se ale dá měnit příkazem /spawnpoint:

/spawnpoint [hráč] [souřadnice x, y a z]

Pokud chcete nastavit svůj vlastní spawnpoint na místě, kde se momentálně nacházíte, nemusíte specifikovat žádný argument. Když jej nastavujete jinému hráči, ale na místě, kde se momentálně nacházíte, nemusíte uvádět souřadnice. Jinak příkaz vyžaduje plnou specifikaci.

Příkaz /time

Tímto příkazem nastavíte kolik je hodin (hodnota je samozřejmě v ticks). Jak jsem již zmiňoval u příkazu /weather, jeden minecraftový den má 24 000 ticks, východ slunce je 0 (+ násobky, tedy 0, 24000, 48000...). Pravé poledne nastává v 6000 a násobcích, západ slunce ve 12000 a násobcích a půlnoc je v 18000 a násobcích. Syntaxe příkazu:

/time <<set|add>|<query>> <<denní doba (day|night) |počet ticks>|<jednotka>>

Argumenty set a add čas nastaví, specifikujete dobu v ticks, která má být nastavena, resp. přičtena k aktuální hodnotě. Pokud používáte set, můžete nastavit pouze "day" či "night" a hra automaticky dosadí 1000 nebo 13000 tics.

Argument query nechá příkaz sdělit kolik času uplynulo od jistého momentu. Za argument jednotka dosadíte

  • daytime - sdělí kolik je hodin (v ticks), tedy číslo od 0 do 24000
  • gametime - sdělí kolik ticks uplynulo od prvního spuštění světa
  • day - sdělí číselně kolik dní již na tomto světě proběhlo. Tento údaj lze vidět i na debug screen:
Počet dní zobrazený v debug screen - Programování v Minecraftu

Upozornění: Pokud změníte čas na pravé poledne pomocí příkazu /time set 6000, vynulujete tím počet proběhlých dní.

To je pro tento díl vše, příště si ukážeme ještě příkaz /gamerule 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 21x (537.48 kB)
Aplikace je včetně zdrojových kódů v jazyce Minecraft

 

Předchozí článek
Programování v Minecraftu - Pozicování - část II.
Všechny články v sekci
Programování v Minecraftu
Přeskočit článek
(nedoporučujeme)
Programování v Minecraftu - Příkaz /gamerule
Článek pro vás napsal krepsy3
Avatar
Uživatelské hodnocení:
6 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